summaryrefslogtreecommitdiff
path: root/home/battle.asm
diff options
context:
space:
mode:
Diffstat (limited to 'home/battle.asm')
-rw-r--r--home/battle.asm190
1 files changed, 84 insertions, 106 deletions
diff --git a/home/battle.asm b/home/battle.asm
index eac378e0..9d63a5fe 100644
--- a/home/battle.asm
+++ b/home/battle.asm
@@ -1,12 +1,47 @@
-UserPartyAttr:: ; 3b69
+GetPartyParamLocation::
+; Get the location of parameter a from wCurPartyMon in hl
+ push bc
+ ld hl, wPartyMons
+ ld c, a
+ ld b, 0
+ add hl, bc
+ ld a, [wCurPartyMon]
+ call GetPartyLocation
+ pop bc
+ ret
+
+GetPartyLocation::
+; Add the length of a PartyMon struct to hl a times.
+ ld bc, PARTYMON_STRUCT_LENGTH
+ jp AddNTimes
+
+Unreferenced_GetDexNumber::
+; Probably used in gen 1 to convert index number to dex number
+; Not required in gen 2 because index number == dex number
+ push hl
+ ld a, b
+ dec a
+ ld b, 0
+ add hl, bc
+ ld hl, BaseData + BASE_DEX_NO
+ ld bc, BASE_DATA_SIZE
+ call AddNTimes
+ pop bc
+ ld a, BANK(BaseData)
+ call GetFarHalfword
+ ld b, l
+ ld c, h
+ pop hl
+ ret
+
+UserPartyAttr::
push af
ldh a, [hBattleTurn]
and a
- jr nz, .asm_3b72
+ jr nz, .ot
pop af
jr BattlePartyAttr
-
-.asm_3b72
+.ot
pop af
jr OTPartyAttr
@@ -14,19 +49,19 @@ OpponentPartyAttr::
push af
ldh a, [hBattleTurn]
and a
- jr z, .asm_3b7e
+ jr z, .ot
pop af
jr BattlePartyAttr
-
-.asm_3b7e
+.ot
pop af
jr OTPartyAttr
BattlePartyAttr::
+; Get attribute a from the party struct of the active battle mon.
push bc
ld c, a
- ld b, $0
- ld hl, wPartyMon1Species
+ ld b, 0
+ ld hl, wPartyMons
add hl, bc
ld a, [wCurBattleMon]
call GetPartyLocation
@@ -34,9 +69,10 @@ BattlePartyAttr::
ret
OTPartyAttr::
+; Get attribute a from the party struct of the active enemy mon.
push bc
ld c, a
- ld b, $0
+ ld b, 0
ld hl, wOTPartyMon1Species
add hl, bc
ld a, [wCurOTMon]
@@ -56,7 +92,7 @@ SetPlayerTurn::
ret
SetEnemyTurn::
- ld a, $1
+ ld a, 1
ldh [hBattleTurn], a
ret
@@ -66,126 +102,60 @@ UpdateOpponentInParty::
jr z, UpdateEnemyMonInParty
jr UpdateBattleMonInParty
+UpdateUserInParty::
ldh a, [hBattleTurn]
and a
jr z, UpdateBattleMonInParty
jr UpdateEnemyMonInParty
UpdateBattleMonInParty::
+; Update level, status, current HP
+
ld a, [wCurBattleMon]
+
+UpdateBattleMon::
ld hl, wPartyMon1Level
call GetPartyLocation
+
ld d, h
ld e, l
ld hl, wBattleMonLevel
- ld bc, 5
+ ld bc, wBattleMonMaxHP - wBattleMonLevel
jp CopyBytes
UpdateEnemyMonInParty::
+; Update level, status, current HP
+
+; No wildmons.
ld a, [wBattleMode]
dec a
ret z
+
ld a, [wCurOTMon]
ld hl, wOTPartyMon1Level
call GetPartyLocation
+
ld d, h
ld e, l
ld hl, wEnemyMonLevel
- ld bc, 5
+ ld bc, wEnemyMonMaxHP - wEnemyMonLevel
jp CopyBytes
RefreshBattleHuds::
call UpdateBattleHuds
- ld c, $3
+ ld c, 3
call DelayFrames
jp WaitBGMap
-UpdateBattleHuds:: ; 3bf8 (0:3bf8)
+UpdateBattleHuds::
farcall UpdatePlayerHUD
farcall UpdateEnemyHUD
ret
-GetBattleVar::
- push hl
- call GetBattleVarAddr
- pop hl
- ret
-
-GetBattleVarAddr:: ; 3c0b (0:3c0b)
- push bc
- ld hl, .battlevarpairs ; $3c2c
- ld c, a
- ld b, $0
- add hl, bc
- add hl, bc
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ldh a, [hBattleTurn]
- and a
- jr z, .asm_3c1d
- inc hl
-.asm_3c1d
- ld a, [hl]
- ld c, a
- ld b, $0
- ld hl, .vars
- add hl, bc
- add hl, bc
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld a, [hl]
- pop bc
- ret
-
-.battlevarpairs
- dw .substatus1, .substatus2, .substatus3, .substatus4, .substatus5
- dw .substatus1opp, .substatus2opp, .substatus3opp, .substatus4opp, .substatus5opp
- dw .status, .statusopp, .animation, .effect, .power, .type
- dw .curmove, .lastcounter, .lastcounteropp, .lastmove, .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
-
-.vars
- 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 wLastEnemyCounterMove, wLastPlayerCounterMove
- dw wLastPlayerMove, wLastEnemyMove
-
- db $23 ; ???
+INCLUDE "home/battle_vars.asm"
FarCopyRadioText::
+ inc hl
ldh a, [hROMBank]
push af
ld a, [hli]
@@ -200,62 +170,70 @@ FarCopyRadioText::
ld a, d
ld h, a
ld de, wcef7
- ld bc, $28
+ ld bc, 2 * SCREEN_WIDTH
call CopyBytes
pop af
ldh [hROMBank], a
ld [MBC3RomBank], a
ret
-StdBattleTextBox::
-GLOBAL BattleText
+
+StdBattleTextbox::
+; Open a textbox and print battle text at 20:hl.
+
ldh a, [hROMBank]
push af
- ld a, BANK(BattleText) ; $40
+
+ ld a, BANK(BattleText)
rst Bankswitch
+
call PrintText
+
pop af
rst Bankswitch
ret
GetBattleAnimPointer::
-
-GLOBAL BattleAnimations
-GLOBAL BattleAnimCommands
-
- ld a, BANK(BattleAnimations) ; $32
+ ld a, BANK(BattleAnimations)
rst Bankswitch
+
ld a, [hli]
ld [wca10], a
ld a, [hl]
ld [wca11], a
- ld a, BANK(BattleAnimCommands) ; $33
+
+ ; ClearBattleAnims is the only function that calls this...
+ ld a, BANK(ClearBattleAnims)
rst Bankswitch
+
ret
GetBattleAnimByte::
push hl
push de
+
ld hl, wca10
ld e, [hl]
inc hl
ld d, [hl]
- ld a, BANK(BattleAnimations) ; $32
+ ld a, BANK(BattleAnimations)
rst Bankswitch
ld a, [de]
ld [wca17], a
inc de
- ld a, BANK(BattleAnimCommands) ; $33
+ ld a, BANK(ClearBattleAnims)
rst Bankswitch
ld [hl], d
dec hl
ld [hl], e
+
pop de
pop hl
+
ld a, [wca17]
ret