summaryrefslogtreecommitdiff
path: root/home/battle.asm
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2016-01-29 18:36:31 -0500
committerPikalaxALT <PikalaxALT@gmail.com>2016-01-29 18:36:31 -0500
commit2bf93c5905319e9181f87b3f83cd3bce7b9feeca (patch)
tree3ebf17c8879e5d6243d81aac8f1c36eb226fac26 /home/battle.asm
parented3f9395f6d45f6554ed9d9c49c41ea86a8e2447 (diff)
Import stuff from pokecrystal; diff gold and silver
Diffstat (limited to 'home/battle.asm')
-rw-r--r--home/battle.asm361
1 files changed, 361 insertions, 0 deletions
diff --git a/home/battle.asm b/home/battle.asm
new file mode 100644
index 00000000..3fd59363
--- /dev/null
+++ b/home/battle.asm
@@ -0,0 +1,361 @@
+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]
+
+UpdateBattleMon:: ; 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, [wBattleMode]
+ 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 UpdatePlayerHUD
+ callba 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
+rept 2
+ add hl, bc
+endr
+
+ 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
+rept 2
+ add hl, bc
+endr
+
+ 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 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 LastEnemyCounterMove, LastPlayerCounterMove
+ dw LastPlayerMove, LastEnemyMove
+; 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 [BattleAnimAddress], a
+ ld a, [hl]
+ ld [BattleAnimAddress + 1], a
+
+ ld a, BANK(BattleAnimCommands)
+ rst Bankswitch
+
+ ret
+; 3af0
+
+GetBattleAnimByte:: ; 3af0
+
+ push hl
+ push de
+
+ ld hl, BattleAnimAddress
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+
+ ld a, BANK(BattleAnimations)
+ rst Bankswitch
+
+ ld a, [de]
+ ld [BattleAnimByte], a
+ inc de
+
+ ld a, BANK(BattleAnimCommands)
+ rst Bankswitch
+
+ ld [hl], d
+ dec hl
+ ld [hl], e
+
+ pop de
+ pop hl
+
+ ld a, [BattleAnimByte]
+ ret
+; 3b0c