UserPartyAttr:: ; 3945 push af ld a, [hBattleTurn] and a jr nz, .ot pop af jr BattlePartyAttr .ot pop af jr OTPartyAttr ; 3951 OpponentPartyAttr:: ; 3951 push af ld a, [hBattleTurn] and a jr z, .ot pop af jr BattlePartyAttr .ot pop af jr OTPartyAttr ; 395d BattlePartyAttr:: ; 395d ; Get attribute a from the active wBattleMon's party struct. push bc ld c, a ld b, 0 ld hl, wPartyMons add hl, bc ld a, [wCurBattleMon] call GetPartyLocation pop bc ret ; 396d OTPartyAttr:: ; 396d ; Get attribute a from the active wEnemyMon's party struct. push bc ld c, a ld b, 0 ld hl, wOTPartyMon1Species add hl, bc ld a, [wCurOTMon] call GetPartyLocation pop bc ret ; 397d ResetDamage:: ; 397d xor a ld [wCurDamage], a ld [wCurDamage + 1], a ret ; 3985 SetPlayerTurn:: ; 3985 xor a ld [hBattleTurn], a ret ; 3989 SetEnemyTurn:: ; 3989 ld a, 1 ld [hBattleTurn], a ret ; 398e UpdateOpponentInParty:: ; 398e ld a, [hBattleTurn] and a jr z, UpdateEnemyMonInParty jr UpdateBattleMonInParty ; 3995 UpdateUserInParty:: ; 3995 ld a, [hBattleTurn] and a jr z, UpdateBattleMonInParty jr UpdateEnemyMonInParty ; 399c UpdateBattleMonInParty:: ; 399c ; Update level, status, current HP ld a, [wCurBattleMon] UpdateBattleMon:: ; 399f ld hl, wPartyMon1Level call GetPartyLocation ld d, h ld e, l ld hl, wBattleMonLevel ld bc, wBattleMonMaxHP - wBattleMonLevel jp CopyBytes ; 39b0 UpdateEnemyMonInParty:: ; 39b0 ; 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, wEnemyMonMaxHP - wEnemyMonLevel jp CopyBytes ; 39c9 RefreshBattleHuds:: ; 39c9 call UpdateBattleHuds ld c, 3 call DelayFrames jp WaitBGMap ; 39d4 UpdateBattleHuds:: ; 39d4 farcall UpdatePlayerHUD farcall UpdateEnemyHUD ret ; 39e1 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, .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 wLastPlayerCounterMove, wLastEnemyCounterMove dw wLastPlayerMove, wLastEnemyMove ; 3a90 FarCopyRadioText:: ; 3a90 inc hl ld a, [hROMBank] push af ld a, [hli] ld e, a ld a, [hli] ld d, a ld a, [hli] ld [hROMBank], a ld [MBC3RomBank], a ld a, e ld l, a ld a, d ld h, a ld de, wRadioText ld bc, 2 * SCREEN_WIDTH call CopyBytes pop af ld [hROMBank], a ld [MBC3RomBank], a ret ; 3ab2 MobileTextBorder:: ; 3ab2 CELL_PHONE_TOP EQU $5e CELL_PHONE_BOTTOM EQU $5f ; For mobile link battles only. ld a, [wLinkMode] cp LINK_MOBILE ret c ; Draw a cell phone icon at the ; top right corner of the border. hlcoord 19, 12 ld [hl], CELL_PHONE_TOP hlcoord 19, 13 ld [hl], CELL_PHONE_BOTTOM ret ; 3ac3 BattleTextBox:: ; 3ac3 ; Open a textbox and print text at hl. push hl call SpeechTextBox call MobileTextBorder call UpdateSprites call ApplyTilemap pop hl call PrintTextBoxText ret ; 3ad5 StdBattleTextBox:: ; 3ad5 ; Open a textbox and print battle text at 20:hl. GLOBAL BattleText ld a, [hROMBank] push af ld a, BANK(BattleText) rst Bankswitch call BattleTextBox pop af rst Bankswitch ret ; 3ae1 GetBattleAnimPointer:: ; 3ae1 GLOBAL BattleAnimations GLOBAL BattleAnimCommands ld a, BANK(BattleAnimations) rst Bankswitch ld a, [hli] ld [wBattleAnimAddress], a ld a, [hl] ld [wBattleAnimAddress + 1], a ld a, BANK(BattleAnimCommands) rst Bankswitch ret ; 3af0 GetBattleAnimByte:: ; 3af0 push hl push de ld hl, wBattleAnimAddress ld e, [hl] inc hl ld d, [hl] ld a, BANK(BattleAnimations) rst Bankswitch ld a, [de] ld [wBattleAnimByte], a inc de ld a, BANK(BattleAnimCommands) rst Bankswitch ld [hl], d dec hl ld [hl], e pop de pop hl ld a, [wBattleAnimByte] ret ; 3b0c