summaryrefslogtreecommitdiff
path: root/battle/effects/curse.asm
diff options
context:
space:
mode:
Diffstat (limited to 'battle/effects/curse.asm')
-rw-r--r--battle/effects/curse.asm98
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
+