diff --git a/Makefile b/Makefile index 78d5e4694b..d40acafb0b 100644 --- a/Makefile +++ b/Makefile @@ -366,9 +366,6 @@ clean-generated: COMPETITIVE_PARTY_SYNTAX := $(shell PATH="$(PATH)"; echo 'COMPETITIVE_PARTY_SYNTAX' | $(CPP) $(CPPFLAGS) -imacros include/gba/defines.h -imacros include/config/general.h | tail -n1) ifeq ($(COMPETITIVE_PARTY_SYNTAX),1) %.h: %.party ; $(CPP) $(CPPFLAGS) -traditional-cpp - < $< | $(TRAINERPROC) -o $@ -i $< - - -AUTO_GEN_TARGETS += $(DATA_SRC_SUBDIR)/trainers.h -AUTO_GEN_TARGETS += $(DATA_SRC_SUBDIR)/battle_partners.h endif $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 7a8bc5dd73..a154d31715 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -5050,7 +5050,7 @@ BattleScript_EffectSnatch:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectRecoilHP25:: +BattleScript_EffectStruggle:: jumpifnotmove MOVE_STRUGGLE, BattleScript_EffectHit incrementgamestat GAME_STAT_USED_STRUGGLE goto BattleScript_EffectHit @@ -8372,9 +8372,11 @@ BattleScript_FriskMsg:: BattleScript_FriskActivates:: saveattacker + savetarget copybyte gBattlerAttacker, sBATTLER tryfriskmsg BS_SCRIPTING restoreattacker + restoretarget end3 BattleScript_ImposterActivates:: @@ -8874,34 +8876,29 @@ BattleScript_BerryConfuseHealRet_Anim: removeitem BS_TARGET return -BattleScript_BerryStatRaiseEnd2:: - jumpifability BS_ATTACKER, ABILITY_RIPEN, BattleScript_BerryStatRaiseEnd2_AbilityPopup - goto BattleScript_BerryStatRaiseEnd2_Anim -BattleScript_BerryStatRaiseEnd2_AbilityPopup: - call BattleScript_AbilityPopUp -BattleScript_BerryStatRaiseEnd2_Anim: - statbuffchange STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_AFFECTS_USER, BattleScript_BerryStatRaiseEnd2_End - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1 - setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_ITEM - call BattleScript_StatUp - removeitem BS_ATTACKER -BattleScript_BerryStatRaiseEnd2_End:: +BattleScript_ConsumableStatRaiseEnd2:: + call BattleScript_ConsumableStatRaiseRet end2 -BattleScript_BerryStatRaiseRet:: - jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_BerryStatRaiseRet_AbilityPopup - goto BattleScript_BerryStatRaiseRet_Anim -BattleScript_BerryStatRaiseRet_AbilityPopup: +BattleScript_ConsumableStatRaiseRet:: + @ to ensure `statbuffchange` has correct battler id, backup and use target + savetarget + copybyte gBattlerTarget, sBATTLER + jumpifnotberry BS_SCRIPTING, BattleScript_ConsumableStatRaiseRet_Anim + @ check ripen popup if consuming berry + jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_ConsumableStatRaiseRet_AbilityPopup + goto BattleScript_ConsumableStatRaiseRet_Anim +BattleScript_ConsumableStatRaiseRet_AbilityPopup: call BattleScript_AbilityPopUp -BattleScript_BerryStatRaiseRet_Anim: - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_BerryStatRaiseRet_End +BattleScript_ConsumableStatRaiseRet_Anim: + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_ConsumableStatRaiseRet_End setgraphicalstatchangevalues playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1 setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_ITEM call BattleScript_StatUp removeitem BS_SCRIPTING -BattleScript_BerryStatRaiseRet_End: +BattleScript_ConsumableStatRaiseRet_End: + restoretarget return BattleScript_BerryFocusEnergyRet:: diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 406be9a2be..dfa78de15d 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -235,8 +235,8 @@ extern const u8 BattleScript_SelectingNotAllowedMoveChoiceItemInPalace[]; extern const u8 BattleScript_HangedOnMsg[]; extern const u8 BattleScript_BerryConfuseHealEnd2[]; extern const u8 BattleScript_BerryConfuseHealRet[]; -extern const u8 BattleScript_BerryStatRaiseEnd2[]; -extern const u8 BattleScript_BerryStatRaiseRet[]; +extern const u8 BattleScript_ConsumableStatRaiseEnd2[]; +extern const u8 BattleScript_ConsumableStatRaiseRet[]; extern const u8 BattleScript_BerryFocusEnergyRet[]; extern const u8 BattleScript_BerryFocusEnergyEnd2[]; extern const u8 BattleScript_ActionSelectionItemsCantBeUsed[]; @@ -491,7 +491,6 @@ extern const u8 BattleScript_ShellTrapSetUp[]; extern const u8 BattleScript_StealthRockActivates[]; extern const u8 BattleScript_CouldntFullyProtect[]; extern const u8 BattleScript_MoveEffectStockpileWoreOff[]; -extern const u8 BattleScript_StealthRockActivates[]; extern const u8 BattleScript_SpikesActivates[]; extern const u8 BattleScript_BerserkGeneRet[]; extern const u8 BattleScript_BerserkGeneRetEnd2[]; @@ -824,7 +823,7 @@ extern const u8 BattleScript_MoveEffectEerieSpell[]; extern const u8 BattleScript_EffectJungleHealing[]; extern const u8 BattleScript_EffectCoaching[]; extern const u8 BattleScript_EffectDecorate[]; -extern const u8 BattleScript_EffectRecoilHP25[]; +extern const u8 BattleScript_EffectStruggle[]; extern const u8 BattleScript_EffectStuffCheeks[]; extern const u8 BattleScript_MoveEffectLightScreen[]; extern const u8 BattleScript_MoveEffectReflect[]; diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 0e0e8d6ecb..5d82157a15 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -292,7 +292,7 @@ enum BattleMoveEffects EFFECT_DYNAMAX_DOUBLE_DMG, EFFECT_DECORATE, EFFECT_SNIPE_SHOT, - EFFECT_RECOIL_HP_25, + EFFECT_STRUGGLE, EFFECT_STUFF_CHEEKS, EFFECT_GRAV_APPLE, EFFECT_HYPERSPACE_FURY, diff --git a/src/battle_main.c b/src/battle_main.c index 25f6db3cc2..14d963f2c9 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -6050,10 +6050,12 @@ void SetTypeBeforeUsingMove(u32 move, u32 battler) gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | F_DYNAMIC_TYPE_SET; // Check if a gem should activate. + u32 effect = GetMoveEffect(move); if (holdEffect == HOLD_EFFECT_GEMS && GetBattleMoveType(move) == ItemId_GetSecondaryId(heldItem) - && GetMoveEffect(move) != EFFECT_PLEDGE - && GetMovePower(move) > 1) + && effect != EFFECT_PLEDGE + && effect != EFFECT_OHKO + && effect != EFFECT_STRUGGLE) { gSpecialStatuses[battler].gemParam = GetBattlerHoldEffectParam(battler); gSpecialStatuses[battler].gemBoost = TRUE; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index caa16a3ef4..99af220ed7 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2277,8 +2277,7 @@ static void Cmd_adjustdamage(void) if (gSpecialStatuses[gBattlerAttacker].gemBoost && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) - && gBattleMons[gBattlerAttacker].item - && gCurrentMove != MOVE_STRUGGLE) + && gBattleMons[gBattlerAttacker].item) { BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_GemActivates; @@ -5234,8 +5233,9 @@ static void Cmd_getexp(void) } } -bool32 NoAliveMonsForBattlerSide(u32 battler) +static u32 CountAliveMonsForBattlerSide(u32 battler) { + u32 aliveMons = 0; struct Pokemon *party = GetBattlerParty(battler); for (u32 partyMon = 0; partyMon < PARTY_SIZE; partyMon++) @@ -5243,10 +5243,15 @@ bool32 NoAliveMonsForBattlerSide(u32 battler) if (GetMonData(&party[partyMon], MON_DATA_SPECIES) && GetMonData(&party[partyMon], MON_DATA_HP) > 0 && !GetMonData(&party[partyMon], MON_DATA_IS_EGG)) - return FALSE; + aliveMons++; } - return TRUE; + return aliveMons; +} + +bool32 NoAliveMonsForBattlerSide(u32 battler) +{ + return CountAliveMonsForBattlerSide(battler) == 0; } bool32 NoAliveMonsForPlayer(void) @@ -5364,7 +5369,12 @@ static void Cmd_checkteamslost(void) } else { - if (emptyOpponentSpots != 0 && emptyPlayerSpots != 0) + u32 occupiedPlayerSpots = (gBattlersCount / 2) - emptyPlayerSpots; + u32 occupiedOpponentSpots = (gBattlersCount / 2) - emptyOpponentSpots; + u32 alivePlayerPartyMons = CountAliveMonsForBattlerSide(B_POSITION_PLAYER_LEFT) - occupiedPlayerSpots; + u32 aliveOpponentPartyMons = CountAliveMonsForBattlerSide(B_POSITION_OPPONENT_LEFT) - occupiedOpponentSpots; + + if (emptyPlayerSpots > 0 && alivePlayerPartyMons > 0 && emptyOpponentSpots > 0 && aliveOpponentPartyMons > 0) gBattlescriptCurrInstr = cmd->jumpInstr; else gBattlescriptCurrInstr = cmd->nextInstr; @@ -11134,7 +11144,7 @@ static void Cmd_various(void) if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_ROOM_SERVICE && TryRoomService(battler)) { BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BerryStatRaiseRet; + gBattlescriptCurrInstr = BattleScript_ConsumableStatRaiseRet; } else { diff --git a/src/battle_util.c b/src/battle_util.c index 7c08b3e2f6..69cbe49b05 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5907,7 +5907,7 @@ static enum ItemEffect StatRaiseBerry(u32 battler, u32 itemId, u32 statId, enum if (CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN) && HasEnoughHpToEatBerry(battler, GetBattlerItemHoldEffectParam(battler, itemId), itemId)) { BufferStatChange(battler, statId, STRINGID_STATROSE); - gEffectBattler = battler; + gEffectBattler = gBattleScripting.battler = battler; if (GetBattlerAbility(battler) == ABILITY_RIPEN) SET_STATCHANGER(statId, 2, FALSE); else @@ -5918,12 +5918,12 @@ static enum ItemEffect StatRaiseBerry(u32 battler, u32 itemId, u32 statId, enum if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) { - BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); + BattleScriptExecute(BattleScript_ConsumableStatRaiseEnd2); } else { BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BerryStatRaiseRet; + gBattlescriptCurrInstr = BattleScript_ConsumableStatRaiseRet; } return ITEM_STATS_CHANGE; } @@ -5945,7 +5945,7 @@ static enum ItemEffect RandomStatRaiseBerry(u32 battler, u32 itemId, enum ItemCa u16 battlerAbility = GetBattlerAbility(battler); u32 savedAttacker = gBattlerAttacker; // MoodyCantRaiseStat requires that the battler is set to gBattlerAttacker - gBattlerAttacker = battler; + gBattlerAttacker = gBattleScripting.battler = battler; stat = RandomUniformExcept(RNG_RANDOM_STAT_UP, STAT_ATK, NUM_STATS - 1, MoodyCantRaiseStat); gBattlerAttacker = savedAttacker; @@ -5969,12 +5969,12 @@ static enum ItemEffect RandomStatRaiseBerry(u32 battler, u32 itemId, enum ItemCa gBattleScripting.animArg2 = 0; if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) { - BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); + BattleScriptExecute(BattleScript_ConsumableStatRaiseEnd2); } else { BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BerryStatRaiseRet; + gBattlescriptCurrInstr = BattleScript_ConsumableStatRaiseRet; } return ITEM_STATS_CHANGE; @@ -6044,7 +6044,7 @@ static enum ItemEffect DamagedStatBoostBerryEffect(u32 battler, u8 statId, u8 ca gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + statId; gBattleScripting.animArg2 = 0; BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BerryStatRaiseRet; + gBattlescriptCurrInstr = BattleScript_ConsumableStatRaiseRet; return ITEM_STATS_CHANGE; } return ITEM_NO_EFFECT; @@ -6062,12 +6062,12 @@ enum ItemEffect TryHandleSeed(u32 battler, u32 terrainFlag, u32 statId, u32 item gBattleScripting.animArg2 = 0; if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN) { - BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); + BattleScriptExecute(BattleScript_ConsumableStatRaiseEnd2); } else { BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BerryStatRaiseRet; + gBattlescriptCurrInstr = BattleScript_ConsumableStatRaiseRet; } return ITEM_STATS_CHANGE; } @@ -6781,7 +6781,7 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn) case HOLD_EFFECT_ROOM_SERVICE: if (TryRoomService(battler)) { - BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); + BattleScriptExecute(BattleScript_ConsumableStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } break; diff --git a/src/data/battle_move_effects.h b/src/data/battle_move_effects.h index 5ac30a76f2..0ab2364ced 100644 --- a/src/data/battle_move_effects.h +++ b/src/data/battle_move_effects.h @@ -1870,9 +1870,9 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleTvScore = 0, // TODO: Assign points }, - [EFFECT_RECOIL_HP_25] = + [EFFECT_STRUGGLE] = { - .battleScript = BattleScript_EffectRecoilHP25, + .battleScript = BattleScript_EffectStruggle, .battleTvScore = 0, // TODO: Assign points }, diff --git a/src/data/moves_info.h b/src/data/moves_info.h index a7c0ee165e..45d7607023 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -111,6 +111,14 @@ static const u8 sFeintDescription[] = _( "An attack that hits foes\n" "using moves like Protect."); +static const u8 sProtectDescription[] = _( + "Evades attack, but may fail\n" + "if used in succession."); + +static const u8 sGMaxOneBlowDescription[] = _( + "G-max Urshifu attack.\n" + "Ignores Max Guard."); + const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = { [MOVE_NONE] = @@ -4345,7 +4353,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = "Used only if all PP are gone.\n" "Also hurts the user a little."), #if B_UPDATED_MOVE_DATA >= GEN_4 - .effect = EFFECT_RECOIL_HP_25, + .effect = EFFECT_STRUGGLE, .accuracy = 0, .mirrorMoveBanned = TRUE, .additionalEffects = ADDITIONAL_EFFECTS({ @@ -4798,9 +4806,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_PROTECT] = { .name = COMPOUND_STRING("Protect"), - .description = COMPOUND_STRING( - "Evades attack, but may fail\n" - "if used in succession."), + .description = sProtectDescription, .effect = EFFECT_PROTECT, .power = 0, .type = TYPE_NORMAL, @@ -5189,9 +5195,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_DETECT] = { .name = COMPOUND_STRING("Detect"), - .description = COMPOUND_STRING( - "Evades attack, but may fail\n" - "if used in succession."), + .description = sProtectDescription, .effect = EFFECT_PROTECT, .power = 0, .type = TYPE_FIGHTING, @@ -21069,7 +21073,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_BREAKNECK_BLITZ] = { .name = COMPOUND_STRING("Breakneck Blitz"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Builds momentum and crashes\n" + "into the foe. Power varies."), .effect = EFFECT_HIT, .power = 1, .type = TYPE_NORMAL, @@ -21082,8 +21088,10 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = }, [MOVE_ALL_OUT_PUMMELING] = { - .name = COMPOUND_STRING("All Out Pummeling"), - .description = sNullDescription, + .name = COMPOUND_STRING("All-Out Pummeling"), + .description = COMPOUND_STRING( + "Rams an energy orb into\n" + "the target. Power varies."), .effect = EFFECT_HIT, .power = 1, .type = TYPE_FIGHTING, @@ -21097,7 +21105,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_SUPERSONIC_SKYSTRIKE] = { .name = COMPOUND_STRING("Supersonic Skystrike"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Soars up and plummets toward\n" + "the target. Power varies."), .effect = EFFECT_HIT, .power = 1, .type = TYPE_FLYING, @@ -21111,7 +21121,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_ACID_DOWNPOUR] = { .name = COMPOUND_STRING("Acid Downpour"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Sinks the target in a poison\n" + "swamp. Power varies."), .effect = EFFECT_HIT, .power = 1, .type = TYPE_POISON, @@ -21125,7 +21137,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_TECTONIC_RAGE] = { .name = COMPOUND_STRING("Tectonic Rage"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Burrows deep and slams into\n" + "the target. Power varies."), .effect = EFFECT_HIT, .power = 1, .type = TYPE_GROUND, @@ -21140,7 +21154,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_CONTINENTAL_CRUSH] = { .name = COMPOUND_STRING("Continental Crush"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Drops a huge rock mountain\n" + "on the foe. Power varies."), .effect = EFFECT_HIT, .power = 1, .type = TYPE_ROCK, @@ -21153,8 +21169,10 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = }, [MOVE_SAVAGE_SPIN_OUT] = { - .name = COMPOUND_STRING("Savage Spin Out"), - .description = sNullDescription, + .name = COMPOUND_STRING("Savage Spin-Out"), + .description = COMPOUND_STRING( + "Spits threads of silk to\n" + "bind the foe. Power varies."), .effect = EFFECT_HIT, .power = 1, .type = TYPE_BUG, @@ -21167,8 +21185,10 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = }, [MOVE_NEVER_ENDING_NIGHTMARE] = { - .name = COMPOUND_STRING("Never Ending Nightmare"), - .description = sNullDescription, + .name = COMPOUND_STRING("Never-Ending Nightmare"), + .description = COMPOUND_STRING( + "Deep-seated grudges trap\n" + "the target. Power varies."), .effect = EFFECT_HIT, .power = 1, .type = TYPE_GHOST, @@ -21182,7 +21202,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_CORKSCREW_CRASH] = { .name = COMPOUND_STRING("Corkscrew Crash"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Spins very fast and rams\n" + "the target. Power varies."), .effect = EFFECT_HIT, .power = 1, .type = TYPE_STEEL, @@ -21196,7 +21218,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_INFERNO_OVERDRIVE] = { .name = COMPOUND_STRING("Inferno Overdrive"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Breathes intense fire at\n" + "the target. Power varies."), .effect = EFFECT_HIT, .power = 1, .type = TYPE_FIRE, @@ -21210,7 +21234,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_HYDRO_VORTEX] = { .name = COMPOUND_STRING("Hydro Vortex"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "A huge whirlpool swallows\n" + "the target. Power varies."), .effect = EFFECT_HIT, .power = 1, .type = TYPE_WATER, @@ -21224,7 +21250,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_BLOOM_DOOM] = { .name = COMPOUND_STRING("Bloom Doom"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Uses plant energy to attack\n" + "the target. Power varies."), .effect = EFFECT_HIT, .power = 1, .type = TYPE_GRASS, @@ -21238,7 +21266,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_GIGAVOLT_HAVOC] = { .name = COMPOUND_STRING("Gigavolt Havoc"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Hits the foe with powerful\n" + "electricity. Power varies."), .effect = EFFECT_HIT, .power = 1, .type = TYPE_ELECTRIC, @@ -21252,7 +21282,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_SHATTERED_PSYCHE] = { .name = COMPOUND_STRING("Shattered Psyche"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Controls the target to\n" + "hurt it. Power varies."), .effect = EFFECT_HIT, .power = 1, .type = TYPE_PSYCHIC, @@ -21266,7 +21298,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_SUBZERO_SLAMMER] = { .name = COMPOUND_STRING("Subzero Slammer"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Drops the temp and freezes\n" + "the target. Power varies."), .effect = EFFECT_HIT, .power = 1, .type = TYPE_ICE, @@ -21280,7 +21314,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_DEVASTATING_DRAKE] = { .name = COMPOUND_STRING("Devastating Drake"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Develops aura and attacks\n" + "the target. Power varies."), .effect = EFFECT_HIT, .power = 1, .type = TYPE_DRAGON, @@ -21294,7 +21330,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_BLACK_HOLE_ECLIPSE] = { .name = COMPOUND_STRING("Black Hole Eclipse"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Sucks the target into dark\n" + "energy. Power varies."), .effect = EFFECT_HIT, .power = 1, .type = TYPE_DARK, @@ -21308,7 +21346,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_TWINKLE_TACKLE] = { .name = COMPOUND_STRING("Twinkle Tackle"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Toys with the target in a\n" + "charming space. Power varies."), .effect = EFFECT_HIT, .power = 1, .type = TYPE_FAIRY, @@ -21322,7 +21362,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_CATASTROPIKA] = { .name = COMPOUND_STRING("Catastropika"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Pikachu uses the max amount\n" + "of electricity and pounces."), .effect = EFFECT_HIT, .power = 210, .type = TYPE_ELECTRIC, @@ -21336,7 +21378,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_10000000_VOLT_THUNDERBOLT] = { .name = COMPOUND_STRING("10,000,000 Volt Thunderbolt"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Cap Pikachu unleashes jolt.\n" + "High critical-hit ratio."), .effect = EFFECT_HIT, .power = 195, .type = TYPE_ELECTRIC, @@ -21351,7 +21395,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_STOKED_SPARKSURFER] = { .name = COMPOUND_STRING("Stoked Sparksurfer"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Alolan Raichu attacks with\n" + "full force. Causes paralysis."), .effect = EFFECT_HIT, .power = 175, .type = TYPE_ELECTRIC, @@ -21369,7 +21415,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_EXTREME_EVOBOOST] = { .name = COMPOUND_STRING("Extreme Evoboost"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Eevee gets energy from\n" + "its friends. Boosts stats."), .effect = EFFECT_EXTREME_EVOBOOST, .power = 0, .type = TYPE_NORMAL, @@ -21383,7 +21431,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_PULVERIZING_PANCAKE] = { .name = COMPOUND_STRING("Pulverizing Pancake"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Snorlax energetically moves\n" + "and attacks with full force."), .effect = EFFECT_HIT, .power = 210, .type = TYPE_NORMAL, @@ -21397,7 +21447,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_GENESIS_SUPERNOVA] = { .name = COMPOUND_STRING("Genesis Supernova"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Mew attacks with full force.\n" + "Psychically charges terrain."), .effect = EFFECT_HIT_SET_REMOVE_TERRAIN, .power = 185, .type = TYPE_PSYCHIC, @@ -21412,7 +21464,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_SINISTER_ARROW_RAID] = { .name = COMPOUND_STRING("Sinister Arrow Raid"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Decidueye shoots countless\n" + "arrows with full force."), .effect = EFFECT_HIT, .power = 180, .type = TYPE_GHOST, @@ -21426,7 +21480,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MALICIOUS_MOONSAULT] = { .name = COMPOUND_STRING("Malicious Moonsault"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Incineroar crashes into\n" + "the target with full force."), .effect = EFFECT_HIT, .power = 180, .type = TYPE_DARK, @@ -21440,7 +21496,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_OCEANIC_OPERETTA] = { .name = COMPOUND_STRING("Oceanic Operetta"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Primarina summons a massive\n" + "amount of water at the foe."), .effect = EFFECT_HIT, .power = 195, .type = TYPE_WATER, @@ -21454,7 +21512,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_SPLINTERED_STORMSHARDS] = { .name = COMPOUND_STRING("Splintered Stormshards"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Lycanroc attacks with full\n" + "force. Removes all terrain."), .effect = EFFECT_HIT_SET_REMOVE_TERRAIN, .power = 190, .type = TYPE_ROCK, @@ -21469,7 +21529,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_LETS_SNUGGLE_FOREVER] = { .name = COMPOUND_STRING("Let's Snuggle Forever"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Mimikyu punches the target\n" + "with full force."), .effect = EFFECT_HIT, .power = 190, .type = TYPE_FAIRY, @@ -21483,7 +21545,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_CLANGOROUS_SOULBLAZE] = { .name = COMPOUND_STRING("Clangorous Soulblaze"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Kommo-o attacks with full\n" + "force. Boosts all stats."), .effect = EFFECT_HIT, .power = 185, .type = TYPE_DRAGON, @@ -21504,7 +21568,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_GUARDIAN_OF_ALOLA] = { .name = COMPOUND_STRING("Guardian of Alola"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "The Land Spirit Pokémon\n" + "greatly reduces the foe's HP."), .effect = EFFECT_GUARDIAN_OF_ALOLA, .power = 1, .type = TYPE_FAIRY, @@ -21518,7 +21584,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_SEARING_SUNRAZE_SMASH] = { .name = COMPOUND_STRING("Searing Sunraze Smash"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Solgaleo attacks with full\n" + "force. Ignores abilities."), .effect = EFFECT_HIT, .power = 200, .type = TYPE_STEEL, @@ -21533,7 +21601,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MENACING_MOONRAZE_MAELSTROM] = { .name = COMPOUND_STRING("Menacing Moonraze Maelstrom"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Lunala attacks with full\n" + "force. Ignores abilities."), .effect = EFFECT_HIT, .power = 200, .type = TYPE_GHOST, @@ -21547,8 +21617,10 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = }, [MOVE_LIGHT_THAT_BURNS_THE_SKY] = { - .name = COMPOUND_STRING("Light That Burns The Sky"), - .description = sNullDescription, + .name = COMPOUND_STRING("Light That Burns the Sky"), + .description = COMPOUND_STRING( + "Uses Necrozma's highest\n" + "attack. Ignores abilities."), .effect = EFFECT_PHOTON_GEYSER, .power = 200, .type = TYPE_PSYCHIC, @@ -21562,8 +21634,10 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = }, [MOVE_SOUL_STEALING_7_STAR_STRIKE] = { - .name = COMPOUND_STRING("Soul Stealing 7 Star Strike"), - .description = sNullDescription, + .name = COMPOUND_STRING("Soul-Stealing 7-Star Strike"), + .description = COMPOUND_STRING( + "Marshadow punches and\n" + "kicks with full force."), .effect = EFFECT_HIT, .power = 195, .type = TYPE_GHOST, @@ -21578,7 +21652,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MAX_GUARD] = { .name = COMPOUND_STRING("Max Guard"), - .description = sNullDescription, + .description = sProtectDescription, .effect = EFFECT_PROTECT, .power = 0, .type = TYPE_NORMAL, @@ -21594,7 +21668,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MAX_FLARE] = { .name = COMPOUND_STRING("Max Flare"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Fire Dynamax attack.\n" + "Intensifies sun for 5 turns."), .effect = EFFECT_MAX_MOVE, .power = 1, .type = TYPE_FIRE, @@ -21614,7 +21690,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MAX_FLUTTERBY] = { .name = COMPOUND_STRING("Max Flutterby"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Bug Dynamax attack.\n" + "Lowers foe's Sp. Atk stat."), .effect = EFFECT_MAX_MOVE, .power = 1, .type = TYPE_BUG, @@ -21634,7 +21712,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MAX_LIGHTNING] = { .name = COMPOUND_STRING("Max Lightning"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Electric Dynamax attack.\n" + "Turns the terrain electric."), .effect = EFFECT_MAX_MOVE, .power = 1, .type = TYPE_ELECTRIC, @@ -21654,7 +21734,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MAX_STRIKE] = { .name = COMPOUND_STRING("Max Strike"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Normal Dynamax attack.\n" + "Lowers foe's Speed stat."), .effect = EFFECT_MAX_MOVE, .power = 1, .type = TYPE_NORMAL, @@ -21674,7 +21756,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MAX_KNUCKLE] = { .name = COMPOUND_STRING("Max Knuckle"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Fighting Dynamax attack.\n" + "Boosts ally Attack stats."), .effect = EFFECT_MAX_MOVE, .power = 1, .type = TYPE_FIGHTING, @@ -21694,7 +21778,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MAX_PHANTASM] = { .name = COMPOUND_STRING("Max Phantasm"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Ghost Dynamax attack.\n" + "Lowers foe's Defense stat."), .effect = EFFECT_MAX_MOVE, .power = 1, .type = TYPE_GHOST, @@ -21714,7 +21800,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MAX_HAILSTORM] = { .name = COMPOUND_STRING("Max Hailstorm"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Ice Dynamax attack.\n" + "Summons hail for 5 turns."), .effect = EFFECT_MAX_MOVE, .power = 1, .type = TYPE_ICE, @@ -21734,7 +21822,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MAX_OOZE] = { .name = COMPOUND_STRING("Max Ooze"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Poison Dynamax attack.\n" + "Boosts ally Sp. Atk stats."), .effect = EFFECT_MAX_MOVE, .power = 1, .type = TYPE_POISON, @@ -21754,7 +21844,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MAX_GEYSER] = { .name = COMPOUND_STRING("Max Geyser"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Water Dynamax attack.\n" + "Summons rain for 5 turns."), .effect = EFFECT_MAX_MOVE, .power = 1, .type = TYPE_WATER, @@ -21774,7 +21866,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MAX_AIRSTREAM] = { .name = COMPOUND_STRING("Max Airstream"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Flying Dynamax attack.\n" + "Boosts ally Speed stats."), .effect = EFFECT_MAX_MOVE, .power = 1, .type = TYPE_FLYING, @@ -21794,7 +21888,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MAX_STARFALL] = { .name = COMPOUND_STRING("Max Starfall"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Fairy Dynamax attack.\n" + "Turns the terrain misty."), .effect = EFFECT_MAX_MOVE, .power = 1, .type = TYPE_FAIRY, @@ -21814,7 +21910,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MAX_WYRMWIND] = { .name = COMPOUND_STRING("Max Wyrmwind"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Dragon Dynamax attack.\n" + "Lowers foe's Attack stat."), .effect = EFFECT_MAX_MOVE, .power = 1, .type = TYPE_DRAGON, @@ -21834,7 +21932,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MAX_MINDSTORM] = { .name = COMPOUND_STRING("Max Mindstorm"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Psychic Dynamax attack.\n" + "Turns the terrain psychic."), .effect = EFFECT_MAX_MOVE, .power = 1, .type = TYPE_PSYCHIC, @@ -21854,7 +21954,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MAX_ROCKFALL] = { .name = COMPOUND_STRING("Max Rockfall"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Rock Dynamax attack.\n" + "Summons a sandstorm."), .effect = EFFECT_MAX_MOVE, .power = 1, .type = TYPE_ROCK, @@ -21874,7 +21976,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MAX_QUAKE] = { .name = COMPOUND_STRING("Max Quake"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Ground Dynamax attack.\n" + "Boosts ally Sp. Def stats."), .effect = EFFECT_MAX_MOVE, .power = 1, .type = TYPE_GROUND, @@ -21895,7 +21999,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MAX_DARKNESS] = { .name = COMPOUND_STRING("Max Darkness"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Dark Dynamax attack.\n" + "Lowers foe's Sp. Def stat."), .effect = EFFECT_MAX_MOVE, .power = 1, .type = TYPE_DARK, @@ -21915,7 +22021,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MAX_OVERGROWTH] = { .name = COMPOUND_STRING("Max Overgrowth"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Grass Dynamax attack.\n" + "Turns the terrain grassy."), .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_GRASS, @@ -21935,7 +22043,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_MAX_STEELSPIKE] = { .name = COMPOUND_STRING("Max Steelspike"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "Steel Dynamax attack.\n" + "Boosts ally Defense stats."), .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_STEEL, @@ -21955,7 +22065,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_VINE_LASH] = { .name = COMPOUND_STRING("G-Max Vine Lash"), - .description = sNullDescription, //ANIM TODO + .description = COMPOUND_STRING( + "G-max Venusaur attack.\n" + "Damages for 4 turns."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_GRASS, @@ -21975,7 +22087,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_WILDFIRE] = { .name = COMPOUND_STRING("G-Max Wildfire"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Charizard attack.\n" + "Damages for 4 turns."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_FIRE, @@ -21995,7 +22109,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_CANNONADE] = { .name = COMPOUND_STRING("G-Max Cannonade"), - .description = sNullDescription, //ANIM TODO + .description = COMPOUND_STRING( + "G-max Blastoise attack.\n" + "Damages for 4 turns."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_WATER, @@ -22015,7 +22131,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_BEFUDDLE] = { .name = COMPOUND_STRING("G-Max Befuddle"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Butterfree attack.\n" + "Poison, paralysis, or sleep."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_BUG, @@ -22035,7 +22153,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_VOLT_CRASH] = { .name = COMPOUND_STRING("G-Max Volt Crash"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Pikachu attack.\n" + "Paralyzes opponents."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_ELECTRIC, @@ -22055,7 +22175,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_GOLD_RUSH] = { .name = COMPOUND_STRING("G-Max Gold Rush"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Meowth attack.\n" + "Confuses and earns money."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_NORMAL, @@ -22075,7 +22197,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_CHI_STRIKE] = { .name = COMPOUND_STRING("G-Max Chi Strike"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Machamp attack.\n" + "Boosts critical-hit ratio."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_FIGHTING, @@ -22095,7 +22219,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_TERROR] = { .name = COMPOUND_STRING("G-Max Terror"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Gengar attack.\n" + "Prevents foes from escaping."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_GHOST, @@ -22115,7 +22241,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_FOAM_BURST] = { .name = COMPOUND_STRING("G-Max Foam Burst"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Kingler attack.\n" + "Harshly lowers foe's Speed."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_WATER, @@ -22135,7 +22263,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_RESONANCE] = { .name = COMPOUND_STRING("G-Max Resonance"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Lapras attack.\n" + "Reduces damage for 5 turns."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_ICE, @@ -22155,7 +22285,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_CUDDLE] = { .name = COMPOUND_STRING("G-Max Cuddle"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Eevee attack.\n" + "Infatuates opponents."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_NORMAL, @@ -22175,7 +22307,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_REPLENISH] = { .name = COMPOUND_STRING("G-Max Replenish"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Snorlax attack.\n" + "Restores eaten Berries."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_NORMAL, @@ -22195,7 +22329,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_MALODOR] = { .name = COMPOUND_STRING("G-Max Malodor"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Garbodor attack.\n" + "Poisons opponents."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_POISON, @@ -22215,7 +22351,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_MELTDOWN] = { .name = COMPOUND_STRING("G-Max Meltdown"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Melmetal attack.\n" + "Prevents repeat move use."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_STEEL, @@ -22235,7 +22373,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_DRUM_SOLO] = { .name = COMPOUND_STRING("G-Max Drum Solo"), - .description = sNullDescription, //ANIM TODO + .description = COMPOUND_STRING( + "G-max Rillaboom attack.\n" + "Ignores target's abilities."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_GRASS, @@ -22256,7 +22396,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_FIREBALL] = { .name = COMPOUND_STRING("G-Max Fireball"), - .description = sNullDescription, //ANIM TODO + .description = COMPOUND_STRING( + "G-max Cinderace attack.\n" + "Ignores target's abilities."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_FIRE, @@ -22277,7 +22419,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_HYDROSNIPE] = { .name = COMPOUND_STRING("G-Max Hydrosnipe"), - .description = sNullDescription, //ANIM TODO + .description = COMPOUND_STRING( + "G-max Inteleon attack.\n" + "Ignores target's abilities."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_WATER, @@ -22298,7 +22442,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_WIND_RAGE] = { .name = COMPOUND_STRING("G-Max Wind Rage"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Corviknight attack.\n" + "Removes opponent screens."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_FLYING, @@ -22318,7 +22464,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_GRAVITAS] = { .name = COMPOUND_STRING("G-Max Gravitas"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Orbeetle attack.\n" + "Changes gravity for 5 turns."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_PSYCHIC, @@ -22338,7 +22486,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_STONESURGE] = { .name = COMPOUND_STRING("G-Max Stonesurge"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Drednaw attack.\n" + "Scatters sharp rocks."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_WATER, @@ -22358,7 +22508,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_VOLCALITH] = { .name = COMPOUND_STRING("G-Max Volcalith"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Coalossal attack.\n" + "Damages for 4 turns."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_ROCK, @@ -22378,7 +22530,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_TARTNESS] = { .name = COMPOUND_STRING("G-Max Tartness"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Flapple attack.\n" + "Lowers foe's evasiveness."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_GRASS, @@ -22398,7 +22552,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_SWEETNESS] = { .name = COMPOUND_STRING("G-Max Sweetness"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Appletun attack.\n" + "Heals ally status conditions."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_GRASS, @@ -22418,7 +22574,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_SANDBLAST] = { .name = COMPOUND_STRING("G-Max Sandblast"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Sandaconda attack.\n" + "Traps foes in a sandstorm."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_GROUND, @@ -22438,7 +22596,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_STUN_SHOCK] = { .name = COMPOUND_STRING("G-Max Stun Shock"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Toxtricity attack.\n" + "Poisons or paralyzes foes."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_ELECTRIC, @@ -22458,7 +22618,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_CENTIFERNO] = { .name = COMPOUND_STRING("G-Max Centiferno"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Toxtricity attack.\n" + "Traps foes in flames."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_FIRE, @@ -22478,7 +22640,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_SMITE] = { .name = COMPOUND_STRING("G-Max Smite"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Hatterene attack.\n" + "Confuses opponents."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_FAIRY, @@ -22499,7 +22663,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_SNOOZE] = { .name = COMPOUND_STRING("G-Max Snooze"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Grimmsnarl attack.\n" + "Lulls foes into sleep."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_DARK, @@ -22519,7 +22685,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_FINALE] = { .name = COMPOUND_STRING("G-Max Finale"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Alcremie attack.\n" + "Heals ally HP."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_FAIRY, @@ -22539,7 +22707,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_STEELSURGE] = { .name = COMPOUND_STRING("G-Max Steelsurge"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Copperajah attack.\n" + "Scatters sharp spikes."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_STEEL, @@ -22559,7 +22729,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_DEPLETION] = { .name = COMPOUND_STRING("G-Max Depletion"), - .description = sNullDescription, + .description = COMPOUND_STRING( + "G-max Duraludon attack.\n" + "Reduces target's PP."), //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_DRAGON, @@ -22579,7 +22751,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_ONE_BLOW] = { .name = COMPOUND_STRING("G-Max One Blow"), - .description = sNullDescription, + .description = sGMaxOneBlowDescription, //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_DARK, @@ -22595,7 +22767,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_G_MAX_RAPID_FLOW] = { .name = COMPOUND_STRING("G-Max Rapid Flow"), - .description = sNullDescription, + .description = sGMaxOneBlowDescription, //ANIM TODO .effect = EFFECT_MAX_MOVE, .power = 10, .type = TYPE_WATER, diff --git a/test/battle/ability/bad_dreams.c b/test/battle/ability/bad_dreams.c index 8a1d3669a2..41cedf8e3e 100644 --- a/test/battle/ability/bad_dreams.c +++ b/test/battle/ability/bad_dreams.c @@ -2,7 +2,7 @@ #include "test/battle.h" // Also checks that non-sleeping enemy is not affected. -SINGLE_BATTLE_TEST("Bad Dreams causes the sleeping enemy Pokemon to lose 1/8 of hp") +SINGLE_BATTLE_TEST("Bad Dreams causes the sleeping enemy Pokemon to lose 1/8 of HP") { u32 status; PARAMETRIZE { status = STATUS1_NONE; } diff --git a/test/battle/ability/ball_fetch.c b/test/battle/ability/ball_fetch.c new file mode 100644 index 0000000000..7411d60a7d --- /dev/null +++ b/test/battle/ability/ball_fetch.c @@ -0,0 +1,7 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Ball Fetch causes the Pokémon to pick up the last failed Ball at the end of the turn"); +TO_DO_BATTLE_TEST("Ball Fetch doesn't trigger if the Pokémon is already holding an item"); +TO_DO_BATTLE_TEST("Ball Fetch only picks up the first failed ball, once per battle"); // Bestow can help test this +TO_DO_BATTLE_TEST("Ball Fetch doesn't trigger in Max Raid Battles"); diff --git a/test/battle/ability/battery.c b/test/battle/ability/battery.c new file mode 100644 index 0000000000..cecfa81d0c --- /dev/null +++ b/test/battle/ability/battery.c @@ -0,0 +1,5 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Battery increases Sp. Attack damage of allies by ~30%"); // 5325/4096 +TO_DO_BATTLE_TEST("Battery does not increase its own Sp. Attack damage"); diff --git a/test/battle/ability/beads_of_ruin.c b/test/battle/ability/beads_of_ruin.c index cfcfb17467..37240d2d68 100644 --- a/test/battle/ability/beads_of_ruin.c +++ b/test/battle/ability/beads_of_ruin.c @@ -73,3 +73,5 @@ SINGLE_BATTLE_TEST("Beads of Ruin's message displays correctly after all battler MESSAGE("The opposing Chi-Yu's Beads of Ruin weakened the Sp. Def of all surrounding Pokémon!"); } } + +TO_DO_BATTLE_TEST("Beads of Ruin reduce Defense if Wonder Room is active"); diff --git a/test/battle/ability/beast_boost.c b/test/battle/ability/beast_boost.c index f57236d17c..36a3b8b1f3 100644 --- a/test/battle/ability/beast_boost.c +++ b/test/battle/ability/beast_boost.c @@ -56,3 +56,16 @@ SINGLE_BATTLE_TEST("Beast Boost doesn't trigger if user is fainted") MESSAGE("2 sent out Wobbuffet!"); } } + +TO_DO_BATTLE_TEST("Beast Boost boosts Attack 1st in case of a stat tie"); +TO_DO_BATTLE_TEST("Beast Boost boosts Defense 2nd in case of a stat tie"); +TO_DO_BATTLE_TEST("Beast Boost boosts Special Attack 3rd in case of a stat tie"); +TO_DO_BATTLE_TEST("Beast Boost boosts Special Defense 4th in case of a stat tie"); +TO_DO_BATTLE_TEST("Beast Boost considers Power Split"); +TO_DO_BATTLE_TEST("Beast Boost considers Guard Split"); +TO_DO_BATTLE_TEST("Beast Boost considers Power Trick"); +TO_DO_BATTLE_TEST("Beast Boost considers Wonder Room"); +TO_DO_BATTLE_TEST("Beast Boost considers Speed Swap"); +TO_DO_BATTLE_TEST("Beast Boost doesn't consider stat stages"); +TO_DO_BATTLE_TEST("Beast Boost doesn't consider held items"); +TO_DO_BATTLE_TEST("Beast Boost doesn't consider status condition reductions"); diff --git a/test/battle/ability/berserk.c b/test/battle/ability/berserk.c index e4d625ebc5..80e418e3c5 100644 --- a/test/battle/ability/berserk.c +++ b/test/battle/ability/berserk.c @@ -1,7 +1,7 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Berserk activates only if the target had more than 50% of its hp") +SINGLE_BATTLE_TEST("Berserk activates only if the target had more than 50% of its HP") { bool32 activates = FALSE; u16 maxHp = 500, hp = 0; diff --git a/test/battle/ability/bulletproof.c b/test/battle/ability/bulletproof.c new file mode 100644 index 0000000000..733eb63a11 --- /dev/null +++ b/test/battle/ability/bulletproof.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Bulletproof makes ballistic moves fail against the ability user"); diff --git a/test/battle/ability/cheeck_pouch.c b/test/battle/ability/cheek_pouch.c similarity index 100% rename from test/battle/ability/cheeck_pouch.c rename to test/battle/ability/cheek_pouch.c diff --git a/test/battle/hold_effect/gems.c b/test/battle/hold_effect/gems.c index 5486443808..52c85d7fb5 100644 --- a/test/battle/hold_effect/gems.c +++ b/test/battle/hold_effect/gems.c @@ -87,19 +87,3 @@ SINGLE_BATTLE_TEST("Gem is consumed if the move type is changed") ANIMATION(ANIM_TYPE_MOVE, MOVE_FEINT_ATTACK, player); } } - -SINGLE_BATTLE_TEST("Gem is not consumed if a no type damage move is used") //ie. Counter, Psywave, Super Fang. All these moves have 1 base power. -{ - ASSUME(GetMovePower(MOVE_PSYWAVE) == 1); - GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_PSYCHIC_GEM); }; - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_PSYWAVE); } - } SCENE { - NONE_OF { - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("The Psychic Gem strengthened Wobbuffet's power!"); - } - } -} diff --git a/test/text.c b/test/text.c index 85e22916fd..da549ca1e2 100644 --- a/test/text.c +++ b/test/text.c @@ -93,7 +93,7 @@ TEST("Move descriptions fit on Pokemon Summary Screen") u32 i; const u32 fontId = FONT_NORMAL, widthPx = 152; u32 move = MOVE_NONE; - for (i = 1; i < MOVES_COUNT; i++) + for (i = 1; i < MOVES_COUNT_ALL; i++) { PARAMETRIZE_LABEL("%S", GetMoveDescription(i)) { move = i; } }