Skip to content

Latest commit

 

History

History
556 lines (538 loc) · 48.1 KB

File metadata and controls

556 lines (538 loc) · 48.1 KB

Version 1.9.0

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.9.0`.

🌋 REFACTORS 🌋

📜 = Has a migration script.

🧬 General 🧬

Added

  • Added migration script README by @Bassoonian in #4719

  • Customizable Frontier Pokémon sets by @ghoulslash in #4313

    • FacilityMon has been removed in favor of using regular TrainerMon.
    • Removed BATTLE_FRONTIER_ITEM_x item constants in favor of using regular ITEM_x constants.
    • New CreateFacilityMon to handle duplicated code.
      • Added FLAG_FRONTIER_MON_FACTORY that replaces Return for Frustration and sets frienship to 0. Used in the Battle Factory.
    • Converted data in src/data/battle_frontier/battle_frontier_mons.h and src/data/battle_frontier/battle_tent.h, for example:
      • .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND, -> .heldItem = ITEM_CHOICE_BAND,
      • .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, -> .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
    • Migration script available in migration_scripts/egg_move_refactor.py by @AlexOn1ine in #5040
  • Added documentation to STATIC_ASSERTS used by the BoxPokemon after 1.8.0 by @pkmnsnfrn in #4294
  • Competitive-formatted parties by @mrgriffin in #3545

    • Can be disabled by setting COMPETITIVE_PARTY_SYNTAX to FALSE in include/config/general.h. If migrating from 1.8, remove the first and last lines from src/data/trainers.h (const struct Trainer gTrainers[] = { and }; respectively).
    • Introduces trainerproc, a tool which converts Competitive-formatted parties into Trainer Control-formatted parties.
    • If you made custom changes to the following files and want to use this new format, Do not accept the incoming changes for them. Instead, use the migration script present in migration_scripts/convert_parties.py:
      • src/data/trainers.h
      • src/data/trainer_parties.h
      • src/data/battle_partners.h
      • src/data/partner_parties.h
    • Before:
      static const struct TrainerMon sTestParty1[] =
      {
          {
              .species = SPECIES_WOBBUFFET,
              .ball = ITEM_MASTER_BALL,
              .ability = ABILITY_TELEPATHY,
              .friendship = 42,
              .gender = TRAINER_MON_FEMALE,
              .heldItem = ITEM_ASSAULT_VEST,
              .isShiny = TRUE,
              .iv = TRAINER_PARTY_IVS(25,26,27,28,29,30),
              .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 4, 0),
              .lvl = 67,
              .moves = {MOVE_AIR_SLASH, MOVE_BARRIER, MOVE_SOLAR_BEAM, MOVE_EXPLOSION},
              .nature = NATURE_HASTY,
              .nickname = COMPOUND_STRING("Bubbles")
          },
          {
              .species = SPECIES_WOBBUFFET,
              .ability = ABILITY_SHADOW_TAG,
              .lvl = 5,
          },
      };
      
      static const struct Trainer sTestTrainer1 =
      {
          .trainerName = _("Test1"),
          .party = TRAINER_PARTY(sTestParty1),
      };
      After:
      === 0 ===
      Name: Test1
      
      Bubbles (Wobbuffet) (F) @ Assault Vest
      Hasty Nature
      Level: 67
      Ability: Telepathy
      IVs: 25 HP / 26 Atk / 27 Def / 29 SpA / 30 SpD / 28 Spe
      EVs: 252 HP / 4 SpA / 252 Spe
      Happiness: 42
      Shiny: Yes
      Ball: Master Ball
      - Air Slash
      - Barrier
      - Solar Beam
      - Explosion
      
      Wobbuffet
      Level: 5
      Ability: Shadow Tag
      
    • You can add comments by using // or /* ... */, like in C.
    • You're allowed to write SPECIES_PIKACHU instead of Pikachu (etc etc) if you want.
    • In addition to the migration script described above, you can add the following to at the top of the src/data/trainers.party file to change how the tool interprets the file:
      • #pragma trainerproc ivs explicit — requires an IVs: line for every Pokémon instead of defaulting to 31s.
      • #pragma trainerproc ivs <IVs> — changes the default IVs.
      • #pragma trainerproc level explicit — requires a Level: line for every Pokémon instead of defaulting to 100.
      • #pragma trainerproc level <level> — changes the default level.
      • During the merge you could choose to keep your original src/data/trainers.h and src/data/trainer_parties.h and then run the conversion script to update the src/data/trainers.party, make, then check in all three files. Alternatively don't run the conversion script and turn off COMPETITIVE_PARTY_SYNTAX in include/config.h.
    • Added synonyms for competitive/CFRU species defines, eg:
      • SPECIES_PONYTA_GALAR for SPECIES_PONYTA_GALARIAN
      • SPECIES_MAUSHOLD_FOUR for SPECIES_MAUSHOLD_FAMILY_OF_FOUR
      • SPECIES_CHARIZARD_GMAX for SPECIES_CHARIZARD_GIGANTAMAX
      • And so.
    • TODO:
      • Support Hidden Power: to set IVs appropriate for a particular Hidden Power type.
      • Consider case-insensitivity in the parser.
    • Cleanup and bugfixes:
  • Added OW_PC_MOVE_ORDER config to use future generation's menu order for the Pokémon Storage System by @pkmnsnfrn and @AsparagusEduardo in #4348
    • GEN_1/2/3: Widthraw -> Deposit -> Move.
    • GEN_4/5/6_XY: Deposit -> Widthraw -> Move.
    • GEN_6_ORAS/7/8/9: Move -> Deposit -> Widthraw.
  • Added OW_HIDE_REPEAT_MAP_POPUP config that doesn't show the Map Popup when transitioning bewteen maps within the same Map Section by Anon822 from Pokécommunity and @pkmnsnfrn in #4370
  • Multiple Fishing Enhancements by @ghoulslash and @pkmnsnfrn in #4343
    • Added I_FISHING_CHAIN config to enable XY's chain fishing.
    • Added I_FISHING_PROXIMITY config to enable XY's proximity mechanic, where fishing away from NPCs increases the chance of a Pokémon being hooked.
    • Added I_FISHING_MINIGAME config to change between minigame versions.
      • GEN_1/2 will not require a minigame, and instead automatically hook the Pokémon.
      • All other settings use RSE's minigame. FRLG/Gen4+'s minigame will be implemented in the future.
    • Cleanup and bugfixes:
      • By @AsparagusEduardo in #4412
      • By @cawtds in #4906
      • By @AlexOn1ine in #4718
      • By @cawtds and @pkmnsnfrn in #5031
  • Full official GF names for species/items/moves/types by @mrgriffin, @ZnogyroP and @cfmnephrite in #4241

    • 8-character type names.
    • 12-character Pokémon names (and nicknames)
    • 16-character Move names.
    • 20-character item names.
    • This is done by introducing 3 new fonts that automatically change the size of the name in vanilla interfaces:
      • FONT_NARROWER, FONT_SMALL_NARROWER and FONT_SHORT_NARROW.
    • If the hack has changed fonts—e.g. to the FrLg ones—then they probably want to create their own versions of the new fonts.
    • If the hack has introduced more UIs that render names they probably want to use GetFontIdToFit—see this PR's changes for examples of that.
    • If the hack has introduced names in list menus they can use .fontIdMayNarrow = TRUE on the list template.
    • Types, species, moves, and items all have individual commits which enable support in the UI and turn on longer names by default. These can be reverted by downstream projects if they really want to.
    • Cleanup
  • Added OW_PC_RELEASE_ITEM config that gives back items from released Pokémon by @Bassoonian in #4577
    • If the bag is full, the item is lost, however.
    • Cleanup by @Bassoonian in #4844
  • Added P_EGG_CYCLE_LENGTH config that updates the amount of steps required to complete an egg cycle by @Bassoonian in #4596
  • Added trainerbattle_two_trainers macro to trigger a 1 player vs 2 NPC battle by @aarant and @AlexOn1ine in #4741
  • Added createmon Script Command and macro by @ghoulslash in #4688
    • This allows to set up wild enemy parties with the same versatility as givemon (IVs, EVs, abilities, moves, etc).
  • Added setwilddoubleflag macro to set sIsScriptedWildDouble and allow 2 player vs 1 enemy wild battles by @ghoulslash in #4688
  • Added support for multiple Roaming Pokémon at once by @Bassoonian in #4762
    • By default, ROAMER_COUNT is set to 1 to keep save compatibility. Increase it to add more roamers (though this breaks saves).
  • Added OW_IGNORE_EGGS_ON_HEAL, which makes it such that eggs are not counted in the Pokémon Center's heal animation by @ghoulslash @pkmnsnfrn in #4888
  • Added support for fake RTC by Anon822 from PokéCommunity and @pkmnsnfrn in #4910
    • When OW_USE_FAKE_RTC is TRUE, time runs at a different rate from real time, like in Legends: Arceus or Scarlet and Violet.
    • Use OW_ALTERED_TIME_RATIO to set the amount of "time" passing every 60 frames (1 real time second):
      • GEN_8_PLA: 1 minute.
      • GEN_9: 20 seconds.
      • All other settings make the game synced with real life.
    • You may also set a flag to pause the RTC (OW_FLAG_PAUSE_TIME), and the script commands pausefakertc, resumefakertc and togglefakertc by @pkmnsnfrn in #4954
    • Cleanup by @Bassoonian in #4965
  • Added B2W2-style map pop-Ups by @ravepossum, @nielsmittertreiner and @pkmnsnfrn in #4396
    • Change OW_POPUP_GENERATION to GEN_5 to switch existing map popups.
    • You may choose between Black or White themes via OW_POPUP_BW_COLOR (OW_POPUP_BW_COLOR_BLACK or OW_POPUP_BW_COLOR_WHITE).
    • You may choose to display the current time in the pop-up using OW_POPUP_BW_TIME_MODE.
      • OW_POPUP_BW_TIME_NONE: Disables time in pop-up.
      • OW_POPUP_BW_TIME_12_HR: Shows 12-hour time in pop-up
      • OW_POPUP_BW_TIME_24_HR: Shows 24-hour time in pop-up
    • You may enable alpha blending via OW_POPUP_BW_ALPHA_BLEND (mainly designed around the Black theme).
    • Cleanup by @AsparagusEduardo in #4752
  • Allowed flags to be used in trigger scripts instead of vars by @DizzyEggg in #4900

Changed

  • agbcc has been deprecated by @mrgriffin in #4989

    • You technically still use make agbcc by disabling the error thrown when using it, but it will be removed completely for version 1.10.
  • Moved general config file to the config folder by @AsparagusEduardo in #4805

    • config.h -> config/general.h
    • Cleanup by @hedara90 in #5026
  • Set GiveBoxMonIntialMoveset_Fast as default by @AlexOn1ine in #4470

  • Changed Battle Frontier validation to species flag by @kittenchilly in #4341

    • Added isFrontierBanned flag and removed gFrontierBannedSpecies.
    • Renamed isParadoxForm -> isParadox.
  • Unified Nature info by @fdeblasio in #4562

    • All data is now found on gNaturesInfo in src/pokemon.c
    • Names, Stat Up/Down, Back Sprite animation, Pokéblock animation, Nature Girl message and Battle Palace data.
    • Cleanup by @Sneed69 in #4598
  • Type Info refactors by @AsparagusEduardo in #4462

    • Added src/data/types_info.h file for gTypesInfo instead of src/battle_main.c.
      • Moved sTypeEffectivenessTable here file as well (and renamed it to gTypeEffectivenessTable)
    • TYPE_NONE duplicates graphics from TYPE_MYSTERY due to limitations with graphics_file_rules.mk.
    • Damage Categories for B_PHYSICAL_SPECIAL_SPLIT's pre-Gen4 setting can now be specified in this gTypesInfo's damageCategory field instead of depending on the type's order.
  • Consolidated Lilycove Contest Lady's values into one struct (sContestLadyValues) by @fdeblasio in #4951
  • Applied the Pokémon Sprite Visualizer name officially by @Bassoonian in #4745
  • Don't specify sDexSearchTypeOptions array size by @Sneed69 in #4820
    • Prevents Type search in the dex from breaking when non-conventional types are added.
  • Only call RNG once when generating IVs in some cases by @tertu-m in #4876

Fixed

  • Fixed potential Wireless Adapter desynchronization by @AtariDreams in #3730
  • Fixed ListItemTemplate UB in the Pokémon Center by @Bassoonian in #4725
  • Fixed src/data/map_group_count.h not being ignored in .gitignore properly by @rayrobdod in #4727
  • Fixed double battles not occuring with only one Pokemon by talking to the trainers despite OW_DOUBLE_APPROACH_WITH_ONE_MON being set TRUE by @fdeblasio in #4848
  • Fixed unused B_TRANSITION_SHRED_SPLIT from softlocking the game by @Lunos, @griffinr and @pkmnsnfrn in #4919

✨ Feature Branches ✨

merrp/aarant's Followers

  • Integrated @aarant's followers branch by @AsparagusEduardo in #4022
    • This includes Dynamic Overworld Palettes and Expanded Overworld IDs.
    • This does not include the lighting branch yet, but will be included in a future version.
    • Updated up to the latest version of the branch (11th of July) by @Bassoonian in #4944
    • Cleanup
      • By @Bassoonian in #4782
      • By @AsparagusEduardo in #4937

Changes from the original branch

  • Follower Pokémon can be enabled using the OW_FOLLOWERS_ENABLED config.
  • Pokémon NPCs can be added to a map independently from the Followers config. Keep in mind, this requires OW_POKEMON_OBJECT_EVENTS to be enabled in order to add the graphics to the ROM.
    • Eg: use OBJ_EVENT_GFX_SPECIES(CHARIZARD) where the graphic ID would go (OBJ_EVENT_GFX_SPECIES_SHINY() for shiny version).
    • May also use OBJ_EVENT_GFX_SPECIES_SHINY(CHARIZARD) to make them shiny by @AsparagusEduardo in #5049
  • Moved original configs from include/constants/event_objects.h to include/config/overworld.h and renamed them:
    • OW_MON_BOBBING -> OW_FOLLOWERS_BOBBING
    • LARGE_OW_SUPPORT -> OW_LARGE_OW_SUPPORT
    • OW_MON_POKEBALLS -> OW_FOLLOWERS_POKEBALLS
  • Added follower Pokémon sprites from Gen 4-8
    • Credits to @Eemeliri and Gerben BSc
  • Moved OW_GFX_COMPRESS from include/global.h to include/config/overworld.h.
  • Added OW_SUBSTITUTE_PLACEHOLDER config to hide followers if they don't have a follower sprite instead of using a placeholder Substitute sprite by @Bassoonian in #4765
  • Follower graphics are shown in the Pokémon Sprite Visualizer.
  • Follower graphics have been moved to the respective species graphics folder instead of all being grouped in graphics/object_events/pics/pokemon.
    • Eg: graphics/object_events/pics/pokemon/abomasnow.png was moved to graphics/pokemon/abomasnow/follower.png.
  • Follower data has been moved to gSpeciesInfo
    • Their palettes are separate from the battle sprite palettes
      • Can be enabled using OW_FOLLOWERS_SHARE_PALETTE, but requires manual sprite adjustements. For now, it's recommended to keep this FALSE. (They don't use much space anyway)
  • Updated GetTypeEffectiveness used by follower messages to account for new abilities with type immunities.
  • Cleaned up code style to match pret/expansion's.
  • Reverted Regi's sprite to vanilla's.
  • Follower PicTables use overworld_ascending_frames macro.
  • Removed unneeded calls to bufferspeciesname.
  • Removed MON_DATA_NATURE.
  • Removed debug functions like IsAccurateGBA.
  • Removed ScrCmd_callfunc to use callnatives instead

🐉 Pokémon 🐉

Added

  • Added EVO_ITEM_COUNT_999 evolution method (used by Gimmighoul) by @kittenchilly in #4261
    • Requires level up while carrying 999 of the specified item in the bag, which will be consumed.
    • Uses new EVO_MODE_CANT_STOP mode, which is a clone of EVO_MODE_NORMAL but prevents evolution from being canceled.
  • Added EVO_DEFEAT_THREE_WITH_ITEM evolution method (used by Bisharp) by @Bassoonian in #4768
    • Requires level up after defeating 3 Pokémon of the same species holding the specified item.
      • Eg: Bisharp defeating 3 other Bisharp holding Leader Crests.
    • Cleanup by @AsparagusEduardo in #5046
  • Added EVO_OVERWORLD_STEPS evolution method (used by Pawmo, Bramblin and Rellor) by @Bassoonian in #4758
    • Requires level up after walking the specified amount of steps with that Pokémon as the first member in the party without switching.
    • Switching the party leader resets the steps.
    • Cleanup by @AsparagusEduardo in #5047
  • Added FORM_CHANGE_DAYS_PASSED form change (used by Furfrou and Hoopa) by @Bassoonian in #4778
    • Adds MON_DATA_DAYS_SINCE_FORM_CHANGE, which is a timer to automatically changes forms at midnight once it runs out. It is set after a different form change has been made (currently only added to Form Change items, including Prison Bottle)
  • Added unique icons for all of Arceus's forms via config (P_ARCEUS_UNIQUE_FORM_ICONS) by @kittenchilly in #4329
  • Added P_TWO_FRAME_FRONT_SPRITES config to allow disabling 2-frame front animations by @Bassoonian in #4750
  • Added P_CRIES_ENABLED config to disable species cries and stop them from being included in the ROM by @AsparagusEduardo in #4791
  • Added configs to prevent unobtainable Pokemon from being shiny by @fdeblasio in #4735
    • P_ONLY_OBTAINABLE_SHINIES: Prevents shinies from generating in the Battle Pyramid.
    • P_NO_SHINIES_WITHOUT_POKEBALLS: Prevents shinies from generating if the player has no Poké Balls.
  • Added P_CAN_FORGET_HIDDEN_MOVE config allow Pokémon to forget HM moves by @pkmnsnfrn and @Lunos in #4968

Changed

  • Renamed evolution methods the were labeled as evo level by @AlexOn1ine in #4607
    • EVO_LEVEL_MOVE_TWENTY_TIMES -> EVO_MOVE_TWENTY_TIMES
    • EVO_LEVEL_RECOIL_DAMAGE_MALE -> EVO_RECOIL_DAMAGE_MALE
    • EVO_LEVEL_RECOIL_DAMAGE_FEMALE -> EVO_RECOIL_DAMAGE_FEMALE
    • Cleanup by @AsparagusEduardo in #4644
  • Evolution tracker is now by @Bassoonian in #4758
  • Replaced VARARG_8 uses with recursive macros by @cfmnephrite in #4232

  • Egg Move Refactor by @Bassoonian in #4534

    • Egg Moves are now formatted like Teachable learnsets and their pointers are stored in gSpeciesInfo, as opposed to having one big array.
      • Only offspring require these tables.
    • Migration script available in migration_scripts/egg_move_refactor.py.

⚔️ Battle General ⚔️

Added

  • Added option to increase Experience bar speed via B_FAST_EXP_GROW by @SonikkuA-DatH and @pkmnsnfrn in #4335
  • Added Gen 4's Fog battle weather by @kittenchilly in #4359
    • Uses Haze's animation.
    • Changes B_FOG_TERRAIN (TRUE/FALSE config) into B_OVERWORLD_FOG (Generational config).
      • GEN_4: Uses this battle weather in maps with WEATHER_FOG_DIAGONAL and WEATHER_FOG_HORIZONTAL.
      • GEN_8 onwards: Sets permanent Misty Terrain.
      • All others disable them.
  • Terastallization by @AgustinGDLV in #4110

    • Tera Type automatically assigned to existing Pokémon based on their personality value.
      • Can get and set Tera Types in scripts for party members using checkteratype and setteratype by @Bassoonian in #4460
    • To activate, it requires:
      • ITEM_TERA_ORB to be in the player's bag.
      • B_FLAG_TERA_ORB_CHARGED to be set up to an unused flag. It¿s automatically set when HealPlayerParty is called.
    • Added ignoreTera argument added to GetBattlerType
    • Added Tera Blast's effect.
      • Changes type shown in battle screen if the mon is Terastalized or about to by @kittenchilly in #4447
    • Added Stellar Type.
    • Added teraType option for Trainers (also supported by Competitive Format Parties)
    • Added Tera Starstorm's effect by @kittenchilly in #4447
    • Terastallization animation by @Pokabbie in #4507
    • Added forceTeraType field for gSpeciesInfo, which forces the Pokémon to have a specific Tera Type (used by Terapagos and Ogerpon) by @kittenchilly in #4438
    • Added FORM_CHANGE_BATTLE_TERASTALLIZATION by @kittenchilly in #4438
      • It uses a Pokémon's Tera Type to choose which form to switch to upon Terastallizing.
    • Bugfixes:
  • Added Gen 1 type matchups by @AsparagusEduardo in #4508
    • Renamed B_STEEL_RESISTANCES -> B_UPDATED_TYPE_MATCHUPS to reflect this change.
    • Added defines to cleanup sTypeEffectivenessTable.
  • Added Move Descriptions in battle by @Bassoonian, @TheXaman, @Pawkkie and @ravepossum in #4152
    • Press L before selecting a move to see their category, power, accuracy and description.
      • This can be changed to R by using the B_MOVE_DESCRIPTION_BUTTON config by @fakuzatsu in #4860
    • Cleanup
      • By @AGSMGMaster64 and @Sneed69 in #4678
  • Added ball throwing configs by セケツ from PokéCommunity and @pkmnsnfrn in #4953
    • B_ENEMY_THROW_BALLS: When set to GEN_6 or higher, it changes the opposing trainer's ball animation so they throw their Pokéballs instead of already starting on the floor.
    • B_PLAYER_THROW_BALLS_SOUND: When set to GEN_5 or higher, it plays SE_BALL_THROW as part of the player's ball throw animation.
    • B_ENEMY_THROW_BALLS_SOUND: When set to GEN_5 or higher, it plays SE_BALL_THROW as part of the enemy's ball throw animation.
  • Added RandomChance macro for battle/test randomization by @Sneed69 in #4829
  • Gimmick Refactor by @AgustinGDLV in #4449

    • Unifies generational mechanics into gGimmicksInfo struct (Mega, Z-Moves, Ultra Burst, Dynamax, Terastallization).
      • Contains triggers, indicator, condition and function to execute when triggered.
    • Around ~500-1000 lines of redundant / duplicate code removed!
    • Cleanup
  • Allow users to increase MAX_MONEY dynamically by @DizzyEggg and @pkmnsnfrn in #4943
  • Added AUTO_LOWERCASE_KEYBOARD by @Jaizu and @pkmnsnfrn in #4976
    • Automatically changes to to lowercase if the first character inputted is uppercase.

Changed

  • Improved HP drain when enabling B_FAST_HP_DRAIN by @pkmnsnfrn and @SonikkuA-DatH in #4335
  • Combined weather set commands by @AlexOn1ine in #4434

    • setrain -> setfieldweather ENUM_WEATHER_RAIN.
    • setsandstorm -> setfieldweather ENUM_WEATHER_SANDSTORM.
    • setsunny -> setfieldweather ENUM_WEATHER_SUN.
    • sethail -> setfieldweather ENUM_WEATHER_HAIL.
    • setsnow -> setfieldweather ENUM_WEATHER_SNOW.
  • Replaced HP checks with IsBattlerAlive by @ghoulslash in #4429

  • Removed redundant MOVE_EFFECT_SP_ATK_TWO_DOWN by @Sneed69 in #4557

  • Added stack for saved targets and attackers by @ghoulslash in #4061
    • This avoids the need to overwriting battler IDs during scripts and cause potential issues.
    • Several scripts have been updated to use these.
    • Cleanup and fixes
  • Adjusted Ate-Ability code a bit to make it more readable by @AlexOn1ine in #4640

  • Added global constants for damage rolls by @Sneed69 in #4663
    // Lowest and highest percentages used for damage roll calculations
    #define DMG_ROLL_PERCENT_LO 85
    #define DMG_ROLL_PERCENT_HI 100
  • Refactored residual damage to be more readable and less prone to bugs by @AlexOn1ine in #4945

    • Cleanup by @AlexOn1ine in #4993
  • Clarified some cases of ChangeStatBuffs usage by @Sneed69 in #4826
  • Moved EWRAM variables from battle controller player file to gBattleStruct by @DizzyEggg in #4840
    • sDescriptionSubmenu, sAckBallUseBtn and sBallSwapped.

Fixed

  • Fixed Dynamax data not clearing when a battler faints by @WillKolada in #4672
  • Multiple Z-Move fixes by @AgustinGDLV in #4449
    • Fixed Z-Moves not working in Link Battles, recorded battles and tests.
    • Fixed Z_EFFECT_ALL_STATS_UP functionality.
    • Fixed Z-Nature Power, Z-Copycat, Z-Me First, and Z-Sleep Talk incorrectly using a normal move and not a Z-Move, which had not been raised as an issue yet. (some of these were caught recently!)
    • Fixed Breakneck Blitz incorrectly being affected by -ate abilities, which had not been raised as an issue yet.
    • Fixed Instruct incorrectly not failing if the target last used a Z-Move, which had not been raised as an issue yet.
    • Fixed Guardian of Alola incorrectly doing 50% of the target's HP instead of 75%.
  • Fixed Enemy Data not clearing at the end of battles by @ghoulslash in #4867

🤹 Moves 🤹

Added

  • Expanded Freeze Dry's effect to use argument field and allow custom moves to use the effect to be super effective to any specific type by @AlexOn1ine in #4312
    • Renamed EFFECT_FREEZE_DRY to EFFECT_SUPER_EFFECTIVE_ON_ARG.
  • Expanded EFFECT_BODY_PRESS to use category of defense stats for calculation based on the move's own damage category by @AlexOn1ine in #4312
    • Eg: In vanilla, Body Press uses the user's Defense and its stat changes instead of Attack. Now, if we were to change its category in gMovesInfo, it'll use Sp. Defense and its stat changes instead of Sp. Attack.
  • Expanded Photon Geyser and Shell Side Arm (restored) effects so that they also work for physical moves by @Sneed69 in #4923
  • Added Knock Off's Gen 5+ effect with config (B_KNOCK_OFF_REMOVAL) by @AgustinGDLV in #4333
    • Items are removed outright instead of making them unusable.
  • Added Heal Bell/Soundproof Gen 5-8+ interactions with B_HEAL_BELL_SOUNDPROOF config by @Sneed69 in #4732
    • Cleanup by @AsparagusEduardo in #5060
  • Added Spicy Extract's effect by @AlexOn1ine, @Skeli789, @kittenchilly and @ZnogyroP in #4211
  • Added B_RETURN_STOLEN_NPC_ITEMS config for Covet/Thief not being able to steal from NPCs by @moostoet and @Sneed69 in #4605
  • Added Dragon Darts effect (CFRU port) by @AlexOn1ine, @Skeli789 and @BuffelSaft in #4612
    • Animation by @hedara90 in #4620

Changed

  • EFFECT_TRIPLE_KICK's base power uses the move's strikeCount instead of a constant by @Sneed69 in #4608
    • This allows users to create "Quadruple Kick" and similar moves.
  • Migrated move animation pointers to gMovesInfo by @cawtds in #4683
    • This removes the need for gBattleAnims_Moves which had potential ordering issues if not kept in line with move IDs.
      • If battleAnimScript is not defined for a move, it defaults to Tackle's animation.
    • Migration script available in migration_scripts/battle_anim_moves_refactor.py

Fixed

  • Multiple Ally Switch fixes by @ghoulslash in #4451
    • Shadows no longer disappear + safety checks.
    • Corrected animation for opponents.
  • Fixed Avalanche's target by @TheLastMudkip in #4581
  • Fixed Feint and Feint Attack's descriptions by @lhearachel in #4617
  • Fixed Mud Sport/Water Sport reducing damage by 77% instead of 67% in Gen5+ by @fdeblasio in #4874

🎭 Abilities 🎭

Added

  • Added Poison Puppeteer's effect by @AlexOn1ine in #4416
  • Added Tera Shift, Tera Shell, and Teraform Zero by @kittenchilly in #4418
    • FORM_CHANGE_BATTLE_SWITCH now has ability as optional parameter.
    • Cleanup by @AlexOn1ine in #4742
  • Added Toxic Chain's effect by @PhallenTree in #4823
    • Cleanup by @AlexOn1ine in #4843
  • Added B_ABILITY_TRIGGER_CHANCE config to update trigger chances of abilities to Gen4+ by @Sneed69 in #4829
    • Shed Skin, Cute Charm, Flame Body, Static and Poison Point have a 30% chance to trigger in Gen4+ instead of 1/3 in Gen3.
    • Effect Spore has an 11%, 10% and 9% chance of triggering Sleep, Paralysis and Poison in Gen4+ instead of equal 10% each in Gen3.

Changed

  • Removed Gen 9 settings for out-of-battle abilities by @AsparagusEduardo in #4282

    • These configs no longer disable out-of-battle ability effects when set to GEN_9.
      • OW_SUPER_LUCK.
      • OW_INFILTRATOR.
      • OW_HARVEST.
      • OW_LIGHTNING_ROD.
      • OW_STORM_DRAIN.
      • OW_FLASH_FIRE.
    • These configs have been removed
      • OW_COMPOUND_EYES.
      • OW_CUTE_CHARM.
      • OW_ILLUMINATE.
      • OW_MAGNET_PULL.
      • OW_STATIC.

Fixed

  • Fixed Mirror Armor bouncing Sticky Web's stat reduction to the opponent by @Sneed69 in #4713
  • Effect Spore now uses B_POWDER_GRASS to toggle Grass-type Pokémon immunity to it by @Sneed69 in #4829

🧶 Items 🧶

Added

  • Added Booster Energy's effect by @AlexOn1ine in #4337
    • Cleanup

Changed

  • Removed gItemIconTable by @kittenchilly in #4579

    • Sprite and palette pointers have been moved to gItemsInfo as iconPic and iconPalette respectively.
    • Migration script available in migration_scripts/convert_item_icons.py
    • Cleanup
  • Automatically display TM/HM icons based on their move by @Sneed69 in #4452

    • TM palettes are now stored in gTypesInfo in the paletteTMHM field.
    • Cleanup by @Sneed69 in #4487

🤖 Battle AI 🤖

Added

  • Added AI_GetBattlerAbility by @AlexOn1ine in #4555
  • Added AI_FLAG_CONSERVATIVE flag by @Pawkkie and @iriv24 in #4615
    • AI will assume low damage rolls for its calculationsDamage roll selection in AI_CalcDamage
    • Cleanup
  • Added AI_FLAG_SEQUENCE_SWITCHING flag by @Pawkkie, Kasen, @pkmnsnfrn and @DizzyEggg in #4878
    • AI will keep their party order consistently with switches.
  • Added setdynamicaifunc, which allows to setup custom AI functions before a battle besides the predetermined ones used by AI Flags @ghoulslash in #4908
    • Eg:
      setdynamicaifunc AI_TagBattlePreferFoe
      multi_2_vs_2 TRAINER_MAXIE_MOSSDEEP, MossdeepCity_SpaceCenter_2F_Text_JustWantToExpandLand, TRAINER_TABITHA_MOSSDEEP, MossdeepCity_SpaceCenter_Text_TabithaDefeat, PARTNER_STEVEN
      
      Where AI_TagBattlePreferFoe prioritizes attacking the opposite battler index.

Changed

  • AI now calculates and stores minimum possible move damage and uses it with AI_FLAG_TRY_TO_FAINT by @Sneed69 in #4760
    • This allows AI to prefer guaranteed KO moves over highest expected damage move.
    • Cleanup by @Sneed69 in #4808
  • AI Revenge Killer switching factors in Trick Room by @Shadowzlmao and @Pawkkie in #4794
  • AI Smarter Choice AI for Status Moves by @Pawkkie in #4872
    • Better behavior for AI under Choice Item effects.
    • Cleanup by @Pawkkie in #4911
  • AI Smarter Focus Punch and Substitute handling by @Pawkkie, @Kasenn and @AlexOn1ine in #4952
  • Moved RestoreBattlerData out of Ai_CalcDmg and added SaveBattlerData Protections by @ghoulslash in #4156
    • Cleanup
      • By @ghoulslash in #4586
  • Made AI see Loaded Dice hold effect for multi hit moves that strike 5 times by @AlexOn1ine in #4622
  • AI_FLAG_RISKY Improvements by @Pawkkie, @AlexOn1ine and @iriv24 in #4648
    • Check the PR for in depth details.
    • Cleanup
      • By @AsparagusEduardo in #4790
      • By @Pawkkie in #5032
  • Removed temporary scores in AI_CalcMoveEffectScores by @AlexOn1ine in #4655
  • Changed AI_IS_SLOWER and AI_IS_FASTER comparisons into AI_IsFaster and AI_IsSlower functions by @AlexOn1ine in #4671
    • AI_STRIKES_FIRST is also replaced by AI_IsFaster.
  • Switch AI uses trapping abilities aggressively by @Pawkkie in #4669
  • Use 9th roll instead of average in AI calcs by @AlexOn1ine in #4679
  • Use AI_DATA->abilities in more places by @Sneed69 in #4729
  • Minor switch AI cleanup by @Pawkkie, @DizzyEggg, @AlexOn1ine and @Sneed69 in #4849
  • Removed SetBattlerData from AI_CalcDamage by @AlexOn1ine in #4881
  • Removed unused AI_FLAG_HELP_PARTNER by @pkmnsnfrn and @Pawkkie in #4918
  • Added missing ADJUST_SCOREs by @AlexOn1ine in #4925
  • Reduced AI_WhoStrikesFirst to the most essential parts by @AlexOn1ine in #4978
  • Changed score adjustments to tempScore increases by @AlexOn1ine in #4987

Fixed

  • Minor AI flag fixes/cleanup by @Pawkkie, @AlexOn1ine and @pkmnsnfrn in #4924

🧹 Other Cleanup 🧹

Changed

  • Corrected species info struct hex comments by @AlexOn1ine in #4798
    • Cleanup by @AlexOn1ine in #4800

🧪 Test Runner 🧪

Added

  • Added missing weather tests by @AlexOn1ine in #4434
  • Added missing Gale Wings test by @Pawkkie in #4694
  • Added SWITCH_OUT_MESSAGE and SEND_IN_MESSAGE macros to avoid tests from failing based on changing switch out/in messages by @Sneed69 in #4717
    • Usage: SEND_IN_MESSAGE("Wobbuffet");
    • Tests have been updated to use these new macros.
  • Added missing Hidden Power test by @AsparagusEduardo in #4462
  • Added some Terastallization tests by @hedara90 in #5020

Changed

  • Cleaned up Frisk test by @mrgriffin in #4441
  • Renamed MgbaPrintf_ to Test_MgbaPrintf by @Bassoonian in #4642
  • AI tests have been moved to their own folder by @Pawkkie in #4898
  • Species are now always included in tests by @AlexOn1ine in #4810
  • Added Battle Anim Debug Check to see if animations aren't cleared by @ghoulslash in #4930
  • Test battlers always have their forced abilities to prevent them from changing during a test by @Sneed69 in #4707

Fixed

  • Test runner uses Set mode to avoid an issue where tests prompted switching and caused a timeout by @Pawkkie in #4661

New Contributors

  • @Pokabbie made their first contribution in #4507
  • @TheLastMudkip made their first contribution in #4581
  • @moostoet made their first contribution in #4605
  • @rayrobdod made their first contribution in #4727
  • @innocenthedgehog made their first contribution in #4988

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.8.6...expansion/1.9.0