pokepinball/engine/pinball_game/draw_sprites/draw_gengar_bonus_sprites.asm
Raymond Dodge d1f4c7fab7 Use labels instead of constants for HRAM
Use explicit ldh instruction to access HRAM locations, don't rely on optimizing ld
2024-03-17 09:27:05 -05:00

378 lines
5.8 KiB
NASM

DrawSpritesGengarBonus: ; 0x18faf
ld bc, $7f00
callba DrawTimer
call Func_19020
call Func_190b9
call Func_19185
callba DrawFlippers
callba DrawPinball
ret
Debug_CycleGengarBonusPhase:
; Leftover debugging function for quickly cycling through
; the three phases of the Gengar Bonus stage. Pressing UP
; will instantly skip to the next phase.
ldh a, [hNewlyPressedButtons]
bit BIT_D_UP, a
ret z
ld a, [wGastly1Enabled]
and a
jr z, .disabled
ld a, $1
ld [wd67e], a
ld [wd687], a
xor a
ld [wGastly1Enabled], a
ld [wGastly2Enabled], a
ld [wGastly3Enabled], a
ret
.disabled
ld a, [wd67e]
and a
jr z, .asm_1900b
ld a, $1
ld [wd698], a
xor a
ld [wd67e], a
ld [wd687], a
ret
.asm_1900b
ld a, [wd698]
and a
ret z
ld a, 1
ld [wGastly1Enabled], a
ld [wGastly2Enabled], a
ld [wGastly3Enabled], a
xor a
ld [wd698], a
ret
Func_19020: ; 0x19020
ld de, wGastly1Enabled
call Func_19033
ld de, wGastly2Enabled
call Func_19033
ld de, wGastly3Enabled
call Func_19033
ret
Func_19033: ; 0x19033
ld a, [de]
and a
ret z
.asm_19036
call Func_19070
jr nc, .asm_19042
ld a, [rLCDC]
bit 7, a
jr z, .asm_19036
ret
.asm_19042
inc de
inc de
inc de
inc de
inc de
inc de
ld a, [de]
ld hl, hSCX
sub [hl]
ld b, a
inc de
inc de
ld a, [de]
ld hl, hSCY
sub [hl]
ld c, a
dec de
dec de
dec de
dec de
dec de
dec de
ld a, [de]
ld e, a
ld d, $0
ld hl, SpriteIds_Gastly
add hl, de
ld a, [hl]
cp $ff
call nz, LoadSpriteData2
ret
SpriteIds_Gastly:
db SPRITE2_GASTLY_0
db SPRITE2_GASTLY_1
db SPRITE2_GASTLY_2
db SPRITE2_GASTLY_HIT
db $FF
Func_19070: ; 0x19070
ld a, [wd674]
and a
ret z
push de
dec a
ld [wd674], a
sla a
sla a
ld c, a
ld b, $0
ld hl, GastlyVideoData_190a9
add hl, bc
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(GengarBonusGastlyGfx)
ld bc, $0060
call LoadOrCopyVRAMData
ld a, $8
ld [wd690], a
ld [wd6a1], a
xor a
ld [wd67e], a
ld [wd687], a
ld [wd698], a
pop de
scf
ret
GastlyVideoData_190a9:
dw vTilesSH tile $10, GengarBonusGastlyGfx
dw vTilesSH tile $16, GengarBonusGastlyGfx + $60
dw vTilesSH tile $1c, GengarBonusGastlyGfx + $c0
dw vTilesSH tile $22, GengarBonusGastlyGfx + $120
Func_190b9: ; 0x190b9
ld de, wd67e
call Func_190c6
ld de, wd687
call Func_190c6
ret
Func_190c6: ; 0x190c6
ld a, [de]
and a
ret z
.asm_190c9
call Func_19104
jr nc, .asm_190d5
ld a, [rLCDC]
bit 7, a
jr z, .asm_190c9
ret
.asm_190d5
inc de
inc de
inc de
inc de
inc de
inc de
ld a, [de]
ld hl, hSCX
sub [hl]
ld b, a
inc de
inc de
ld a, [de]
ld hl, hSCY
sub [hl]
ld c, a
dec de
dec de
dec de
dec de
dec de
dec de
ld a, [de]
ld e, a
ld d, $0
ld hl, SpriteIds_Haunter
add hl, de
ld a, [hl]
cp $ff
call nz, LoadSpriteData2
ret
SpriteIds_Haunter:
db SPRITE2_HAUNTER_0
db SPRITE2_HAUNTER_1
db SPRITE2_HAUNTER_2
db SPRITE2_HAUNTER_3
db SPRITE2_HAUNTER_HIT
db $FF
Func_19104: ; 0x19104
ld a, [wd690]
and a
ret z
push de
dec a
ld [wd690], a
sla a
sla a
sla a
ld c, a
ld b, $0
ld hl, GengarBonusStageHaunterGfxTable
add hl, bc
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(GengarBonusHaunterGfx)
call LoadOrCopyVRAMData
ld a, $4
ld [wd674], a
ld a, $8
ld [wd6a1], a
xor a
ld [wGastly1Enabled], a
ld [wGastly2Enabled], a
ld [wGastly3Enabled], a
ld [wd698], a
pop de
scf
ret
GengarBonusStageHaunterGfxTable: ; 0x19145
; Graphics data for Haunter.
; First word: length in bytes
; Second word: destination VRAM address
; Third word: graphics data
; Fourth word: unused
dw $60, vTilesSH tile $10, GengarBonusHaunterGfx, $0000
dw $60, vTilesSH tile $16, GengarBonusHaunterGfx + $60, $0000
dw $60, vTilesSH tile $1c, GengarBonusHaunterGfx + $c0, $0000
dw $60, vTilesSH tile $22, GengarBonusHaunterGfx + $120, $0000
dw $20, vTilesSH tile $28, GengarBonusHaunterGfx + $180, $0000
dw $40, vTilesOB tile $1a, GengarBonusHaunterGfx + $1a0, $0000
dw $60, vTilesOB tile $1e, GengarBonusHaunterGfx + $1e0, $0000
dw $60, vTilesOB tile $24, GengarBonusHaunterGfx + $240, $0000
Func_19185: ; 0x19185
ld de, wd698
call Func_1918c
ret
Func_1918c: ; 0x1918c
ld a, [de]
and a
ret z
.asm_1918f
call Func_191cb
jr nc, .asm_1919b
ld a, [rLCDC]
bit 7, a
jr z, .asm_1918f
ret
.asm_1919b
inc de
inc de
inc de
inc de
inc de
inc de
ld a, [de]
ld hl, hSCX
sub [hl]
ld b, a
inc de
inc de
ld a, [de]
ld hl, hSCY
sub [hl]
ld c, a
dec de
dec de
dec de
dec de
dec de
dec de
ld a, [de]
ld e, a
ld d, $0
ld hl, SpriteIds_Gengar
add hl, de
ld a, [hl]
cp $ff
call nz, LoadSpriteData2
ret
SpriteIds_Gengar:
db SPRITE2_GENGAR_0
db SPRITE2_GENGAR_1
db SPRITE2_GENGAR_2
db SPRITE2_GENGAR_3
db SPRITE2_GENGAR_4
db SPRITE2_GENGAR_HIT
db $FF
Func_191cb: ; 0x191cb
ld a, [wd6a1]
and a
ret z
push de
dec a
ld [wd6a1], a
sla a
sla a
sla a
ld c, a
ld b, $0
ld hl, GengarBonusStageGengarGfxTable
add hl, bc
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld a, [hli]
ld h, [hl]
ld l, a
ld a, $26
call LoadOrCopyVRAMData
ld a, $4
ld [wd674], a
ld a, $8
ld [wd690], a
xor a
ld [wGastly1Enabled], a
ld [wGastly2Enabled], a
ld [wGastly3Enabled], a
ld [wd67e], a
ld [wd687], a
pop de
scf
ret
GengarBonusStageGengarGfxTable:
dw $60, vTilesSH tile $10, GengarBonusGengarGfx, $0000
dw $60, vTilesSH tile $16, GengarBonusGengarGfx + $60, $0000
dw $60, vTilesSH tile $1c, GengarBonusGengarGfx + $c0, $0000
dw $60, vTilesSH tile $22, GengarBonusGengarGfx + $120, $0000
dw $20, vTilesSH tile $28, GengarBonusGengarGfx + $180, $0000
dw $40, vTilesOB tile $1a, GengarBonusGengarGfx + $1a0, $0000
dw $60, vTilesOB tile $1e, GengarBonusGengarGfx + $1e0, $0000
dw $60, vTilesOB tile $24, GengarBonusGengarGfx + $240, $0000