summaryrefslogtreecommitdiff
path: root/engine/battle/draw_hud_pokeball_gfx.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/battle/draw_hud_pokeball_gfx.asm')
-rw-r--r--engine/battle/draw_hud_pokeball_gfx.asm191
1 files changed, 191 insertions, 0 deletions
diff --git a/engine/battle/draw_hud_pokeball_gfx.asm b/engine/battle/draw_hud_pokeball_gfx.asm
new file mode 100644
index 00000000..fce3701c
--- /dev/null
+++ b/engine/battle/draw_hud_pokeball_gfx.asm
@@ -0,0 +1,191 @@
+DrawAllPokeballs: ; 3a849 (e:6849)
+ call LoadPartyPokeballGfx
+ call SetupOwnPartyPokeballs
+ ld a, [W_ISINBATTLE] ; W_ISINBATTLE
+ dec a
+ ret z ; return if wild pokémon
+ jp SetupEnemyPartyPokeballs
+
+DrawEnemyPokeballs: ; 0x3a857
+ call LoadPartyPokeballGfx
+ jp SetupEnemyPartyPokeballs
+
+LoadPartyPokeballGfx: ; 3a85d (e:685d)
+ ld de, PokeballTileGraphics ; $697e
+ ld hl, vSprites + $310
+ ld bc, (BANK(PokeballTileGraphics) << 8) + $04
+ jp CopyVideoData
+
+SetupOwnPartyPokeballs: ; 3a869 (e:6869)
+ call PlacePlayerHUDTiles
+ ld hl, wPartyMon1
+ ld de, wPartyCount ; wPartyCount
+ call SetupPokeballs
+ ld a, $60
+ ld hl, W_BASECOORDX ; wd081
+ ld [hli], a
+ ld [hl], a
+ ld a, $8
+ ld [wTrainerEngageDistance], a
+ ld hl, wOAMBuffer
+ jp WritePokeballOAMData
+
+SetupEnemyPartyPokeballs: ; 3a887 (e:6887)
+ call PlaceEnemyHUDTiles
+ ld hl, wEnemyMons
+ ld de, wEnemyPartyCount ; wEnemyPartyCount
+ call SetupPokeballs
+ ld hl, W_BASECOORDX ; wd081
+ ld a, $48
+ ld [hli], a
+ ld [hl], $20
+ ld a, $f8
+ ld [wTrainerEngageDistance], a
+ ld hl, wOAMBuffer + PARTY_LENGTH * 4
+ jp WritePokeballOAMData
+
+SetupPokeballs: ; 0x3a8a6
+ ld a, [de]
+ push af
+ ld de, wBuffer
+ ld c, PARTY_LENGTH
+ ld a, $34 ; empty pokeball
+.emptyloop
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .emptyloop
+ pop af
+ ld de, wBuffer
+.monloop
+ push af
+ call PickPokeball
+ inc de
+ pop af
+ dec a
+ jr nz, .monloop
+ ret
+
+PickPokeball: ; 3a8c2 (e:68c2)
+ inc hl
+ ld a, [hli]
+ and a
+ jr nz, .alive
+ ld a, [hl]
+ and a
+ ld b, $33 ; crossed ball (fainted)
+ jr z, .done_fainted
+.alive
+ inc hl
+ inc hl
+ ld a, [hl] ; status
+ and a
+ ld b, $32 ; black ball (status)
+ jr nz, .done
+ dec b ; regular ball
+ jr .done
+.done_fainted
+ inc hl
+ inc hl
+.done
+ ld a, b
+ ld [de], a
+ ld bc, $0028 ; rest of mon struct
+ add hl, bc
+ ret
+
+WritePokeballOAMData: ; 3a8e1 (e:68e1)
+ ld de, wBuffer
+ ld c, PARTY_LENGTH
+.loop
+ ld a, [W_BASECOORDY] ; wd082
+ ld [hli], a
+ ld a, [W_BASECOORDX] ; wd081
+ ld [hli], a
+ ld a, [de]
+ ld [hli], a
+ xor a
+ ld [hli], a
+ ld a, [W_BASECOORDX] ; wd081
+ ld b, a
+ ld a, [wTrainerEngageDistance]
+ add b
+ ld [W_BASECOORDX], a ; wd081
+ inc de
+ dec c
+ jr nz, .loop
+ ret
+
+PlacePlayerHUDTiles: ; 3a902 (e:6902)
+ ld hl, PlayerBattleHUDGraphicsTiles ; $6916
+ ld de, wTrainerFacingDirection
+ ld bc, $3
+ call CopyData
+ hlCoord 18, 10
+ ld de, rIE ; $ffff
+ jr PlaceHUDTiles
+
+PlayerBattleHUDGraphicsTiles: ; 3a916 (e:6916)
+; The tile numbers for specific parts of the battle display for the player's pokemon
+ db $73 ; unused ($73 is hardcoded into the routine that uses these bytes)
+ db $77 ; lower-right corner tile of the HUD
+ db $6F ; lower-left triangle tile of the HUD
+
+PlaceEnemyHUDTiles: ; 3a919 (e:6919)
+ ld hl, EnemyBattleHUDGraphicsTiles ; $692d
+ ld de, wTrainerFacingDirection
+ ld bc, $3
+ call CopyData
+ hlCoord 1, 2
+ ld de, $1
+ jr PlaceHUDTiles
+
+EnemyBattleHUDGraphicsTiles: ; 3a92d (e:692d)
+; The tile numbers for specific parts of the battle display for the enemy
+ db $73 ; unused ($73 is hardcoded in the routine that uses these bytes)
+ db $74 ; lower-left corner tile of the HUD
+ db $78 ; lower-right triangle tile of the HUD
+
+PlaceHUDTiles: ; 3a930 (e:6930)
+ ld [hl], $73
+ ld bc, $14
+ add hl, bc
+ ld a, [wTrainerScreenY]
+ ld [hl], a
+ ld a, $8
+.asm_3a93c
+ add hl, de
+ ld [hl], $76
+ dec a
+ jr nz, .asm_3a93c
+ add hl, de
+ ld a, [wTrainerScreenX]
+ ld [hl], a
+ ret
+
+SetupPlayerAndEnemyPokeballs: ; 3a948 (e:6948)
+ call LoadPartyPokeballGfx
+ ld hl, wPartyMon1Species ; wPartyMon1Species (aliases: wPartyMon1)
+ ld de, wPartyCount ; wPartyCount
+ call SetupPokeballs
+ ld hl, W_BASECOORDX ; wd081
+ ld a, $50
+ ld [hli], a
+ ld [hl], $40
+ ld a, $8
+ ld [wTrainerEngageDistance], a
+ ld hl, wOAMBuffer
+ call WritePokeballOAMData
+ ld hl, wEnemyMons ; wEnemyMon1Species
+ ld de, wEnemyPartyCount ; wEnemyPartyCount
+ call SetupPokeballs
+ ld hl, W_BASECOORDX ; wd081
+ ld a, $50
+ ld [hli], a
+ ld [hl], $68
+ ld hl, wOAMBuffer + $18
+ jp WritePokeballOAMData
+
+; four tiles: pokeball, black pokeball (status ailment), crossed out pokeball (faited) and pokeball slot (no mon)
+PokeballTileGraphics:: ; 3a97e (e:697e)
+ INCBIN "gfx/pokeball.2bpp"