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