Implemented Shell Trap's effect

This commit is contained in:
LOuroboros 2022-12-12 21:41:13 -03:00
parent ae482ed1f4
commit 3ce4869766
8 changed files with 41 additions and 11 deletions

View File

@ -417,6 +417,24 @@ gBattleScriptsForMoveEffects::
.4byte BattleScript_EffectSpecialAttackUpHit @ EFFECT_SPECIAL_ATTACK_UP_HIT .4byte BattleScript_EffectSpecialAttackUpHit @ EFFECT_SPECIAL_ATTACK_UP_HIT
.4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE
.4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE
.4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP
BattleScript_EffectShellTrap:
jumpifnodamage BattleScript_EffectShellTrap_Failed
goto BattleScript_EffectHit
BattleScript_EffectShellTrap_Failed:
printstring STRINGID_ATTACKERSHELLTRAPDIDNTWORK
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
BattleScript_ShellTrapSetUp::
printstring STRINGID_EMPTYSTRING3
waitmessage 1
playanimation BS_ATTACKER, B_ANIM_SHELL_TRAP_SETUP, NULL
printstring STRINGID_ATTACKERSETASHELLTRAP
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_EffectCeaselessEdge:: BattleScript_EffectCeaselessEdge::
call BattleScript_EffectHit_Ret call BattleScript_EffectHit_Ret

View File

@ -433,6 +433,7 @@ extern const u8 BattleScript_MultiHitPrintStrings[];
extern const u8 BattleScript_BurnUpRemoveType[]; extern const u8 BattleScript_BurnUpRemoveType[];
extern const u8 BattleScript_TargetAbilityStatRaiseRet[]; extern const u8 BattleScript_TargetAbilityStatRaiseRet[];
extern const u8 BattleScript_DoubleShockRemoveType[]; extern const u8 BattleScript_DoubleShockRemoveType[];
extern const u8 BattleScript_ShellTrapSetUp[];
// zmoves // zmoves
extern const u8 BattleScript_ZMoveActivateDamaging[]; extern const u8 BattleScript_ZMoveActivateDamaging[];

View File

@ -398,7 +398,8 @@
#define EFFECT_SPECIAL_ATTACK_UP_HIT 392 #define EFFECT_SPECIAL_ATTACK_UP_HIT 392
#define EFFECT_VICTORY_DANCE 393 #define EFFECT_VICTORY_DANCE 393
#define EFFECT_CEASELESS_EDGE 394 #define EFFECT_CEASELESS_EDGE 394
#define EFFECT_SHELL_TRAP 395
#define NUM_BATTLE_MOVE_EFFECTS 395 #define NUM_BATTLE_MOVE_EFFECTS 396
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H

View File

@ -632,8 +632,10 @@
#define STRINGID_TARGETTOUGHEDITOUT 630 #define STRINGID_TARGETTOUGHEDITOUT 630
#define STRINGID_ATTACKERLOSTELECTRICTYPE 631 #define STRINGID_ATTACKERLOSTELECTRICTYPE 631
#define STRINGID_ATTACKERSWITCHEDSTATWITHTARGET 632 #define STRINGID_ATTACKERSWITCHEDSTATWITHTARGET 632
#define STRINGID_ATTACKERSETASHELLTRAP 633
#define STRINGID_ATTACKERSHELLTRAPDIDNTWORK 634
#define BATTLESTRINGS_COUNT 633 #define BATTLESTRINGS_COUNT 635
// This is the string id that gBattleStringsTable starts with. // This is the string id that gBattleStringsTable starts with.
// String ids before this (e.g. STRINGID_INTROMSG) are not in the table, // String ids before this (e.g. STRINGID_INTROMSG) are not in the table,

View File

@ -101,7 +101,7 @@ static void SetActionsAndBattlersTurnOrder(void);
static void UpdateBattlerPartyOrdersOnSwitch(void); static void UpdateBattlerPartyOrdersOnSwitch(void);
static bool8 AllAtActionConfirmed(void); static bool8 AllAtActionConfirmed(void);
static void TryChangeTurnOrder(void); static void TryChangeTurnOrder(void);
static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void); static void CheckChosenMoveForEffectsBeforeTurnStarts(void);
static void CheckMegaEvolutionBeforeTurn(void); static void CheckMegaEvolutionBeforeTurn(void);
static void CheckQuickClaw_CustapBerryActivation(void); static void CheckQuickClaw_CustapBerryActivation(void);
static void FreeResetData_ReturnToOvOrDoEvolutions(void); static void FreeResetData_ReturnToOvOrDoEvolutions(void);
@ -4878,7 +4878,7 @@ static void CheckMegaEvolutionBeforeTurn(void)
} }
#if B_MEGA_EVO_TURN_ORDER <= GEN_6 #if B_MEGA_EVO_TURN_ORDER <= GEN_6
gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts;
gBattleStruct->focusPunchBattlerId = 0; gBattleStruct->focusPunchBattlerId = 0;
#else #else
gBattleMainFunc = TryChangeTurnOrder; // This will just do nothing if no mon has mega evolved gBattleMainFunc = TryChangeTurnOrder; // This will just do nothing if no mon has mega evolved
@ -4903,11 +4903,11 @@ static void TryChangeTurnOrder(void)
} }
} }
} }
gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts;
gBattleStruct->focusPunchBattlerId = 0; gBattleStruct->focusPunchBattlerId = 0;
} }
static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) static void CheckChosenMoveForEffectsBeforeTurnStarts(void)
{ {
u32 i; u32 i;
@ -4921,7 +4921,7 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void)
&& !(gDisableStructs[gBattlerAttacker].truantCounter) && !(gDisableStructs[gBattlerAttacker].truantCounter)
&& !(gProtectStructs[gActiveBattler].noValidMoves)) && !(gProtectStructs[gActiveBattler].noValidMoves))
{ {
switch(gChosenMoveByBattler[gActiveBattler]) switch (gChosenMoveByBattler[gActiveBattler])
{ {
case MOVE_FOCUS_PUNCH: case MOVE_FOCUS_PUNCH:
BattleScriptExecute(BattleScript_FocusPunchSetUp); BattleScriptExecute(BattleScript_FocusPunchSetUp);
@ -4929,6 +4929,9 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void)
case MOVE_BEAK_BLAST: case MOVE_BEAK_BLAST:
BattleScriptExecute(BattleScript_BeakBlastSetUp); BattleScriptExecute(BattleScript_BeakBlastSetUp);
return; return;
case MOVE_SHELL_TRAP:
BattleScriptExecute(BattleScript_ShellTrapSetUp);
return;
} }
} }
} }

View File

@ -761,9 +761,13 @@ static const u8 sText_AttackerMeltedTheIce[] = _("{B_ATK_NAME_WITH_PREFIX} melte
static const u8 sText_TargetToughedItOut[] = _("{B_DEF_NAME_WITH_PREFIX} toughed it out\nto show you its best side!"); static const u8 sText_TargetToughedItOut[] = _("{B_DEF_NAME_WITH_PREFIX} toughed it out\nto show you its best side!");
static const u8 sText_AttackerLostElectricType[] = _("{B_ATK_NAME_WITH_PREFIX} used up all\nof its electricity!"); static const u8 sText_AttackerLostElectricType[] = _("{B_ATK_NAME_WITH_PREFIX} used up all\nof its electricity!");
static const u8 sText_AttackerSwitchedStatWithTarget[] = _("{B_ATK_NAME_WITH_PREFIX} switched {B_BUFF1}\nwith its target!"); static const u8 sText_AttackerSwitchedStatWithTarget[] = _("{B_ATK_NAME_WITH_PREFIX} switched {B_BUFF1}\nwith its target!");
static const u8 sText_AttackerSetAShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set\na shell trap!");
static const u8 sText_AttackerShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap\ndidn't work!");
const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
{ {
[STRINGID_ATTACKERSHELLTRAPDIDNTWORK - BATTLESTRINGS_TABLE_START] = sText_AttackerShellTrapDidntWork,
[STRINGID_ATTACKERSETASHELLTRAP - BATTLESTRINGS_TABLE_START] = sText_AttackerSetAShellTrap,
[STRINGID_ATTACKERSWITCHEDSTATWITHTARGET - BATTLESTRINGS_TABLE_START] = sText_AttackerSwitchedStatWithTarget, [STRINGID_ATTACKERSWITCHEDSTATWITHTARGET - BATTLESTRINGS_TABLE_START] = sText_AttackerSwitchedStatWithTarget,
[STRINGID_TARGETTOUGHEDITOUT - BATTLESTRINGS_TABLE_START] = sText_TargetToughedItOut, [STRINGID_TARGETTOUGHEDITOUT - BATTLESTRINGS_TABLE_START] = sText_TargetToughedItOut,
[STRINGID_ATTACKERMELTEDTHEICE - BATTLESTRINGS_TABLE_START] = sText_AttackerMeltedTheIce, [STRINGID_ATTACKERMELTEDTHEICE - BATTLESTRINGS_TABLE_START] = sText_AttackerMeltedTheIce,

View File

@ -10031,7 +10031,7 @@ static void Cmd_various(void)
gBattleMons[gActiveBattler].item = gLastUsedItem; gBattleMons[gActiveBattler].item = gLastUsedItem;
break; break;
case VARIOUS_SET_BEAK_BLAST: case VARIOUS_SET_BEAK_BLAST:
gProtectStructs[gBattlerAttacker].beakBlastCharge = TRUE; gProtectStructs[gActiveBattler].beakBlastCharge = TRUE;
break; break;
case VARIOUS_SWAP_SIDE_STATUSES: case VARIOUS_SWAP_SIDE_STATUSES:
CourtChangeSwapSideStatuses(); CourtChangeSwapSideStatuses();
@ -11926,8 +11926,9 @@ static void Cmd_trysetencore(void)
} }
if (gLastMoves[gBattlerTarget] == MOVE_STRUGGLE if (gLastMoves[gBattlerTarget] == MOVE_STRUGGLE
|| gLastMoves[gBattlerTarget] == MOVE_ENCORE || gLastMoves[gBattlerTarget] == MOVE_ENCORE
|| gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE) || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE
|| gLastMoves[gBattlerTarget] == MOVE_SHELL_TRAP)
{ {
i = MAX_MON_MOVES; i = MAX_MON_MOVES;
} }

View File

@ -11616,7 +11616,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] =
[MOVE_SHELL_TRAP] = [MOVE_SHELL_TRAP] =
{ {
.effect = EFFECT_PLACEHOLDER, // EFFECT_SHELL_TRAP, .effect = EFFECT_SHELL_TRAP,
.power = 150, .power = 150,
.type = TYPE_FIRE, .type = TYPE_FIRE,
.accuracy = 100, .accuracy = 100,