diff options
Diffstat (limited to 'home/battle.asm')
-rw-r--r-- | home/battle.asm | 337 |
1 files changed, 337 insertions, 0 deletions
diff --git a/home/battle.asm b/home/battle.asm new file mode 100644 index 000000000..fc670d927 --- /dev/null +++ b/home/battle.asm @@ -0,0 +1,337 @@ +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 BattleMon's party struct. + push bc + ld c, a + ld b, 0 + ld hl, PartyMons + add hl, bc + ld a, [CurBattleMon] + call GetPartyLocation + pop bc + ret +; 396d + + +OTPartyAttr:: ; 396d +; Get attribute a from the active EnemyMon's party struct. + push bc + ld c, a + ld b, 0 + ld hl, OTPartyMon1Species + add hl, bc + ld a, [CurOTMon] + call GetPartyLocation + pop bc + ret +; 397d + + +ResetDamage:: ; 397d + xor a + ld [CurDamage], a + ld [CurDamage + 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, [CurBattleMon] + +Function399f:: ; 399f + ld hl, PartyMon1Level + call GetPartyLocation + + ld d, h + ld e, l + ld hl, BattleMonLevel + ld bc, BattleMonMaxHP - BattleMonLevel + jp CopyBytes +; 39b0 + +UpdateEnemyMonInParty:: ; 39b0 +; Update level, status, current HP + +; No wildmons. + ld a, [IsInBattle] + dec a + ret z + + ld a, [CurOTMon] + ld hl, OTPartyMon1Level + call GetPartyLocation + + ld d, h + ld e, l + ld hl, EnemyMonLevel + ld bc, EnemyMonMaxHP - EnemyMonLevel + jp CopyBytes +; 39c9 + + +RefreshBattleHuds:: ; 39c9 + call UpdateBattleHuds + ld c, 3 + call DelayFrames + jp WaitBGMap +; 39d4 + +UpdateBattleHuds:: ; 39d4 + callba Function3df48 + callba Function3e036 + ret +; 39e1 + + +GetBattleVar:: ; 39e1 +; Preserves hl. + push hl + call _GetBattleVar + pop hl + ret +; 39e7 + +_GetBattleVar:: ; 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 + + const_def + const PLAYER_SUBSTATUS_1 + const ENEMY_SUBSTATUS_1 + const PLAYER_SUBSTATUS_2 + const ENEMY_SUBSTATUS_2 + const PLAYER_SUBSTATUS_3 + const ENEMY_SUBSTATUS_3 + const PLAYER_SUBSTATUS_4 + const ENEMY_SUBSTATUS_4 + const PLAYER_SUBSTATUS_5 + const ENEMY_SUBSTATUS_5 + const PLAYER_STATUS + const ENEMY_STATUS + const PLAYER_MOVE_ANIMATION + const ENEMY_MOVE_ANIMATION + const PLAYER_MOVE_EFFECT + const ENEMY_MOVE_EFFECT + const PLAYER_MOVE_POWER + const ENEMY_MOVE_POWER + const PLAYER_MOVE_TYPE + const ENEMY_MOVE_TYPE + const PLAYER_CUR_MOVE + const ENEMY_CUR_MOVE + const PLAYER_COUNTER_MOVE + const ENEMY_COUNTER_MOVE + const PLAYER_LAST_MOVE + const ENEMY_LAST_MOVE + +; 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 PlayerSubStatus1, EnemySubStatus1 + dw PlayerSubStatus2, EnemySubStatus2 + dw PlayerSubStatus3, EnemySubStatus3 + dw PlayerSubStatus4, EnemySubStatus4 + dw PlayerSubStatus5, EnemySubStatus5 + dw BattleMonStatus, EnemyMonStatus + dw PlayerMoveAnimation, EnemyMoveAnimation + dw PlayerMoveEffect, EnemyMoveEffect + dw PlayerMovePower, EnemyMovePower + dw PlayerMoveType, EnemyMoveType + dw CurPlayerMove, CurEnemyMove + dw LastEnemyCounterMove, LastPlayerCounterMove + dw LastPlayerMove, LastEnemyMove +; 3a90 + + +Function3a90:: ; 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, $d00c + ld bc, $0028 + 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, [InLinkBattle] + cp 4 + 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 Function1ad2 + call Function321c + 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 |