github rh-hideout/pokeemerald-expansion expansion/1.15.0
Expansion 1.15.0

5 hours ago
## 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.15.0
`.

🌋 REFACTORS 🌋

📜 = Uses a migration script.

  • Switch-in Events Refactor by @AlexOn1ine in #8128
  • Updated Focus Punch failure check and moved to attackcanceler by @PhallenTree in #8360
  • Move crit calculation into the damage calc by @AlexOn1ine in #8365
  • Trainerbattle Type Differentiation by @u8-Salem in #6424
    • for multi battles: partnerId is no longer set in multi_* macros but instead by setmultitrainerbattle
  • Make Glaive Rush a MOVE_EFFECT_GLAIVE_RUSH by @AlexOn1ine in #8351
  • Refactor Fury Cutter and Rollout by @AlexOn1ine in #8375
  • Refactor Multi Hit moves to use a flag instead of effect by @AlexOn1ine in #8379
  • Decouples BattlerHasAi from battle positions to instead be determined by battler Battle Controller by @grintoul1 in #8247
  • Allow Starting Statuses beyond 15 by @AsparagusEduardo in #8485
    • You may now define if a Trainer's starting status is temporary or not, by adding "Temporary" at the end (eg. "Electric Terrain Temporary")
    • B_VAR_STARTING_STATUS and B_VAR_STARTING_STATUS_TIMER have been replaced with setstartingstatus and the timer functionality has been removed in favor of defining temporary and permanent versions of each starting status. Eg.
    setvar B_VAR_STARTING_STATUS STARTING_STATUS_PSYCHIC_TERRAIN | STARTING_STATUS_RAINBOW_OPPONENT
    setvar B_VAR_STARTING_STATUS_TIMER 5
    
    has been replaced with
    setstartingstatus STATUS_PSYCHIC_TERRAIN_TEMPORARY
    setstartingstatus STARTING_STATUS_RAINBOW_OPPONENT
    
    They can be stacked on top of each other.
  • AI ShouldPivot Overhaul by @Pawkkie in #8486
  • Move disable struct members to battle mon volatiles by @AlexOn1ine in #8540
  • Refactor switchin candidates to use battler by @Pawkkie in #8546
  • Switchin calcs leverage saving / restoring AiLogicData by @Pawkkie in #8556
  • Move target type refactor by @AlexOn1ine in #8513
  • Counter/Mirror Coat/Metal Burst refactor by @PhallenTree in #8604
    • EFFECT_COUNTER, EFFECT_MIRROR_COAT and EFFECT_METAL_BURST have been combined into EFFECT_REFLECT_DAMAGE
    • These now use BattleScript_EffectHit and their damage is calculated in DoFixedDamageMoveCalc
  • Refactor Endeavor to use DoFixedDamageMoveCalc func by @AlexOn1ine in #8618
  • Move Explosion to attackcanceler and Terrain Boost effect by @AlexOn1ine in #8612
  • Refactoring the way teachable learnsets are generated by @FosterProgramming in #8027
    • src/data/pokemon/teachable_learnsets.h has been removed from the repo
    • If your config P_LEARNSET_HELPER_TEACHABLE is set to false, open your .gitignore file and remove the src/data/pokemon/teachable_learnsets.h line, commit your .gitignore and src/data/pokemon/teachable_learnsets.h files then continue like before.
    • If your config P_LEARNSET_HELPER_TEACHABLE is set to true, it will be created again when you use make. Documentation about the way the file is generated can be found in docs/tutorials/teachable_learnsets.md. Also the file src/data/pokemon/all_learnables.json is now replacing the porymoves files as the proper way to edit teachables sets. To your old teachables sets, run make clean-teachables and the file will be recreated based on the porymoves files when you run make
  • Add Move End Faint Block by @PhallenTree in #8673
  • Further weather consolidation by @AlexOn1ine in #8161
  • enum TrainerPicID to replace defines for TRAINER_PIC_XXXX and TRAINER_BACK_PIC_XXXX by @grintoul1 in #8789
    • Requires a make clean prior to make so that all trainer and battle partner front and back pic defines are refreshed by trainerproc
  • Refactor mon generation by @FosterProgramming in #8204
    • Reworked the functions that generate Pokemon, it should not affect most users but please read docs/tutorials/mon_generation.md if you want to know more or have difficulties adapting custom code that used to rely on the changed functions
    • Synchronize and Cute Charm update: both of these overworld abilities now better match their cartridge behavior in regards to which pokemon are affected by the effect (use the OW_SYNCHRONIZE_NATURE config to choose the version) and can be more easily customized by changing the data in src/ow_synchronize.c
    • OW_SYNCHRONIZE_NATURE now defaults to GEN_LATEST(gen 9) where Synchronize has no overworld effect
  • Consolidate battle anim particles by @fdeblasio in #8797
  • Refactor move relearner and small #8027 follow-up by @PCG06 in #8675
  • Refactor protect failure to match vanilla by @AlexOn1ine in #8832
  • Capture odds refactor and new catch rate modifiers by @FosterProgramming in #8682
    • Added new configs for catch rate modifiers: B_INCAPACITATED_CATCH_BONUS, B_LOW_LEVEL_CATCH_BONUS, B_MISSING_BADGE_CATCH_MALUS
    • B_MISSING_BADGE_CATCH_MALUS default config may reduce catch rate in your hack
    • Add new CATCHING_CHANCE macro to the test engine that allow to record the catching chance to more easily test capture parameters
  • Add setpreattackadditionaleffect and use it for brick break / spectra… by @AlexOn1ine in #8719
  • Refactor move target failure by @AlexOn1ine in #8696
  • Refactor multi test system trainer party allocation and adds enum BattleTrainer by @grintoul1 in #8908
  • Cleanup healthbox printing by @hedara90 in #8958
  • Refactor Lilycove quiz and favor ladies by @fdeblasio in #8929
  • Move adjustdamage to the damage calc by @AlexOn1ine in #8948
  • Refactor OHKO Moves by @AlexOn1ine in #8916
  • Refactor chooseboxmon by @FosterProgramming in #8491
    • WARNING: In Game trade have been modified and previous script might be broken, we recommend replacing you trade script by using the new macro
    • Add a new macro for ingame trade: ingame_trade tradeId:req wantTradeMsg:req, declineTradeJump:req, wrongMonJump:req, tradeCompleteMsg:req
    • Add a new macro for move tutor: move_tutor moveId:req, wantTeachingMsg:req, monSelectMsg:req, declinedJmp:req, taughtJmp:req, flagId=0. flagId is optional, if it is present the move tutor can only be used once (it checks if the flag is unset and sets the flag after teaching the move). If it is not present, the move tutor can be used as many times as you want
    • Adds a new config OW_CHOOSE_FROM_PC_AND_PARTY inc cofig/overworld.h to select if you want npc (daycare, move tutors, trade npc, ...) to let you pick a pokemon from the storage system (pc boxes+party) or just the party (defaults to TRUE allowing to choose mon from pc boxes
    • Adds a filter to show which mons are valid when picking a mon from PC
  • Even more battle environment updates by @fdeblasio in #8835
  • Adds CancelerSetTargets and improves Pre Attack Effects by @PhallenTree in #9178
    • Setting targets for moves has been refactored:
    • gBattleStruct->battlerState[gBattlerAttacker]->targetsDone[target] is set to TRUE if target isn't targeted by the move;
    • Moves now properly check failures against all targets when applicable. If it fails for all targets, it plays the same battle script as before; if it fails for some but not all targets, it will say "It doesn't affect target!", similar to Synchronoise.
    • Additional effects that occur before the move animation (like Brick Break, Spectral Thief), can now be applied to multiple targets and can have a chance to activate.
  • Sky Drop Fixes/Refactor by @AlexOn1ine in #9185

🧬 General 🧬

Added

  • New debug menu actions: Give Egg and Set KO by @FosterProgramming in #8330
    • New debug menu action Give -> Give Egg let you select a species and add an egg of that species to your party (even if that species is not supposed to have eggs)
    • New debug menu action Party -> Inflict Status -> KO let you pick a pokemon in your party and sets its hp to 0
  • Enable 3-color text by @Gudf in #8191
  • Add trainers submenu for debug menu by @FosterProgramming in #8399
  • Sprite text printing improvements by @hedara90 in #8345
    • Sprite printing must be set up with SetupSpritesForTextPrinting(arrayOfSpriteIds, arrayOfSourceSprites, numSpritesX, numSpritesY)
    • Has migration script to handle changes to IsTextPrinterActive
  • Adding move animation backgrounds to the Pokemon Sprite Visualizer by @fdeblasio in #8764
  • Add config flag to skip save overwrite confirmation by @spindrift64 in #8659
  • Allow renaming and move relearning from box summary screen by @kittenchilly in #8854
  • Change randomweightedarray to use u16 weights instead of u8 by @FosterProgramming in #8934
  • Ease vanilla maps deletions by @FosterProgramming in #9199
    • Added a new script that deletes all FRLG maps, just run python dev_scripts/delete_frlg_maps.py. It should take care of all the map constants but you will need to fix mention the to fuschia city entrance in the safari_zone.inc script. This does not save ROM space and is only useful to clean your repo

Changed

  • docs(dns): add nighttime palette user guide by @izrofid in #9158
  • Add FRLG (Part 1) by @cawtds in #7572
  • Support NULLs in SpriteTemplate by @mrgriffin in #8292
  • Adjusted battle string IDs to match the order in gBattleStringsTable by @AsparagusEduardo in #8446
  • Allow Starting Statuses beyond 15 by @AsparagusEduardo in #8485
    • You may now define if a Trainer's starting status is temporary or not, by adding "Temporary" at the end (eg. "Electric Terrain Temporary")
    • B_VAR_STARTING_STATUS and B_VAR_STARTING_STATUS_TIMER have been replaced with setstartingstatus and the timer functionality has been removed in favor of defining temporary and permanent versions of each starting status. Eg.
    setvar B_VAR_STARTING_STATUS STARTING_STATUS_PSYCHIC_TERRAIN | STARTING_STATUS_RAINBOW_OPPONENT
    setvar B_VAR_STARTING_STATUS_TIMER 5
    
    has been replaced with
    setstartingstatus STATUS_PSYCHIC_TERRAIN_TEMPORARY
    setstartingstatus STARTING_STATUS_RAINBOW_OPPONENT
    
    They can be stacked on top of each other.
  • Remove vestigial handledeoxys code by @FosterProgramming in #8509
  • assertf: Formatted asserts by @mrgriffin in #8196
  • Battle Factory move style automation by @AsparagusEduardo in #8368
  • errorf by @mrgriffin in #8580
  • Improve make_scr_cmd_constants.py by @cawtds in #8347
  • Centralize message box and standard frame drawing by @estellarc in #8190
  • Refactoring the way teachable learnsets are generated by @FosterProgramming in #8027
    • src/data/pokemon/teachable_learnsets.h has been removed from the repo
    • If your config P_LEARNSET_HELPER_TEACHABLE is set to false, open your .gitignore file and remove the src/data/pokemon/teachable_learnsets.h line, commit your .gitignore and src/data/pokemon/teachable_learnsets.h files then continue like before.
    • If your config P_LEARNSET_HELPER_TEACHABLE is set to true, it will be created again when you use make. Documentation about the way the file is generated can be found in docs/tutorials/teachable_learnsets.md. Also the file src/data/pokemon/all_learnables.json is now replacing the porymoves files as the proper way to edit teachables sets. To your old teachables sets, run make clean-teachables and the file will be recreated based on the porymoves files when you run make
  • Fix update_text_color_defs.py on Python < 3.12 by @Gudf in #8549
  • Clean up GenConfigTimeOfDay by @AlexOn1ine in #8710
  • Added a include/config option to change mega cry sounds by @lordraindance2 in #7558
  • Migrated some strings out of strings.c/strings.h by @fdeblasio in #8270
  • DMA micro optimization by @estellarc in #8410
  • Add a cleaner way to reset all_learnables.json by @FosterProgramming in #8747
  • Easy chat data refactor by @fdeblasio in #8271
  • enum TrainerPicID to replace defines for TRAINER_PIC_XXXX and TRAINER_BACK_PIC_XXXX by @grintoul1 in #8789
    • Requires a make clean prior to make so that all trainer and battle partner front and back pic defines are refreshed by trainerproc
  • Small code deduplication in battle_ai_switch.c by @cawtds in #8790
  • Standardized use of macros in LoadPalette by @fdeblasio in #8822
  • cleanup GetMon Null Data Instances by @Meister-anon in #8867
  • Sprite Visualizer font update by @fdeblasio in #8883
  • Decoupled trainer gender from encounter music by @fdeblasio in #8892
  • More contest code consolidation by @fdeblasio in #8889
  • Refactor pokerus and add configs by @FosterProgramming in #7731
  • Standardized item indentation by @fdeblasio in #8913
  • Change HP bar color calculation from pixel-width to actual values by @Kasenn in #8694
  • Add sprite fill function taking a sprite as argument by @hedara90 in #8940
  • Cleanup healthbox printing by @hedara90 in #8958
  • Refactor Lilycove quiz and favor ladies by @fdeblasio in #8929
  • Poke Ball consolidation by @fdeblasio in #8962
  • More type checking across the repo by @Bassoonian in #8988
  • Add FRLG by @cawtds in #7423
    • use make firered or make leafgreen to build FRLG
    • FRLG is playable, but missing some features
    • Fame Checker, Map Preview an graphical elements aren't added yet. Teachy TV, TM Case and Berry Pouch not in scope.
  • documentation on how to use frlg by @cawtds in #9045
  • Fix another FRLG style oversight by @Bassoonian in #9046
  • Fix FRLG comment oversight in script_cmd_table.inc by @Bassoonian in #9043
  • Remove aif2pcm by @hedara90 in #9076
  • Rename ow_synchronize.c by @FosterProgramming in #9097
  • Delete irrelevant battle type comments for expansion by @AlexOn1ine in #9082
  • Move SubtractClamped to util.c from battle_util.c by @AlexOn1ine in #9120
  • Clean up reshow_battle_screen.c by @Bassoonian in #9352
  • Cleans up unused String IDs and EWRAM variables by @Bassoonian in #9363
  • Fix spacing for conditions by @Bassoonian in #9369
  • Regularise switch indentation by @Bassoonian in #9368
  • Updated Trainer Tower formatting by @fdeblasio in #9209
  • Fix space indentation in .s and .inc files by @Bassoonian in #9371

Fixed

  • sPlayerAvatarGfxToStateFlag's graphics id to u16 by @estellarc in #9101
  • Fix migration script output from move anim documentation by @hedara90 in #9140
  • Show ability num instead of ability id whn picking ability with debug givemon by @FosterProgramming in #9225
  • Fix setting the wall clock crashing with OW_USE_FAKE_RTC set to FALSE and LTO=1 by @hedara90 in #9299
  • Fix balls used for battle factory mons by @FosterProgramming in #8480
    • Frontier mons can now be assigned to originate from a strange ball
  • Fix save text colors arg order by @Gudf in #8514
  • Fixed Wally Tutorial and added option to check from Debug Menu by @AsparagusEduardo in #8502
  • Assertf improvements and fixes by @hedara90 in #8570
  • 3-color text fixes by @Gudf in #8672
  • Fix Debug Menu accessing disabled species by @hedara90 in #8683
  • Stop early if species is disabled in HGSS dex by @hedara90 in #8687
  • Make Porygon not load-bearing by @hedara90 in #8688
    • SPECIES_NONE now uses the cry of Porygon, and said cry is not disabled with P_FAMILY_PORYGON
  • Remove unused moveEffect variable in MoveEnd_MultihitMove to fix upcoming by @grintoul1 in #8715
  • Replaced undeclared variable in Cmd_tryswapitems; commented out Eject Button test conflicting with another Commander test by @grintoul1 in #8805
  • Fix struct TextPrinterTemplate on old GCC versions by @hedara90 in #8825
  • Fix missing deafult moves for trainer parties by @FosterProgramming in #8829
  • Rework teachable learnset makefile by @FosterProgramming in #8803
  • Fix auto-signpost textprinter by @hedara90 in #8833
  • Fix in-game trade not having moves (missing default moves again) by @FosterProgramming in #8851
  • Clear out text printer when closing dialogue windows by @hedara90 in #8848
  • Fix trailing commas in define by @FosterProgramming in #8863
  • Reduce area filled when printing HP by @hedara90 in #8866
  • Fix ability name printing for trainer mon ability assertf by @hedara90 in #8877
  • Add missing sprite fill functions by @hedara90 in #8975
  • fix: add __attribute__((packed)) to enum Direction by @khbsd in #8994
  • Fix gender selecting task not waiting for input by @FosterProgramming in #9001
  • Fix statement after label issue in chooseboxmon by @FosterProgramming in #9093
  • Fix instant text option freezing the game by @hedara90 in #9132
  • Squirtle is not a fire type by @Pawkkie in #9145
  • Move tutors makefile by @FosterProgramming in #9058
  • fix(fanclub): use sText instead of non-existent gText by @izrofid in #9163
  • Fix HGSS National Dex List Count by @HashtagMarky in #9189
  • fix id range for object events and multi decrements/increments by @cawtds in #9098
  • Fix sprite fill using wrong mask in some cases by @hedara90 in #9205
    • Also fixes an issue where long mon names didn't use narrower fonts.
  • fix(build): fix debug builds failing by @izrofid in #9219
  • Fix battle tutorial crashing after reshow in frlg by @FosterProgramming in #9243
  • Make .party files use "enum Pokeball" instead of "enum Item" by @FosterProgramming in #9159
    • Balls data in trainers.party and battle_partners.party now expect enum Pokeball instead of struct Item
    • The "BALL_" prefix is automatically added just like "ITEM_" used to be be, it means "great ball" must become "great" or "love ball" must become "love"
    • running the migration script python3 migration_scripts/1.15/trainer_party_ball_type_change.py should change your files to the proper structure. If you have ball items not present in expansion in your project, you may need to edit the item_to_ball array in migration_scripts/1.15/trainer_party_ball_type_change.py to run the script
  • Update Makefile to remove every rom on clean by @FosterProgramming in #9346
  • Fix messed up palettes during battle intro by @hedara90 in #9333
  • Merge metatile labels files by @FosterProgramming in #9351
  • Adds a warning when trainer is invalid by @pkmnsnfrn in #9195
  • Fix mapjson error with layouts missing layout_version key by @FosterProgramming in #9374
  • Fix mapjson failing with long map/layout names by @FosterProgramming in #9375

🗺️ Overworld 🗺️

Added

  • Add Chooseboxmon special by @Artrios in #5428
  • Add gym leader support for vs seeker and clean vs seeker code by @FosterProgramming in #8172
    • Vs seeker now support gym leaders rematches with the same conditions as match call
    • Vs seeker now allow rematches with all NPC types (TRAINER_TYPE_NONE and TRAINER_TYPE_ALL_DIRECTIONS) in addition to (TRAINER_TYPE_NORMAL and TRAINER_TYPE_BURIED)
    • Vs seeker now uses question mark emote to represent NPCs who are not TRAINER_TYPE_NONE and do not have a trainer id in the first line of their script.

Changed

Fixed

  • NO_WHITEOUT now prevent forfeits from B_RUN_TRAINER_BATTLE by @pkmnsnfrn in #9112
  • Make sure grass effect palette ignore fog when time blended by @FosterProgramming in #9235
  • Fix batle dome streak thresholds by @FosterProgramming in #9257
  • Fix slateport battle tent battle type by @FosterProgramming in #8475
  • Refactor mon generation by @FosterProgramming in #8204
    • Reworked the functions that generate Pokemon, it should not affect most users but please read docs/tutorials/mon_generation.md if you want to know more or have difficulties adapting custom code that used to rely on the changed functions
    • Synchronize and Cute Charm update: both of these overworld abilities now better match their cartridge behavior in regards to which pokemon are affected by the effect (use the OW_SYNCHRONIZE_NATURE config to choose the version) and can be more easily customized by changing the data in src/ow_synchronize.c
    • OW_SYNCHRONIZE_NATURE now defaults to GEN_LATEST(gen 9) where Synchronize has no overworld effect
  • fix small mistake in ScriptGiveMonParameterized by @artsquirrelb in #8820
  • Another MOVE_DEFAULT bugfix by @FosterProgramming in #8823
  • Fix Daycare party select with ChooseBoxMon by @AsparagusEduardo in #8845
  • Remove assert for surpassing total ev cap by @FosterProgramming in #8938
  • Fix winning moves by @FosterProgramming in #8978
  • Fix checking for rare move in disabled species by @FosterProgramming in #8977
  • Fix checking for frontier banned disabled species by @FosterProgramming in #8980
  • Refactor chooseboxmon by @FosterProgramming in #8491
    • WARNING: In Game trade have been modified and previous script might be broken, we recommend replacing you trade script by using the new macro
    • Add a new macro for ingame trade: ingame_trade tradeId:req wantTradeMsg:req, declineTradeJump:req, wrongMonJump:req, tradeCompleteMsg:req
    • Add a new macro for move tutor: move_tutor moveId:req, wantTeachingMsg:req, monSelectMsg:req, declinedJmp:req, taughtJmp:req, flagId=0. flagId is optional, if it is present the move tutor can only be used once (it checks if the flag is unset and sets the flag after teaching the move). If it is not present, the move tutor can be used as many times as you want
    • Adds a new config OW_CHOOSE_FROM_PC_AND_PARTY inc cofig/overworld.h to select if you want npc (daycare, move tutors, trade npc, ...) to let you pick a pokemon from the storage system (pc boxes+party) or just the party (defaults to TRUE allowing to choose mon from pc boxes
    • Adds a filter to show which mons are valid when picking a mon from PC
  • Fix return to field when selecting a move to forget by @FosterProgramming in #9000
  • Fixed Link Overworld by @AsparagusEduardo in #9014
  • Fix special var collision with battle frontier tutors by @FosterProgramming in #9072
  • Add wander around slower movement type by @FosterProgramming in #9164
  • Fix sanitizeTrainerId by @FosterProgramming in #9244
  • createmon:fix move order when all moves are default by @FosterProgramming in #9261
  • Fix firered TV loading emerald TV script by @FosterProgramming in #9329
  • Fix double actions on standard bike by @FosterProgramming in #9344
  • Fix ss anne disappearing early by @FosterProgramming in #9334
  • Fix frlg coinbox window by @FosterProgramming in #9336
  • Fix region text when looking at map in frlg by @FosterProgramming in #9347
  • Add original frlg safari zone menu and fix initial step counter by @FosterProgramming in #9340
  • Fix floor menu in frlg elevator showing wrong values by @FosterProgramming in #9350
  • Redraw money box after multi choice in bike shop script by @FosterProgramming in #9331
  • Fix special vars in frlg ingame trade by @FosterProgramming in #9328
  • Set var facing on all interactions by @FosterProgramming in #9330
  • createmon uses enum Pokeball instead of Item by @FosterProgramming in #9281
    • Balls data in when using createmon and givemon now expect enum Pokeball instead of struct Item
    • Running the migration script python3 migration_scripts/1.15/givemon_balls_typechange.py should update your script file automatically. If you have ball items not present in expansion in your project, you may need to edit the item_to_ball array in migration_scripts/1.15/trainer_party_ball_type_change.py to run the script
  • Add red and leaf icons to frlg map by @FosterProgramming in #9357
  • Make sure prevo moves are not duplicated in move relearner by @FosterProgramming in #9377
  • Movement follow player by @FosterProgramming in #9365
  • add missing tv sprite in frlg pokecenter by @FosterProgramming in #9348

🐉 Pokémon 🐉

Added

  • Add support for species unique eggs by @hedara90 in #8557
    • New species unique eggs must be added to enum EggIds and src/data/pokemon/egg_data.h

Changed

  • OW mon fixes by @purrfectdoodle in #8444
  • Simplified sprite visualizer's battle backgrounds by @fdeblasio in #8775
  • Convert IsMonBannedFromSkyBattles table to species flag by @Bassoonian in #8793
    • If you previously changed the table in IsMonBannedFromSkyBattles, please mark species as banned from sky battles by adding the isSkyBattleBanned to them in their gSpeciesInfo struct.
  • Refactor move relearner and small #8027 follow-up by @PCG06 in #8675
  • Add Legends Z-A: Mega Dimension content by @LinathanZel in #8550
    • To retain compatibility with your new items and species, make sure to move the new additions behind your own additions.
    • The save block will shift if you have enabled USE_DEXNAV_SEARCH_LEVELS (due to the new species) or if OW_SHOW_ITEM_DESCRIPTIONS is set to OW_ITEM_DESCRIPTIONS_FIRST_TIME (due to the new items).
  • Add Legends Z-A cries by @LinathanZel in #8151
    • These cries result in a 2.26% increase in ROM space used.
    • Toggling P_MODIFIED_MEGA_CRIES to FALSE saves about 3.74% ROM space.
  • Add missing cries for Cramorant-Gulping, Cramorant-Gorging, Oinkologne-Female, and Ursaluna-Bloodmoon by @LinathanZel in #8911
  • New White Stripe Basculin Sprites by @SabataLunar in #8926
  • Add Egg Moves to Pokémon introduced in Legends Arceus by @LinathanZel in #8982

Fixed

  • Allow Power Construct Animation by @KnightGallade in #9298
  • fix(code): stop GetSpeciesPreEvolution from checking disabled species by @khbsd in #8598
    this prevents species from showing up as pre-evolutions if their evolutions are disabled; if a feature you have relies on that make sure to adjust.
  • Fix file endings for White-Stripe Basculin palettes by @hedara90 in #8956
  • createmon:fix move order when all moves are default by @FosterProgramming in #9261

⚔️ Battle General ⚔️

Added

  • Allow x items to be cross-used in double battles by @FosterProgramming in #8280
    • Adds a new config B_X_ITEMS_CROSSUSE (true by default) that allows X items to be used on any allied battler in double battle
  • Support Gen 2's Sandstorm not reducing Solar Beam's power by @AsparagusEduardo in #8422
    • Changed uses of B_WEATHER_HAIL | B_WEATHER_SNOW to B_WEATHER_ICY_ANY.
  • Adds smart target type by @AlexOn1ine in #8639
  • Adds assertf for incorrect usage of ends, return, call and selection script commands by @PhallenTree in #9018

Changed

  • Use direct config names instead of enum names by @AsparagusEduardo in #8824
    • GetConfig and WITH_CONFIG now use the actual config define. Eg, B_STURDY instead of CONFIG_STURDY. However, in scripts, using jumpifgenconfiglowerthan in scripts would use the full name of CONFIG_B_STURDY.
  • Switch-in Events Refactor by @AlexOn1ine in #8128
  • Updated Focus Punch failure check and moved to attackcanceler by @PhallenTree in #8360
  • Move crit calculation into the damage calc by @AlexOn1ine in #8365
  • Trainerbattle Type Differentiation by @u8-Salem in #6424
    • for multi battles: partnerId is no longer set in multi_* macros but instead by setmultitrainerbattle
  • Make Glaive Rush a MOVE_EFFECT_GLAIVE_RUSH by @AlexOn1ine in #8351
  • Removed Hold Effects that do nothing by @AsparagusEduardo in #8420
    • Removed HOLD_EFFECT_DRAGON_SCALE and HOLD_EFFECT_UPGRADE.
  • Convert starting statuses to a bitmask by @AlexOn1ine in #8233
  • Refactor Multi Hit moves to use a flag instead of effect by @AlexOn1ine in #8379
  • Renames for struct BattleContext and DamageContext by @AlexOn1ine in #8426
  • Decouples BattlerHasAi from battle positions to instead be determined by battler Battle Controller by @grintoul1 in #8247
  • Streamline unable to use move flags by @AlexOn1ine in #8415
  • Add fieldStatuses argument to Ai_CalcDamage for switch in calc by @AlexOn1ine in #8490
  • Battle controller Ball throw cleanup by @AsparagusEduardo in #8519
  • Add starting-status hazard support by @moostoet in #8302
    B_VAR_STARTING_STATUS now supports spawning layered hazards (Spikes, Toxic Spikes, Sticky Web, Stealth Rock, Steelsurge) with correct messaging and effects.
  • Move disable struct members to battle mon volatiles by @AlexOn1ine in #8540
  • Move target type refactor by @AlexOn1ine in #8513
  • Counter/Mirror Coat/Metal Burst refactor by @PhallenTree in #8604
    • EFFECT_COUNTER, EFFECT_MIRROR_COAT and EFFECT_METAL_BURST have been combined into EFFECT_REFLECT_DAMAGE
    • These now use BattleScript_EffectHit and their damage is calculated in DoFixedDamageMoveCalc
  • Refactor Endeavor to use DoFixedDamageMoveCalc func by @AlexOn1ine in #8618
  • Move Explosion to attackcanceler and Terrain Boost effect by @AlexOn1ine in #8612
  • Stockpile / WishFutureKnock / Order up clean up by @AlexOn1ine in #8528
  • Add Move End Faint Block by @PhallenTree in #8673
  • Clean up for touchedProtectLike by @AlexOn1ine in #8699
  • Create battle_move_resolution.c by @AlexOn1ine in #8703
  • Trainer slides for multiple trainers and multibattles by @grintoul1 in #7588
  • Change Present edge case by @AlexOn1ine in #8708
  • Add error handling to BS_GetStatValue by @hedara90 in #8734
  • Fix Rage generational inaccuracies by @moostoet in #8642
  • Further weather consolidation by @AlexOn1ine in #8161
  • Add pre–Gen 4 handling for Hidden Power and Counter interaction by @izrofid in #8741
  • Clean up volatiles by @AlexOn1ine in #8762
  • Add handling for Trick/Switcheroo behavior when both battlers are choice-locked (pre–Gen 5) by @izrofid in #8730
  • Fixed GetCopycatMove's capitalization by @fdeblasio in #8808
  • Added Secret Power animations to gBattleEnvironmentInfo by @fdeblasio in #8807
  • More battle environment updates by @fdeblasio in #8809
  • Refactor protect failure to match vanilla by @AlexOn1ine in #8832
  • Adds type checking for battler positions by @Bassoonian in #8792
  • Add setpreattackadditionaleffect and use it for brick break / spectra… by @AlexOn1ine in #8719
  • Refactor move target failure by @AlexOn1ine in #8696
  • Battle file cleanup & documentation by @Bassoonian in #8903
  • Apply some cases of STATUS1_ICY_ANY by @AsparagusEduardo in #8924
  • Consolidated HandleStatusIconUpdate by @AsparagusEduardo in #8925
  • GetBattleTrainer -> GetBattlerTrainer by @AsparagusEduardo in #8952
  • Move adjustdamage to the damage calc by @AlexOn1ine in #8948
  • Refactor OHKO Moves by @AlexOn1ine in #8916
  • Move attack canceler to the move resolution file by @AlexOn1ine in #8921
  • Add even more type checking by @Bassoonian in #8972
  • Add missing copycatBanned to Mirror Coat by @fdeblasio in #9016
  • Move Target failure follow up by @AlexOn1ine in #8986
  • Even more battle environment updates by @fdeblasio in #8835
  • Form Change Improvements by @AsparagusEduardo in #8850
  • Clean up redundant item assignment after it was stolen by @AlexOn1ine in #9044
  • Adds CancelerSetTargets and improves Pre Attack Effects by @PhallenTree in #9178
    • Setting targets for moves has been refactored:
    • gBattleStruct->battlerState[gBattlerAttacker]->targetsDone[target] is set to TRUE if target isn't targeted by the move;
    • Moves now properly check failures against all targets when applicable. If it fails for all targets, it plays the same battle script as before; if it fails for some but not all targets, it will say "It doesn't affect target!", similar to Synchronoise.
    • Additional effects that occur before the move animation (like Brick Break, Spectral Thief), can now be applied to multiple targets and can have a chance to activate.
  • Sky Drop Fixes/Refactor by @AlexOn1ine in #9185
  • FRLG accuracy check clean up by @AlexOn1ine in #9224
  • Simplify defrosting/thawing and expand target thawing config by @PhallenTree in #9271
  • Move undoing Dynamax to before faint cry by @PhallenTree in #9317
  • Adjust the restriction for Pecharunt by @AlexOn1ine in #9181

Fixed

  • NO_WHITEOUT now prevent forfeits from B_RUN_TRAINER_BATTLE by @pkmnsnfrn in #9112
  • Fix Leppa Berry PP restore target under forced-consumption effects by @Cle-bit in #9108
  • Fix Instruct failing improperly when the instructed move isn't in the target's moveset by @Cle-bit in #9113
  • Fix Aroma Veil target-side check for ally-targeted limiting moves by @Cle-bit in #9157
  • Fix immunity ability status sync to avoid persisting Toxic counter when only volatile conditions are cured by @Cle-bit in #9156
  • Fix Instruct Missing Checks for Focus Punch, Beak Blast, Shell Trap, and Sky Drop by @Cle-bit in #9152
  • Fix Aqua Ring reuse failure check and add Aqua Ring/Ingrain tests by @Cle-bit in #9174
  • Fix Transform fail conditions with gen-specific checks by @Cle-bit in #9070
  • Fix Taunt to not block Me First in Gen 5+ by @Cle-bit in #9069
  • Fix Present heal miss-flag handling and enforce Telepathy blocking by @Cle-bit in #9170
  • Fix Commander cleanup after Volt Switch switch-in by @Cle-bit in #9141
  • Fixes Gulp Missile crash on targets that can be statused by @AlexOn1ine in #9179
  • Fix multi battle switch checks for Eject items by @Cle-bit in #9190
  • Fix incorrect player berry animation on opponent’s low-HP heal at battle start by @Cle-bit in #9198
  • Fixes Protective Pads preventing Poison Touch activation by @PhallenTree in #9222
  • Fix tera icon palettes by @grintoul1 in #9208
  • Running from trainer battles properly handles whiteouts by @pkmnsnfrn in #9228
  • Prevents seteffectprimary and seteffectsecondary from softlocking by @PhallenTree in #9236
  • Fixes Throat Chop timer being reset with every use of the move by @PhallenTree in #9246
  • Fix incorrect Adaptability interaction with non Tera type moves after Terastalization by @Cle-bit in #9272
  • Fix Ability Shield exemption when Neutralizing Gas ends by @Cle-bit in #9273
  • Fix Tickle to be blocked by Substitute in Gen 4+ by @Cle-bit in #9288
  • Fix Venom Drench bypassing Substitute by @Cle-bit in #9289
  • Fix Assist to account for temporarily changed moves in Gen 5+ by @Cle-bit in #9287
  • Fixes Minior not appearing in Meteor form when encountered in the wild by @luuma in #9282
  • Fix Eviolite to use original species after Transform by @Cle-bit in #9285
  • Fix Sucker Punch to succeed against Me First targets by @Cle-bit in #9284
  • Fixes plasma fists and several let's go and max move effects which should occur even when fainting a foe by @luuma in #9262
  • Fix Paradox stat selection under Wonder Room by @Cle-bit in #9356
  • Fix illegal switch due to hazards by @AlexOn1ine in #9361
  • Fix Trapping Persisting after KO in doubles by @ChrispyChris27 in #9380
  • Fix Baton Pass to clear Mean Look trapping on the target in Gen 5+ by @Cle-bit in #9378
  • Fix Meloetta not reverting forms on switch and remove deprecated Lunar Dance string ID by @Meister-anon in #9379
  • Corrects battler used in STRINGID_ATTACKERABILITYSTATRAISE by @grintoul1 in #9383
  • Refactor Fury Cutter and Rollout by @AlexOn1ine in #8375
  • Fix Snatch stealing snatched moves by @moostoet in #8350
  • Fix Air Balloon message happening when another battler switches in by @PhallenTree in #8455
  • Fix potential bug with CanBattlerGetOrLoseItem by @AlexOn1ine in #8518
  • Fix Red Card / Eject Button interaction by @AlexOn1ine in #8780
  • Fixes Chilly Reception displaying its message when called by another move by @PhallenTree in #8795
  • Ability Shield allows for ability activation when obtained and Trick cleanup by @PhallenTree in #8784
  • Update volatiles once again by @AlexOn1ine in #8798
  • Fix field abilities activating when an other mon switches in by @AlexOn1ine in #8743
  • Fix capture using strange ball by @FosterProgramming in #8874
  • Fix Gen 4 Taunt for upcoming by @amiosi in #8878
  • Fix wrong getter in GetSwitchinStatusDamage by @Bassoonian in #8896
  • Follow up for anim issue in doubles by @AlexOn1ine in #8894
  • Fix brackets in SetMoveEffect by @AlexOn1ine in #8922
  • Misc battle engine changes by @AlexOn1ine in #8931
  • Mold Breaker, Last Resort, Assume and Tantrum fixes by @AlexOn1ine in #9047
  • Fixes Fling Booster Energy being prevented by target Paradox mon by @PhallenTree in #9050
  • Fixes wild mon target choice in double battles by @izrofid in #9075
  • Fix Electroweb crash by correcting target sprite resolution by @Cle-bit in #9091
  • Clear Selection Scripts to prevents consequent fails by @PhallenTree in #9095
  • fix(battle ui): standardize hp bar color logic for GEN_5 and up by @khbsd in #9083
  • Battle Heap and Animation Test fixes by @hedara90 in #9118
  • Fix ShouldSkipAccuracyCalcPastFirstHit wrong return val by @AlexOn1ine in #9122
  • Fixes Dancer activating on missed moves and Neutralizing Gas interaction by @PhallenTree in #9129
  • Strength Sap fixes by @AlexOn1ine in #9130
  • Fix Pickpocket timing by @AlexOn1ine in #9165
  • Fix moves causing errors in Multiplayer due to recoil check in Battle TV by @hedara90 in #9183
  • Fix accuracy bypass by @cawtds in #9201
  • fix cram form change issue #9182 by @Meister-anon in #9184
  • Fix pressing left or up when choosing target potentially causing a softlock by @PhallenTree in #9247
  • Poltergeist Fix: Usable against Klutz targets and while Magic Room is in effect by @LinathanZel in #9256
  • Fixes Rapid Spin and target defrost not being blocked by Sheer Force by @PhallenTree in #9252
  • Fixes present master merge regression by @AlexOn1ine in #9301
  • Fix Power Construct Z symbol color + Add Form Change Sounds by @LinathanZel in #9326
  • Fix safari healthbox by @FosterProgramming in #9341
  • Fixes post-KO animation assertf trigger caused by OOB battler number by @grintoul1 in #9343
  • Temporary fix to sprite data corruption during multi-faint by @hedara90 in #9332
  • Zen Mode Fix: Removes start battle form change and adds switch-out form change by @LinathanZel in #9304
  • Fix trainer sprite no reshowing properly in safari battle by @FosterProgramming in #9353

🤹 Moves 🤹

Changed

  • fix(bttl-anim): remove unused battle selector to silence warning by @izrofid in #9218
  • Consolidate battle anim particles by @fdeblasio in #8797
  • Consolidated common steps for Brick Break, Psychic Fang, and Raging Bull's animations by @fdeblasio in #9020
  • Converted break_screen_animation from a macro to a function by @fdeblasio in #9115

Fixed

🧶 Items 🧶

Added

  • Add gym leader support for vs seeker and clean vs seeker code by @FosterProgramming in #8172
    • Vs seeker now support gym leaders rematches with the same conditions as match call
    • Vs seeker now allow rematches with all NPC types (TRAINER_TYPE_NONE and TRAINER_TYPE_ALL_DIRECTIONS) in addition to (TRAINER_TYPE_NORMAL and TRAINER_TYPE_BURIED)
    • Vs seeker now uses question mark emote to represent NPCs who are not TRAINER_TYPE_NONE and do not have a trainer id in the first line of their script.
  • Gen 3 Lax Incense by @amiosi in #8864

Changed

  • Add OW_BERRY_COLORS and update gBerries to match by @pkmnsnfrn in #8353
  • Updated Lemonade's description's formatting to match the rest of the healing items by @fdeblasio in #8888
  • Adds Item enum by @Bassoonian in #8897
    • The struct Item was renamed to ItemInfo for consistency with the other structs.
  • Add all of the Z-A mega stone sprites by @kittenchilly in #9143

Fixed

  • Fix Rare Candy reviving fainted level 100 Pokémon by @Cle-bit in #9117

🤖 Battle AI 🤖

Added

  • Add Smarter AI Resist Berry Handling by @Pawkkie in #8376
  • Improved behavior for AI X Items and Dire Hit; vanilla behavior moved to Force Setup First Turn by @surskitty in #7851
  • Add AI_FLAG_RANDOMIZE_SWITCHINS by @Pawkkie and @lhearachel, @ghoulslash, @u8-Salem, @mrgriffin, @FosterProgramming in #6222
  • AI will not stat boost if Yawn'd by @Pawkkie in #8377
  • Improve self-sacrifice AI by @Pawkkie in #8427
  • Adds TIE_BREAK_SCORE and TIE_BREAK_TARGET to test system to allow for forced or random move and target selection by @grintoul1 in #8398
    • Due to how tests "crash" if the expected move is not what happens in the actual test, the move/target being expected must be the one selected in the last run of a test, else the crash causes an animation failure message.
  • Trapping switch AI can see Shed Shell by @Pawkkie in #8388
  • AI last chance / priority handling tweaks by @Pawkkie in #8384
  • feat (AI): AI hits to KO considers Endure effects, and self-damage setup move handling by @ghostyboyy97 in #8482
    • The AI now has logic for selecting Clangorous Soul and Fillet Away
    • The AI now has improved logic for selecting Belly Drum
    • The AI overall is more aware of whether or not its item and ability allows it to endure a hit.
  • Switch AI sees terrain when calcing damage by @Pawkkie in #8498
  • Add AI switchin quality consideration configs by @Pawkkie in #8508
  • Improve AI Absorb Handling by @Pawkkie in #8465
  • ShouldSwitch 1v1 calcs handle Endure effects by @Pawkkie in #8544
  • Switchin calcs leverage saving / restoring AiLogicData by @Pawkkie in #8556
  • AI uses Z-moves to ensure a low-accuracy KO. by @surskitty in #8584
  • Cap AI scores for Quiver Dance, Victory Dance, and Shell Smash. by @surskitty in #8585
  • Ensure Palafin prioritizes safe Flip Turn for Zero To Hero in battle by @Cle-bit in #8591
  • Add Dynamic Switch AI Function by @Pawkkie in #8629
  • Adjust AI two-turn move scoring by @Pawkkie in #8651
  • Add AI_FLAG_RANDOMIZE_PARTY_INDICES by @Pawkkie in #8717
  • AI uses Tailwind with Wind Rider and Wind Power by @Cle-bit in #8983

Changed

  • Smarter AI handling for incoming heals / Revival Blessing by @moostoet in #8325
    • AI now chooses Healing Wish/Wish/Lunar Dance/Z-Parting Shot/Z-Memento and Revival Blessing recipients intelligently, accounting for hazards, status cures, and matchup safety.
  • Decouples BattlerHasAi from battle positions to instead be determined by battler Battle Controller by @grintoul1 in #8247
  • Split battle_ai_switch_items.c in two by @Pawkkie in #8414
    • Please see the PR description for guidance if you have modified anything in this file
  • Enables AI to score all moves that KO as best damage, and store multiple moves as best damaging move for additional checks by @grintoul1 in #8425
  • Rename Ai_WhichMoveBetter to CompareMoveEffects by @Pawkkie in #8468
  • AI ShouldPivot Overhaul by @Pawkkie in #8486
  • Fix switch AI caring about super effective Snore by @Pawkkie in #8500
  • Refactor switchin candidates to use battler by @Pawkkie in #8546
  • Consolidate GetIndexMove by @Pawkkie in #8622
  • Iterator cleanup in battle_ai files by @Pawkkie in #8582
  • Improve Trick/Bestow AI logic for Toxic/Flame Orb and Utility Umbrella by @Cle-bit in #8729
  • AI avoids Protect against Unseen Fist and protection‑ignoring moves by @Cle-bit in #8939
  • AI sees No Guard prevents having Semi Invulnerability. by @surskitty in #8586
  • Remove redundant Levitate check for Magnitute by @AlexOn1ine in #9197

Fixed

  • Add missing weather checks for AI sandstorm/hail damage helpers by @Cle-bit in #9155
  • Fix AI semi-invulnerable move handling and simplify switching logic by @Cle-bit in #9180
  • Fix AI Sheer Force checks to allow Order Up’s Commander stat boost by @Cle-bit in #9250
  • Fixes dmg rounding error for AI by @grintoul1 in #8436
  • Fixes uninitialised variable in IncreaseSleepScore and corrects Focus Punch check by @grintoul1 in #8481
  • fix (scoring): configure GetNoOfHitsToKOBattler to allow optional endure consideration by @ghostyboyy97 in #8496
    • The AI will NOT consider if it can endure an extra hit for setup consideration to prevent AI abuse
  • Fix doubles moves bad / choice lock bad switch AI by @Pawkkie in #9078
  • Fix AI_FLAG_RANDOMIZE_SWITCHIN logic by @Pawkkie in #9128
  • Prevent Coaching score inflation in certain circumstances. by @surskitty in #9154
  • Fix doubles switch looping by @Pawkkie in #9167
  • Fix Toxic Spikes switchin typo by @Pawkkie in #9242

🧹 Other Cleanup 🧹

🧪 Test Runner 🧪

Added

  • Adds TIE_BREAK_SCORE and TIE_BREAK_TARGET to test system to allow for forced or random move and target selection by @grintoul1 in #8398
    • Due to how tests "crash" if the expected move is not what happens in the actual test, the move/target being expected must be the one selected in the last run of a test, else the crash causes an animation failure message.
  • Adds EXPECT_FAIL macro to test system to allow for testing of conditions correctly triggering failures by @grintoul1 in #8553
  • Capture odds refactor and new catch rate modifiers by @FosterProgramming in #8682
    • Added new configs for catch rate modifiers: B_INCAPACITATED_CATCH_BONUS, B_LOW_LEVEL_CATCH_BONUS, B_MISSING_BADGE_CATCH_MALUS
    • B_MISSING_BADGE_CATCH_MALUS default config may reduce catch rate in your hack
    • Add new CATCHING_CHANCE macro to the test engine that allow to record the catching chance to more easily test capture parameters

Changed

  • Adds Parabolic Charge spread damage healing test by @AlexOn1ine in #9094
  • Use direct config names instead of enum names by @AsparagusEduardo in #8824
    • GetConfig and WITH_CONFIG now use the actual config define. Eg, B_STURDY instead of CONFIG_STURDY. However, in scripts, using jumpifgenconfiglowerthan in scripts would use the full name of CONFIG_B_STURDY.
  • Added Weight battle tests by @AsparagusEduardo in #9202
  • Add tests for Hadron Engine and Psyblade by @Cle-bit in #9314
  • Add tests for Future Sight interaction with Ally Switch by @Cle-bit in #9300
  • Fix setup for some moves in animation tests by @hedara90 in #8492
  • Add missing behavior when using focus punch while surviving an OHKO move by @FosterProgramming in #8484
  • assertf: Formatted asserts by @mrgriffin in #8196
  • Improve Trick/Bestow AI logic for Toxic/Flame Orb and Utility Umbrella by @Cle-bit in #8729
  • Add handling for Trick/Switcheroo behavior when both battlers are choice-locked (pre–Gen 5) by @izrofid in #8730
  • OCD PR: Test summary order by @AsparagusEduardo in #8853
  • Refactor pokerus and add configs by @FosterProgramming in #7731
  • AI avoids Protect against Unseen Fist and protection‑ignoring moves by @Cle-bit in #8939
  • Re-enable disabled test by @Pawkkie in #9200

Fixed

  • Fix Aqua Ring reuse failure check and add Aqua Ring/Ingrain tests by @Cle-bit in #9174
  • Fixes Protective Pads preventing Poison Touch activation by @PhallenTree in #9222
  • Fix tera icon palettes by @grintoul1 in #9208
  • Fix Meloetta not reverting forms on switch and remove deprecated Lunar Dance string ID by @Meister-anon in #9379
  • Tie Break failsafe correction by @grintoul1 in #8596
  • Fix Red Card / Eject Button interaction by @AlexOn1ine in #8780
  • Replaced undeclared variable in Cmd_tryswapitems; commented out Eject Button test conflicting with another Commander test by @grintoul1 in #8805
  • Fix field abilities activating when an other mon switches in by @AlexOn1ine in #8743
  • Refactor multi test system trainer party allocation and adds enum BattleTrainer by @grintoul1 in #8908
  • Adds a warning when trainer is invalid by @pkmnsnfrn in #9195

📚 Documentation 📚

👻 Sprites 👻

Added

Changed

Fixed

  • Fix tera icon palettes by @grintoul1 in #9208
  • Fixes Manaphy egg data blocking compiler with Manaphy disabled by @grintoul1 in #8671
  • Fixes post-KO animation assertf trigger caused by OOB battler number by @grintoul1 in #9343

New Contributors

Full Changelog: expansion/1.14.3...expansion/1.14.4

New Contributors

Full Changelog: expansion/1.14.3...expansion/1.15.0

Don't miss a new pokeemerald-expansion release

NewReleases is sending notifications on new releases.