ref: bc4fec06944fbc861bd5559b2733c8a5d1564d73
dir: /engine/battle/move_effects/curse.asm/
BattleCommand_Curse: ld de, wBattleMonType1 ld bc, wPlayerStatLevels ldh 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 [wBattleAnimParam], 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