diff options
Diffstat (limited to 'engine/battle/move_effects/curse.asm')
-rw-r--r-- | engine/battle/move_effects/curse.asm | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/engine/battle/move_effects/curse.asm b/engine/battle/move_effects/curse.asm new file mode 100644 index 000000000..4861e9a37 --- /dev/null +++ b/engine/battle/move_effects/curse.asm @@ -0,0 +1,93 @@ +BattleCommand_Curse: +; curse + + ld de, wBattleMonType1 + ld bc, wPlayerStatLevels + ld a, [hBattleTurn] + and a + jr z, .go + ld de, wEnemyMonType1 + ld bc, wEnemyStatLevels + +.go + +; Curse is different for Ghost-types. + + ld a, [de] + cp GHOST + jr z, .ghost + inc de + ld a, [de] + cp GHOST + jr z, .ghost + +; If no stats can be increased, don't. + +; Attack + ld a, [bc] + cp MAX_STAT_LEVEL + jr c, .raise + +; Defense + inc bc + ld a, [bc] + cp MAX_STAT_LEVEL + jr nc, .cantraise + +.raise + +; Raise Attack and Defense, and lower Speed. + + ld a, $1 + ld [wKickCounter], a + call AnimateCurrentMove + ld a, SPEED + call LowerStat + call BattleCommand_SwitchTurn + call BattleCommand_StatDownMessage + call ResetMiss + call BattleCommand_SwitchTurn + call BattleCommand_AttackUp + call BattleCommand_StatUpMessage + call ResetMiss + call BattleCommand_DefenseUp + jp BattleCommand_StatUpMessage + +.ghost + +; Cut HP in half and put a curse on the opponent. + + call CheckHiddenOpponent + jr nz, .failed + + call CheckSubstituteOpp + jr nz, .failed + + ld a, BATTLE_VARS_SUBSTATUS1_OPP + call GetBattleVarAddr + bit SUBSTATUS_CURSE, [hl] + jr nz, .failed + + set SUBSTATUS_CURSE, [hl] + call AnimateCurrentMove + ld hl, GetHalfMaxHP + call CallBattleCore + ld hl, SubtractHPFromUser + call CallBattleCore + call UpdateUserInParty + ld hl, PutACurseText + jp StdBattleTextBox + +.failed + call AnimateFailedMove + jp PrintButItFailed + +.cantraise + +; Can't raise either stat. + + ld b, ABILITY + 1 + call GetStatName + call AnimateFailedMove + ld hl, WontRiseAnymoreText + jp StdBattleTextBox |