mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-11-16 11:27:33 -08:00
40902ffe24
This was discussed in #706 It also uncovered some off-by-one issues with defining some constants. A few structs now use rsreset/_RS to define their offset constants, as discussed in #739
116 lines
3.2 KiB
NASM
116 lines
3.2 KiB
NASM
GetBattleVar::
|
|
; Preserves hl.
|
|
push hl
|
|
call GetBattleVarAddr
|
|
pop hl
|
|
ret
|
|
|
|
GetBattleVarAddr::
|
|
; 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.
|
|
ldh 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
|
|
table_width 2, BattleVarPairs
|
|
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 .MoveAnim
|
|
dw .MoveEffect
|
|
dw .MovePower
|
|
dw .MoveType
|
|
dw .CurMove
|
|
dw .LastCounter
|
|
dw .LastCounterOpp
|
|
dw .LastMove
|
|
dw .LastMoveOpp
|
|
assert_table_length NUM_BATTLE_VARS
|
|
|
|
; 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
|
|
.MoveAnim: db PLAYER_MOVE_ANIMATION, ENEMY_MOVE_ANIMATION
|
|
.MoveEffect: db PLAYER_MOVE_EFFECT, ENEMY_MOVE_EFFECT
|
|
.MovePower: db PLAYER_MOVE_POWER, ENEMY_MOVE_POWER
|
|
.MoveType: 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
|
|
table_width 2 + 2, BattleVarLocations
|
|
dw wPlayerSubStatus1, wEnemySubStatus1
|
|
dw wPlayerSubStatus2, wEnemySubStatus2
|
|
dw wPlayerSubStatus3, wEnemySubStatus3
|
|
dw wPlayerSubStatus4, wEnemySubStatus4
|
|
dw wPlayerSubStatus5, wEnemySubStatus5
|
|
dw wBattleMonStatus, wEnemyMonStatus
|
|
dw wPlayerMoveStructAnimation, wEnemyMoveStructAnimation
|
|
dw wPlayerMoveStructEffect, wEnemyMoveStructEffect
|
|
dw wPlayerMoveStructPower, wEnemyMoveStructPower
|
|
dw wPlayerMoveStructType, wEnemyMoveStructType
|
|
dw wCurPlayerMove, wCurEnemyMove
|
|
dw wLastPlayerCounterMove, wLastEnemyCounterMove
|
|
dw wLastPlayerMove, wLastEnemyMove
|
|
assert_table_length NUM_BATTLE_VAR_LOCATION_PAIRS
|