diff options
Diffstat (limited to 'home/battle_vars.asm')
-rw-r--r-- | home/battle_vars.asm | 113 |
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 |