diff options
Diffstat (limited to 'battle/effects/curse.asm')
-rw-r--r-- | battle/effects/curse.asm | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/battle/effects/curse.asm b/battle/effects/curse.asm new file mode 100644 index 000000000..41ffc3a8d --- /dev/null +++ b/battle/effects/curse.asm @@ -0,0 +1,98 @@ +BattleCommand54: ; 37588 +; curse + + ld de, BattleMonType1 + ld bc, PlayerStatLevels + ld a, [hBattleTurn] + and a + jr z, .go + ld de, EnemyMonType1 + ld bc, EnemyStatLevels + +.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 13 ; max + jr c, .raise + +; Defense + inc bc + ld a, [bc] + cp 13 ; max + jr nc, .cantraise + +.raise + +; Raise Attack and Defense, and lower Speed. + + ld a, $1 + ld [$c689], a + call Function0x37e01 + ld a, $2 + call Function0x36532 + call SwitchTurn + call BattleCommand8d + call ResetMiss + call SwitchTurn + call BattleCommand70 + call BattleCommand8c + call ResetMiss + call BattleCommand71 + jp BattleCommand8c + + +.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 GetBattleVarPair + bit 1, [hl] + jr nz, .failed + + set 1, [hl] + call Function0x37e01 + ld hl, GetHalfMaxHP + call CallBankF + ld hl, Function3cc3f + call CallBankF + call UpdateUserInParty + ld hl, PutACurseText + jp StdBattleTextBox + +.failed + call Function0x37e77 + jp PrintButItFailed + + +.cantraise + +; Can't raise either stat. + + ld b, $8 ; ABILITY + call GetStatName + call Function0x37e77 + ld hl, WontRiseAnymoreText + jp StdBattleTextBox +; 37618 + |