## 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`.
-
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.
- Run the
-
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
.
- Previous behavior can be restored by setting
- 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
andtogglegigantamaxfactor
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
andhypertrain
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.
- It can be seen in the summary screen by turning
- Added
isShadow
field for future-proofing. - Added options for Tera Type, Dynamax Level, Gigantamax Factor and Shadow flag in tests.
- Cleanup by
- HP and Status is now kept when depositing Pokémon in the PC
-
Move Refactors:
- Move data unification by @LOuroboros, with help from @Bassoonian, @cfmnephrite and @AsparagusEduardo in #3999
- Renamed
gBattleMoves
togMovesInfo
. - Moved move names to
gMovesInfo
.- Added
GetMoveName
to get all move names, removing the need forGetMaxMoveName
andGetZMoveName
.
- Added
- Moved move descriptions to
gMovesInfo
. - Moved contest data to
gMovesInfo
.
- Renamed
- 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.
Now becomes:
[MOVE_THUNDER_FANG] = { .effect = EFFECT_FLINCH_STATUS, .secondaryEffectChance = 10, .argument = STATUS1_PARALYSIS, ... },
With customizable independent chances for each effect. Because of this,[MOVE_THUNDER_FANG] = { .effect = EFFECT_HIT, .additionalEffects = ADDITIONAL_EFFECTS( { .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 10, }, { .moveEffect = MOVE_EFFECT_FLINCH, .chance = 10, } ), ... },
secondaryEffectChance
has been removed. - For more info, check the wiki article on How to add a new move.
- Cleanup by:
- Secondary effects such as stat stage modifiers and status via are now set via
- 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 newrecoil
field by @cfmnephrite in #3575 - Removed critical-hit move effects in favor of new
criticalHitStage
by @cfmnephrite in #3779- Added
alwaysCriticalHit
move flag.
- Added
- 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'ssPoints_MoveEffect
are now handled in this struct. - Some move flags were moved to this array instead
- AI's
- 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 theadditionalEffects
field.
- To force Sheer Boost acting for a move without secondary effect, you can add
- Move data unification by @LOuroboros, with help from @Bassoonian, @cfmnephrite and @AsparagusEduardo in #3999
-
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 yourdata/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
- Adds a file for each generation with data for all species.
- 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 incustom.json
for flawless migration.
- Removed previously untutorable moves from Mew's unteachable moves by @fdeblasio in #4142
- Level up learnsets can now be switched by generational config by @MartyKen in #4049
-
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 forcantBeSuppressed
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
- New struct called
- Added optional high-quality RNG by @tertu-m in #3780
- Added defines to RHH's rom header
- IWRAM and EWRAM variables can now be assigned at boot by using
EWRAM_INIT
andIWRAM_INIT
by @aronson in #3892- For example:
EWRAM_INIT u32 gFoo = 1337; IWRAM_INIT u32 gFastFoo = 31337;
- Cleanup by @aronson in #3903
- For example:
- 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.
- None (
- Cap level can be set using either:
LEVEL_CAP_FLAG_LIST
: Level cap is chosen according to the first unset flag insLevelCapFlagMap
.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
- Types of caps (set in
- 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.
- Allows to set up default data without explicitily defining it.
- 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
:- Use
mugshotEnabled
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
- Use
- 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
ininclude/config.h
. - Cleanup by @pkmnsnfrn in #4193
- Toggled by
- 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
- You can pass
- 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
, andPokemonStorage
instead. To preserve save compatibility, changeSAVE_BLOCK_3_CHUNK_SIZE
to 0 and keepSECTOR_DATA_SIZE
as 4084.
- IMPORTANT: This is incompatible with the "Extra save space with two lines of code" tutorial, which allocates that additional space to
- Trainer Control
- Added
randompercentage
andrandomelement
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
- Allows to do the following:
- Simplified creation of Object Events by adding
overworld_ascending_frames
for sequentialoverworld_ascending
s 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 toTrainerClass
and now includes Trainer Class name by @fdeblasio in #3875- Improve error message with unsupported cpp by @DizzyEggg in #4272
- Fixed potential compiler errors by @DizzyEggg in #4252
- Fixed
ScriptGiveMonParameterized
not recognizing the state ofP_FLAG_FORCE_SHINY
andP_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
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.
- Included there's
- 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 inSaveBlock1
.
- Added new
FREE_EXTRA_SEEN_FLAGS_SAVEBLOCK2
to Pokedex struct to save an extra 108 inSaveBlock2
by @AsparagusEduardo in #4213 - Renamed
FREE_EXTRA_SEEN_FLAGS
toFREE_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
.
- Moved configs to dedicated file (
- "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.
- 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 sound effect clipping when giving an item via debug menu by using a shorter sound by @AsparagusEduardo in #4025
- 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 - 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 #4087EVO_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
- 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
tospecies_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
andMON_EGG_GROUPS
metaprogram macros by @Bassoonian in #4154- They're used to define a single type/egg group without needing to define it twice.
Still supports double types:
-.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),
-.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),
- They're used to define a single type/egg group without needing to define it twice.
- To avoid confusion, reverted gSpeciesInfo "INFO" macros by @AsparagusEduardo in #4230
-
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 allowVAR_TERRAIN
(now calledB_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)
- Can be used to set up these as well:
- Cleanup by @AsparagusEduardo in #4237
- Added
-
AI score debug menu can now cycle through battlers by pressing L/R by @ghoulslash in #4134
- 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 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
- Added missing move effects:
- 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
- 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
- By @AlexOn1ine in #3853
- Added move animations for existing moves:
- 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.
- Added
- Ivy Cudgel's type now changes based on Ogerpon's form rather than held item by @kittenchilly in #3865
- Renamed
healBlockBanned
flag tohealingMove
by @AsparagusEduardo in #3981 - Removed some hardcoded move IDs
- Removed now redundant
EFFECT_HURRICANE
in favor ofEFFECT_THUNDER
by @AsparagusEduardo in #3982 - Renamed
constants/z_move_effects.h
toconstants/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
toEFFECT_FIRST_TURN_ONLY
due to the flinch effect separation by @AlexOn1ine in #4081 - Renamed
EFFECT_WRING_OUT
toEFFECT_VARY_POWER_BASED_ON_HP
and now it usesargument
to set its base power by @LOuroboros in #4180
- 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.
- 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
- Indigo Disk Abilities
- Data by @Bassoonian in #3838
- Updated ability banlists to Indigo Disk data by @kittenchilly in #3609
- Fixed Tangling Hair preventing Rocky Helmet from triggering interaction by @AlexOn1ine, with help from @ZnogyroP in #4219
- Added Meteorite item form change functionality for Deoxys by @kittenchilly in #3770
- Added item price configs by @Bassoonian in #3834
I_PRICE
andI_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
- Aux Evasion
- Aux Power
- Aux Guard
- Aux Powerguard
- Sprites based off lichen's sprites from Relic Castle by @MartyKen in #4160
- 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 bysBerryMutations
). 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.
- Enabled via
- 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.
- Enabled via
- Gradient watering (from Gen IV and XY) (
OW_BERRY_MOISTURE
andOW_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.
- Enabled via
- Weeding from XY: Berries may require unweeding for additional produce.
- Enabled via
OW_BERRY_WEEDS
config.
- Enabled via
- Pests (from XY): Bug-type Pokémon may appear to feast on your plants.
- Enabled via
OW_BERRY_PESTS
config.
- Enabled via
- 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.
- Enabled via
- Growth configs: Pick a generation whose Berry growth rates to use
- Changed via
OW_BERRY_GROWTH_RATE
config.
- Changed via
- Yield configs: Pick a generation whose Berry yields to use
- Changed via
OW_BERRY_YIELD_RATE
config.
- Changed via
- Cleanup by
- Berry Mutations (from XY): Planting a Berry tree next to another has a
- 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.
- Originally based off pret's tutorial, but with the following changes:
- Raised the limit of max items per stack to 999 by @LOuroboros in #3923
- Unified item data
- 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.
- Item count can also be defined by using the
- Added plural item name support with new
pluralName
field ingItemsInfo
by @pkmnsnfrn in #3942 - Combined
CannotUseBagBattleItem
andCannotUsePartyBattleItem
intoCannotUseItemsInBattle
by @LOuroboros in #3524
- 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
- Fixed Quick Claw having increased chances of activation in double battles by @ghoulslash in #4266
- Added
AI_CalcMoveScore
function to more easily control score increases by @AlexOn1ine in #3984 - Added
AI_FLAG_POWERFUL_STATUS
AI flag, replacingAI_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)
- AI flags are now saved by battler position instead of per side by @ghoulslash in #3003
- Cleanup by @AlexOn1ine in #4114
- 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 toAI_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
- Removed hardcoded uses of
MOVE_STUFF_CHEEKS
andMOVE_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 withAI_CanStatus
for speeding up calculations by @ghoulslash in #4166 - Remove some unused data by @DizzyEggg in #4239
- Use
u32
instead ofu8
/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 inGetEvolutionTargetSpecies
by @LOuroboros in #4269 - Replaces
MOVE_FIRST_IMPRESSION
argument with a check for Fake Out for 100% flinch effect by @AlexOn1ine in #4274
- 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
- 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
- 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
- 2023/12/30 by @Bassoonian in #3869
- 2024/02/10 by @AsparagusEduardo in #4173
- 2024/03/07 by @DizzyEggg in #4255
- @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