ref: 9de54645c896cc57a79679aecd6174afc59762c8
parent: 97637e7ce7110c9a20e5fa9222e445700857a9cb
author: xCrystal <rgr.crystal@gmail.com>
date: Tue Feb 3 15:51:53 EST 2015
add constants for volatile statuses and more battle labels/commentary/constants
--- a/constants/status_constants.asm
+++ b/constants/status_constants.asm
@@ -1,6 +1,32 @@
-; status ailments
-SLP EQU %111 ; mask
+; non-volatile statuses
+SLP EQU %111 ; sleep counter
PSN EQU 3
BRN EQU 4
FRZ EQU 5
PAR EQU 6
+
+; volatile statuses 1
+StoringEnergy EQU 0 ; Bide
+ThrashingAbout EQU 1 ; e.g. Thrash
+AttackingMultipleTimes EQU 2 ; e.g. Double Kick, Fury Attack
+Flinched EQU 3
+ChargingUp EQU 4 ; e.g. Solar Beam, Fly
+UsingTrappingMove EQU 5 ; e.g. Wrap
+Invulnerable EQU 6 ; charging up Fly/Dig
+Confused EQU 7
+
+; volatile statuses 2
+UsingXAccuracy EQU 0
+ProtectedByMist EQU 1
+GettingPumped EQU 2 ; Focus Energy
+; EQU 3 ; unused?
+HasSubstituteUp EQU 4
+NeedsToRecharge EQU 5 ; Hyper Beam
+UsingRage EQU 6
+Seeded EQU 7
+
+; volatile statuses 3
+BadlyPoisoned EQU 0
+HasLightScreenUp EQU 1
+HasReflectUp EQU 2
+Transformed EQU 3
--- a/engine/battle/1.asm
+++ b/engine/battle/1.asm
@@ -1,5 +1,5 @@
DrainHPEffect_: ; 783f (1:783f)
- ld hl, W_DAMAGE ; W_DAMAGE
+ ld hl, W_DAMAGE
ld a, [hl]
srl a ; divide damage by 2
ld [hli], a
@@ -16,8 +16,8 @@
ld a, [H_WHOSETURN] ; $fff3
and a
jp z, Func_7861
- ld hl, wEnemyMonHP ; wEnemyMonHP
- ld de, wEnemyMonMaxHP ; wEnemyMonMaxHP
+ ld hl, wEnemyMonHP
+ ld de, wEnemyMonMaxHP
Func_7861: ; 7861 (1:7861)
ld bc, wHPBarOldHP+1
@@ -38,7 +38,7 @@
add b
ld [hld], a
ld [wHPBarNewHP], a
- ld a, [W_DAMAGE] ; W_DAMAGE
+ ld a, [W_DAMAGE]
ld b, [hl]
adc b
ld [hli], a
@@ -83,7 +83,7 @@
and a
ld a, [W_PLAYERMOVEEFFECT] ; wcfd3
jr z, .asm_78d2
- ld a, [W_ENEMYMOVEEFFECT] ; W_ENEMYMOVEEFFECT
+ ld a, [W_ENEMYMOVEEFFECT]
.asm_78d2
cp DREAM_EATER_EFFECT
jr nz, .asm_78d9
--- a/engine/battle/14.asm
+++ b/engine/battle/14.asm
@@ -13,7 +13,7 @@
ld [wCriticalHitOrOHKO], a
ld [wBattleMonSpecies], a
ld [wPartyGainExpFlags], a
- ld [wPlayerMonNumber], a ; wPlayerMonNumber
+ ld [wPlayerMonNumber], a
ld [wEscapedFromBattle], a
ld [wMapPalOffset], a
ld hl, wcf1d
@@ -27,7 +27,7 @@
jr nz, .asm_525e1
inc a
ld [wccd9], a
- ld a, [W_CURMAP] ; W_CURMAP
+ ld a, [W_CURMAP]
cp SAFARI_ZONE_EAST
jr c, .asm_525f9
cp SAFARI_ZONE_REST_HOUSE_1
@@ -45,7 +45,7 @@
ld a, [H_WHOSETURN] ; $fff3
and a
jp z, .asm_52613
- ld hl, wBattleMonStatus ; wBattleMonStatus
+ ld hl, wBattleMonStatus
ld de, W_ENEMYMOVETYPE ; wcfcf
.asm_52613
@@ -69,10 +69,10 @@
push hl
callab MoveHitTest
pop hl
- ld a, [W_MOVEMISSED] ; W_MOVEMISSED
+ ld a, [W_MOVEMISSED]
and a
jr nz, .asm_52659
- set 6, [hl]
+ set PAR, [hl]
callab QuarterSpeedDueToParalysis
ld c, $1e
call DelayFrames
--- a/engine/battle/1a.asm
+++ b/engine/battle/1a.asm
@@ -7,16 +7,19 @@
ld hl, W_PLAYERBATTSTATUS1
ld a, [hli] ; load the W_PLAYERBATTSTATUS1 pokemon status flags and increment hl to load the
; W_PLAYERBATTSTATUS2 status flags later
- and a, 7 ; check to see if bits 0, 1, or 2 are set
+ and a, (1 << StoringEnergy) | (1 << ThrashingAbout) | (1 << AttackingMultipleTimes)
ret nz ; if any of these statuses are true, don't decrement PP
- bit 6, [hl] ; check 6th bit status flag on W_PLAYERBATTSTATUS2
- ret nz ; and return if it is set
+ bit UsingRage, [hl]
+ ret nz ; don't decrement PP either if Pokemon is using Rage
ld hl, wBattleMonPP ; PP of first move (in battle)
- call .DecrementPP
-
- ld a, [W_PLAYERBATTSTATUS3] ; load pokemon status bits?
- bit 3, a ; XXX transform status?
- ret nz ; If it is, return. Pokemon Red stores the "current pokemon's" PP
+
+; decrement PP in the battle struct
+ call .DecrementPP
+
+; decrement PP in the party struct
+ ld a, [W_PLAYERBATTSTATUS3]
+ bit Transformed, a
+ ret nz ; Return if transformed. Pokemon Red stores the "current pokemon's" PP
; separately from the "Pokemon in your party's" PP. This is
; duplication -- in all cases *other* than Pokemon with Transform.
; Normally, this means we have to go on and make the same
@@ -26,12 +29,12 @@
; its opponent, which is *not* the same as its real PP as part of your
; party. So we return, and don't do that part.
- ld hl, wPartyMon1PP ; PP of first move (in party)
- ld a, [wPlayerMonNumber] ; which mon in party is active
- ld bc, $2C ; XXX probably size of party pokemon's data structure
+ ld hl, wPartyMon1PP ; PP of first move (in party)
+ ld a, [wPlayerMonNumber] ; which mon in party is active
+ ld bc, wPartyMon2 - wPartyMon1
call AddNTimes ; calculate address of the mon to modify
.DecrementPP
- ld a, [wPlayerMoveListIndex] ; which move (0, 1, 2, 3) did we use?
+ ld a, [wPlayerMoveListIndex] ; which move (0, 1, 2, 3) did we use?
ld c, a
ld b, 0
add hl ,bc ; calculate the address in memory of the PP we need to decrement
--- a/engine/battle/4_2.asm
+++ b/engine/battle/4_2.asm
@@ -103,15 +103,15 @@
.asm_13888
callab Func_128d8
jr z, .asm_13884
- ld a, [wd0db]
+ ld a, [wRepelRemainingSteps]
and a
jr z, .asm_1389e
dec a
- jr z, .asm_13905
- ld [wd0db], a
+ jr z, .lastRepelStep
+ ld [wRepelRemainingSteps], a
.asm_1389e
-; determine if wild pokémon can appear where we’re standing.
-; are we standing in grass/water?
+; determine if wild pokémon can appear in the half-block we’re standing
+; is the bottom right tile (9,9) of the half-block are we standing a grass/water tile?
hlCoord 9, 9
ld c, [hl]
ld a, [W_GRASSTILE]
@@ -133,6 +133,7 @@
jr z, .CantEncounter
ld a, [W_GRASSRATE]
.CanEncounter
+; weigh encounter chance to a random number to determine if there will be an encounter
ld b, a
ld a, [hRandomAdd]
cp b
@@ -140,20 +141,23 @@
ld a, [hRandomSub]
ld b, a
ld hl, WildMonEncounterSlotChances
-.asm_138d0
+.determineEncounterSlot
ld a, [hli]
cp b
- jr nc, .asm_138d7
+ jr nc, .gotEncounterSlot
inc hl
- jr .asm_138d0
-.asm_138d7
+ jr .determineEncounterSlot
+.gotEncounterSlot
+; determine which wild pokémon (grass or water) can appear in the half-block we’re standing
ld c, [hl]
ld hl, W_GRASSMONS
- aCoord 8, 9
- cp $14
- jr nz, .asm_138e5
+ aCoord 8, 9
+ cp $14 ; is the bottom left tile (8,9) of the half-block are we standing a water tile?
+ jr nz, .gotWildEncounterType ; else, it's treated as a grass tile by default
ld hl, W_WATERMONS
-.asm_138e5
+; since the bottom right tile of a "left shore" half-block is $14 but the bottom left tile is not,
+; "left shore" half-blocks (such as the one in the east coast of Cinnabar), load grass encounters.
+.gotWildEncounterType
ld b, $0
add hl, bc
ld a, [hli]
@@ -161,17 +165,17 @@
ld a, [hl]
ld [wcf91], a
ld [wEnemyMonSpecies2], a
- ld a, [wd0db]
+ ld a, [wRepelRemainingSteps]
and a
- jr z, .asm_13916
+ jr z, .willEncounter
ld a, [wPartyMon1Level]
ld b, a
ld a, [W_CURENEMYLVL]
cp b
jr c, .CantEncounter
- jr .asm_13916
-.asm_13905
- ld [wd0db], a
+ jr .willEncounter
+.lastRepelStep
+ ld [wRepelRemainingSteps], a
ld a, $d2
ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
call EnableAutoTextBoxDrawing
@@ -180,7 +184,7 @@
ld a, $1
and a
ret
-.asm_13916
+.willEncounter
xor a
ret
@@ -282,7 +286,7 @@
pop de
ld a, [W_PLAYERBATTSTATUS1]
.asm_139b8
- bit 6, a ; is mon immune to typical attacks (dig/fly)
+ bit Invulnerable, a ; is mon immune to typical attacks (dig/fly)
jr nz, PrintButItFailedText
ld a, [hli]
ld [de], a
@@ -340,22 +344,22 @@
ld [hli], a
ld [hl], a
ld hl, W_PLAYERBATTSTATUS1
- call Func_13a37
+ call CureStatuses
ld hl, W_ENEMYBATTSTATUS1
- call Func_13a37
+ call CureStatuses
ld hl, Func_3fba8
call Func_139d5
ld hl, StatusChangesEliminatedText
jp PrintText
-Func_13a37: ; 13a37 (4:7a37)
- res 7, [hl]
- inc hl
+CureStatuses: ; 13a37 (4:7a37)
+ res Confused, [hl]
+ inc hl ; BATTSTATUS2
ld a, [hl]
- and $78
- ld [hli], a
+ and (1 << UsingRage) | (1 << NeedsToRecharge) | (1 << HasSubstituteUp) | (1 << 3) ; clear all but these from BATTSTATUS2
+ ld [hli], a ; BATTSTATUS3
ld a, [hl]
- and $f8
+ and %11110000 | (1 << Transformed) ; clear Bad Poison, Reflect and Light Screen statuses
ld [hl], a
ret
@@ -382,8 +386,8 @@
db "@"
GetTrainerName_: ; 13a58 (4:7a58)
- ld hl, W_GRASSRATE ; W_GRASSRATE
- ld a, [W_ISLINKBATTLE] ; W_ISLINKBATTLE
+ ld hl, W_GRASSRATE
+ ld a, [W_ISLINKBATTLE]
and a
jr nz, .rival
ld hl, W_RIVALNAME ; wd34a
--- a/engine/battle/5.asm
+++ b/engine/battle/5.asm
@@ -12,7 +12,7 @@
ld bc, W_ENEMYBATTSTATUS2
.notEnemy
ld a, [bc] ;load flags
- bit 4, a ;user already has substitute?
+ bit HasSubstituteUp, a ;user already has substitute?
jr nz, .alreadyHasSubstitute ;skip this code if so
;user doesn't have a substitute [yet]
push bc
@@ -41,13 +41,13 @@
ld [hl], d ;store low byte HP
ld h, b
ld l, c
- set 4, [hl] ;set bit 4 of flags, user now has substitute
- ld a, [W_OPTIONS] ;load options
- bit 7, a ;battle animation is enabled?
- ld hl, Func_3fba8 ; $7ba8 ;animation enabled: 0F:7BA8
+ set HasSubstituteUp, [hl] ;set bit 4 of flags, user now has substitute
+ ld a, [W_OPTIONS] ;load options
+ bit 7, a ;battle animation is enabled?
+ ld hl, Func_3fba8 ;animation enabled: 0F:7BA8
ld b, BANK(Func_3fba8)
jr z, .animationEnabled
- ld hl, AnimationSubstitute ;animation disabled: 1E:56E0
+ ld hl, AnimationSubstitute ;animation disabled: 1E:56E0
ld b, BANK(AnimationSubstitute)
.animationEnabled
call Bankswitch ;jump to routine depending on animation setting
--- a/engine/battle/9.asm
+++ b/engine/battle/9.asm
@@ -163,9 +163,9 @@
jr z, .asm_27f91
ld hl, W_ENEMYBATTSTATUS2 ; W_ENEMYBATTSTATUS2
.asm_27f91
- bit 2, [hl] ; is mon already using focus energy?
+ bit GettingPumped, [hl] ; is mon already using focus energy?
jr nz, .asm_27fa5
- set 2, [hl] ; mon is now using focus energy
+ set GettingPumped, [hl] ; mon is now using focus energy
callab Func_3fba8
ld hl, GettingPumpedText ; $7fb2
jp PrintText
--- a/engine/battle/a.asm
+++ b/engine/battle/a.asm
@@ -18,9 +18,9 @@
ld a, [de]
cp GRASS
jr z, .asm_2bee7
- bit 7, [hl]
+ bit Seeded, [hl]
jr nz, .asm_2bee7
- set 7, [hl]
+ set Seeded, [hl]
callab Func_3fba8
ld hl, WasSeededText ; $7ef2
jp PrintText
--- a/engine/battle/b_2.asm
+++ b/engine/battle/b_2.asm
@@ -95,27 +95,27 @@
ld a, [wEnemyMonLevel]
.asm_2fec8
add a
- ld [$ff98], a
+ ld [H_DIVIDEND + 3], a
xor a
- ld [$ff95], a
- ld [$ff96], a
- ld [$ff97], a
+ ld [H_DIVIDEND], a
+ ld [H_DIVIDEND + 1], a
+ ld [H_DIVIDEND + 2], a
ld a, $64
- ld [$ff99], a
+ ld [H_DIVISOR], a
ld b, $4
call Divide
- ld a, [$ff98]
+ ld a, [H_QUOTIENT + 3]
ld [hli], a
- ld a, [$ff99]
- ld [$ff98], a
+ ld a, [H_REMAINDER]
+ ld [H_DIVIDEND + 3], a
ld a, $a
- ld [$ff99], a
+ ld [H_DIVISOR], a
ld b, $4
call Divide
- ld a, [$ff98]
+ ld a, [H_QUOTIENT + 3]
swap a
ld b, a
- ld a, [$ff99]
+ ld a, [H_REMAINDER]
add b
ld [hl], a
ld de, wTotalPayDayMoney + 2
--- a/engine/battle/c.asm
+++ b/engine/battle/c.asm
@@ -5,9 +5,9 @@
jr z, .asm_33f36
ld hl, W_ENEMYBATTSTATUS2
.asm_33f36
- bit 1, [hl] ; is mon protected by mist?
+ bit ProtectedByMist, [hl] ; is mon protected by mist?
jr nz, .asm_33f4a
- set 1, [hl] ; mon is now protected by mist
+ set ProtectedByMist, [hl] ; mon is now protected by mist
callab Func_3fba8
ld hl, ShroudedInMistText
jp PrintText
@@ -21,7 +21,7 @@
db "@"
OneHitKOEffect_: ; 33f57 (c:7f57)
- ld hl, W_DAMAGE ; W_DAMAGE
+ ld hl, W_DAMAGE
xor a
ld [hli], a
ld [hl], a ; set the damage output to zero
@@ -45,7 +45,7 @@
ld a, [hl]
sbc b
jr c, .asm_33f8a
- ld hl, W_DAMAGE ; W_DAMAGE
+ ld hl, W_DAMAGE
ld a, $ff
ld [hli], a
ld [hl], a
@@ -54,5 +54,5 @@
ret
.asm_33f8a
ld a, $1
- ld [W_MOVEMISSED], a ; W_MOVEMISSED
+ ld [W_MOVEMISSED], a
ret
--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -385,15 +385,15 @@
xor a
ld [wd11d], a
ld a, [W_PLAYERBATTSTATUS2]
- and %01100000 ; check if the player is using Rage or needs to recharge
+ and (1 << NeedsToRecharge) | (1 << UsingRage) ; check if the player is using Rage or needs to recharge
jr nz, .selectEnemyMove
; the player is not using Rage and doesn't need to recharge
ld hl, W_ENEMYBATTSTATUS1
- res 3, [hl] ; reset flinch bit
+ res Flinched, [hl] ; reset flinch bit
ld hl, W_PLAYERBATTSTATUS1
- res 3, [hl] ; reset flinch bit
+ res Flinched, [hl] ; reset flinch bit
ld a, [hl]
- and %00010010 ; check if the player is thrashing about or charging for an attack
+ and (1 << ThrashingAbout) | (1 << ChargingUp) ; check if the player is thrashing about or charging for an attack
jr nz, .selectEnemyMove ; if so, jump
; the player is neither thrashing about nor charging for an attack
call DisplayBattleMenu ; show battle menu
@@ -405,10 +405,10 @@
and (1 << FRZ) | SLP ; is mon frozen or asleep?
jr nz, .selectEnemyMove ; if so, jump
ld a, [W_PLAYERBATTSTATUS1]
- and %00100001 ; check player is using Bide or using a multi-turn attack like wrap
+ and (1 << StoringEnergy) | (1 << UsingTrappingMove) ; check player is using Bide or using a multi-turn attack like wrap
jr nz, .selectEnemyMove ; if so, jump
ld a, [W_ENEMYBATTSTATUS1]
- bit 5, a ; check if enemy is using a multi-turn attack like wrap
+ bit UsingTrappingMove, a ; check if enemy is using a multi-turn attack like wrap
jr z, .selectPlayerMove ; if not, jump
; enemy is using a mult-turn attack like wrap, so player is trapped and cannot execute a move
ld a, $ff
@@ -446,7 +446,7 @@
jr c, .noLinkBattle
; the link battle enemy has switched mons
ld a, [W_PLAYERBATTSTATUS1]
- bit 5, a ; check if using multi-turn move like Wrap
+ bit UsingTrappingMove, a ; check if using multi-turn move like Wrap
jr z, .asm_3c2dd
ld a, [wPlayerMoveListIndex]
ld hl, wBattleMonMoves
@@ -670,7 +670,7 @@
ld hl, W_ENEMYBATTSTATUS3
ld de, W_ENEMYTOXICCOUNTER
.playersTurn
- bit 0, [hl]
+ bit BadlyPoisoned, [hl]
jr z, .noToxic
ld a, [de] ; increment toxic counter
inc a
@@ -779,7 +779,7 @@
jr nz, .checkEnemy
; player has 0 attacks left
ld hl, W_PLAYERBATTSTATUS1
- res 5, [hl] ; player not using multi-turn attack like wrap any more
+ res UsingTrappingMove, [hl] ; player not using multi-turn attack like wrap any more
.checkEnemy
ld a, [wEnemyNumAttacksLeft]
and a
@@ -786,7 +786,7 @@
ret nz
; enemy has 0 attacks left
ld hl, W_ENEMYBATTSTATUS1
- res 5, [hl] ; enemy not using multi-turn attack like wrap any more
+ res UsingTrappingMove, [hl] ; enemy not using multi-turn attack like wrap any more
ret
HandleEnemyMonFainted: ; 3c525 (f:4525)
@@ -836,7 +836,7 @@
ld [hl], a
.wild
ld hl, W_PLAYERBATTSTATUS1
- res 2, [hl]
+ res AttackingMultipleTimes, [hl]
xor a
ld [W_NUMHITS], a
ld hl, wd065 ; clear enemy statuses
@@ -958,8 +958,8 @@
ld b, a
xor a
ld hl, wEnemyMon1HP
- ld de, $2c
-.asm_3c65a
+ ld de, wEnemyMon2 - wEnemyMon1
+.nextPokemon
or [hl]
inc hl
or [hl]
@@ -966,7 +966,7 @@
dec hl
add hl, de
dec b
- jr nz, .asm_3c65a
+ jr nz, .nextPokemon
and a
ret
@@ -978,7 +978,7 @@
callab DrawEnemyPokeballs
ld a, [W_ISLINKBATTLE]
cp $4
- jr nz, .asm_3c687
+ jr nz, .notLinkBattle
; link battle
call LinkBattleExchangeData
ld a, [wcc3e]
@@ -985,7 +985,7 @@
cp $f
ret z
call LoadScreenTilesFromBuffer1
-.asm_3c687
+.notLinkBattle
call EnemySendOut
xor a
ld [W_ENEMYMOVENUM], a
@@ -1171,11 +1171,11 @@
jr z, .goBackToPartyMenu ; if mon fainted, you have to choose another
ld a, [W_ISLINKBATTLE]
cp $4
- jr nz, .asm_3c7fa
+ jr nz, .notLinkBattle
inc a
ld [wcd6a], a
call LinkBattleExchangeData
-.asm_3c7fa
+.notLinkBattle
xor a
ld [wcd6a], a
call ClearSprites
@@ -1825,7 +1825,7 @@
ld b, $1
call GoPAL_SET
ld hl, W_ENEMYBATTSTATUS1
- res 5, [hl]
+ res UsingTrappingMove, [hl]
ld a, $1
ld [H_WHOSETURN], a
ld a, POOF_ANIM
@@ -2093,14 +2093,14 @@
ld bc, $b
call CopyData ; temporarily save the player name in unused space,
; which is supposed to get overwritten when entering a
- ; map with wild pokémon. due to an oversight, the data
+ ; map with wild Pokémon. Due to an oversight, the data
; may not get overwritten (cinnabar) and the infamous
- ; missingno. glitch can show up.
+ ; Missingno. glitch can show up.
ld hl, .oldManName
ld de, wPlayerName
ld bc, $b
call CopyData
- ; the following simulates the keystrokes by drawing menus on screen
+; the following simulates the keystrokes by drawing menus on screen
hlCoord 9, 14
ld [hl], "▶"
ld c, $50
@@ -2323,13 +2323,13 @@
jp z, BagWasSelected ; if not, go back to the bag menu
ld a, [W_PLAYERBATTSTATUS1]
- bit 5, a ; is the player using a multi-turn move like wrap?
+ bit UsingTrappingMove, a ; is the player using a multi-turn move like wrap?
jr z, .checkIfMonCaptured
ld hl, wPlayerNumAttacksLeft
dec [hl]
jr nz, .checkIfMonCaptured
ld hl, W_PLAYERBATTSTATUS1
- res 5, [hl] ; not using multi-turn move any more
+ res UsingTrappingMove, [hl] ; not using multi-turn move any more
.checkIfMonCaptured
ld a, [wd11c]
@@ -2436,7 +2436,7 @@
predef StatusScreen2
; now we need to reload the enemy mon pic
ld a, [W_ENEMYBATTSTATUS2]
- bit 4, a ; does the enemy mon have a substitute?
+ bit HasSubstituteUp, a ; does the enemy mon have a substitute?
ld hl, AnimationSubstitute
jr nz, .doEnemyMonAnimation
; enemy mon doesn't have substitute
@@ -2771,7 +2771,6 @@
AnyMoveToSelect: ; 3d3f5 (f:53f5)
; return z and Struggle as the selected move if all moves have 0 PP and/or are disabled
-
ld a, STRUGGLE
ld [wPlayerSelectedMove], a
ld a, [W_PLAYERDISABLEDMOVE]
@@ -2986,7 +2985,7 @@
cp $e
jp z, .asm_3d601
cp $d
- jr z, .unableToMove
+ jr z, .unableToSelectMove
cp $4
ret nc
ld [wEnemyMoveListIndex], a
@@ -2998,25 +2997,25 @@
jr .done
.noLinkBattle
ld a, [W_ENEMYBATTSTATUS2]
- and $60 ; need to recharge or using rage
+ and (1 << NeedsToRecharge) | (1 << UsingRage) ; need to recharge or using rage
ret nz
ld hl, W_ENEMYBATTSTATUS1
ld a, [hl]
- and $12 ; using multi-turn move or bide
+ and (1 << ChargingUp) | (1 << ThrashingAbout) ; using a charging move or thrash/petal dance
ret nz
ld a, [wEnemyMonStatus]
and SLP | 1 << FRZ ; sleeping or frozen
ret nz
ld a, [W_ENEMYBATTSTATUS1]
- and $21 ; using fly/dig or thrash/petal dance
+ and (1 << UsingTrappingMove) | (1 << StoringEnergy) ; using a trapping move like wrap or bide
ret nz
ld a, [W_PLAYERBATTSTATUS1]
- bit 5, a ; caught in player's multi-turn move (e.g. wrap)
- jr z, .notCaughtInWrap
-.unableToMove
+ bit UsingTrappingMove, a ; caught in player's trapping move (e.g. wrap)
+ jr z, .canSelectMove
+.unableToSelectMove
ld a, $ff
jr .done
-.notCaughtInWrap
+.canSelectMove
ld hl, wEnemyMonMoves+1 ; 2nd enemy move
ld a, [hld]
and a
@@ -3137,12 +3136,12 @@
.playerHasNoSpecialCondition
call GetCurrentMove
ld hl, W_PLAYERBATTSTATUS1
- bit 4, [hl] ; charging up for attack
+ bit ChargingUp, [hl] ; charging up for attack
jr nz, PlayerCanExecuteChargingMove
call CheckForDisobedience
jp z, ExecutePlayerMoveDone
-Func_3d69a: ; 3d69a (f:569a)
+CheckIfPlayerNeedsToChargeUp: ; 3d69a (f:569a)
ld a, [W_PLAYERMOVEEFFECT]
cp CHARGE_EFFECT
jp z, JumpMoveEffect
@@ -3153,10 +3152,10 @@
; in-battle stuff
PlayerCanExecuteChargingMove: ; 3d6a9 (f:56a9)
ld hl,W_PLAYERBATTSTATUS1
- res 4,[hl] ; reset charging up and invulnerability statuses if mon was charging up for an attack
+ res ChargingUp,[hl] ; reset charging up and invulnerability statuses if mon was charging up for an attack
; being fully paralyzed or hurting oneself in confusion removes charging up status
; resulting in the Pokemon being invulnerable for the whole battle
- res 6,[hl]
+ res Invulnerable,[hl]
PlayerCanExecuteMove: ; 3d6b0 (f:56b0)
call PrintMonName1Text
ld hl,DecrementPP
@@ -3246,12 +3245,12 @@
jp z,ExecutePlayerMoveDone
xor a
ld [wcced],a
- jp Func_3d69a ; if Mirror Move was successful go back to damage calculation for copied move
+ jp CheckIfPlayerNeedsToChargeUp ; if Mirror Move was successful go back to damage calculation for copied move
.metronomeCheck
cp a,METRONOME_EFFECT
jr nz,.next
call MetronomePickMove
- jp Func_3d69a ; Go back to damage calculation for the move picked by Metronome
+ jp CheckIfPlayerNeedsToChargeUp ; Go back to damage calculation for the move picked by Metronome
.next
ld a,[W_PLAYERMOVEEFFECT]
ld hl,ResidualEffects2
@@ -3286,7 +3285,7 @@
call HandleBuildingRage
ld hl,W_PLAYERBATTSTATUS1
- bit 2,[hl]
+ bit AttackingMultipleTimes,[hl]
jr z,.executeOtherEffects
ld a,[wPlayerNumAttacksLeft]
dec a
@@ -3293,7 +3292,7 @@
ld [wPlayerNumAttacksLeft],a
jp nz,asm_3d714 ; for multi-hit moves, apply attack until PlayerNumAttacksLeft hits 0 or the enemy faints.
; damage calculation and accuracy tests only happen for the first hit
- res 2,[hl]
+ res AttackingMultipleTimes,[hl] ; clear attacking multiple times status when all attacks are over
ld hl,MultiHitText
call PrintText
xor a
@@ -3373,7 +3372,6 @@
ld a,[hl]
and a,SLP ; sleep mask
jr z,.FrozenCheck
-
; sleeping
dec a
ld [wBattleMonStatus],a ; decrement number of turns left
@@ -3408,7 +3406,7 @@
.HeldInPlaceCheck
ld a,[W_ENEMYBATTSTATUS1]
- bit 5,a ; is enemy using a mult-turn move like wrap?
+ bit UsingTrappingMove,a ; is enemy using a mult-turn move like wrap?
jp z,.FlinchedCheck
ld hl,CantMoveText
call PrintText
@@ -3417,9 +3415,9 @@
.FlinchedCheck
ld hl,W_PLAYERBATTSTATUS1
- bit 3,[hl]
+ bit Flinched,[hl]
jp z,.HyperBeamCheck
- res 3,[hl] ; reset player's flinch status
+ res Flinched,[hl] ; reset player's flinch status
ld hl,FlinchedText
call PrintText
ld hl,ExecutePlayerMoveDone ; player can't move this turn
@@ -3427,9 +3425,9 @@
.HyperBeamCheck
ld hl,W_PLAYERBATTSTATUS2
- bit 5,[hl]
+ bit NeedsToRecharge,[hl]
jr z,.AnyMoveDisabledCheck
- res 5,[hl] ; reset player's recharge status
+ res NeedsToRecharge,[hl] ; reset player's recharge status
ld hl,MustRechargeText
call PrintText
ld hl,ExecutePlayerMoveDone ; player can't move this turn
@@ -3457,7 +3455,7 @@
dec [hl]
jr nz,.IsConfused
ld hl,W_PLAYERBATTSTATUS1
- res 7,[hl] ; if confused counter hit 0, reset confusion status
+ res Confused,[hl] ; if confused counter hit 0, reset confusion status
ld hl,ConfusedNoMoreText
call PrintText
jr .TriedToUseDisabledMoveCheck
@@ -3473,7 +3471,7 @@
jr c,.TriedToUseDisabledMoveCheck
ld hl,W_PLAYERBATTSTATUS1
ld a,[hl]
- and a,$80 ; if mon hurts itself, clear every other status from W_PLAYERBATTSTATUS1
+ and a, 1 << Confused ; if mon hurts itself, clear every other status from W_PLAYERBATTSTATUS1
ld [hl],a
call HandleSelfConfusionDamage
jr .MonHurtItselfOrFullyParalysed
@@ -3502,7 +3500,8 @@
.MonHurtItselfOrFullyParalysed
ld hl,W_PLAYERBATTSTATUS1
ld a,[hl]
- and a, %11001100 ; clear bide, thrashing, charging up, and multi-turn moves such as warp (redundant, already cleared)
+ ; clear bide, thrashing, charging up, and trapping moves such as warp (already cleared for confusion damage)
+ and a, (1 << AttackingMultipleTimes) | (1 << Flinched) | (1 << Invulnerable) | (1 << Confused)
ld [hl],a
ld a,[W_PLAYERMOVEEFFECT]
cp a,FLY_EFFECT
@@ -3522,7 +3521,7 @@
.BideCheck
ld hl,W_PLAYERBATTSTATUS1
- bit 0,[hl] ; is mon using bide?
+ bit StoringEnergy,[hl] ; is mon using bide?
jr z,.ThrashingAboutCheck
xor a
ld [W_PLAYERMOVENUM],a
@@ -3544,7 +3543,7 @@
jp .returnToHL ; unless mon unleashes energy, can't move this turn
.UnleashEnergy
ld hl,W_PLAYERBATTSTATUS1
- res 0,[hl] ; not using bide any more
+ res StoringEnergy,[hl] ; not using bide any more
ld hl,UnleashedEnergyText
call PrintText
ld a,1
@@ -3571,7 +3570,7 @@
jp .returnToHL
.ThrashingAboutCheck
- bit 1,[hl] ; is mon using thrash or petal dance?
+ bit ThrashingAbout,[hl] ; is mon using thrash or petal dance?
jr z,.MultiturnMoveCheck
ld a,THRASH
ld [W_PLAYERMOVENUM],a
@@ -3583,8 +3582,8 @@
jp nz,.returnToHL
push hl
ld hl,W_PLAYERBATTSTATUS1
- res 1,[hl] ; no longer trashing about
- set 7,[hl] ; confused
+ res ThrashingAbout,[hl] ; no longer trashing about
+ set Confused,[hl] ; confused
call BattleRandom
and a,3
inc a
@@ -3594,7 +3593,7 @@
jp .returnToHL
.MultiturnMoveCheck
- bit 5,[hl] ; is mon using multi-turn move?
+ bit UsingTrappingMove,[hl] ; is mon using multi-turn move?
jp z,.RageCheck
ld hl,AttackContinuesText
call PrintText
@@ -3607,7 +3606,7 @@
.RageCheck
ld a, [W_PLAYERBATTSTATUS2]
- bit 6, a ; is mon using rage?
+ bit UsingRage, a ; is mon using rage?
jp z, .checkPlayerStatusConditionsDone ; if we made it this far, mon can move normally this turn
ld a, RAGE
ld [wd11e], a
@@ -3692,12 +3691,12 @@
ld de, W_PLAYERBATTSTATUS1
ld a, [H_WHOSETURN]
and a
- jr z, .asm_3da97
+ jr z, .removeChargingUp
inc hl
ld de, W_ENEMYBATTSTATUS1
-.asm_3da97
+.removeChargingUp
ld a, [de]
- res 4, a
+ res ChargingUp, a ; end the pokemon's
ld [de], a
ld a, [hl]
ld [wd11e], a
@@ -3728,7 +3727,7 @@
xor a
ld [hli], a
ld [wCriticalHitOrOHKO], a ; self-inflicted confusion damage can't be a Critical Hit
- ld a, $28 ; 40 base power
+ ld a, 40 ; 40 base power
ld [hli], a
xor a
ld [hl], a
@@ -3895,13 +3894,13 @@
ld hl, DoesntAffectMonText
ld a, [wd05b]
and $7f
- jr z, .asm_3dc04
+ jr z, .gotTextToPrint
ld hl, AttackMissedText
ld a, [wCriticalHitOrOHKO]
cp $ff
- jr nz, .asm_3dc04
+ jr nz, .gotTextToPrint
ld hl, UnaffectedText
-.asm_3dc04
+.gotTextToPrint
push de
call PrintText
xor a
@@ -4215,7 +4214,7 @@
ld b, a
ld c, [hl] ; bc = enemy defense
ld a, [W_ENEMYBATTSTATUS3]
- bit 2, a ; check for Reflect
+ bit HasReflectUp, a ; check for Reflect
jr z, .physicalAttackCritCheck
; if the enemy has used Reflect, double the enemy's defense
sla c
@@ -4228,9 +4227,9 @@
; in the case of a critical hit, reset the player's attack and the enemy's defense to their base values
ld c, 3 ; defense stat
call GetEnemyMonStat
- ld a, [$ff97]
+ ld a, [H_PRODUCT + 2]
ld b, a
- ld a, [$ff98]
+ ld a, [H_PRODUCT + 3]
ld c, a
push bc
ld hl, wPartyMon1Attack
@@ -4245,7 +4244,7 @@
ld b, a
ld c, [hl] ; bc = enemy special
ld a, [W_ENEMYBATTSTATUS3]
- bit 1, a ; check for Light Screen
+ bit HasLightScreenUp, a ; check for Light Screen
jr z, .specialAttackCritCheck
; if the enemy has used Light Screen, double the enemy's special
sla c
@@ -4260,9 +4259,9 @@
; in the case of a critical hit, reset the player's and enemy's specials to their base values
ld c, 5 ; special stat
call GetEnemyMonStat
- ld a, [$ff97]
+ ld a, [H_PRODUCT + 2]
ld b, a
- ld a, [$ff98]
+ ld a, [H_PRODUCT + 3]
ld c, a
push bc
ld hl, wPartyMon1Special
@@ -4327,7 +4326,7 @@
ld b, a
ld c, [hl] ; bc = player defense
ld a, [W_PLAYERBATTSTATUS3]
- bit 2, a ; check for Reflect
+ bit HasReflectUp, a ; check for Reflect
jr z, .physicalAttackCritCheck
; if the player has used Reflect, double the player's defense
sla c
@@ -4348,7 +4347,7 @@
push bc
ld c, 2 ; attack stat
call GetEnemyMonStat
- ld hl, $ff97
+ ld hl, H_PRODUCT + 2
pop bc
jr .scaleStats
.specialAttack
@@ -4357,7 +4356,7 @@
ld b, a
ld c, [hl]
ld a, [W_PLAYERBATTSTATUS3]
- bit 1, a ; check for Light Screen
+ bit HasLightScreenUp, a ; check for Light Screen
jr z, .specialAttackCritCheck
; if the player has used Light Screen, double the player's special
sla c
@@ -4380,7 +4379,7 @@
push bc
ld c, 5 ; special stat
call GetEnemyMonStat
- ld hl, $ff97
+ ld hl, H_PRODUCT + 2
pop bc
; if either the offensive or defensive stat is too large to store in a byte, scale both stats by dividing them by 4
; this allows values with up to 10 bits (values up to 1023) to be handled
@@ -4437,9 +4436,9 @@
ld bc, wEnemyMon2 - wEnemyMon1
call AddNTimes
ld a, [hli]
- ld [$ff97], a
+ ld [H_MULTIPLICAND + 1], a
ld a, [hl]
- ld [$ff98], a
+ ld [H_MULTIPLICAND + 2], a
pop bc
pop de
ret
@@ -4671,7 +4670,7 @@
dec hl
ld c, [hl] ; read move id
ld a, [de]
- bit 2, a ; test for focus energy
+ bit GettingPumped, a ; test for focus energy
jr nz, .focusEnergyUsed ; bug: using focus energy causes a shift to the right instead of left,
; resulting in 1/4 the usual crit chance
sla b ; (effective (base speed/2)*2)
@@ -4858,7 +4857,7 @@
or b
jr z,ApplyAttackToEnemyPokemonDone ; we're done if damage is 0
ld a,[W_ENEMYBATTSTATUS2]
- bit 4,a ; does the enemy have a substitute?
+ bit HasSubstituteUp,a ; does the enemy have a substitute?
jp nz,AttackSubstitute
; subtract the damage from the pokemon's current HP
; also, save the current HP at wHPBarOldHP
@@ -4977,7 +4976,7 @@
or b
jr z,ApplyAttackToPlayerPokemonDone ; we're done if damage is 0
ld a,[W_PLAYERBATTSTATUS2]
- bit 4,a ; does the player have a substitute?
+ bit HasSubstituteUp,a ; does the player have a substitute?
jp nz,AttackSubstitute
; subtract the damage from the pokemon's current HP
; also, save the current HP at wHPBarOldHP and the new HP at wHPBarNewHP
@@ -5095,7 +5094,7 @@
ld de,wPlayerMonStatMods
ld bc,W_PLAYERMOVENUM
.next
- bit 6,[hl] ; is the pokemon being attacked under the effect of Rage?
+ bit UsingRage,[hl] ; is the pokemon being attacked under the effect of Rage?
ret z ; return if not
ld a,[de]
cp a,$0d ; maximum stat modifier value
@@ -5103,7 +5102,7 @@
ld a,[H_WHOSETURN]
xor a,$01 ; flip turn for the stat modifier raising function
ld [H_WHOSETURN],a
-; change the target pokemon's move to $00 and the effect to the one
+; temporarily change the target pokemon's move to $00 and the effect to the one
; that causes the attack modifier to go up one stage
ld h,b
ld l,c
@@ -5414,7 +5413,7 @@
cp a,DREAM_EATER_EFFECT
jr nz,.swiftCheck
ld a,[bc]
- and a,$07 ; is the target pokemon sleeping?
+ and a,SLP ; is the target pokemon sleeping?
jp z,.moveMissed
.swiftCheck
ld a,[de]
@@ -5429,7 +5428,7 @@
cp a,DREAM_EATER_EFFECT
jp z,.moveMissed
.checkForDigOrFlyStatus
- bit 6,[hl]
+ bit Invulnerable,[hl]
jp nz,.moveMissed
ld a,[H_WHOSETURN]
and a
@@ -5439,11 +5438,11 @@
ld a,[W_PLAYERMOVEEFFECT]
cp a,ATTACK_DOWN1_EFFECT
jr c,.skipEnemyMistCheck
- cp a,BIDE_EFFECT
+ cp a,HAZE_EFFECT + 1
jr c,.enemyMistCheck
- cp a,$3a
+ cp a,ATTACK_DOWN2_EFFECT
jr c,.skipEnemyMistCheck
- cp a,POISON_EFFECT
+ cp a,REFLECT_EFFECT + 1
jr c,.enemyMistCheck
jr .skipEnemyMistCheck
.enemyMistCheck
@@ -5450,16 +5449,15 @@
; if move effect is from $12 to $19 inclusive or $3a to $41 inclusive
; i.e. the following moves
; GROWL, TAIL WHIP, LEER, STRING SHOT, SAND-ATTACK, SMOKESCREEN, KINESIS,
-; FLASH, CONVERSION, HAZE*, SCREECH, LIGHT SCREEN*, REFLECT*
+; FLASH, CONVERSION*, HAZE*, SCREECH, LIGHT SCREEN*, REFLECT*
; the moves that are marked with an asterisk are not affected since this
; function is not called when those moves are used
-; XXX are there are any others like those three?
ld a,[W_ENEMYBATTSTATUS2]
- bit 1,a ; is mon protected by mist?
+ bit ProtectedByMist,a ; is mon protected by mist?
jp nz,.moveMissed
.skipEnemyMistCheck
ld a,[W_PLAYERBATTSTATUS2]
- bit 0,a ; is the player using X Accuracy?
+ bit UsingXAccuracy,a ; is the player using X Accuracy?
ret nz ; if so, always hit regardless of accuracy/evasion
jr .calcHitChance
.enemyTurn
@@ -5466,21 +5464,21 @@
ld a,[W_ENEMYMOVEEFFECT]
cp a,ATTACK_DOWN1_EFFECT
jr c,.skipPlayerMistCheck
- cp a,BIDE_EFFECT
+ cp a,HAZE_EFFECT + 1
jr c,.playerMistCheck
- cp a,$3a
+ cp a,ATTACK_DOWN2_EFFECT
jr c,.skipPlayerMistCheck
- cp a,POISON_EFFECT
+ cp a,REFLECT_EFFECT + 1
jr c,.playerMistCheck
jr .skipPlayerMistCheck
.playerMistCheck
; similar to enemy mist check
ld a,[W_PLAYERBATTSTATUS2]
- bit 1,a ; is mon protected by mist?
+ bit ProtectedByMist,a ; is mon protected by mist?
jp nz,.moveMissed
.skipPlayerMistCheck
ld a,[W_ENEMYBATTSTATUS2]
- bit 0,a ; is the enemy using X Accuracy?
+ bit UsingXAccuracy,a ; is the enemy using X Accuracy?
ret nz ; if so, always hit regardless of accuracy/evasion
.calcHitChance
call CalcHitChance ; scale the move accuracy according to attacker's accuracy and target's evasion
@@ -5510,11 +5508,11 @@
jr z,.playerTurn2
.enemyTurn2
ld hl,W_ENEMYBATTSTATUS1
- res 5,[hl] ; end multi-turn attack e.g. wrap
+ res UsingTrappingMove,[hl] ; end multi-turn attack e.g. wrap
ret
.playerTurn2
ld hl,W_PLAYERBATTSTATUS1
- res 5,[hl] ; end multi-turn attack e.g. wrap
+ res UsingTrappingMove,[hl] ; end multi-turn attack e.g. wrap
ret
; values for player turn
@@ -5631,14 +5629,14 @@
jp z, ExecuteEnemyMoveDone
ld a, [W_ISLINKBATTLE]
cp $4
- jr nz, .asm_3e6dc
+ jr nz, .executeEnemyMove
ld b, $1
ld a, [wcc3e]
cp $e
- jr z, .asm_3e6dc
+ jr z, .executeEnemyMove
cp $4
ret nc
-.asm_3e6dc
+.executeEnemyMove
ld hl, wccd5
inc [hl]
xor a
@@ -5651,21 +5649,21 @@
jp [hl]
.enemyHasNoSpecialConditions
ld hl, W_ENEMYBATTSTATUS1
- bit 4, [hl] ; is the enemy charging up for attack?
- jr nz, enemyCanExecuteChargingMove ; if so, jump
+ bit ChargingUp, [hl] ; is the enemy charging up for attack?
+ jr nz, EnemyCanExecuteChargingMove ; if so, jump
call GetCurrentMove
-Func_3e6fc: ; 3e6fc (f:66fc)
+CheckIfEnemyNeedsToChargeUp: ; 3e6fc (f:66fc)
ld a, [W_ENEMYMOVEEFFECT]
cp CHARGE_EFFECT
jp z, JumpMoveEffect
cp FLY_EFFECT
jp z, JumpMoveEffect
- jr enemyCanExecuteMove
-enemyCanExecuteChargingMove: ; 3e70b (f:670b)
+ jr EnemyCanExecuteMove
+EnemyCanExecuteChargingMove: ; 3e70b (f:670b)
ld hl, W_ENEMYBATTSTATUS1
- res 4, [hl] ; no longer charging up for attack
- res 6, [hl] ; no longer invulnerable to typical attacks
+ res ChargingUp, [hl] ; no longer charging up for attack
+ res Invulnerable, [hl] ; no longer invulnerable to typical attacks
ld a, [W_ENEMYMOVENUM]
ld [wd0b5], a
ld a, BANK(MoveNames)
@@ -5675,7 +5673,7 @@
call GetName
ld de, wcd6d
call CopyStringToCF4B
-enemyCanExecuteMove: ; 3e72b (f:672b)
+EnemyCanExecuteMove: ; 3e72b (f:672b)
xor a
ld [wcced], a
call PrintMonName1Text
@@ -5733,7 +5731,7 @@
asm_3e7a4: ; 3e7a4 (f:67a4)
push af
ld a, [W_ENEMYBATTSTATUS2]
- bit 4, a ; does mon have a substitute?
+ bit HasSubstituteUp, a ; does mon have a substitute?
ld hl, Func_79747
ld b, BANK(Func_79747)
call nz, Bankswitch
@@ -5744,7 +5742,7 @@
call HandleExplodingAnimation
call DrawEnemyHUDAndHPBar
ld a, [W_ENEMYBATTSTATUS2]
- bit 4, a ; does mon have a substitute?
+ bit HasSubstituteUp, a ; does mon have a substitute?
ld hl, Func_79771
ld b, BANK(Func_79771)
call nz, Bankswitch ; slide the substitute's sprite out
@@ -5771,12 +5769,12 @@
jr nz, .notMirrorMoveEffect
call MirrorMoveCopyMove
jp z, ExecuteEnemyMoveDone
- jp Func_3e6fc
+ jp CheckIfEnemyNeedsToChargeUp
.notMirrorMoveEffect
cp METRONOME_EFFECT
jr nz, .notMetronomeEffect
call MetronomePickMove
- jp Func_3e6fc
+ jp CheckIfEnemyNeedsToChargeUp
.notMetronomeEffect
ld a, [W_ENEMYMOVEEFFECT]
ld hl, ResidualEffects2
@@ -5810,7 +5808,7 @@
ret z
call HandleBuildingRage
ld hl, W_ENEMYBATTSTATUS1
- bit 2, [hl] ; is mon hitting multiple times? (example: double kick)
+ bit AttackingMultipleTimes, [hl] ; is mon hitting multiple times? (example: double kick)
jr z, .asm_3e873
push hl
ld hl, wEnemyNumAttacksLeft
@@ -5817,7 +5815,7 @@
dec [hl]
pop hl
jp nz, Func_3e794
- res 2, [hl] ; mon is no longer hitting multiple times
+ res AttackingMultipleTimes, [hl] ; mon is no longer hitting multiple times
ld hl, HitXTimesText
call PrintText
xor a
@@ -5877,7 +5875,7 @@
jp .enemyReturnToHL
.checkIfTrapped
ld a, [W_PLAYERBATTSTATUS1]
- bit 5, a ; is the player using a multi-turn attack like warp
+ bit UsingTrappingMove, a ; is the player using a multi-turn attack like warp
jp z, .checkIfFlinched
ld hl, CantMoveText
call PrintText
@@ -5885,9 +5883,9 @@
jp .enemyReturnToHL
.checkIfFlinched
ld hl, W_ENEMYBATTSTATUS1
- bit 3, [hl] ; check if enemy mon flinched
+ bit Flinched, [hl] ; check if enemy mon flinched
jp z, .checkIfMustRecharge
- res 3, [hl]
+ res Flinched, [hl]
ld hl, FlinchedText
call PrintText
ld hl, ExecuteEnemyMoveDone
@@ -5894,9 +5892,9 @@
jp .enemyReturnToHL
.checkIfMustRecharge
ld hl, W_ENEMYBATTSTATUS2
- bit 5, [hl] ; check if enemy mon has to recharge after using a move
+ bit NeedsToRecharge, [hl] ; check if enemy mon has to recharge after using a move
jr z, .checkIfAnyMoveDisabled
- res 5, [hl]
+ res NeedsToRecharge, [hl]
ld hl, MustRechargeText
call PrintText
ld hl, ExecuteEnemyMoveDone
@@ -5922,7 +5920,7 @@
dec [hl]
jr nz, .isConfused
ld hl, W_ENEMYBATTSTATUS1
- res 7, [hl]
+ res Confused, [hl]
ld hl, ConfusedNoMoreText
call PrintText
jp .checkIfTriedToUseDisabledMove
@@ -5938,7 +5936,7 @@
jr c, .checkIfTriedToUseDisabledMove
ld hl, W_ENEMYBATTSTATUS1
ld a, [hl]
- and $80
+ and 1 << Confused
ld [hl], a
ld hl, HurtItselfText
call PrintText
@@ -5958,7 +5956,7 @@
xor a
ld [hli], a
ld [wCriticalHitOrOHKO], a
- ld a, $28
+ ld a, 40
ld [hli], a
xor a
ld [hl], a
@@ -6003,7 +6001,8 @@
.monHurtItselfOrFullyParalysed
ld hl, W_ENEMYBATTSTATUS1
ld a, [hl]
- and $cc ; clear bide, thrashing, charging up, and multi-turn moves such as warp
+ ; clear bide, thrashing about, charging up, and multi-turn moves such as warp
+ and (1 << AttackingMultipleTimes) | (1 << Flinched) | (1 << Invulnerable) | (1 << Confused)
ld [hl], a
ld a, [W_ENEMYMOVEEFFECT]
cp FLY_EFFECT
@@ -6021,7 +6020,7 @@
jp .enemyReturnToHL
.checkIfUsingBide
ld hl, W_ENEMYBATTSTATUS1
- bit 0, [hl] ; is mon using bide?
+ bit StoringEnergy, [hl] ; is mon using bide?
jr z, .checkIfThrashingAbout
xor a
ld [W_ENEMYMOVENUM], a
@@ -6043,7 +6042,7 @@
jp .enemyReturnToHL
.unleashEnergy
ld hl, W_ENEMYBATTSTATUS1
- res 0, [hl] ; not using bide any more
+ res StoringEnergy, [hl] ; not using bide any more
ld hl, UnleashedEnergyText
call PrintText
ld a, $1
@@ -6070,7 +6069,7 @@
ld hl, asm_3e782
jp .enemyReturnToHL
.checkIfThrashingAbout
- bit 1, [hl] ; is mon using thrash or petal dance?
+ bit ThrashingAbout, [hl] ; is mon using thrash or petal dance?
jr z, .checkIfUsingMultiturnMove
ld a, THRASH
ld [W_ENEMYMOVENUM], a
@@ -6082,8 +6081,8 @@
jp nz, .enemyReturnToHL
push hl
ld hl, W_ENEMYBATTSTATUS1
- res 1, [hl] ; mon is no longer using thrash or petal dance
- set 7, [hl] ; mon is now confused
+ res ThrashingAbout, [hl] ; mon is no longer using thrash or petal dance
+ set Confused, [hl] ; mon is now confused
call BattleRandom
and $3
inc a
@@ -6092,7 +6091,7 @@
pop hl
jp .enemyReturnToHL
.checkIfUsingMultiturnMove
- bit 5, [hl] ; is mon using multi-turn move?
+ bit UsingTrappingMove, [hl] ; is mon using multi-turn move?
jp z, .checkIfUsingRage
ld hl, AttackContinuesText
call PrintText
@@ -6103,7 +6102,7 @@
jp .enemyReturnToHL
.checkIfUsingRage
ld a, [W_ENEMYBATTSTATUS2]
- bit 6, a ; is mon using rage?
+ bit UsingRage, a ; is mon using rage?
jp z, .checkEnemyStatusConditionsDone
ld a, RAGE
ld [wd11e], a
@@ -6111,7 +6110,7 @@
call CopyStringToCF4B
xor a
ld [W_ENEMYMOVEEFFECT], a
- ld hl, enemyCanExecuteMove
+ ld hl, EnemyCanExecuteMove
jp .enemyReturnToHL
.enemyReturnToHL
xor a ; set Z flag
@@ -6161,7 +6160,7 @@
ld [wd0b5], a
call GetMonHeader
ld a, [W_ENEMYBATTSTATUS3]
- bit 3, a ; is enemy mon transformed?
+ bit Transformed, a ; is enemy mon transformed?
ld hl, wcceb ; copied DVs from when it used Transform
ld a, [hli]
ld b, [hl]
@@ -6193,7 +6192,7 @@
cp $2 ; is it a trainer battle?
jr z, .copyHPAndStatusFromPartyData
ld a, [W_ENEMYBATTSTATUS3]
- bit 3, a ; is enemy mon transformed?
+ bit Transformed, a ; is enemy mon transformed?
jr nz, .copyTypes ; if transformed, jump
; if it's a wild mon and not transformed, init the current HP to max HP and the status to 0
ld a, [wEnemyMonMaxHP]
@@ -6713,13 +6712,13 @@
push hl
push bc
- ld a, [wccde]
+ ld a, [wLinkBattleRNCount]
ld c, a
ld b, 0
ld hl, wd148
add hl, bc
inc a
- ld [wccde], a
+ ld [wLinkBattleRNCount], a
cp 9
ld a, [hl]
pop bc
@@ -6726,21 +6725,24 @@
pop hl
ret c
+; if we picked the last seed, we need to recalculate the nine seeds
push hl
push bc
push af
-
+
+; point to seed 0 so we pick the first number the next time
xor a
- ld [wccde], a
-
+ ld [wLinkBattleRNCount], a
ld hl, wd148
ld b, 9
.loop
ld a, [hl]
ld c, a
+; multiply by 5
add a
add a
add c
+; add 1
inc a
ld [hli], a
dec b
@@ -6769,7 +6771,7 @@
ret nz
.asm_3eef1
ld a, [de]
- bit 6, a ; fly/dig
+ bit Invulnerable, a ; fly/dig
ret nz
ld a, [hli]
cp GHOST
@@ -7190,8 +7192,8 @@
.sleepEffect
ld a, [bc]
- bit 5, a ; does the target need to recharge? (hyper beam)
- res 5, a ; target no longer needs to recharge
+ bit NeedsToRecharge, a ; does the target need to recharge? (hyper beam)
+ res NeedsToRecharge, a ; target no longer needs to recharge
ld [bc], a
jr nz, .setSleepCounter ; if the target had to recharge, all hit tests will be skipped
; including the event where the target already has another status
@@ -7290,7 +7292,7 @@
.ok
cp TOXIC
jr nz, .normalPoison ; done if move is not Toxic
- set 0, [hl] ; else set Toxic battstatus
+ set BadlyPoisoned, [hl] ; else set Toxic battstatus
xor a
ld [de], a
ld hl, BadlyPoisonedText
@@ -7345,7 +7347,7 @@
inc hl
ld [hl], a ; set mon's status to 0
ld a, [de]
- res 7, a ; clear mon's leech seed status
+ res Seeded, a ; clear mon's leech seed status
ld [de], a
ret
@@ -7421,7 +7423,7 @@
cp b
ret z
ld a, [W_ENEMYMOVEEFFECT]
- cp a, 7
+ cp a, PARALYZE_SIDE_EFFECT1 + 1
ld b, $1a
jr c, .next1
ld b, $4d
@@ -7512,7 +7514,7 @@
.statModifierUpEffect
ld a, [de]
sub ATTACK_UP1_EFFECT
- cp $8
+ cp EVASION_UP1_EFFECT + $3 - ATTACK_UP1_EFFECT ; covers all +1 effects
jr c, .incrementStatMod
sub ATTACK_UP2_EFFECT - ATTACK_UP1_EFFECT ; map +2 effects to equivalent +1 effect
.incrementStatMod
@@ -7523,7 +7525,7 @@
inc b ; increment corresponding stat mod
ld a, $d
cp b ; can't raise stat past +6 ($d or 13)
- jp c, Func_3f522
+ jp c, PrintNothingHappenedText
ld a, [de]
cp ATTACK_UP1_EFFECT + $8 ; is it a +2 effect?
jr c, .ok
@@ -7539,7 +7541,7 @@
jr nc, UpdateStatDone ; jump if mod affected is evasion/accuracy
push hl
ld hl, wBattleMonAttack + 1
- ld de, wcd12
+ ld de, wPlayerMonUnmodifiedAttack
ld a, [H_WHOSETURN]
and a
jr z, .pointToStats
@@ -7558,10 +7560,10 @@
.checkIf999
pop bc
ld a, [hld]
- sub $e7 ; check if stat is already 999
+ sub 999 % $100 ; check if stat is already 999
jr nz, .recalculateStat
ld a, [hl]
- sbc $3
+ sbc 999 / $100
jp z, Func_3f520
.recalculateStat ; recalculate affected stat
; paralysis and burn penalties, as well as badge boosts are ignored
@@ -7575,35 +7577,35 @@
add hl, bc
pop bc
xor a
- ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND)
+ ld [H_MULTIPLICAND], a
ld a, [de]
- ld [$ff97], a
+ ld [H_MULTIPLICAND + 1], a
inc de
ld a, [de]
- ld [$ff98], a
+ ld [H_MULTIPLICAND + 2], a
ld a, [hli]
- ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
+ ld [H_MULTIPLIER], a
call Multiply
ld a, [hl]
- ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
+ ld [H_DIVISOR], a
ld b, $4
call Divide
pop hl
; cap at 999
- ld a, [$ff98]
- sub $e7
- ld a, [$ff97]
- sbc $3
+ ld a, [H_PRODUCT + 3]
+ sub 999 % $100
+ ld a, [H_PRODUCT + 2]
+ sbc 999 / $100
jp c, UpdateStat
ld a, 999 / $100
- ld [$ff97], a
+ ld [H_MULTIPLICAND + 1], a
ld a, 999 % $100
- ld [$ff98], a
+ ld [H_MULTIPLICAND + 2], a
UpdateStat: ; 3f4c3 (f:74c3)
- ld a, [$ff97]
+ ld a, [H_PRODUCT + 2]
ld [hli], a
- ld a, [$ff98]
+ ld a, [H_PRODUCT + 3]
ld [hl], a
pop hl
UpdateStatDone: ; 3f4ca (f:74ca)
@@ -7623,7 +7625,7 @@
ld a, [de]
cp MINIMIZE
jr nz, .asm_3f4f9
- bit 4, [hl] ; substitute
+ bit HasSubstituteUp, [hl] ; substitute
push af
push bc
ld hl, Func_79747
@@ -7659,7 +7661,7 @@
pop hl
dec [hl]
-Func_3f522: ; 3f522 (f:7522)
+PrintNothingHappenedText: ; 3f522 (f:7522)
ld hl, NothingHappenedText
jp PrintText
@@ -7700,7 +7702,7 @@
cp $4
jr z, .statModifierDownEffect
call BattleRandom
- cp $40 ; 1/4 chance to miss by wildmon
+ cp $40 ; 1/4 chance to miss by in regular battle
jp c, MoveMissed
.statModifierDownEffect
call CheckTargetSubstitute ; can't hit through substitute
@@ -7726,13 +7728,13 @@
and a
jp nz, MoveMissed
ld a, [bc]
- bit 6, a ; fly/dig
+ bit Invulnerable, a ; fly/dig
jp nz, MoveMissed
ld a, [de]
sub ATTACK_DOWN1_EFFECT
- cp $8
+ cp EVASION_DOWN1_EFFECT + $3 - ATTACK_DOWN1_EFFECT ; covers al -1 effects
jr c, .decrementStatMod
- sub ATTACK_DOWN2_EFFECT - ATTACK_DOWN1_EFFECT ; map +2 effects to corresponding +1 effect
+ sub ATTACK_DOWN2_EFFECT - ATTACK_DOWN1_EFFECT ; map -2 effects to corresponding -1 effect
.decrementStatMod
ld c, a
ld b, $0
@@ -7741,9 +7743,9 @@
dec b ; dec corresponding stat mod
jp z, CantLowerAnymore ; if stat mod is 1 (-6), can't lower anymore
ld a, [de]
- cp $24
+ cp ATTACK_DOWN2_EFFECT - $16 ; $24
jr c, .ok
- cp $44
+ cp EVASION_DOWN2_EFFECT + $5 ; $44
jr nc, .ok
dec b ; stat down 2 effects only (dec mod again)
jr nz, .ok
@@ -7752,7 +7754,7 @@
ld [hl], b ; save modified mod
ld a, c
cp $4
- jr nc, UpdateStat2Done ; jump for evasion/accuracy
+ jr nc, UpdateLoweredStatDone ; jump for evasion/accuracy
push hl
push de
ld hl, wEnemyMonAttack + 1
@@ -7761,7 +7763,7 @@
and a
jr z, .pointToStat
ld hl, wBattleMonAttack + 1
- ld de, wcd12
+ ld de, wPlayerMonUnmodifiedAttack
.pointToStat
push bc
sla c
@@ -7793,37 +7795,37 @@
add hl, bc
pop bc
xor a
- ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND)
+ ld [H_MULTIPLICAND], a
ld a, [de]
- ld [$ff97], a
+ ld [H_MULTIPLICAND + 1], a
inc de
ld a, [de]
- ld [$ff98], a
+ ld [H_MULTIPLICAND + 2], a
ld a, [hli]
- ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
+ ld [H_MULTIPLIER], a
call Multiply
ld a, [hl]
- ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
+ ld [H_DIVISOR], a
ld b, $4
call Divide
pop hl
- ld a, [$ff98]
+ ld a, [H_PRODUCT + 3]
ld b, a
- ld a, [$ff97]
+ ld a, [H_PRODUCT + 2]
or b
- jp nz, UpdateStat2
- ld [$ff97], a
+ jp nz, UpdateLoweredStat
+ ld [H_MULTIPLICAND + 1], a
ld a, $1
- ld [$ff98], a
+ ld [H_MULTIPLICAND + 2], a
-UpdateStat2: ; 3f624 (f:7624)
- ld a, [$ff97]
+UpdateLoweredStat: ; 3f624 (f:7624)
+ ld a, [H_PRODUCT + 2]
ld [hli], a
- ld a, [$ff98]
+ ld a, [H_PRODUCT + 3]
ld [hl], a
pop de
pop hl
-UpdateStat2Done: ; 3f62c (f:762c)
+UpdateLoweredStatDone: ; 3f62c (f:762c)
ld b, c
inc b
push de
@@ -7941,7 +7943,7 @@
ld de, wcd05
ld bc, wEnemyNumAttacksLeft
.bideEffect
- set 0, [hl] ; mon is now using bide
+ set StoringEnergy, [hl] ; mon is now using bide
xor a
ld [de], a
inc de
@@ -7966,7 +7968,7 @@
ld hl, W_ENEMYBATTSTATUS1
ld de, wEnemyNumAttacksLeft
.thrashPetalDanceEffect
- set 1, [hl] ; mon is now using thrash/petal dance
+ set ThrashingAbout, [hl] ; mon is now using thrash/petal dance
call BattleRandom
and $1
inc a
@@ -8102,9 +8104,9 @@
ld de, wEnemyNumAttacksLeft
ld bc, wcd05
.twoToFiveAttacksEffect
- bit 2, [hl] ; is mon attacking multiple times?
+ bit AttackingMultipleTimes, [hl] ; is mon attacking multiple times?
ret nz
- set 2, [hl] ; mon is now attacking multiple times
+ set AttackingMultipleTimes, [hl] ; mon is now attacking multiple times
ld hl, W_PLAYERMOVEEFFECT
ld a, [H_WHOSETURN]
and a
@@ -8156,7 +8158,7 @@
call BattleRandom
cp b
ret nc
- set 3, [hl] ; set mon's status to flinching
+ set Flinched, [hl] ; set mon's status to flinching
call ClearHyperBeam
ret
@@ -8176,18 +8178,18 @@
ld de, W_ENEMYMOVEEFFECT
ld b, ANIM_AF
.chargeEffect
- set 4, [hl]
+ set ChargingUp, [hl]
ld a, [de]
dec de ; de contains enemy or player MOVENUM
cp FLY_EFFECT
jr nz, .notFly
- set 6, [hl] ; mon is now invulnerable to typical attacks (fly/dig)
+ set Invulnerable, [hl] ; mon is now invulnerable to typical attacks (fly/dig)
ld b, TELEPORT ; load Teleport's animation
.notFly
ld a, [de]
cp DIG
jr nz, .notDigOrFly
- set 6, [hl] ; mon is now invulnerable to typical attacks (fly/dig)
+ set Invulnerable, [hl] ; mon is now invulnerable to typical attacks (fly/dig)
ld b, ANIM_C0
.notDigOrFly
xor a
@@ -8256,11 +8258,11 @@
ld hl, W_ENEMYBATTSTATUS1
ld de, wEnemyNumAttacksLeft
.trappingEffect
- bit 5, [hl]
+ bit UsingTrappingMove, [hl]
ret nz
call ClearHyperBeam ; since this effect is called before testing whether the move will hit,
; the target won't need to recharge even if the trapping move missed
- set 5, [hl] ; mon is now using a trapping move
+ set UsingTrappingMove, [hl] ; mon is now using a trapping move
call BattleRandom ; 3/8 chance for 2 and 3 attacks, and 1/8 chance for 4 and 5 attacks
and $3
cp $2
@@ -8312,9 +8314,9 @@
ld bc, W_PLAYERCONFUSEDCOUNTER
ld a, [W_ENEMYMOVEEFFECT]
.confuseTarget
- bit 7, [hl] ; is mon confused?
+ bit Confused, [hl] ; is mon confused?
jr nz, ConfusionEffectFailed
- set 7, [hl] ; mon is now confused
+ set Confused, [hl] ; mon is now confused
push af
call BattleRandom
and $3
@@ -8355,7 +8357,7 @@
jr z, .hyperBeamEffect
ld hl, W_ENEMYBATTSTATUS2
.hyperBeamEffect
- set 5, [hl] ; mon now needs to recharge
+ set NeedsToRecharge, [hl] ; mon now needs to recharge
ret
ClearHyperBeam: ; 3f9cf (f:79cf)
@@ -8366,7 +8368,7 @@
jr z, .asm_3f9db
ld hl, W_PLAYERBATTSTATUS2
.asm_3f9db
- res 5, [hl] ; mon no longer needs to recharge
+ res NeedsToRecharge, [hl] ; mon no longer needs to recharge
pop hl
ret
@@ -8377,7 +8379,7 @@
jr z, .player
ld hl, W_ENEMYBATTSTATUS2
.player
- set 6, [hl] ; mon is now in "rage" mode
+ set UsingRage, [hl] ; mon is now in "rage" mode
ret
MimicEffect: ; 3f9ed (f:79ed)
@@ -8398,7 +8400,7 @@
ld hl, wEnemyMonMoves
ld a, [W_ENEMYBATTSTATUS1]
.asm_3fa13
- bit 6, a
+ bit Invulnerable, a
jr nz, .asm_3fa74
.asm_3fa17
push hl
@@ -8422,7 +8424,7 @@
jr .asm_3fa5f
.asm_3fa3a
ld a, [W_ENEMYBATTSTATUS1]
- bit 6, a
+ bit Invulnerable, a
jr nz, .asm_3fa74
ld a, [wCurrentMenuItem]
push af
@@ -8627,12 +8629,12 @@
CheckTargetSubstitute: ; 3fb79 (f:7b79)
push hl
ld hl, W_ENEMYBATTSTATUS2
- ld a, [$fff3] ;whose turn?
+ ld a, [$fff3]
and a
jr z, .next1
ld hl, W_PLAYERBATTSTATUS2
.next1
- bit 4, [hl] ;test bit 4 in d063/d068 flags
+ bit HasSubstituteUp, [hl]
pop hl
ret
--- a/engine/battle/e_2.asm
+++ b/engine/battle/e_2.asm
@@ -130,7 +130,7 @@
ld [wPlayerMoveListIndex], a ; wPlayerMoveListIndex
ld a, [W_PLAYERBATTSTATUS1] ; W_PLAYERBATTSTATUS1
.asm_3bad1
- bit 6, a ; is mon invulnerable to typical attacks? (fly/dig)
+ bit Invulnerable, a ; is mon invulnerable to typical attacks? (fly/dig)
jp nz, Func_3bb8c
push hl
push de
@@ -141,7 +141,7 @@
jr z, .asm_3bae4
ld hl, W_ENEMYBATTSTATUS2 ; W_ENEMYBATTSTATUS2
.asm_3bae4
- bit 4, [hl]
+ bit HasSubstituteUp, [hl]
push af
ld hl, Func_79747
ld b, BANK(Func_79747)
@@ -161,7 +161,7 @@
call nz, Bankswitch
pop bc
ld a, [bc]
- set 3, a
+ set Transformed, a
ld [bc], a
pop de
pop hl
@@ -267,15 +267,15 @@
ld a, [de]
cp LIGHT_SCREEN_EFFECT
jr nz, .reflect
- bit 1, [hl] ; is mon already protected by light screen?
+ bit HasLightScreenUp, [hl] ; is mon already protected by light screen?
jr nz, .moveFailed
- set 1, [hl] ; mon is now protected by light screen
+ set HasLightScreenUp, [hl] ; mon is now protected by light screen
ld hl, LightScreenProtectedText ; $7bd7
jr .asm_3bbc1
.reflect
- bit 2, [hl] ; is mon already protected by reflect?
+ bit HasReflectUp, [hl] ; is mon already protected by reflect?
jr nz, .moveFailed
- set 2, [hl] ; mon is now protected by reflect
+ set HasReflectUp, [hl] ; mon is now protected by reflect
ld hl, ReflectGainedArmorText ; $7bdc
.asm_3bbc1
push hl
--- a/engine/items/items.asm
+++ b/engine/items/items.asm
@@ -357,13 +357,13 @@
push af ;...and status ailments
push hl
ld hl,W_ENEMYBATTSTATUS3
- bit 3,[hl]
+ bit Transformed,[hl]
jr z,.next15
ld a,$4c
ld [wEnemyMonSpecies2],a
jr .next16
.next15 ;$5871
- set 3,[hl]
+ set Transformed,[hl]
ld hl,wcceb
ld a,[wEnemyMonDVs]
ld [hli],a
@@ -770,7 +770,7 @@
ld [wBattleMonStatus],a ; remove the status ailment in the in-battle pokemon data
push hl
ld hl,W_PLAYERBATTSTATUS3
- res 0,[hl] ; heal Toxic status
+ res BadlyPoisoned,[hl] ; heal Toxic status
pop hl
ld bc,30
add hl,bc ; hl now points to party stats
@@ -1407,7 +1407,7 @@
and a
jp nz,ItemUseNotTime
ld a,b
- ld [wd0db],a
+ ld [wRepelRemainingSteps],a
jp PrintItemUseTextAndRemoveItem
; handles X Accuracy item
@@ -1416,7 +1416,7 @@
and a
jp z,ItemUseNotTime
ld hl,W_PLAYERBATTSTATUS2
- set 0,[hl] ; X Accuracy bit
+ set UsingXAccuracy,[hl] ; X Accuracy bit
jp PrintItemUseTextAndRemoveItem
; This function is bugged and never works. It always jumps to ItemUseNotTime.
@@ -1525,7 +1525,7 @@
and a
jp z,ItemUseNotTime
ld hl,W_PLAYERBATTSTATUS2
- set 1,[hl] ; Mist bit
+ set ProtectedByMist,[hl] ; Mist bit
jp PrintItemUseTextAndRemoveItem
ItemUseSuperRepel: ; e0eb (3:60eb)
@@ -1541,7 +1541,7 @@
and a
jp z,ItemUseNotTime
ld hl,W_PLAYERBATTSTATUS2
- set 2,[hl] ; Focus Energy bit
+ set GettingPumped,[hl] ; Focus Energy bit
jp PrintItemUseTextAndRemoveItem
ItemUseXStat: ; e104 (3:6104)
--- a/wram.asm
+++ b/wram.asm
@@ -348,7 +348,8 @@
wEnemySelectedMove:: ; ccdd
ds 1
-wccde:: ds 1
+wLinkBattleRNCount:: ; ccde
+ ds 1
wAICount:: ; ccdf
; number of times remaining that AI action can occur
@@ -1178,7 +1179,10 @@
ds 1
wd0d8:: ds 3
-wd0db:: ds 1
+
+wRepelRemainingSteps:: ; wd0db
+ ds 1
+
wd0dc:: ds 4
wd0e0:: ds 1
wd0e1:: ds 56