summaryrefslogtreecommitdiff
path: root/engine/battle
diff options
context:
space:
mode:
Diffstat (limited to 'engine/battle')
-rw-r--r--engine/battle/trainer_huds.asm257
1 files changed, 257 insertions, 0 deletions
diff --git a/engine/battle/trainer_huds.asm b/engine/battle/trainer_huds.asm
new file mode 100644
index 00000000..7fd57571
--- /dev/null
+++ b/engine/battle/trainer_huds.asm
@@ -0,0 +1,257 @@
+BattleStart_TrainerHuds:
+ ld a, $e4
+ ldh [rOBP0], a
+ call LoadBallIconGFX
+ call ShowPlayerMonsRemaining
+ ld a, [wBattleMode]
+ dec a
+ ret z
+ jp ShowOTTrainerMonsRemaining
+
+EnemySwitch_TrainerHud:
+ ld a, $e4
+ ldh [rOBP0], a
+ call LoadBallIconGFX
+ jp ShowOTTrainerMonsRemaining
+
+ShowPlayerMonsRemaining:
+ call DrawPlayerPartyIconHUDBorder
+ ld hl, wPartyMon1HP
+ ld de, wPartyCount
+ call StageBallTilesData
+ ; ldpixel wPlaceBallsX, 12, 12
+ ld a, 12 * 8
+ ld hl, wPlaceBallsX
+ ld [hli], a
+ ld [hl], a
+ ld a, 8
+ ld [wPlaceBallsDirection], a
+ ld hl, wVirtualOAMSprite00
+ jp LoadTrainerHudOAM
+
+ShowOTTrainerMonsRemaining:
+ call DrawEnemyHUDBorder
+ ld hl, wOTPartyMon1HP
+ ld de, wOTPartyCount
+ call StageBallTilesData
+ ; ldpixel wPlaceBallsX, 9, 4
+ ld hl, wPlaceBallsX
+ ld a, 9 * 8
+ ld [hli], a
+ ld [hl], 4 * 8
+ ld a, -8
+ ld [wPlaceBallsDirection], a
+ ld hl, wVirtualOAMSprite00 + PARTY_LENGTH * SPRITEOAMSTRUCT_LENGTH
+ jp LoadTrainerHudOAM
+
+StageBallTilesData:
+ ld a, [de]
+ push af
+ ld de, wBuffer1
+ ld c, PARTY_LENGTH
+ ld a, $34 ; empty slot
+.loop1
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .loop1
+ pop af
+ ld de, wBuffer1
+.loop2
+ push af
+ call .GetHUDTile
+ inc de
+ pop af
+ dec a
+ jr nz, .loop2
+ ret
+
+.GetHUDTile:
+ ld a, [hli]
+ and a
+ jr nz, .got_hp
+ ld a, [hl]
+ and a
+ ld b, $33 ; fainted
+ jr z, .fainted
+
+.got_hp
+ dec hl
+ dec hl
+ dec hl
+ ld a, [hl]
+ and a
+ ld b, $32 ; statused
+ jr nz, .load
+ dec b ; normal
+ jr .load
+
+.fainted
+ dec hl
+ dec hl
+ dec hl
+
+.load
+ ld a, b
+ ld [de], a
+ ld bc, PARTYMON_STRUCT_LENGTH + MON_HP - MON_STATUS
+ add hl, bc
+ ret
+
+DrawPlayerHUDBorder:
+ ld hl, .tiles
+ ld de, wTrainerHUDTiles
+ ld bc, .tiles_end - .tiles
+ call CopyBytes
+ hlcoord 18, 10
+ ld de, -1 ; start on right
+ jr PlaceHUDBorderTiles
+
+.tiles
+ db $73 ; right side
+ db $77 ; bottom right
+ db $6f ; bottom left
+ db $76 ; bottom side
+.tiles_end
+
+DrawPlayerPartyIconHUDBorder:
+ ld hl, .tiles
+ ld de, wTrainerHUDTiles
+ ld bc, .tiles_end - .tiles
+ call CopyBytes
+ hlcoord 18, 10
+ ld de, -1 ; start on right
+ jr PlaceHUDBorderTiles
+
+.tiles
+ db $73 ; right side
+ db $5c ; bottom right
+ db $6f ; bottom left
+ db $76 ; bottom side
+.tiles_end
+
+DrawEnemyHUDBorder:
+ ld hl, .tiles
+ ld de, wTrainerHUDTiles
+ ld bc, .tiles_end - .tiles
+ call CopyBytes
+ hlcoord 1, 2
+ ld de, 1 ; start on left
+ call PlaceHUDBorderTiles
+ ld a, [wBattleMode]
+ dec a
+ ret nz
+ ld a, [wTempEnemyMonSpecies]
+ dec a
+ call CheckCaughtMon
+ ret z
+ hlcoord 1, 1
+ ld [hl], $5d
+ ret
+
+.tiles
+ db $6d ; left side
+ db $74 ; bottom left
+ db $78 ; bottom right
+ db $76 ; bottom side
+.tiles_end
+
+PlaceHUDBorderTiles:
+ ld a, [wTrainerHUDTiles + 0]
+ ld [hl], a
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ ld a, [wTrainerHUDTiles + 1]
+ ld [hl], a
+ ld b, 8
+.loop
+ add hl, de
+ ld a, [wTrainerHUDTiles + 3]
+ ld [hl], a
+ dec b
+ jr nz, .loop
+ add hl, de
+ ld a, [wTrainerHUDTiles + 2]
+ ld [hl], a
+ ret
+
+LinkBattle_TrainerHuds:
+ call LoadBallIconGFX
+ ld hl, wPartyMon1HP
+ ld de, wPartyCount
+ call StageBallTilesData
+ ld hl, wPlaceBallsX
+ ld a, 10 * 8
+ ld [hli], a
+ ld [hl], 8 * 8
+ ld a, 8
+ ld [wPlaceBallsDirection], a
+ ld hl, wVirtualOAMSprite00
+ call LoadTrainerHudOAM
+
+ ld hl, wOTPartyMon1HP
+ ld de, wOTPartyCount
+ call StageBallTilesData
+ ld hl, wPlaceBallsX
+ ld a, 10 * 8
+ ld [hli], a
+ ld [hl], 13 * 8
+ ld hl, wVirtualOAMSprite00 + PARTY_LENGTH * SPRITEOAMSTRUCT_LENGTH
+ jp LoadTrainerHudOAM
+
+LoadTrainerHudOAM:
+ ld de, wBuffer1
+ ld c, PARTY_LENGTH
+.loop
+ ld a, [wPlaceBallsY]
+ ld [hli], a ; y
+ ld a, [wPlaceBallsX]
+ ld [hli], a ; x
+ ld a, [de]
+ ld [hli], a ; tile id
+ ld a, PAL_BATTLE_OB_YELLOW
+ ld [hli], a ; attributes
+ ld a, [wPlaceBallsX]
+ ld b, a
+ ld a, [wPlaceBallsDirection]
+ add b
+ ld [wPlaceBallsX], a
+ inc de
+ dec c
+ jr nz, .loop
+ ret
+
+LoadBallIconGFX:
+ ld de, .gfx
+ ld hl, vTiles0 tile $31
+ lb bc, BANK(LoadBallIconGFX), 4
+ jp Request2bpp
+
+.gfx
+INCBIN "gfx/battle/balls.2bpp"
+
+_ShowLinkBattleParticipants:
+ call ClearBGPalettes
+ call LoadFontsExtra
+ hlcoord 3, 3
+ ld b, 9
+ ld c, 12
+ call Textbox
+ hlcoord 4, 5
+ ld de, wPlayerName
+ call PlaceString
+ hlcoord 4, 10
+ ld de, wOTPlayerName
+ call PlaceString
+ hlcoord 9, 8
+ ld a, "<BOLD_V>"
+ ld [hli], a
+ ld [hl], "<BOLD_S>"
+ farcall LinkBattle_TrainerHuds ; no need to farcall
+ ld b, SCGB_DIPLOMA
+ call GetSGBLayout
+ call SetPalettes
+ ld a, $e4
+ ldh [rOBP0], a
+ ld c, 150
+ jp DelayFrames