summaryrefslogtreecommitdiff
path: root/home/battle_vars.asm
diff options
context:
space:
mode:
Diffstat (limited to 'home/battle_vars.asm')
-rw-r--r--home/battle_vars.asm113
1 files changed, 113 insertions, 0 deletions
diff --git a/home/battle_vars.asm b/home/battle_vars.asm
new file mode 100644
index 000000000..b66301e78
--- /dev/null
+++ b/home/battle_vars.asm
@@ -0,0 +1,113 @@
+GetBattleVar:: ; 39e1
+; Preserves hl.
+ push hl
+ call GetBattleVarAddr
+ pop hl
+ ret
+; 39e7
+
+GetBattleVarAddr:: ; 39e7
+; Get variable from pair a, depending on whose turn it is.
+; There are 21 variable pairs.
+
+ push bc
+
+ ld hl, BattleVarPairs
+ ld c, a
+ ld b, 0
+ add hl, bc
+ add hl, bc
+
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+; Enemy turn uses the second byte instead.
+; This lets battle variable calls be side-neutral.
+ ld a, [hBattleTurn]
+ and a
+ jr z, .getvar
+ inc hl
+
+.getvar
+; var id
+ ld a, [hl]
+ ld c, a
+ ld b, 0
+
+ ld hl, BattleVarLocations
+ add hl, bc
+ add hl, bc
+
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+ ld a, [hl]
+
+ pop bc
+ ret
+
+BattleVarPairs:
+; entries correspond to BATTLE_VARS_* constants
+ dw .substatus1
+ dw .substatus2
+ dw .substatus3
+ dw .substatus4
+ dw .substatus5
+ dw .substatus1opp
+ dw .substatus2opp
+ dw .substatus3opp
+ dw .substatus4opp
+ dw .substatus5opp
+ dw .status
+ dw .statusopp
+ dw .animation
+ dw .effect
+ dw .power
+ dw .type
+ dw .curmove
+ dw .lastcounter
+ dw .lastcounteropp
+ dw .lastmove
+ dw .lastmoveopp
+
+; player enemy
+.substatus1: db PLAYER_SUBSTATUS_1, ENEMY_SUBSTATUS_1
+.substatus1opp: db ENEMY_SUBSTATUS_1, PLAYER_SUBSTATUS_1
+.substatus2: db PLAYER_SUBSTATUS_2, ENEMY_SUBSTATUS_2
+.substatus2opp: db ENEMY_SUBSTATUS_2, PLAYER_SUBSTATUS_2
+.substatus3: db PLAYER_SUBSTATUS_3, ENEMY_SUBSTATUS_3
+.substatus3opp: db ENEMY_SUBSTATUS_3, PLAYER_SUBSTATUS_3
+.substatus4: db PLAYER_SUBSTATUS_4, ENEMY_SUBSTATUS_4
+.substatus4opp: db ENEMY_SUBSTATUS_4, PLAYER_SUBSTATUS_4
+.substatus5: db PLAYER_SUBSTATUS_5, ENEMY_SUBSTATUS_5
+.substatus5opp: db ENEMY_SUBSTATUS_5, PLAYER_SUBSTATUS_5
+.status: db PLAYER_STATUS, ENEMY_STATUS
+.statusopp: db ENEMY_STATUS, PLAYER_STATUS
+.animation: db PLAYER_MOVE_ANIMATION, ENEMY_MOVE_ANIMATION
+.effect: db PLAYER_MOVE_EFFECT, ENEMY_MOVE_EFFECT
+.power: db PLAYER_MOVE_POWER, ENEMY_MOVE_POWER
+.type: db PLAYER_MOVE_TYPE, ENEMY_MOVE_TYPE
+.curmove: db PLAYER_CUR_MOVE, ENEMY_CUR_MOVE
+.lastcounter: db PLAYER_COUNTER_MOVE, ENEMY_COUNTER_MOVE
+.lastcounteropp: db ENEMY_COUNTER_MOVE, PLAYER_COUNTER_MOVE
+.lastmove: db PLAYER_LAST_MOVE, ENEMY_LAST_MOVE
+.lastmoveopp: db ENEMY_LAST_MOVE, PLAYER_LAST_MOVE
+
+BattleVarLocations:
+; entries correspond to PLAYER_* and ENEMY_* constants
+ dw PlayerSubStatus1, EnemySubStatus1
+ dw PlayerSubStatus2, EnemySubStatus2
+ dw PlayerSubStatus3, EnemySubStatus3
+ dw PlayerSubStatus4, EnemySubStatus4
+ dw PlayerSubStatus5, EnemySubStatus5
+ dw BattleMonStatus, EnemyMonStatus
+ dw wPlayerMoveStructAnimation, wEnemyMoveStructAnimation
+ dw wPlayerMoveStructEffect, wEnemyMoveStructEffect
+ dw wPlayerMoveStructPower, wEnemyMoveStructPower
+ dw wPlayerMoveStructType, wEnemyMoveStructType
+ dw CurPlayerMove, CurEnemyMove
+ dw LastPlayerCounterMove, LastEnemyCounterMove
+ dw LastPlayerMove, LastEnemyMove
+; 3a90