## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.9.0`.
🌋 REFACTORS 🌋
📜 = Has a migration script.
- agbcc has been deprecated
- Added migration script README
- Removed Gen 9 settings for out-of-battle abilities
- 📜Customizable Frontier Pokémon sets
- Replaced VARARG_8 uses with recursive macros
- 📜Competitive-formatted parties
- Terastallization
- Combined weather set commands
- Full official GF names for species/items/moves/types
- Automatically display TM/HM icons based on their move
- Set
GiveBoxMonIntialMoveset_Fast
as default - Changed Battle Frontier validation to species flag
- Replaced HP checks with
IsBattlerAlive
- Removed redundant
MOVE_EFFECT_SP_ATK_TWO_DOWN
- 📜Removed
gItemIconTable
- 📜Egg Move Refactor
- Adjusted Ate-Ability code a bit to make it more readable
- Type Info refactors
- merrp/aarant's Followers
- Refactored residual damage to be more readable and less prone to bugs
🧬 General 🧬
Added
-
Added migration script README by @Bassoonian in #4719
-
Customizable Frontier Pokémon sets by @ghoulslash in #4313
FacilityMon
has been removed in favor of using regularTrainerMon
.- Removed
BATTLE_FRONTIER_ITEM_x
item constants in favor of using regularITEM_x
constants. - New
CreateFacilityMon
to handle duplicated code.- Added
FLAG_FRONTIER_MON_FACTORY
that replaces Return for Frustration and sets frienship to 0. Used in the Battle Factory.
- Added
- Converted data in
src/data/battle_frontier/battle_frontier_mons.h
andsrc/data/battle_frontier/battle_tent.h
, for example:.itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
->.heldItem = ITEM_CHOICE_BAND,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
->.ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
- Migration script available in
migration_scripts/egg_move_refactor.py
by @AlexOn1ine in #5040
- Added documentation to
STATIC_ASSERTS
used by theBoxPokemon
after 1.8.0 by @pkmnsnfrn in #4294 -
Competitive-formatted parties by @mrgriffin in #3545
- Can be disabled by setting
COMPETITIVE_PARTY_SYNTAX
toFALSE
ininclude/config/general.h
. If migrating from 1.8, remove the first and last lines fromsrc/data/trainers.h
(const struct Trainer gTrainers[] = {
and};
respectively). - Introduces
trainerproc
, a tool which converts Competitive-formatted parties into Trainer Control-formatted parties. - If you made custom changes to the following files and want to use this new format, Do not accept the incoming changes for them. Instead, use the migration script present in
migration_scripts/convert_parties.py
:src/data/trainers.h
src/data/trainer_parties.h
src/data/battle_partners.h
src/data/partner_parties.h
- Before:
After:
static const struct TrainerMon sTestParty1[] = { { .species = SPECIES_WOBBUFFET, .ball = ITEM_MASTER_BALL, .ability = ABILITY_TELEPATHY, .friendship = 42, .gender = TRAINER_MON_FEMALE, .heldItem = ITEM_ASSAULT_VEST, .isShiny = TRUE, .iv = TRAINER_PARTY_IVS(25,26,27,28,29,30), .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 4, 0), .lvl = 67, .moves = {MOVE_AIR_SLASH, MOVE_BARRIER, MOVE_SOLAR_BEAM, MOVE_EXPLOSION}, .nature = NATURE_HASTY, .nickname = COMPOUND_STRING("Bubbles") }, { .species = SPECIES_WOBBUFFET, .ability = ABILITY_SHADOW_TAG, .lvl = 5, }, }; static const struct Trainer sTestTrainer1 = { .trainerName = _("Test1"), .party = TRAINER_PARTY(sTestParty1), };
=== 0 === Name: Test1 Bubbles (Wobbuffet) (F) @ Assault Vest Hasty Nature Level: 67 Ability: Telepathy IVs: 25 HP / 26 Atk / 27 Def / 29 SpA / 30 SpD / 28 Spe EVs: 252 HP / 4 SpA / 252 Spe Happiness: 42 Shiny: Yes Ball: Master Ball - Air Slash - Barrier - Solar Beam - Explosion Wobbuffet Level: 5 Ability: Shadow Tag
- You can add comments by using
//
or/* ... */
, like in C. - You're allowed to write
SPECIES_PIKACHU
instead ofPikachu
(etc etc) if you want. - In addition to the migration script described above, you can add the following to at the top of the
src/data/trainers.party
file to change how the tool interprets the file:#pragma trainerproc ivs explicit
— requires anIVs:
line for every Pokémon instead of defaulting to 31s.#pragma trainerproc ivs <IVs>
— changes the default IVs.#pragma trainerproc level explicit
— requires aLevel:
line for every Pokémon instead of defaulting to 100.#pragma trainerproc level <level>
— changes the default level.- During the merge you could choose to keep your original
src/data/trainers.h
andsrc/data/trainer_parties.h
and then run the conversion script to update thesrc/data/trainers.party
,make
, then check in all three files. Alternatively don't run the conversion script and turn offCOMPETITIVE_PARTY_SYNTAX
ininclude/config.h
.
- Added synonyms for competitive/CFRU species defines, eg:
SPECIES_PONYTA_GALAR
forSPECIES_PONYTA_GALARIAN
SPECIES_MAUSHOLD_FOUR
forSPECIES_MAUSHOLD_FAMILY_OF_FOUR
SPECIES_CHARIZARD_GMAX
forSPECIES_CHARIZARD_GIGANTAMAX
- And so.
- TODO:
- Support
Hidden Power:
to set IVs appropriate for a particular Hidden Power type. - Consider case-insensitivity in the parser.
- Support
- Cleanup and bugfixes:
- By @mrgriffin in #4362
- By @AsparagusEduardo in #4366
- By @Bassoonian in #4374
- By @LOuroboros in #4397
- By @Bassoonian in #4421
- By @AlexOn1ine in #4431
- By @mrgriffin in #4442
- By @fdeblasio in #4830
- By @mrgriffin in #4969
- By @hedara90 in #4734
- By @innocenthedgehog in #4988
- By @mrgriffin in #4990
- By @mrgriffin in #5035
- Can be disabled by setting
- Added
OW_PC_MOVE_ORDER
config to use future generation's menu order for the Pokémon Storage System by @pkmnsnfrn and @AsparagusEduardo in #4348GEN_1/2/3
: Widthraw -> Deposit -> Move.GEN_4/5/6_XY
: Deposit -> Widthraw -> Move.GEN_6_ORAS/7/8/9
: Move -> Deposit -> Widthraw.
- Added
OW_HIDE_REPEAT_MAP_POPUP
config that doesn't show the Map Popup when transitioning bewteen maps within the same Map Section by Anon822 from Pokécommunity and @pkmnsnfrn in #4370 - Multiple Fishing Enhancements by @ghoulslash and @pkmnsnfrn in #4343
- Added
I_FISHING_CHAIN
config to enable XY's chain fishing. - Added
I_FISHING_PROXIMITY
config to enable XY's proximity mechanic, where fishing away from NPCs increases the chance of a Pokémon being hooked. - Added
I_FISHING_MINIGAME
config to change between minigame versions.GEN_1/2
will not require a minigame, and instead automatically hook the Pokémon.- All other settings use RSE's minigame. FRLG/Gen4+'s minigame will be implemented in the future.
- Cleanup and bugfixes:
- By @AsparagusEduardo in #4412
- By @cawtds in #4906
- By @AlexOn1ine in #4718
- By @cawtds and @pkmnsnfrn in #5031
- Added
-
Full official GF names for species/items/moves/types by @mrgriffin, @ZnogyroP and @cfmnephrite in #4241
- 8-character type names.
- 12-character Pokémon names (and nicknames)
- 16-character Move names.
- 20-character item names.
- This is done by introducing 3 new fonts that automatically change the size of the name in vanilla interfaces:
FONT_NARROWER
,FONT_SMALL_NARROWER
andFONT_SHORT_NARROW
.
- If the hack has changed fonts—e.g. to the FrLg ones—then they probably want to create their own versions of the new fonts.
- If the hack has introduced more UIs that render names they probably want to use
GetFontIdToFit
—see this PR's changes for examples of that. - If the hack has introduced names in list menus they can use
.fontIdMayNarrow = TRUE
on the list template. - Types, species, moves, and items all have individual commits which enable support in the UI and turn on longer names by default. These can be reverted by downstream projects if they really want to.
- Cleanup
- Added
OW_PC_RELEASE_ITEM
config that gives back items from released Pokémon by @Bassoonian in #4577- If the bag is full, the item is lost, however.
- Cleanup by @Bassoonian in #4844
- Added
P_EGG_CYCLE_LENGTH
config that updates the amount of steps required to complete an egg cycle by @Bassoonian in #4596 - Added
trainerbattle_two_trainers
macro to trigger a 1 player vs 2 NPC battle by @aarant and @AlexOn1ine in #4741 - Added
createmon
Script Command and macro by @ghoulslash in #4688- This allows to set up wild enemy parties with the same versatility as
givemon
(IVs, EVs, abilities, moves, etc).
- This allows to set up wild enemy parties with the same versatility as
- Added
setwilddoubleflag
macro to setsIsScriptedWildDouble
and allow 2 player vs 1 enemy wild battles by @ghoulslash in #4688 - Added support for multiple Roaming Pokémon at once by @Bassoonian in #4762
- By default,
ROAMER_COUNT
is set to 1 to keep save compatibility. Increase it to add more roamers (though this breaks saves).
- By default,
- Added
OW_IGNORE_EGGS_ON_HEAL
, which makes it such that eggs are not counted in the Pokémon Center's heal animation by @ghoulslash @pkmnsnfrn in #4888 - Added support for fake RTC by Anon822 from PokéCommunity and @pkmnsnfrn in #4910
- When
OW_USE_FAKE_RTC
isTRUE
, time runs at a different rate from real time, like in Legends: Arceus or Scarlet and Violet. - Use
OW_ALTERED_TIME_RATIO
to set the amount of "time" passing every 60 frames (1 real time second):GEN_8_PLA
: 1 minute.GEN_9
: 20 seconds.- All other settings make the game synced with real life.
- You may also set a flag to pause the RTC (
OW_FLAG_PAUSE_TIME
), and the script commandspausefakertc
,resumefakertc
andtogglefakertc
by @pkmnsnfrn in #4954 - Cleanup by @Bassoonian in #4965
- When
- Added B2W2-style map pop-Ups by @ravepossum, @nielsmittertreiner and @pkmnsnfrn in #4396
- Change
OW_POPUP_GENERATION
toGEN_5
to switch existing map popups. - You may choose between Black or White themes via
OW_POPUP_BW_COLOR
(OW_POPUP_BW_COLOR_BLACK
orOW_POPUP_BW_COLOR_WHITE
). - You may choose to display the current time in the pop-up using
OW_POPUP_BW_TIME_MODE
.OW_POPUP_BW_TIME_NONE
: Disables time in pop-up.OW_POPUP_BW_TIME_12_HR
: Shows 12-hour time in pop-upOW_POPUP_BW_TIME_24_HR
: Shows 24-hour time in pop-up
- You may enable alpha blending via
OW_POPUP_BW_ALPHA_BLEND
(mainly designed around the Black theme). - Cleanup by @AsparagusEduardo in #4752
- Change
- Allowed flags to be used in trigger scripts instead of vars by @DizzyEggg in #4900
Changed
-
agbcc has been deprecated by @mrgriffin in #4989
- You technically still use
make agbcc
by disabling the error thrown when using it, but it will be removed completely for version 1.10.
- You technically still use
-
Moved general config file to the config folder by @AsparagusEduardo in #4805
-
Set
GiveBoxMonIntialMoveset_Fast
as default by @AlexOn1ine in #4470 -
Changed Battle Frontier validation to species flag by @kittenchilly in #4341
- Added
isFrontierBanned
flag and removedgFrontierBannedSpecies
. - Renamed
isParadoxForm
->isParadox
.
- Added
-
Unified Nature info by @fdeblasio in #4562
-
Type Info refactors by @AsparagusEduardo in #4462
- Added
src/data/types_info.h
file forgTypesInfo
instead ofsrc/battle_main.c
.- Moved
sTypeEffectivenessTable
here file as well (and renamed it togTypeEffectivenessTable
)
- Moved
TYPE_NONE
duplicates graphics fromTYPE_MYSTERY
due to limitations withgraphics_file_rules.mk
.- Damage Categories for
B_PHYSICAL_SPECIAL_SPLIT
's pre-Gen4 setting can now be specified in thisgTypesInfo
'sdamageCategory
field instead of depending on the type's order.
- Added
- Consolidated Lilycove Contest Lady's values into one struct (
sContestLadyValues
) by @fdeblasio in #4951 - Applied the Pokémon Sprite Visualizer name officially by @Bassoonian in #4745
- Don't specify
sDexSearchTypeOptions
array size by @Sneed69 in #4820- Prevents Type search in the dex from breaking when non-conventional types are added.
- Only call RNG once when generating IVs in some cases by @tertu-m in #4876
Fixed
- Fixed potential Wireless Adapter desynchronization by @AtariDreams in #3730
- Fixed
ListItemTemplate
UB in the Pokémon Center by @Bassoonian in #4725 - Fixed
src/data/map_group_count.h
not being ignored in.gitignore
properly by @rayrobdod in #4727 - Fixed double battles not occuring with only one Pokemon by talking to the trainers despite
OW_DOUBLE_APPROACH_WITH_ONE_MON
being setTRUE
by @fdeblasio in #4848 - Fixed unused
B_TRANSITION_SHRED_SPLIT
from softlocking the game by @Lunos, @griffinr and @pkmnsnfrn in #4919
✨ Feature Branches ✨
merrp/aarant's Followers
- Integrated @aarant's followers branch by @AsparagusEduardo in #4022
- This includes Dynamic Overworld Palettes and Expanded Overworld IDs.
- This does not include the
lighting
branch yet, but will be included in a future version. - Updated up to the latest version of the branch (11th of July) by @Bassoonian in #4944
- Cleanup
- By @Bassoonian in #4782
- By @AsparagusEduardo in #4937
Changes from the original branch
- Follower Pokémon can be enabled using the
OW_FOLLOWERS_ENABLED
config. - Pokémon NPCs can be added to a map independently from the Followers config. Keep in mind, this requires
OW_POKEMON_OBJECT_EVENTS
to be enabled in order to add the graphics to the ROM.- Eg: use
OBJ_EVENT_GFX_SPECIES(CHARIZARD)
where the graphic ID would go (OBJ_EVENT_GFX_SPECIES_SHINY()
for shiny version). - May also use
OBJ_EVENT_GFX_SPECIES_SHINY(CHARIZARD)
to make them shiny by @AsparagusEduardo in #5049
- Eg: use
- Moved original configs from
include/constants/event_objects.h
toinclude/config/overworld.h
and renamed them:OW_MON_BOBBING
->OW_FOLLOWERS_BOBBING
LARGE_OW_SUPPORT
->OW_LARGE_OW_SUPPORT
OW_MON_POKEBALLS
->OW_FOLLOWERS_POKEBALLS
- Added follower Pokémon sprites from Gen 4-8
- Credits to @Eemeliri and Gerben BSc
- Moved
OW_GFX_COMPRESS
frominclude/global.h
toinclude/config/overworld.h
. - Added
OW_SUBSTITUTE_PLACEHOLDER
config to hide followers if they don't have a follower sprite instead of using a placeholder Substitute sprite by @Bassoonian in #4765 - Follower graphics are shown in the Pokémon Sprite Visualizer.
- Follower graphics have been moved to the respective species graphics folder instead of all being grouped in
graphics/object_events/pics/pokemon
.- Eg:
graphics/object_events/pics/pokemon/abomasnow.png
was moved tographics/pokemon/abomasnow/follower.png
.
- Eg:
- Follower data has been moved to
gSpeciesInfo
- Their palettes are separate from the battle sprite palettes
- Can be enabled using
OW_FOLLOWERS_SHARE_PALETTE
, but requires manual sprite adjustements. For now, it's recommended to keep thisFALSE
. (They don't use much space anyway)
- Can be enabled using
- Their palettes are separate from the battle sprite palettes
- Updated
GetTypeEffectiveness
used by follower messages to account for new abilities with type immunities. - Cleaned up code style to match pret/expansion's.
- Reverted Regi's sprite to vanilla's.
- Follower PicTables use
overworld_ascending_frames
macro. - Removed unneeded calls to
bufferspeciesname
. - Removed
MON_DATA_NATURE
. - Removed debug functions like
IsAccurateGBA
. - Removed
ScrCmd_callfunc
to usecallnative
s instead
🐉 Pokémon 🐉
Added
- Added
EVO_ITEM_COUNT_999
evolution method (used by Gimmighoul) by @kittenchilly in #4261- Requires level up while carrying 999 of the specified item in the bag, which will be consumed.
- Uses new
EVO_MODE_CANT_STOP
mode, which is a clone ofEVO_MODE_NORMAL
but prevents evolution from being canceled.
- Added
EVO_DEFEAT_THREE_WITH_ITEM
evolution method (used by Bisharp) by @Bassoonian in #4768- Requires level up after defeating 3 Pokémon of the same species holding the specified item.
- Eg: Bisharp defeating 3 other Bisharp holding Leader Crests.
- Cleanup by @AsparagusEduardo in #5046
- Requires level up after defeating 3 Pokémon of the same species holding the specified item.
- Added
EVO_OVERWORLD_STEPS
evolution method (used by Pawmo, Bramblin and Rellor) by @Bassoonian in #4758- Requires level up after walking the specified amount of steps with that Pokémon as the first member in the party without switching.
- Switching the party leader resets the steps.
- Cleanup by @AsparagusEduardo in #5047
- Added
FORM_CHANGE_DAYS_PASSED
form change (used by Furfrou and Hoopa) by @Bassoonian in #4778- Adds
MON_DATA_DAYS_SINCE_FORM_CHANGE
, which is a timer to automatically changes forms at midnight once it runs out. It is set after a different form change has been made (currently only added to Form Change items, including Prison Bottle)
- Adds
- Added unique icons for all of Arceus's forms via config (
P_ARCEUS_UNIQUE_FORM_ICONS
) by @kittenchilly in #4329 - Added
P_TWO_FRAME_FRONT_SPRITES
config to allow disabling 2-frame front animations by @Bassoonian in #4750 - Added
P_CRIES_ENABLED
config to disable species cries and stop them from being included in the ROM by @AsparagusEduardo in #4791 - Added configs to prevent unobtainable Pokemon from being shiny by @fdeblasio in #4735
P_ONLY_OBTAINABLE_SHINIES
: Prevents shinies from generating in the Battle Pyramid.P_NO_SHINIES_WITHOUT_POKEBALLS
: Prevents shinies from generating if the player has no Poké Balls.
- Added
P_CAN_FORGET_HIDDEN_MOVE
config allow Pokémon to forget HM moves by @pkmnsnfrn and @Lunos in #4968
Changed
- Renamed evolution methods the were labeled as evo level by @AlexOn1ine in #4607
EVO_LEVEL_MOVE_TWENTY_TIMES
->EVO_MOVE_TWENTY_TIMES
EVO_LEVEL_RECOIL_DAMAGE_MALE
->EVO_RECOIL_DAMAGE_MALE
EVO_LEVEL_RECOIL_DAMAGE_FEMALE
->EVO_RECOIL_DAMAGE_FEMALE
- Cleanup by @AsparagusEduardo in #4644
- Evolution tracker is now by @Bassoonian in #4758
-
Replaced VARARG_8 uses with recursive macros by @cfmnephrite in #4232
-
Egg Move Refactor by @Bassoonian in #4534
- Egg Moves are now formatted like Teachable learnsets and their pointers are stored in
gSpeciesInfo
, as opposed to having one big array.- Only offspring require these tables.
- Migration script available in
migration_scripts/egg_move_refactor.py
.
- Egg Moves are now formatted like Teachable learnsets and their pointers are stored in
⚔️ Battle General ⚔️
Added
- Added option to increase Experience bar speed via
B_FAST_EXP_GROW
by @SonikkuA-DatH and @pkmnsnfrn in #4335 - Added Gen 4's Fog battle weather by @kittenchilly in #4359
- Uses Haze's animation.
- Changes
B_FOG_TERRAIN
(TRUE/FALSE config) intoB_OVERWORLD_FOG
(Generational config).GEN_4
: Uses this battle weather in maps withWEATHER_FOG_DIAGONAL
andWEATHER_FOG_HORIZONTAL
.GEN_8
onwards: Sets permanent Misty Terrain.- All others disable them.
-
Terastallization by @AgustinGDLV in #4110
- Tera Type automatically assigned to existing Pokémon based on their personality value.
- Can get and set Tera Types in scripts for party members using
checkteratype
andsetteratype
by @Bassoonian in #4460
- Can get and set Tera Types in scripts for party members using
- To activate, it requires:
ITEM_TERA_ORB
to be in the player's bag.B_FLAG_TERA_ORB_CHARGED
to be set up to an unused flag. It¿s automatically set whenHealPlayerParty
is called.
- Added
ignoreTera
argument added toGetBattlerType
- Added Tera Blast's effect.
- Changes type shown in battle screen if the mon is Terastalized or about to by @kittenchilly in #4447
- Added Stellar Type.
- Added
teraType
option for Trainers (also supported by Competitive Format Parties) - Added Tera Starstorm's effect by @kittenchilly in #4447
- Terastallization animation by @Pokabbie in #4507
- Added
forceTeraType
field forgSpeciesInfo
, which forces the Pokémon to have a specific Tera Type (used by Terapagos and Ogerpon) by @kittenchilly in #4438 - Added
FORM_CHANGE_BATTLE_TERASTALLIZATION
by @kittenchilly in #4438- It uses a Pokémon's Tera Type to choose which form to switch to upon Terastallizing.
- Bugfixes:
- By @AgustinGDLV in #4435
- By @AgustinGDLV in #4440
- By @Sneed69 in #4513
- By @Sneed69 in #4515
- By @WillKolada in #4529
- By @iriv24 in #4975
- Tera Type automatically assigned to existing Pokémon based on their personality value.
- Added Gen 1 type matchups by @AsparagusEduardo in #4508
- Renamed
B_STEEL_RESISTANCES
->B_UPDATED_TYPE_MATCHUPS
to reflect this change. - Added defines to cleanup
sTypeEffectivenessTable
.
- Renamed
- Added Move Descriptions in battle by @Bassoonian, @TheXaman, @Pawkkie and @ravepossum in #4152
- Press L before selecting a move to see their category, power, accuracy and description.
- This can be changed to R by using the
B_MOVE_DESCRIPTION_BUTTON
config by @fakuzatsu in #4860
- This can be changed to R by using the
- Cleanup
- By @agsmgmaster64 and @Sneed69 in #4678
- Press L before selecting a move to see their category, power, accuracy and description.
- Added ball throwing configs by セケツ from PokéCommunity and @pkmnsnfrn in #4953
B_ENEMY_THROW_BALLS
: When set toGEN_6
or higher, it changes the opposing trainer's ball animation so they throw their Pokéballs instead of already starting on the floor.B_PLAYER_THROW_BALLS_SOUND
: When set toGEN_5
or higher, it playsSE_BALL_THROW
as part of the player's ball throw animation.B_ENEMY_THROW_BALLS_SOUND
: When set toGEN_5
or higher, it playsSE_BALL_THROW
as part of the enemy's ball throw animation.
- Added
RandomChance
macro for battle/test randomization by @Sneed69 in #4829 -
Gimmick Refactor by @AgustinGDLV in #4449
- Unifies generational mechanics into
gGimmicksInfo
struct (Mega, Z-Moves, Ultra Burst, Dynamax, Terastallization).- Contains triggers, indicator, condition and function to execute when triggered.
- Around ~500-1000 lines of redundant / duplicate code removed!
- Cleanup
- By @Bassoonian in #4927
- By @AlexOn1ine in #4962
- By @AlexOn1ine in #4863
- By @Bassoonian in #4960
- Unifies generational mechanics into
- Allow users to increase
MAX_MONEY
dynamically by @DizzyEggg and @pkmnsnfrn in #4943 - Added
AUTO_LOWERCASE_KEYBOARD
by @Jaizu and @pkmnsnfrn in #4976- Automatically changes to to lowercase if the first character inputted is uppercase.
Changed
- Improved HP drain when enabling
B_FAST_HP_DRAIN
by @pkmnsnfrn and @SonikkuA-DatH in #4335 -
Combined weather set commands by @AlexOn1ine in #4434
setrain
->setfieldweather ENUM_WEATHER_RAIN
.setsandstorm
->setfieldweather ENUM_WEATHER_SANDSTORM
.setsunny
->setfieldweather ENUM_WEATHER_SUN
.sethail
->setfieldweather ENUM_WEATHER_HAIL
.setsnow
->setfieldweather ENUM_WEATHER_SNOW
.
-
Replaced HP checks with
IsBattlerAlive
by @ghoulslash in #4429 -
Removed redundant
MOVE_EFFECT_SP_ATK_TWO_DOWN
by @Sneed69 in #4557 - Added stack for saved targets and attackers by @ghoulslash in #4061
- This avoids the need to overwriting battler IDs during scripts and cause potential issues.
- Several scripts have been updated to use these.
- Cleanup and fixes
- By @AlexOn1ine in #4653
- By @AlexOn1ine in #4668
-
Adjusted Ate-Ability code a bit to make it more readable by @AlexOn1ine in #4640
- Added global constants for damage rolls by @Sneed69 in #4663
// Lowest and highest percentages used for damage roll calculations #define DMG_ROLL_PERCENT_LO 85 #define DMG_ROLL_PERCENT_HI 100
-
Refactored residual damage to be more readable and less prone to bugs by @AlexOn1ine in #4945
- Cleanup by @AlexOn1ine in #4993
- Clarified some cases of
ChangeStatBuffs
usage by @Sneed69 in #4826 - Moved EWRAM variables from battle controller player file to gBattleStruct by @DizzyEggg in #4840
sDescriptionSubmenu
,sAckBallUseBtn
andsBallSwapped
.
Fixed
- Fixed Dynamax data not clearing when a battler faints by @WillKolada in #4672
- Multiple Z-Move fixes by @AgustinGDLV in #4449
- Fixed Z-Moves not working in Link Battles, recorded battles and tests.
- Fixed
Z_EFFECT_ALL_STATS_UP
functionality. - Fixed Z-Nature Power, Z-Copycat, Z-Me First, and Z-Sleep Talk incorrectly using a normal move and not a Z-Move,
which had not been raised as an issue yet.(some of these were caught recently!) - Fixed Breakneck Blitz incorrectly being affected by -ate abilities, which had not been raised as an issue yet.
- Fixed Instruct incorrectly not failing if the target last used a Z-Move, which had not been raised as an issue yet.
- Fixed Guardian of Alola incorrectly doing 50% of the target's HP instead of 75%.
- Fixed Enemy Data not clearing at the end of battles by @ghoulslash in #4867
🤹 Moves 🤹
Added
- Expanded Freeze Dry's effect to use
argument
field and allow custom moves to use the effect to be super effective to any specific type by @AlexOn1ine in #4312- Renamed
EFFECT_FREEZE_DRY
toEFFECT_SUPER_EFFECTIVE_ON_ARG
.
- Renamed
- Expanded
EFFECT_BODY_PRESS
to use category of defense stats for calculation based on the move's own damage category by @AlexOn1ine in #4312- Eg: In vanilla, Body Press uses the user's Defense and its stat changes instead of Attack. Now, if we were to change its
category
ingMovesInfo
, it'll use Sp. Defense and its stat changes instead of Sp. Attack.
- Eg: In vanilla, Body Press uses the user's Defense and its stat changes instead of Attack. Now, if we were to change its
- Expanded Photon Geyser and Shell Side Arm (restored) effects so that they also work for physical moves by @Sneed69 in #4923
- Added Knock Off's Gen 5+ effect with config (
B_KNOCK_OFF_REMOVAL
) by @AgustinGDLV in #4333- Items are removed outright instead of making them unusable.
- Added Heal Bell/Soundproof Gen 5-8+ interactions with
B_HEAL_BELL_SOUNDPROOF
config by @Sneed69 in #4732- Cleanup by @AsparagusEduardo in #5060
- Added Spicy Extract's effect by @AlexOn1ine, @Skeli789, @kittenchilly and @ZnogyroP in #4211
- Added
B_RETURN_STOLEN_NPC_ITEMS
config for Covet/Thief not being able to steal from NPCs by @moostoet and @Sneed69 in #4605 - Added Dragon Darts effect (CFRU port) by @AlexOn1ine, @Skeli789 and @BuffelSaft in #4612
Changed
EFFECT_TRIPLE_KICK
's base power uses the move'sstrikeCount
instead of a constant by @Sneed69 in #4608- This allows users to create "Quadruple Kick" and similar moves.
- Migrated move animation pointers to
gMovesInfo
by @cawtds in #4683- This removes the need for
gBattleAnims_Moves
which had potential ordering issues if not kept in line with move IDs.- If
battleAnimScript
is not defined for a move, it defaults to Tackle's animation.
- If
- Migration script available in
migration_scripts/battle_anim_moves_refactor.py
- This removes the need for
Fixed
- Multiple Ally Switch fixes by @ghoulslash in #4451
- Shadows no longer disappear + safety checks.
- Corrected animation for opponents.
- Fixed Avalanche's target by @TheLastMudkip in #4581
- Fixed Feint and Feint Attack's descriptions by @lhearachel in #4617
- Fixed Mud Sport/Water Sport reducing damage by 77% instead of 67% in Gen5+ by @fdeblasio in #4874
🎭 Abilities 🎭
Added
- Added Poison Puppeteer's effect by @AlexOn1ine in #4416
- Added Tera Shift, Tera Shell, and Teraform Zero by @kittenchilly in #4418
FORM_CHANGE_BATTLE_SWITCH
now has ability as optional parameter.- Cleanup by @AlexOn1ine in #4742
- Added Toxic Chain's effect by @PhallenTree in #4823
- Cleanup by @AlexOn1ine in #4843
- Added
B_ABILITY_TRIGGER_CHANCE
config to update trigger chances of abilities to Gen4+ by @Sneed69 in #4829- Shed Skin, Cute Charm, Flame Body, Static and Poison Point have a 30% chance to trigger in Gen4+ instead of 1/3 in Gen3.
- Effect Spore has an 11%, 10% and 9% chance of triggering Sleep, Paralysis and Poison in Gen4+ instead of equal 10% each in Gen3.
Changed
-
Removed Gen 9 settings for out-of-battle abilities by @AsparagusEduardo in #4282
- These configs no longer disable out-of-battle ability effects when set to
GEN_9
.OW_SUPER_LUCK
.OW_INFILTRATOR
.OW_HARVEST
.OW_LIGHTNING_ROD
.OW_STORM_DRAIN
.OW_FLASH_FIRE
.
- These configs have been removed
OW_COMPOUND_EYES
.OW_CUTE_CHARM
.OW_ILLUMINATE
.OW_MAGNET_PULL
.OW_STATIC
.
- These configs no longer disable out-of-battle ability effects when set to
Fixed
- Fixed Mirror Armor bouncing Sticky Web's stat reduction to the opponent by @Sneed69 in #4713
- Effect Spore now uses
B_POWDER_GRASS
to toggle Grass-type Pokémon immunity to it by @Sneed69 in #4829
🧶 Items 🧶
Added
- Added Booster Energy's effect by @AlexOn1ine in #4337
- Cleanup
- By @PCG06 in #4354
- By @kittenchilly in #4804
- Cleanup
Changed
-
Removed
gItemIconTable
by @kittenchilly in #4579- Sprite and palette pointers have been moved to
gItemsInfo
asiconPic
andiconPalette
respectively. - Migration script available in
migration_scripts/convert_item_icons.py
- Cleanup
- By @AlexOn1ine in #4591
- By @AlexOn1ine in #4658
- Sprite and palette pointers have been moved to
-
Automatically display TM/HM icons based on their move by @Sneed69 in #4452
🤖 Battle AI 🤖
Added
- Added
AI_GetBattlerAbility
by @AlexOn1ine in #4555 - Added
AI_FLAG_CONSERVATIVE
flag by @Pawkkie and @iriv24 in #4615 - Added
AI_FLAG_SEQUENCE_SWITCHING
flag by @Pawkkie, Kasen, @pkmnsnfrn and @DizzyEggg in #4878- AI will keep their party order consistently with switches.
- Added
setdynamicaifunc
, which allows to setup custom AI functions before a battle besides the predetermined ones used by AI Flags @ghoulslash in #4908- Eg:
Wheresetdynamicaifunc AI_TagBattlePreferFoe multi_2_vs_2 TRAINER_MAXIE_MOSSDEEP, MossdeepCity_SpaceCenter_2F_Text_JustWantToExpandLand, TRAINER_TABITHA_MOSSDEEP, MossdeepCity_SpaceCenter_Text_TabithaDefeat, PARTNER_STEVEN
AI_TagBattlePreferFoe
prioritizes attacking the opposite battler index.
- Eg:
Changed
- AI now calculates and stores minimum possible move damage and uses it with
AI_FLAG_TRY_TO_FAINT
by @Sneed69 in #4760 - AI Revenge Killer switching factors in Trick Room by @Shadowzlmao and @Pawkkie in #4794
- AI Smarter Choice AI for Status Moves by @Pawkkie in #4872
- AI Smarter Focus Punch and Substitute handling by @Pawkkie, @Kasenn and @AlexOn1ine in #4952
- Moved
RestoreBattlerData
out ofAi_CalcDmg
and addedSaveBattlerData
Protections by @ghoulslash in #4156- Cleanup
- By @ghoulslash in #4586
- Cleanup
- Made AI see Loaded Dice hold effect for multi hit moves that strike 5 times by @AlexOn1ine in #4622
AI_FLAG_RISKY
Improvements by @Pawkkie, @AlexOn1ine and @iriv24 in #4648- Check the PR for in depth details.
- Cleanup
- By @AsparagusEduardo in #4790
- By @Pawkkie in #5032
- Removed temporary scores in
AI_CalcMoveEffectScores
by @AlexOn1ine in #4655 - Changed
AI_IS_SLOWER
andAI_IS_FASTER
comparisons intoAI_IsFaster
andAI_IsSlower
functions by @AlexOn1ine in #4671AI_STRIKES_FIRST
is also replaced byAI_IsFaster
.
- Switch AI uses trapping abilities aggressively by @Pawkkie in #4669
- Use 9th roll instead of average in AI calcs by @AlexOn1ine in #4679
- Use
AI_DATA->abilities
in more places by @Sneed69 in #4729 - Minor switch AI cleanup by @Pawkkie, @DizzyEggg, @AlexOn1ine and @Sneed69 in #4849
- Removed
SetBattlerData
fromAI_CalcDamage
by @AlexOn1ine in #4881 - Removed unused
AI_FLAG_HELP_PARTNER
by @pkmnsnfrn and @Pawkkie in #4918 - Added missing
ADJUST_SCORE
s by @AlexOn1ine in #4925 - Reduced
AI_WhoStrikesFirst
to the most essential parts by @AlexOn1ine in #4978 - Changed score adjustments to
tempScore
increases by @AlexOn1ine in #4987
Fixed
- Minor AI flag fixes/cleanup by @Pawkkie, @AlexOn1ine and @pkmnsnfrn in #4924
🧹 Other Cleanup 🧹
Changed
- Corrected species info struct hex comments by @AlexOn1ine in #4798
- Cleanup by @AlexOn1ine in #4800
🧪 Test Runner 🧪
Added
- Added missing weather tests by @AlexOn1ine in #4434
- Added missing Gale Wings test by @Pawkkie in #4694
- Added
SWITCH_OUT_MESSAGE
andSEND_IN_MESSAGE
macros to avoid tests from failing based on changing switch out/in messages by @Sneed69 in #4717- Usage:
SEND_IN_MESSAGE("Wobbuffet");
- Tests have been updated to use these new macros.
- Usage:
- Added missing Hidden Power test by @AsparagusEduardo in #4462
- Added some Terastallization tests by @hedara90 in #5020
Changed
- Cleaned up Frisk test by @mrgriffin in #4441
- Renamed
MgbaPrintf_
toTest_MgbaPrintf
by @Bassoonian in #4642 - AI tests have been moved to their own folder by @Pawkkie in #4898
- Species are now always included in tests by @AlexOn1ine in #4810
- Added Battle Anim Debug Check to see if animations aren't cleared by @ghoulslash in #4930
- Test battlers always have their forced abilities to prevent them from changing during a test by @Sneed69 in #4707
Fixed
- Test runner uses Set mode to avoid an issue where tests prompted switching and caused a timeout by @Pawkkie in #4661
New Contributors
- @Pokabbie made their first contribution in #4507
- @TheLastMudkip made their first contribution in #4581
- @moostoet made their first contribution in #4605
- @rayrobdod made their first contribution in #4727
- @innocenthedgehog made their first contribution in #4988
Full Changelog: expansion/1.8.5...expansion/1.9.0