Skip to content

Latest commit

 

History

History
704 lines (683 loc) · 52.6 KB

File metadata and controls

704 lines (683 loc) · 52.6 KB

Version 1.8.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.8.0`.

🌋 IMPORTANT CHANGES 🌋

  • Python is now a required for the Expansion.

    • Run the command -v python3 command to see if you have it. If you don't, please check INSTALL.md to see how to install it.
  • Support for PoryMap v5.1.1 and lower has been dropped.

    • Please update your PoryMap version.
    • Specifically, we have removed the commented-out gMonIconTable table used to associate species IDs with icon images by @Bassoonian in #3896
      • From PoryMap v5.2.0 onwards, these icons are autodetected based on file/directory names instead.
    • To continue using older versions of PoryMap, you may restore the commented-out table, though you'll need to keep it up to date with any new items you add.
  • Backwards-compatible BoxPokemon Refactor by @mrgriffin in #3438

    • HP and Status is now kept when depositing Pokémon in the PC
      • Previous behavior can be restored by setting OW_PC_HEAL.
    • Nature Mints are now fully functional.
      • Nature colors in summary screen are based on the changed nature by @Bassoonian in #3898
    • Gigantamax Factor and Dynamax Level fully supported.
      • Cannot be seen in summary screen.
      • Dynamax Candy effect added.
      • Gigantamax Factor prevents Duraludon from evolving, like Pikachu, Eevee and Meowth beforehand.
      • Added hasgigantamaxfactor and togglegigantamaxfactor overworld script commands.
        • Gigantamax Factor cannot be toggled for Mythical Pokémon (vanilla behavior).
    • Hyper Training is now fully supported.
      • Cannot be seen in summary screen.
      • Added canhypertrain and hypertrain overworld script commands.
    • Shininess can be toggled with MON_DATA_IS_SHINY.
    • Added Tera Type field is added for future-proofing.
      • It can be seen in the summary screen by turning P_SHOW_TERA_TYPE on.
    • Added isShadow field for future-proofing.
    • Added options for Tera Type, Dynamax Level, Gigantamax Factor and Shadow flag in tests.
    • Cleanup by
  • Move Refactors:

    • Move data unification by @LOuroboros, with help from @Bassoonian, @cfmnephrite and @AsparagusEduardo in #3999
      • Renamed gBattleMoves to gMovesInfo.
      • Moved move names to gMovesInfo.
        • Added GetMoveName to get all move names, removing the need for GetMaxMoveName and GetZMoveName.
      • Moved move descriptions to gMovesInfo.
      • Moved contest data to gMovesInfo.
    • Secondary/primary effects overhaul by @cfmnephrite in #3577
      • Secondary effects such as stat stage modifiers and status via are now set via additionalEffects field.
      • Eg.
        [MOVE_THUNDER_FANG] =
        {
            .effect = EFFECT_FLINCH_STATUS,
            .secondaryEffectChance = 10,
            .argument = STATUS1_PARALYSIS,
            ...
        },
        Now becomes:
        [MOVE_THUNDER_FANG] =
        {
            .effect = EFFECT_HIT,
            .additionalEffects = ADDITIONAL_EFFECTS(
                { .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 10, },
                { .moveEffect = MOVE_EFFECT_FLINCH,    .chance = 10, }
            ),
            ...
        },
        With customizable independent chances for each effect. Because of this, secondaryEffectChance has been removed.
      • For more info, check the wiki article on How to add a new move.
      • Cleanup by:
    • Renamed Battle Move "Split" to the proper "Category" term by @AsparagusEduardo in #3774
      -.split = SPLIT_PHYSICAL,
      +.category = DAMAGE_CATEGORY_PHYSICAL,
    • Z-move power override (eg. Mega Drain) was moved from a switch in GetZMovePower to move data. It's part of an union alongsize with Z-move status effect by @cfmnephrite in #3575
      • Cleanup by @AsparagusEduardo in #4201
    • Removed EFFECT_RECOIL_x effects in favor of new recoil field by @cfmnephrite in #3575
    • Removed critical-hit move effects in favor of new criticalHitStage by @cfmnephrite in #3779
      • Added alwaysCriticalHit move flag.
    • Converted EFFECT_x defines to an enum by @cfmnephrite in #3975
    • Move data now uses ternaries for data that was changed only once across generations by @AsparagusEduardo in #3987
      [MOVE_SWORDS_DANCE] =
      {
      -   #if B_UPDATED_MOVE_DATA >= GEN_6
      -       .pp = 20,
      -   #else
      -       .pp = 30,
      -   #endif
          .effect = EFFECT_ATTACK_UP_2,
          .power = 0,
          .type = TYPE_NORMAL,
          .accuracy = 0,
      +   .pp = B_UPDATED_MOVE_DATA >= GEN_6 ? 20 : 30,
    • Moved effect script array to src/data/battle_move_effects.h by @cfmnephrite in #3994
      • AI's sEncouragedEncoreEffects and Battle TV's sPoints_MoveEffect are now handled in this struct.
      • Some move flags were moved to this array instead
        • Semi-invulnerable flag (semiInvulnerableEffect) in #4062
          • Cleanup by @cfmnephrite in #4150
        • Flag to define Two-turn effects (twoTurnEffect) in #4062
        • Flag for increasing the protection counter (usesProtectCounter) in #4062
    • Removed sheerForceBoost in favor of checking their actual secondary effects by @cfmnephrite in #4096
      • To force Sheer Boost acting for a move without secondary effect, you can add SHEER_FORCE_HACK in the additionalEffects field.
  • Learnset refactors

    • Level up learnsets can now be switched by generational config by @MartyKen in #4049
      • Adds a file for each generation with data for all species.
        • Gen 1: Yellow
        • Gen 2: Crystal
        • Gen 3: RSE
        • Gen 4: HGSS
        • Gen 5: B2W2
        • Gen 6: ORAS
        • Gen 7: USUM
        • Gen 8:
          • Species from Gens 1-4: BDSP
          • Species from Legends: Arceus: Use that game's data.
          • Species from Gens 5-8: SwSh if they exist there. Otherwise, default to Gen 7's data.
        • Gen 9:
          • If they exist in SV, use that game's data.
          • Otherwise, default to Gen 8's data.
      • If a Pokémon doesn't exist in the respective generation, it uses the first instance it appears in.
        • Eg. Chikorita uses its Gen 2 learnset if the config is set to Gen 1.
        • IMPORTANT: Since the expansion's default had most movesets correspond to USUM's, conflicts will arise in data/pokemon/level_up_learnsets/gen_7.h if you modified the level learnsets. Be sure to backup your data/pokemon/level_up_learnsets.h before merging and then do the following after merging to keep your changes:
          +#include "data/pokemon/level_up_learnsets.h"
          +#if FALSE
          +
           #if P_LVL_UP_LEARNSETS >= GEN_9
           #include "data/pokemon/level_up_learnsets/gen_9.h"
           #elif P_LVL_UP_LEARNSETS >= GEN_8
           #include "data/pokemon/level_up_learnsets/gen_8.h"
           #elif P_LVL_UP_LEARNSETS >= GEN_7
           #include "data/pokemon/level_up_learnsets/gen_7.h"
           #elif P_LVL_UP_LEARNSETS >= GEN_6
           #include "data/pokemon/level_up_learnsets/gen_6.h"
           #elif P_LVL_UP_LEARNSETS >= GEN_5
           #include "data/pokemon/level_up_learnsets/gen_5.h"
           #elif P_LVL_UP_LEARNSETS >= GEN_4
           #include "data/pokemon/level_up_learnsets/gen_4.h"
           #elif P_LVL_UP_LEARNSETS >= GEN_3
           #include "data/pokemon/level_up_learnsets/gen_3.h"
           #elif P_LVL_UP_LEARNSETS >= GEN_2
           #include "data/pokemon/level_up_learnsets/gen_2.h"
           #elif P_LVL_UP_LEARNSETS >= GEN_1
           #include "data/pokemon/level_up_learnsets/gen_1.h"
           #endif
          +#endif
      • Cleanup by
    • Added sUniversalMoves, a near-universal teachable move array by @Bassoonian in #4052
      • This removes the need to add moves such as Hidden Power to almost every species.
      • Adds tmIlliterate flag that controls when specific species cannot learn these moves, such as Magikarp, Caterpie and Ditto.
    • Auto-generate teachable learnset data from JSON data by @Bassoonian in #3856
      • Scans the repository for TMs and tutor moves.
      • Checks JSON files (same format as PoryMoves, with minor label adjustments for an easier time) for compatibility.
      • Creates a teachable_learnsets.h file with the smallest size possible by only including the moves found in the scan.
      • Users can easily delete/add JSON files to reference less/more data as they see fit.
        • Eg. they can remove hgss.json to remove those games' compatibility list from being considered.
      • Any changes in teachable_learnsets.h made before this tool runs for the first time will be saved in custom.json for flawless migration.
      • Updated teachable_learnsets.h using this script by @Bassoonian in #4064
        • Further updated with new Indigo Disk data compatibility by @AsparagusEduardo in #4155
      • Can be disabled via P_LEARNSET_HELPER_TEACHABLE.
    • Removed previously untutorable moves from Mew's unteachable moves by @fdeblasio in #4142
  • Ability Refactor: new struct called Ability that stores both name and description of abilities by @Bassoonian in #3861

    • AI ability scores moved to this struct by @Bassoonian in #3862
    • Added ability flags to replace arrays and switch statements by @cfmnephrite in #3886
      • cantBeCopied: Cannot be copied by Role Play or Doodle.
      • cantBeSwapped: Cannot be swapped with Skill Swap or Wandering Spirit.
      • cantBeTraced: Cannot be copied by Trace.
      • cantBeSuppressed: Cannot be negated by Gastro Acid or Neutralizing Gas.
      • cantBeOverwritten: Cannot be overwritten by Entrainment, Worry Seed or Simple Beam. Mummy/Lingering Aroma checks for cantBeSuppressed instead.
      • breakable: Can be bypassed by Mold Breaker-like abilities.
      • failsOnImposter: Currently unused.
      • Cleanup by @cfmnephrite in #3889
  • Type info consolidation by @fdeblasio in #4185

    • New struct called TypeInfo that stores:
      • Name
      • Generic move name
      • Icon Palette index number
      • Type Z-Move
      • Type Max Move
      • Commented out data to assist users that desire to use it in their own hacks and as a reference for them to add items of new types.
        • Type-enhancing item (eg. Charcoal)
        • Type-resist berry
        • Type Gems
        • Z-Crystal
        • Tera Shard
        • Arceus form
    • Cleanup by @AsparagusEduardo in #4276

🧬 General 🧬

Added

  • Added optional high-quality RNG by @tertu-m in #3780
    • Can be toggled with HQ_RANDOM.
    • Cleanup by
  • Added defines to RHH's rom header
    • MOVES_COUNT and NUM_SPECIES by @Ninjdai1 in #3831
      • Cleanup by @Ninjdai1 in #3992
    • ITEMS_COUNT and ITEM_NAME_LENGTH by @Ninjdai1 in #3988
  • IWRAM and EWRAM variables can now be assigned at boot by using EWRAM_INIT and IWRAM_INIT by @aronson in #3892
    • For example:
      EWRAM_INIT u32 gFoo = 1337;
      IWRAM_INIT u32 gFastFoo = 31337;
    • Cleanup by @aronson in #3903
  • Level Caps by @AlexOn1ine, @SBird1337 and PokemonCrazy in #3632
    • Types of caps (set in B_EXP_CAP_TYPE):
      • None (EXP_CAP_NONE): Regular behavior, no level caps are applied.
      • Hard (EXP_CAP_HARD): Pokémon with a level equal or above cap cap cannot gain any experience.
      • Soft (EXP_CAP_SOFT): Pokémon with a level equal or above cap will gain reduced experience.
    • Cap level can be set using either:
      • LEVEL_CAP_FLAG_LIST: Level cap is chosen according to the first unset flag in sLevelCapFlagMap.
      • LEVEL_CAP_VARIABLE: Uses a defined variable to dynamically change level cap.
    • Additional options include:
      • B_RARE_CANDY_CAP: If set to true, Rare Candies can't be used to go over the level cap.
      • B_LEVEL_CAP_EXP_UP: If set to true, mons under level cap will receive more experience.
    • Cleanup by @AsparagusEduardo in #4275
  • Added new metaprogram macros by @cfmnephrite in #3968
    • Allows to set up default data without explicitily defining it.
      • Eg. setting Poké Balls as the default ball for all trainer classes.
  • Elite Four/Champion transitions can now easily be applied to any trainer in their data by @fdeblasio in #4000
    • Based off @ShinyDragonHunter's BetterMugshots branch.
    • To use, use these in src/data/trainers.h:
      • UsemugshotEnabled to enable it for the specific trainer.
      • Use mugshotColor to choose the color of the background for the transition between the following:
        • MUGSHOT_COLOR_PURPLE
        • MUGSHOT_COLOR_GREEN
        • MUGSHOT_COLOR_PINK
        • MUGSHOT_COLOR_BLUE
        • MUGSHOT_COLOR_YELLOW
    • Cleanup using metaprogram by @fdeblasio in #4140
  • Added OW_DOUBLE_APPROACH_WITH_ONE_MON config to allow being spotted by two trainers with one mon in party for a 2v1 battle by @Bassoonian in #4007
  • Added configs to enable metric system units by @pkmnsnfrn in #4183
    • Toggled by UNITS in include/config.h.
    • Cleanup by @pkmnsnfrn in #4193
  • Implemented custom GiveMon scripting command by @LOuroboros, with help from @ghoulslash and @mrgriffin in #3924
    • Based off @ghoulslash's custom_givemon branch.
    • In addition to Species, Level and Held Item, users can now specify:
      • Poké Ball
      • Nature
      • Ability number
        • You can pass NUM_ABILITY_PERSONALITY to generate the ability based on personality by @LOuroboros in #4192
      • Gender
      • EVs
      • IVs
      • Moves
      • Shininess
      • Gigantamax Factor
      • Tera Type
  • Save-compatible SaveBlock3, with 1624 bytes by @mrgriffin in #4112
    • IMPORTANT: This is incompatible with the "Extra save space with two lines of code" tutorial, which allocates that additional space to SaveBlock1, SaveBlock2, and PokemonStorage instead. To preserve save compatibility, change SAVE_BLOCK_3_CHUNK_SIZE to 0 and keep SECTOR_DATA_SIZE as 4084.
  • Trainer Control
    • Trainer data encapsulation by @AsparagusEduardo in #4216
    • Added options for TrainerMon:
      • By @mrgriffin in #3438
        • Dynamax Level (dynamaxLevel)
        • Gigantamax Factor (gigantamaxFactor)
      • By @Nopinou in #4169
        • AI flags to signal when to Dynamax (shouldDynamax)
        • AI flags to signal when to Terastalize (shouldTerastal)
    • Sets neutral nature and ability to 0 as default by @AlexOn1ine in #4172
  • Added randompercentage and randomelement script commands by @mrgriffin in #4189
    • Allows to do the following:
      @ VAR_RESULT is one of Treecko, Torchic, or Mudkip
      randomelement SPECIES_TREECKO, SPECIES_TORCHIC, SPECIES_MUDKIP
      @ Gives a random one of Treecko, Torchic, or Mudkip.
      givemon VAR_RESULT, 5
      
      @ VAR_RESULT is TRUE 25% of the time, and FALSE 75% of the time.
      randompercentage 25
      @ Gives a Wobbuffet that is shiny 25% of the time.
      givemon SPECIES_WOBBUFFET, 20, isShiny=VAR_RESULT
      

Changed

  • Simplified creation of Object Events by adding overworld_ascending_frames for sequential overworld_ascendings by @mrgriffin in #3625
  • Comparison functions now follow -1, 1, 0 convention by @DizzyEggg in #3777
  • Centralized Trainer sprites by @fdeblasio in #3597
  • Standarized usage of array shuffling to use Shuffle function by @tertu-m in #3801
  • Turned nature names into compound strings by @Bassoonian in #3871
  • TrainerMoney struct is renamed to TrainerClass and now includes Trainer Class name by @fdeblasio in #3875
  • Improve error message with unsupported cpp by @DizzyEggg in #4272

Fixed

  • Fixed potential compiler errors by @DizzyEggg in #4252
  • Fixed ScriptGiveMonParameterized not recognizing the state of P_FLAG_FORCE_SHINY and P_FLAG_FORCE_NO_SHINY by @LOuroboros in #4256
  • Fixed a graphical issue when catching a form of a Pokémon for the first time by @AsparagusEduardo in #4279
  • Fixed ScriptGiveMonParameterized randomizing nature even when being set by @LOuroboros in #4271

✨ Feature Branches ✨

Incorporated @SBird1337's Dynamic Multichoices by @SBird1337 in #3826

  • This allows to set up custom multichoices much easier!
  • Allows you to control what options appear based custom conditions (such as them being based on what items you have currently, or even completely at random!).
  • Event callbacks can be added as well, to fully customize what happens with your multichoices.
    • Included there's DYN_MULTICHOICE_CB_SHOW_ITEM, which shows icons of the items defined by your script.
  • Compatible with Poryscript.
  • For more information and how to use it, please visit the Pokécommunity thread.

Incorporated @ghoulslash's Saveblock Cleansing branch by @Bassoonian in #4113

  • Differences from the the standalone branch:
    • Moved configs to dedicated file (include/config/save.h).
      • Fixed comments to the proper amount of space saved.
    • Added FREE_MYSTERY_GIFT, saving 876 bytes in SaveBlock1.
    • Added new FREE_EXTRA_SEEN_FLAGS_SAVEBLOCK2 to Pokedex struct to save an extra 108 in SaveBlock2 by @AsparagusEduardo in #4213
    • Renamed FREE_EXTRA_SEEN_FLAGS to FREE_EXTRA_SEEN_FLAGS_SAVEBLOCK1 by @AsparagusEduardo in #4213
    • Converted #ifndef configs to the config format the rest of expansion uses
    • Cleaned up the code and fixed to work on modern.

TheXaman's Debug Menu:

Added

  • "Give Pokémon Complex" option can now set EVs by @LOuroboros in #3566
    • Fix by @gabrielcowley in #3930
  • Added "Clear bag" option by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/
  • Added new party debug options by @LOuroboros, with help from @ghoulslash and @mrgriffin in #3924
    • "Check IV": Checks the selected Pokémon's IVs.
    • "Check EV": Checks the selected Pokémon's EVs.
    • "Clear Party": Deletes all Pokémon from the Player's party.
    • Cleanup by @AsparagusEduardo in #4275
  • Upgraded "Poison Party" to "Inflict Status1" by @LOuroboros in #4235
    • Now it can also inflict: Paralysis, Sleep, Burn, Freeze and Frostbite.
    • Can be applied to a single member or the whole party.
    • Built using SBird's Multichoice.

Changed

  • Cleaned up text and adjusted size to support longer text by @fdeblasio in #3919
  • Reorganization and better naming by @LOuroboros in #3926
  • Removed duplicated "Give all TMs" option by @AsparagusEduardo in #4025

Fixed

  • Fixed sound effect clipping when giving an item via debug menu by using a shorter sound by @AsparagusEduardo in #4025

🐉 Pokémon 🐉

Added

  • Added Indigo Disk Pokémon data:
    • Doesn't break saves since it uses the reserved IDs used in 1.7.0
    • Species data by @kittenchilly in #3878
      • Cleanup by @kittenchilly in #3974
    • Sprites from PokéCommunity's 64x64 DS-Style thread by @AlexOn1ine in #4117
      • Front/Back sprites for: Gouging Fire, Raging Bolt, Iron Boulder, Iron Crown, Archaludon, Hydrapple.
      • Icon for: Hydrapple.
    • Cries by @AsparagusEduardo in #4164
  • Added P_FOOTPRINTS config to disable Pokémon footprints, saving around 35KB of ROM space by @Bassoonian in #3902
    • Cleanup by
      • @AsparagusEduardo in #3925
      • @AsparagusEduardo in #4251
  • Added missing P_UPDATED_EVS config that allows setting the EV yield changes across generations by @Bassoonian in #3993
  • Added missing P_UPDATED_EXP_YIELDS config that allows setting the Experience yield changes across generations by @Bassoonian in #3995
  • Added evolution methods that require custom trackers (MON_DATA_EVOLUTION_TRACKER) by @Bassoonian in #4087
    • EVO_LEVEL_MOVE_TWENTY_TIMES:
      • Stantler can now evolve into Wyrdeer by using Psyshield Bash 20 times.
      • Primeape can now evolve into Annihilape by using Rage Fist 20 times.
    • EVO_LEVEL_RECOIL_DAMAGE_MALE/EVO_LEVEL_RECOIL_DAMAGE_FEMALE
      • White-Striped Basculin can now evolve into Basculegion when leveling up after receiving 294HP of recoil damage and being the corresponding gender.
  • Added missing Paldean Wooper icon by @kittenchilly in #4260
  • Added missing data for placeholder Pokémon by @AsparagusEduardo in #4281
    • Internal Mothim forms used for accurate breeding.
    • Internal Scatterbug/Spewpa forms that can be used to specify Vivillon form in previous stages.
    • Totem Pokémon
    • Partner Pikachu/Eevee

Changed

  • Made all species IDs absolute instead of relative, to avoid confusion when adding new species by @AsparagusEduardo in #4281
  • Moved shared Pokédex text descriptions to their own file by @AsparagusEduardo in #4281
  • Renamed species_info/gen_X.h to species_info/gen_X_families.h
  • Added missing entries for Hidden Abilities that default to ABILITY_NONE.
  • Updated Gen 9 mon sprites from PokéCommunity's 64x64 DS-Style thread by @AlexOn1ine in #3969
    • Brute Bonnet
    • Chi-Yu
    • Flutter Mane
    • Iron Bundle
    • Sandy Shocks
    • Scream Tail
    • Skeledirge
    • Slither Wing
  • Added MON_TYPES and MON_EGG_GROUPS metaprogram macros by @Bassoonian in #4154
    • They're used to define a single type/egg group without needing to define it twice.
      -.types = { TYPE_WATER, TYPE_WATER },
      +.types = MON_TYPES(TYPE_WATER),
      ...
      -.eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 },
      +.eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_3),
      Still supports double types:
      -.types = { TYPE_GROUND, TYPE_ROCK },
      +.types = MON_TYPES(TYPE_GROUND, TYPE_ROCK),
      ...
      -.eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD },
      +.eggGroups = MON_EGG_GROUPS(EGG_GROUP_MONSTER, EGG_GROUP_FIELD),
  • To avoid confusion, reverted gSpeciesInfo "INFO" macros by @AsparagusEduardo in #4230

⚔️ Battle General ⚔️

Added

  • Implemented optional Gen1 type immunity logic. by @GraionDilach in #3627

  • Added Calyrex's blue Dynamax aura by @AsparagusEduardo in #4018

  • Expanded VAR_TERRAIN functionality

    • Added B_VAR_STARTING_STATUS_TIMER to allow VAR_TERRAIN (now called B_VAR_STARTING_STATUS) to last only a certain amount of turns instead of permanently by @LOuroboros in #4132
    • Further expanded by @ghoulslash in #4176
      • Can be used to set up these as well:
        • Trick Room
        • Magic Room
        • Wonder Room
        • Tailwind (for player or opponent sides independenly)
    • Cleanup by @AsparagusEduardo in #4237
  • AI score debug menu can now cycle through battlers by pressing L/R by @ghoulslash in #4134

Changed

  • Simplified Battle Partners code (eg. Steven) by @AlexOn1ine in #3592
    • Based off @ShinyDragonHunter's CustomMultiBattles branch.
    • Removed specialized code for Steven partner cases.
    • Partners are now stored in their own array.
    • Fixed infinite loop by @GraionDilach in #3808
  • B_VAR_TERRAIN_TIMERRenamed VAR_TERRAIN to B_VAR_TERRAIN and added a var-based field terrain timer by @LOuroboros in #4132

Fixed

  • Fixed AI calculations potentially stomping data when emiting data by @DizzyEggg in #3784
  • Fixed Battle AI debug screen showing shiny sprites by @fdeblasio in #3922
  • Fixed Gigantamax Factor not changing form by @AsparagusEduardo in #4108
  • Fixed Quick Draw having increased chances of activation in double battles by @ghoulslash in #4266

🤹 Moves 🤹

Added

  • Added missing move effects:
    • Ally Switch by @DizzyEggg in #3533
      • Cleanup by @DizzyEggg in #3835
    • Doodle by @kittenchilly in #3609
      • Cleanup by @AlexOn1ine in #3800
    • Fillet Away by @kittenchilly in #3616
    • Shed Tail by @AlexOn1ine in #4016
    • Last Respects by @AsparagusEduardo in #4151
    • Tidy Up by @AlexOn1ine in #4136
  • Added Indigo Disk Moves
    • Data by @Bassoonian in #3704
    • Moves with existing effects by @Bassoonian in #3704
      • Thunderclap
      • Mighty Cleave
      • Tachyon Cutter
      • Hard Press
      • Temper Flare
        • Animation by @ZnogyroP in #4145
      • Supercell Slam
      • Malignant Chain
    • New move effects
      • By @AlexOn1ine in #3853
        • Burning Bulwark (uses Protect's animation as placeholder)
        • Alluring Voice (and animation)
        • Fickle Beam
        • Electro Shot
          • Animation by @AlexOn1ine in #4148
      • Psychic Noise by @AlexOn1ine in #4005
        • Animation by @ZnogyroP in #4145
        • Cleanup by @AlexOn1ine in #4021
      • Upper Hand (and animation) by @ZnogyroP in #4085
      • Dragon Cheer by @AlexOn1ine in #4122
        • Cleanup by @AlexOn1ine, based on comments by @Skeli789 and @mrgriffin in #4136
  • Added move animations for existing moves:
    • By @ZnogyroP, with adjustments from @AlexOn1ine and @ghoulslash in #3989
      • Raging Bull
      • Gigaton Hammer
      • Ice Spinner
      • Aqua Cutter
    • Jet Punch by @PCG06 in #4067
    • By @ZnogyroP in #4145
      • Last Respects
      • Lumina Crash
      • Kowtow Cleave
      • Torch Song
      • Aqua Step
      • Hydro Steam
      • Tidy Up
      • Pounce
      • Trailblaze
      • Chilling Water
      • Rage Fist

Changed

  • Updated move data to Gen 9 with configs by @Bassoonian in #3704
    • Added sketchBanned move flag, given to:
      • Sketch, Dark Void, Hyperspace Fury, Revival Blessing, Torque moves.
    • Luster Purge: 70 Power -> 95 Power
    • Mist Ball: 70 Power -> 95 Power
    • Aeroblast: Added Wind Move flag.
  • Ivy Cudgel's type now changes based on Ogerpon's form rather than held item by @kittenchilly in #3865
  • Renamed healBlockBanned flag to healingMove by @AsparagusEduardo in #3981
  • Removed some hardcoded move IDs
    • By @AsparagusEduardo in #3982
      • MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_FRUSTRATION, MOVE_AURA_WHEEL, MOVE_PRESENT, MOVE_BLIZZARD.
    • By @ZnogyroP in #4085
      • MOVE_SUCKER_PUNCH.
  • Removed now redundant EFFECT_HURRICANE in favor of EFFECT_THUNDER by @AsparagusEduardo in #3982
  • Renamed constants/z_move_effects.h to constants/battle_z_move_effects.h by @AsparagusEduardo in #3982
  • Updated Draco Meteor's animation to use @Skeli789's from CFRU, by @AlexOn1ine in #3989
  • Improved Double Shock's animation by @AlexOn1ine in #3989
  • Set EFFECT_PLACEHOLDER as the default move effect by @AsparagusEduardo in #4079
  • Renamed EFFECT_FAKE_OUT to EFFECT_FIRST_TURN_ONLY due to the flinch effect separation by @AlexOn1ine in #4081
  • Renamed EFFECT_WRING_OUT to EFFECT_VARY_POWER_BASED_ON_HP and now it uses argument to set its base power by @LOuroboros in #4180

Fixed

  • Fixed GetBattleAnimMoveTargets function that caused multiple animation issues, such as Overheat's animation by @ghoulslash in #4139
  • Fixed hardcoded battle strings by @ZnogyroP in #4147
    • Hospitality had Sinistcha's name hardcoded.
    • Battler prefixes (eg. "The opposing") were hardcoded in some places.
  • Fixed Supreme Overlord's incorrect effect by @AsparagusEduardo in #4151
  • Fixed Hard Press' base power by @LOuroboros in #4180
  • Fixed Teeter Dance not being copyable by Dancer in singles by @AlexOn1ine in #4129
    • Known issue: In doubles, it copies the move, but only confuses a single Pokémon.

🎭 Abilities 🎭

Added

  • Added Mind's Eye by @AlexOn1ine in #3782
  • Added Hospitality by @AlexOn1ine in #3818
    • Fixed Dynamax interaction by @AlexOn1ine in #3821
  • Added Embody Aspect (all 4 versions) by @AlexOn1ine in #3821
  • Added Supersweet Syrup by @ghoulslash in #4115
    • Cleanup by
  • Indigo Disk Abilities
    • Data by @Bassoonian in #3838

Changed

  • Updated ability banlists to Indigo Disk data by @kittenchilly in #3609

Fixed

  • Fixed Tangling Hair preventing Rocky Helmet from triggering interaction by @AlexOn1ine, with help from @ZnogyroP in #4219

🧶 Items 🧶

Added

  • Added Meteorite item form change functionality for Deoxys by @kittenchilly in #3770
  • Added item price configs by @Bassoonian in #3834
    • I_PRICE and I_BERRY_PRICE.
    • Fixed missing data by @kittenchilly in #3836
  • Added Pokemon Box Link functionality by @kittenchilly in #3837
  • Added Indigo Disk item data by @kittenchilly in #3854
    • Metal Alloy
    • Stellar Tera Shard
  • Added Legends: Arceus item data by @Bassoonian in #3825
    • Jubilife Muffin - Local specialty (Full Heal)
    • Remedy - Medicine (Potion)
    • Fine Remedy - Medicine (Super Potion)
    • Super Remedy - Medicine (Hyper Potion)
    • Aux items
    • Choice Dumpling
    • Swap Snack
    • Twice Spiced Radish
    • Pokéshi Doll
  • Berry Expansion by @Bassoonian in #3618
    • Berry Mutations (from XY): Planting a Berry tree next to another has a BERRY_MUTATION_CHANCE (25% by default) chance of causing a mutation (as dictated by sBerryMutations). Mutations mean that besides the usual output, the Berry plant will have a single Berry of the mutation (e.g. planting a Iapapa Berry next to a Mago Berry will cause it to have a single Pomeg Berry on top of its usual output).
      • Enabled via OW_BERRY_MUTATIONS config.
    • Easier Berry Debugging: Add berry manipulation functions to the debug menu to allow for forced growth and more.
    • Mulch (from Gen IV and XY): Using it on soil affects the growth, watering and production values of the plants.
      • Enabled via OW_BERRY_MULCH_USAGE config.
    • Gradient watering (from Gen IV and XY) (OW_BERRY_MOISTURE and OW_BERRY_ALWAYS_WATERABLE): rather than keeping track of if each stage has been watered like Gen III, the humidity of the soil is kept track of separately.
      • Enabled via OW_BERRY_MOISTURE config.
      • Switch between Gen4/6 via OW_BERRY_ALWAYS_WATERABLE config.
      • Rate of drying set by OW_BERRY_DRAIN_RATE config.
    • Weeding from XY: Berries may require unweeding for additional produce.
      • Enabled via OW_BERRY_WEEDS config.
    • Pests (from XY): Bug-type Pokémon may appear to feast on your plants.
      • Enabled via OW_BERRY_PESTS config.
    • Customisable stages: XY has six stages rather than four, so with this easy toggle you can choose the amount of stages without influencing the growth time.
      • Enabled via OW_BERRY_SIX_STAGES config.
    • Growth configs: Pick a generation whose Berry growth rates to use
      • Changed via OW_BERRY_GROWTH_RATE config.
    • Yield configs: Pick a generation whose Berry yields to use
      • Changed via OW_BERRY_YIELD_RATE config.
    • Cleanup by
  • Added missing pre-Gen7 Power Item config (giving 4 EVs instead of 8) by @Bassoonian in #3961
  • Added LGPE+ Premier Ball Bonus config by @AsparagusEduardo in #4191
    • Originally based off pret's tutorial, but with the following changes:
      • If there's no space for the full amount of Premier Balls that would've been given, give the partial amount.
      • Shows the amount of Premier Balls given.

Changed

  • Raised the limit of max items per stack to 999 by @LOuroboros in #3923
  • Unified item data
    • Move descriptions are now defined in src/data/items.h instead of src/data/text/item_descriptions.h by @LOuroboros in #3432
      • Cleanup by
    • Moved Item Effects (gItemEffectTable) to gItemsInfo by @AsparagusEduardo in #3991
    • Renamed gItems to gItemsInfo by @Bassoonian in #4068
  • Item Balls now can be defined in the map's JSON (or using PoryMap) via the common script Common_EventScript_FindItem instead of needing to define a new script for it by @pkmnsnfrn in #3942
      "trainer_type": "TRAINER_TYPE_NONE",
    - "trainer_sight_or_berry_tree_id": "0",
    - "script": "AbandonedShip_CaptainsOffice_EventScript_ItemStorageKey",
    + "trainer_sight_or_berry_tree_id": "ITEM_STORAGE_KEY",
    + "script": "Common_EventScript_FindItem",
      "flag": "FLAG_ITEM_ABANDONED_SHIP_CAPTAINS_OFFICE_STORAGE_KEY"
    • Item count can also be defined by using the movement_range_x field:
      "trainer_sight_or_berry_tree_id": "ITEM_NUGGET",
      "script": "Common_EventScript_FindItem",
      "flag": "FLAG_ITEM_AQUA_HIDEOUT_B1F_NUGGET"
      + "movement_range_x": 2,
    • Existing scripts have been adapted to use this new format.
  • Added plural item name support with new pluralName field in gItemsInfo by @pkmnsnfrn in #3942
    • When obtaining multiples of an item and the field is not defined, it appends an s at the end instead (eg. "Brendan got 40 Potions!").
    • Python migration script available in migration_scripts/item_ball_refactor.py by @pkmnsnfrn in #3997
    • Deprecated GetBerryCountString by @Bassoonian in #4012
    • Cleanup by
  • Combined CannotUseBagBattleItem and CannotUsePartyBattleItem into CannotUseItemsInBattle by @LOuroboros in #3524

Fixed

  • Fixed some ball multiplier data by @Bassoonian in #3939
    • Fixed B_SPORT_BALL_MODIFIER config being ignored and always applying a 1.5x multiplier.
    • Added missing B_SAFARI_BALL_MODIFIER that makes Safari Balls have a 1x multiplier from Gen7 onwards.
    • Added missing B_LURE_BALL_MODIFIER state that sets Lure Ball's multiplier to 4x from Gen8 onwards.
  • Fixed Quick Claw having increased chances of activation in double battles by @ghoulslash in #4266

🤖 Battle AI 🤖

Added

  • Added AI_CalcMoveScore function to more easily control score increases by @AlexOn1ine in #3984
  • Added AI_FLAG_POWERFUL_STATUS AI flag, replacing AI_FLAG_SCREENER by @AlexOn1ine in #4125
    • It's meant to force the AI to do status instead of fainting the target (eg. setting up Trick Room to support the rest of the team)

Changed

  • AI flags are now saved by battler position instead of per side by @ghoulslash in #3003
    • Cleanup by @AlexOn1ine in #4114

Fixed

  • Improved AI score changes handling by @AlexOn1ine in #4036
    • AI will not further increase Attack / Sp. Atk stat if it knows it faints to target.
    • AI will not use Throat Chop if opposing mon has a better move.
    • AI will select Throat Chop if the sound move is the best damaging move from opposing mon.
    • Cleanup by
  • Fixed AI not setting sets up double flags correctly by @DizzyEggg in #4228
  • Move most damage AI_BadMove checks to AI_CalcDamage by @AlexOn1ine in #4238
    • Fixes AI trying to use Burn Up after losing its fire type.
    • Fixes AI trying to use Electric moves when the target has Volt Absorb.
  • Fixed AI vs AI battles would crash during the throw animation by @DizzyEggg in #4240
  • Fixed AI considering Mold Breaker but not Turboblaze/Teravolt for flinch-related decisions by @AsparagusEduardo in #4244

🧹 Other Cleanup 🧹

  • Removed hardcoded uses of MOVE_STUFF_CHEEKS and MOVE_ME_FIRST by @AsparagusEduardo in #3950
  • Cleaned up CheckMoveLimitations to use less horizontal space by @AsparagusEduardo in #3950
  • Small CanFirstMonBoostHeldItemRarity optimization by @AsparagusEduardo in #4008
  • Tag previously-unused icon pals as such in code. by @GraionDilach in #4072
  • Converted a bunch of #if/#else to regular conditions by @Bassoonian in #4071
  • Clean up contest strings by @Bassoonian in #3876
  • Fixed inconsistent braces style by @AsparagusEduardo in #4023
  • Replaced some AI_GetMoveEffectiveness instances with AI_CanStatus for speeding up calculations by @ghoulslash in #4166
  • Remove some unused data by @DizzyEggg in #4239
  • Use u32 instead of u8/u16 in gflib files by @DizzyEggg in #4250
  • Unify monSpritesGfx bytes/ptr field by @DizzyEggg in #4252
  • gHeap can go in the middle of ram by @DizzyEggg in #4253
  • Corrected initial value of targetSpecies variable in GetEvolutionTargetSpecies by @LOuroboros in #4269
  • Replaces MOVE_FIRST_IMPRESSION argument with a check for Fake Out for 100% flinch effect by @AlexOn1ine in #4274

🧪 Test Runner 🧪

Added

  • Added option to set flags in tests by @fakuzatsu in #3786
  • Added missing Illuminate and Keen Eye Tests by @AlexOn1ine in #3782
  • Added missing Belly Drum tests by @kittenchilly in #3616
  • Added missing Stuff Cheeks by @AsparagusEduardo in #3950
  • Added Teeter Dance + Dancer test for doubles by @AlexOn1ine in #4274

Changed

  • Updated tests to use Gen 9 mon for appropiate abilities by @AlexOn1ine in #3740
  • Tests no longer allow to use SEND_OUT if the chosen mon is fainted by @DizzyEggg in #3752

Fixed

  • Consistent BENCHMARK timing by @mrgriffin in #3866
  • Fixed Teatime test checking for Wonder Room instead of Magic Room by @AsparagusEduardo in #3950
  • Fixed test battle move category assumptions by @AsparagusEduardo in #4051
  • Fixed Tri Attack status ability immunity test by @AsparagusEduardo in #4229
  • Fixed Dauntless Shield test names by @AsparagusEduardo in #4229

📦 Pret merges 📦

  • 2023/12/30 by @Bassoonian in #3869
  • 2024/02/10 by @AsparagusEduardo in #4173
  • 2024/03/07 by @DizzyEggg in #4255

New Contributors

  • @cfmnephrite made their first contribution in #3575
  • @tertu-m made their first contribution in #3780
  • @aronson made their first contribution in #3892
  • @MartyKen made their first contribution in #4049
  • @ZnogyroP made their first contribution in #4085
  • @Nopinou made their first contribution in #4169

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.7.4...expansion/1.8.0