Updated to mkxp-z v2.4.2.ee8dc7e. This made a lot of things faster, including compiling. It also adds other improvements and things.
Sped up compiling of PBS files (in addition to what the new version of mkxp-z does).
Made Essentials fully FPS-agnostic by using seconds instead of frame counts for everything animated.
The FPS will now match your monitor's frame rate, rather than be limited to 40. Enabled vsync to reduce screen tearing.
Added text display speed "Inst" to the Options screen, which is instant text display. This just makes it easier for players to skip dialogue and then complain they don't know what to do.
Reduced the work done when updating the sprites of events without a graphic.
Overhauled the AI code, breaking it up into more manageable chunks and adding lots of calculations for (practically) all move function codes and other move-related factors.
Added more code to the decision of whether to switch out a Pokémon instead of attacking with it, letting the AI be able to recognise more bad situations where switching is the best choice.
Trainers will now be able to predict whether a move will fail, and will avoid using that move.
A Pokémon's choice of move is now less random, because it will no longer consider at all using a move that scored significantly worse than another move it knows. Previously it just had a lower chance of using the bad move.
Only trainers with a skill level of 100 or higher will hold on to their last Pokémon until the end. These will be Gym Leaders and other top trainers, who would be expected to have an "ace"/signature Pokémon that acts as the final boss of their battle.
Added some skill flags, most of which are automatically given to a trainer depending on their skill level. These skill flags determine whether the AI takes certain factors into account.
Added "Legendary", "Mythical" and "UltraBeast" flags to appropriate species in pokemon.txt. Wild Pokémon with these flags have a smarter AI, if the corresponding Setting is set.
The AI now knows how to use Max Mushrooms and Revive-type items.
Overhauled how text is translated. Text is now stored in two .dat files: one for core text common to most games, and one for game-specific text.
When text is extracted for translating, it goes into multiple files instead of just one, one per type of message. However, you can split them up further yourself for better organisation; only the contents of message files matter, not their filenames.
Extracting and compiling text is a little more user-friendly.
Tidied up the translatable parts of various messages.
The nicknames of Pokémon belonging to trainers can now be translated.
Random dungeon generator
Rewrote the random dungeon generator code, and added a bunch of customisation to it. It now supports cave-type maps (albeit better-designed caves than they used to be) and forest-type maps.
Added two new PBS files for random dungeons: dungeon_parameters.txt and dungeon_tilesets.txt.
Rewrote the phone UI code to be more consistent with other UI scripts.
Trainer contacts can now be deleted from the phone. (Actually, they're just hidden because some of their information needs to keep existing.)
Added sorting options to the phone screen, both moving individual contacts (press the Action button just like in the Bag) and sorting all at once (choose a contact to access the sorting options).
Added the map metadata flag "NoPhoneSignal" which prevents standard phone calls in maps with it. Added a phone signal icon to the phone screen.
Phone call messages can now be coloured according to the gender of the trainer speaking.
Redesigned phone.txt's contents (the old format isn't supported). Added support for defining a set of messages unique to a specific contact (and even a specific version of a specific contact, just like in trainers.txt). Added more phone message components (IntroAfternoon, BattleReminder, End).
Added Phone.rematches_enabled which determines whether rematches with phone contacts are possible, and added an associated Setting. In HGSS, for example, rematches are only possible after Gym 7/beating Team Rocket in the Radio Tower.
A trainer contact can be given a Common Event ID number, which will make phone calls with that contact run the associated Common Event instead of taking random messages from phone.txt. Added the "CommonEvent" trainer comment for generating a trainer event from comments.
Redesigned the layout of trainer events that can be registered in the phone and rebattled (the old layout still works for now but is deprecated).
Trainers starting at a non-zero version number can now be registered in the phone properly.
The version of a trainer fought as a rematch is now restricted by Phone.rematch_variant, which is the maximum variant number allowed (0 is their initial team, 1 is their first powered-up team, etc.). It can be increased manually throughout the game, and is how rematches work in HGSS.
Bug-Catching Contest maps and reception maps can now be defined using a map metadata flag instead of map numbers.
Moves taught by a TR/TM/HM or Move Tutor will now be compatible with a Pokémon if it can learn that move via level up or as an egg move.
Added Game Switches 36 and 37, which are whether the player is male or female respectively.
Added support for diagonal screen scrolling with $game_map.start_scroll, and added defpbScrollMapTo and defpbScrollMapToPlayer.
Tweaked the intensities of some overworld weather animations.
Removed the overworld particle engine, because no one uses it.
Added NPCTrainer#version to allow exact identification of foe trainers.
Made the example wild encounter modifier that scales Pokémon levels to match the player's party depend on a map metadata flag instead of a map number.
Changed Coaching's function code to be more accurate to how it actually works.
Added Setting that makes trainer-owned Pokémon give more Exp.
Added a BP shop script, and added BP prices for various items in items.txt.
Moved game-specific credits into Settings, and made credits translatable.
Added $stats.bump_count, which is how many times the player has walked into something.
Tweaked the Level 101+ equations for some growth rates.
Split old and new Black/White Flute effects into separate values for clarity.
Removed deprecated code.
Removed support for save files in the old save location, because they can't be updated to the latest version now anyway.
Refactored some code relating to colours.
Moved the male/female text colours into moduleMessageConfig for easier access.
Tidied up usage of colour tags to make (parts of) messages a particular colour.
defpbDrawTextPositions now accepts alignment values of :left, :center and :right. Essentials now uses these values.
defpbDrawTextPositions now draws outline text when given a secondary colour effect of :outline. Also added a secondary colour effect of :none for no shadow (also achievable by not providing a secondary colour). Essentials now uses these values.
Removed redundant "\r" from various messages.
Added a separate message for finding/receiving multiples of a TM/TR item at once.
defaddIf for modules ItemHandler and MultipleForms now takes an identifier symbol.
Changed uses of BitmapWrapper to Bitmap because they just needed to be basic bitmaps.
Turned Town Map PBS data into a GameData class.
Renamed function code "UseUserBaseDefenseInsteadOfUserBaseAttack" to "UseUserDefenseInsteadOfUserAttack" because that's more accurate.
Renamed "base_damage"/"baseDamage"/"baseDmg" to "power".
Moved the code that triggers the overworld dust animation after an event/the player finishes jumping.
Allowed multiple PBS files per data type. They need to be named with an underscore and suffix after the base name, e.g. "moves_dragon.txt", "map_metadata_hoenn.txt". The base PBS file (e.g. "moves.txt") no longer needs to exist if you don't want it.
Added a PBS subfolder with PBS files for Shadow Pokémon data. Moved shadow_pokemon.txt into it, and added other files containing Shadow Pokémon data. To add this Shadow Pokémon content to your game, simply move the files into the main PBS folder; they make use of the "multiple PBS files per data type" thing mentioned above to work automatically.
Removed hardcoded lists of PBS files and .dat files when checking whether to compile and when loading all GameData class data. This makes it easier to create a new GameData class/PBS file of your own.
Generalised code to allow a species to be defined with any number of types, not just up to 2. Note that some UI won't show 3+ type icons very nicely.
Implemented item portion names, e.g. "bag of Soft Sand".
Added the "ShowQuantity" property to items.txt, for Key Items that you want to show how many the player has.
Removed Struggle from moves.txt.
Moved Poké Radar-exclusive encounters from Settings into encounters.txt.
Added map metadata property "StillReflections" which makes reflections of the player/events not ripple horizontally on that map. Also made the Setting ANIMATE_REFLECTIONS which can disable rippling globally.
Created the folder Graphics/UI, and moved all UI graphics into it from Graphics/Pictures. Some UI graphics were renamed and/or moved into their own subfolders.
Egg crack graphics are now found in the same way as other egg graphics.
Added SE for electric sliding doors opening.
Debug and Compiler
Added console messages to more clearly show if/when compiling didn't happen.
The compiler no longer reloads the system cache. This speeds it up by a couple of seconds.
Logging battle messages now also echoes them to the console.
Improved the choices for how to end a battle in Debug mode when holding Ctrl and choosing to Run.
Holding Ctrl in Debug mode and choosing Call in a battle now lets you choose to end the battle instead of calling at a Pokémon.
Rearranged the options in the main Debug menu.
Added Debug function to edit Repel steps, Flash/Strength usage and Black/White Flute effects.
Added Debug functions to toggle possession of the Snag Machine and access to the Purification Chamber.
Added Debug function to edit the steps/time remaining and Poké Balls possessed in a Safari Zone game/Bug-Catching Contest.
Added a more extensive Debug menu function for editing properties of the phone and contacts therein.
Somewhat improved the appearance and handling of the Terrain Tag Editor.
You can now reset a Pokémon's form to 0 in the Pokémon Debug menu if that Pokémon only has one defined form but its form is not 0.
Added PBS schema symbol "^" for properties that are repeated in multiple lines within a section. It's similar to "*" which is when a property can have multiple copies of its contents in its line.
Added compiler schema letter "m" which makes the value a symbol.
Removed support for old PBS file formats/properties.
Refactored many PBS file compilers to separate out the validation code.
Rewrote and standardised several PBS writer methods.
Replaced all choices in example map events that used \ch with Show Choices commands.
Tweaked example map NPCs in the player's house that talk about messages and choices.
The example Battle Frontier now awards BP instead of Rare Candies. Added an example BP shop to the Poké Mart map in the Battle Frontier.
Updated the Poké Center nurse events with more comments and less usage of scripts.