Move draw sprites routines to engine/main/draw_sprites/

This commit is contained in:
Marcus Huderle
2017-06-30 15:55:42 -07:00
parent 354dd03c49
commit a14fbdbaba
11 changed files with 2125 additions and 2118 deletions

View File

@@ -0,0 +1,401 @@
DrawSpritesBlueFieldTop: ; 0x1f330
ld bc, $7f00
callba DrawTimer
call Func_1f395
call Func_1f3e1
call Func_1f408
call Func_1f428
callba DrawPinball
call Func_1f48f
call Func_1f4f8
ret
DrawSpritesBlueFieldBottom: ; 0x1f35a
ld bc, $7f00
callba DrawTimer
callba DrawMonCaptureAnimation
call DrawAnimatedMon_BlueStage
call DrawPikachuSavers_BlueStage
callba DrawFlippers
callba DrawPinball
call Func_1f4a3
call Func_1f509
call Func_1f55e
ret
Func_1f395: ; 0x1f395
ld de, wd4cd
ld hl, Data_1f3cf
call Func_1f3ad
ld de, wd4d0
ld hl, Data_1f3d5
call Func_1f3ad
ld de, wd4d3
ld hl, Data_1f3db
; fall through
Func_1f3ad: ; 0x1f3ad
ld a, [hSCX]
ld b, a
ld a, [hli]
sub b
ld b, a
ld a, [hSCY]
ld c, a
ld a, [hli]
sub c
ld c, a
ld a, [wd4d7]
sub [hl]
inc hl
jr z, .asm_1f3c4
ld a, $0
jr .asm_1f3c6
.asm_1f3c4
ld a, $1
.asm_1f3c6
ld e, a
ld d, $0
add hl, de
ld a, [hl]
call LoadOAMData
ret
Data_1f3cf:
db $48, $2D ; background scroll offsets (x, y)
db $01
db $E0, $E1, $E0 ; OAM ids
Data_1f3d5:
db $33, $3E ; background scroll offsets (x, y)
db $00
db $E0, $E1, $E0 ; OAM ids
Data_1f3db:
db $5D, $3E ; background scroll offsets (x, y)
db $02
db $E0, $E1, $E0 ; OAM ids
Func_1f3e1: ; 0x1f3e1
ld a, $8a
ld hl, hSCX
sub [hl]
ld b, a
ld a, $53
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd50a]
srl a
srl a
ld e, a
ld d, $0
ld hl, OAMIds_1f402
add hl, de
ld a, [hl]
call LoadOAMData
ret
OAMIds_1f402:
db $E8, $E9, $EA, $EB, $EC, $ED
Func_1f408: ; 0x1f408
ld a, $18
ld hl, hSCX
sub [hl]
ld b, a
ld a, $5f
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd633]
ld e, a
ld d, $0
ld hl, OAMIds_1f425
add hl, de
ld a, [hl]
call LoadOAMData
ret
OAMIds_1f425:
db $E2, $E3, $E4
Func_1f428: ; 0x1f428
ld a, $70
ld hl, hSCX
sub [hl]
ld b, a
ld a, $59
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd638]
ld e, a
ld d, $0
ld hl, OAMIds_1f445
add hl, de
ld a, [hl]
call LoadOAMData
ret
OAMIds_1f445:
db $E5, $E6, $E7
DrawPikachuSavers_BlueStage: ; 0x1f448
ld a, [hSCX]
ld d, a
ld a, [hSCY]
ld e, a
ld a, [wd51d]
and a
ld a, [wd518]
jr z, .asm_1f473
ld a, [wd51c]
and a
jr nz, .asm_1f469
ld a, [hNumFramesDropped]
srl a
srl a
srl a
and $1
jr .asm_1f473
.asm_1f469
ld a, [wd4b4]
cp $50
ld a, $1
jr nc, .asm_1f473
xor a
.asm_1f473
sla a
ld c, a
ld b, $0
ld hl, PikachuSaverOAMOffsets_BlueStage
add hl, bc
ld a, [hli]
sub d
ld b, a
ld a, [hli]
sub e
ld c, a
ld a, [wPikachuSaverAnimationFrame]
add $e
call LoadOAMData
ret
PikachuSaverOAMOffsets_BlueStage:
dw $7E0F
dw $7E92
Func_1f48f: ; 0x1f48f
ld a, [wd551]
and a
ret nz
ld a, [hNumFramesDropped]
bit 4, a
ret z
ld de, wIndicatorStates + 5
ld hl, OAMDataTable_1f4ce
ld b, $6
jr asm_1f4b5
Func_1f4a3: ; 0x1f4a3
ld a, [wd551]
and a
ret nz
ld a, [hNumFramesDropped]
bit 4, a
ret z
ld de, wIndicatorStates + 11
ld hl, OAMDataTable_1f4e0
ld b, $8
asm_1f4b5:
push bc
ld a, [hSCX]
ld b, a
ld a, [hli]
sub b
ld b, a
ld a, [hSCY]
ld c, a
ld a, [hli]
sub c
ld c, a
ld a, [de]
and a
ld a, [hli]
call nz, LoadOAMData
pop bc
inc de
dec b
jr nz, asm_1f4b5
ret
OAMDataTable_1f4ce: ; 0x1f4ce
; Each entry is:
; [OAM x/y Offsets],[OAM Id]
db $0D, $37
db $EE
db $35, $0D
db $F1
db $8E, $4E
db $F4
db $36, $64
db $EF
db $4C, $49
db $EE
db $61, $64
db $F0
OAMDataTable_1f4e0: ; 0x1f4e0
; Each entry is 3 bytes:
; [OAM x/y Offsets],[OAM Id]
db $2D, $13
db $32
db $6A, $13
db $33
db $25, $2D
db $34
db $73, $2D
db $35
db $38, $14
db $36
db $66, $14
db $36
db $79, $40
db $37
db $89, $40
db $37
Func_1f4f8: ; 0x1f4f8
ld a, [wd551]
and a
ret z
ld de, wd566
ld hl, OAMOffsetsTable_1f53a
ld b, $c
ld c, $47
jr asm_1f518
Func_1f509: ; 0x1f509
ld a, [wd551]
and a
ret z
ld de, wd572
ld hl, OAMOffsetsTable_1f552
ld b, $6
ld c, $40
asm_1f518: ; 0x1f518
push bc
ld a, [de]
add c
cp c
push af
ld a, [hSCX]
ld b, a
ld a, [hli]
sub b
ld b, a
ld a, [hSCY]
ld c, a
ld a, [hli]
sub c
ld c, a
ld a, [hNumFramesDropped]
and $e
jr nz, .asm_1f530
dec c
.asm_1f530
pop af
call nz, LoadOAMData
pop bc
inc de
dec b
jr nz, asm_1f518
ret
OAMOffsetsTable_1f53a: ; 0x1f53a
; OAM data x, y offsets
db $4C, $08
db $2B, $12
db $6D, $12
db $15, $25
db $82, $25
db $0D, $3F
db $4C, $7F
db $8B, $3F
db $0A, $65
db $36, $7F
db $61, $7F
db $8D, $65
OAMOffsetsTable_1f552: ; 0x1f552
; OAM data x, y offsets
db $3B, $12
db $5D, $12
db $31, $16
db $67, $16
db $25, $2C
db $73, $2C
Func_1f55e: ; 0x1f55e
ld a, [wd604]
and a
ret z
ld a, [wd606]
inc a
ld [wd606], a
ld a, $40
ld hl, hSCX
sub [hl]
ld b, a
ld a, $1
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd606]
srl a
srl a
srl a
and $3
add $4f
cp $52
call nz, LoadOAMData
ret
DrawAnimatedMon_BlueStage: ; 0x1f58b
ld a, [wWildMonIsHittable]
and a
ret z
ld a, $50
ld hl, hSCX
sub [hl]
ld b, a
ld a, $3e
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd5bd]
ld e, a
ld d, $0
ld hl, AnimatedMonOAMIds_BlueStage
add hl, de
ld a, [hl]
call LoadOAMData
ret
AnimatedMonOAMIds_BlueStage:
db $26, $27, $28, $29, $2A, $2B, $2C, $2D, $2E, $2F, $30, $31

View File

@@ -0,0 +1,28 @@
DrawSpritesDiglettBonus: ; 0x1ac98
callba DrawFlippers
callba DrawPinball
call Func_1acb0
ret
Func_1acb0: ; 0x1acb0
ld a, $40
ld hl, hSCX
sub [hl]
ld b, a
ld a, $0
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wDugtrioAnimationFrame]
ld e, a
ld d, $0
ld hl, OAMIds_1accf
add hl, de
ld a, [hl]
bit 7, a
call z, LoadOAMData2
ret
OAMIds_1accf:
db $46, $47, $48, $49, $4A, $4B, $4C, $4D, $4E, $4F, $50, $51, $52, $53
db $FF

View File

@@ -0,0 +1,363 @@
DrawSpritesGengarBonus: ; 0x18faf
ld bc, $7f00
callba DrawTimer
call Func_19020
call Func_190b9
call Func_19185
callba DrawFlippers
callba DrawPinball
ret
Func_18fda:
; unused
ld a, [hNewlyPressedButtons]
bit 6, a
ret z
ld a, [wd659]
and a
jr z, .asm_18ff8
ld a, $1
ld [wd67e], a
ld [wd687], a
xor a
ld [wd659], a
ld [wd662], a
ld [wd66b], a
ret
.asm_18ff8
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 [wd659], a
ld [wd662], a
ld [wd66b], a
xor a
ld [wd698], a
ret
Func_19020: ; 0x19020
ld de, wd659
call Func_19033
ld de, wd662
call Func_19033
ld de, wd66b
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, OAMIds_1906b
add hl, de
ld a, [hl]
cp $ff
call nz, LoadOAMData2
ret
OAMIds_1906b:
db $00, $01, $02, $03
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, OAMIds_190fe
add hl, de
ld a, [hl]
cp $ff
call nz, LoadOAMData2
ret
OAMIds_190fe:
db $04, $05, $06, $07, $08
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 [wd659], a
ld [wd662], a
ld [wd66b], 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, OAMIds_191c4
add hl, de
ld a, [hl]
cp $ff
call nz, LoadOAMData2
ret
OAMIds_191c4:
db $09, $0A, $0B, $0C, $0D, $0E
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 [wd659], a
ld [wd662], a
ld [wd66b], 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

View File

@@ -0,0 +1,305 @@
DrawSpritesMeowthBonus: ; 0x2583b
ld bc, $7f65
callba DrawTimer
callba DrawFlippers
call Func_259fe
call Func_25895
call Func_2595e
call Func_2586c
callba DrawPinball
call Func_25a39
ret
Func_2586c: ; 0x2586c
ld a, [wMeowthXPosition]
ld hl, hSCX
sub [hl]
ld b, a
ld a, [wMeowthYPosition]
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wMeowthAnimationFrame]
ld e, a
ld d, $0
ld hl, OAMIds_2588b
add hl, de
ld a, [hl]
call LoadOAMData2
ret
OAMIds_2588b:
db $21, $22, $23, $24, $25, $26, $27, $28, $33, $34
Func_25895: ; 0x25895
ld a, [wd714]
cp $b
jr nz, .asm_258a0
xor a
ld [wd714], a
.asm_258a0
ld a, [wd715]
cp $b
jr nz, .asm_258ab
xor a
ld [wd715], a
.asm_258ab
ld a, [wd716]
cp $b
jr nz, .asm_258b6
xor a
ld [wd716], a
.asm_258b6
ld a, [wd71a]
ld hl, hSCX
sub [hl]
ld b, a
ld a, [wd727]
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd717]
sla a
ld e, a
ld d, $0
ld hl, OAMPointers_25935
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wd714]
ld e, a
ld d, $0
add hl, de
ld a, [hl]
call LoadOAMData2
ld a, [wd71b]
ld hl, hSCX
sub [hl]
ld b, a
ld a, [wd728]
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd718]
sla a
ld e, a
ld d, $0
ld hl, OAMPointers_25935
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wd715]
ld e, a
ld d, $0
add hl, de
ld a, [hl]
call LoadOAMData2
ld a, [wd71c]
ld hl, hSCX
sub [hl]
ld b, a
ld a, [wd729]
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd719]
sla a
ld e, a
ld d, $0
ld hl, OAMPointers_25935
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wd716]
ld e, a
ld d, $0
add hl, de
ld a, [hl]
call LoadOAMData2
ret
OAMPointers_25935:
dw OAMIds_2593d
dw OAMIds_2593d
dw OAMIds_25948
dw OAMIds_25953
OAMIds_2593d:
db $29, $29, $29, $29, $2A, $2A, $2A, $2A, $2A, $2A, $2A
OAMIds_25948:
db $2B, $2B, $2B, $2B, $2B, $2B, $2B, $2C, $2C, $2C, $2C
OAMIds_25953:
db $2D, $32, $31, $30, $2F, $2E, $2F, $30, $31, $32, $32
Func_2595e: ; 0x2595e
ld a, [wd71e]
cp $b
jr nz, .asm_25969
xor a
ld [wd71e], a
.asm_25969
ld a, [wd71f]
cp $b
jr nz, .asm_25974
xor a
ld [wd71f], a
.asm_25974
ld a, [wd720]
cp $b
jr nz, .asm_2597f
xor a
ld [wd720], a
.asm_2597f
ld a, [wd724]
ld hl, hSCX
sub [hl]
ld b, a
ld a, [wd731]
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd721]
sla a
ld e, a
ld d, $0
ld hl, OAMPointers_25935
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wd71e]
ld e, a
ld d, $0
add hl, de
ld a, [hl]
call LoadOAMData2
ld a, [wd725]
ld hl, hSCX
sub [hl]
ld b, a
ld a, [wd732]
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd722]
sla a
ld e, a
ld d, $0
ld hl, OAMPointers_25935
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wd71f]
ld e, a
ld d, $0
add hl, de
ld a, [hl]
call LoadOAMData2
ld a, [wd726]
ld hl, hSCX
sub [hl]
ld b, a
ld a, [wd733]
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd723]
sla a
ld e, a
ld d, $0
ld hl, OAMPointers_25935
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wd720]
ld e, a
ld d, $0
add hl, de
ld a, [hl]
call LoadOAMData2
ret
Func_259fe: ; 0x259fe
ld a, [wd795]
and a
ret z
ld de, wd79c
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, OAMIds_25a29
add hl, de
ld a, [hl]
cp $ff
call nz, LoadOAMData2
ret
OAMIds_25a29:
db $35, $36, $37, $38, $39, $3A, $3B, $3C, $3D, $3E, $3F, $40, $41, $42, $43
db $FF
Func_25a39: ; 0x25a39
ld a, [wd64e]
and a
ret z
ld a, [wd652]
ld hl, hSCX
sub [hl]
ld b, a
xor a
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd64f]
cp $a
jr c, .asm_25a58
ld de, $0000
jr .asm_25a5b
.asm_25a58
ld de, $0001
.asm_25a5b
ld hl, OAMIds_25a7a
add hl, de
ld a, [hl]
call LoadOAMData2
ld hl, wd64f
inc [hl]
ld a, [hl]
cp $14
ret c
ld [hl], $0
ld hl, wd650
inc [hl]
ld a, [hl]
cp $a
ret nz
xor a
ld [wd64e], a
ret
OAMIds_25a7a: ; 0x25a7a
db $44, $45

View File

@@ -0,0 +1,81 @@
DrawSpritesMewtwoBonus: ; 0x1994e
ld bc, $7f65
callba DrawTimer
call Func_1999d
callba DrawFlippers
callba DrawPinball
call Func_19976
ret
Func_19976: ; 0x19976
ld a, $40
ld hl, hSCX
sub [hl]
ld b, a
ld a, $0
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd6ad]
ld e, a
ld d, $0
ld hl, OAMIds_19995
add hl, de
ld a, [hl]
cp $ff
call nz, LoadOAMData2
ret
OAMIds_19995:
db $0F, $10, $11, $12, $17, $18, $19
db $FF
Func_1999d: ; 0x1999d
ld de, wd6b6
call Func_199be
ld de, wd6be
call Func_199be
ld de, wd6c6
call Func_199be
ld de, wd6ce
call Func_199be
ld de, wd6d6
call Func_199be
ld de, wd6de
; fall through
Func_199be: ; 0x199be
ld a, [de]
and a
ret z
inc de
inc de
inc de
inc de
inc de
ld a, [de]
ld hl, hSCX
sub [hl]
ld b, a
inc de
ld a, [de]
ld hl, hSCY
sub [hl]
ld c, a
dec de
dec de
dec de
dec de
ld a, [de]
ld e, a
ld d, $0
ld hl, OAMIds_199e6
add hl, de
ld a, [hl]
cp $ff
call nz, LoadOAMData2
ret
OAMIds_199e6:
db $13, $14, $15, $16, $1A, $1B, $1C, $1D, $1E, $1F, $20
db $FF

View File

@@ -0,0 +1,759 @@
DrawSpritesRedFieldTop: ; 0x1755c
ld bc, $7f00
call DrawTimer
call Func_17cc4
call Func_17d34
call Func_17d59
call Func_17d7a
call Func_17d92
call Func_17de1
call DrawPinball
call Func_17efb
call Func_17f64
ret
DrawSpritesRedFieldBottom: ; 0x1757e
ld bc, $7f00
call DrawTimer
call DrawMonCaptureAnimation
call DrawAnimatedMon_RedStage
call DrawPikachuSavers_RedStage
callba DrawFlippers
call DrawPinball
call Func_17f0f
call Func_17f75
call Func_17fca
ret
DrawTimer: ; 0x175a4
ld a, [wd57d]
and a
ret z
ld a, [hGameBoyColorFlag]
and a
jr nz, DrawTimer_GameBoyColor
ld a, [wd580]
and a
ret z
ld a, [wd581]
and a
jr z, .DrawTimer_GameBoy
dec a
ld [wd581], a
ret
.DrawTimer_GameBoy
call Func_1762f
ld hl, wTimerDigits
ld a, [wTimerMinutes]
and $f
call LoadTimerDigitTiles
ld a, [wTimerSeconds]
swap a
and $f
call LoadTimerDigitTiles
ld a, [wTimerSeconds]
and $f
call LoadTimerDigitTiles
ld d, $0
ld hl, TimerOAMIds
add hl, de
ld a, [hli]
call DrawTimerDigit
ld a, [hli]
call DrawTimerDigit
ld a, [hli]
call DrawTimerDigit
ld a, [hli]
call DrawTimerDigit
ret
DrawTimer_GameBoyColor: ; 0x175f5
; Loads the OAM data for the timer in the top-right corner of the screen.
ld a, [wTimerMinutes]
and $f
call DrawTimerDigit_GameBoyColor
ld a, $a ; colon
call DrawTimerDigit_GameBoyColor
ld a, [wTimerSeconds]
swap a
and $f
call DrawTimerDigit_GameBoyColor ; tens digit of the minutes
ld a, [wTimerSeconds]
and $f
call DrawTimerDigit_GameBoyColor ; ones digit of the minutes
ret
TimerOAMIds:
db $d7, $da, $d8, $d9
db $dc, $df, $dd, $de
db $dc, $db, $dd, $de
db $f5, $f8, $f6, $f7
DrawTimerDigit_GameBoyColor: ; 0x17625
add $b1 ; the timer digits' OAM ids start at $b1
DrawTimerDigit: ; 0x17627
call LoadOAMData
ld a, b
add $8
ld b, a
ret
Func_1762f: ; 0x1762f
lb de, $60, $0c
ld a, [wCurrentStage]
cp $6
ret nc
lb de, $00, $00
bit 0, a
ret z
lb de, $30, $04
ld a, [wInSpecialMode]
and a
ret z
ld a, [wSpecialMode]
and a
ret nz
lb de, $30, $08
ret
LoadTimerDigitTiles: ; 0x1764f
push bc
push de
cp [hl]
jr z, .skip
push af
push hl
add d
call Func_17665
pop hl
pop af
ld [hl], a
.skip
inc hl
pop de
ld a, d
add $10
ld d, a
pop bc
ret
Func_17665: ; 0x17665
ld c, a
ld b, $0
sla c
rl b
ld hl, TimerDigitsTileData
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, Bank(TimerDigitsTileData)
call Func_10aa
ret
INCLUDE "data/timer_digits_tiledata.asm"
DrawMonCaptureAnimation: ; 0x17c67
ld a, [wCapturingMon]
and a
ret z
ld a, $50
ld hl, hSCX
sub [hl]
ld b, a
ld a, $38
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wBallCaptureAnimationFrame]
ld e, a
ld d, $0
ld hl, BallCaptureAnimationOAMIds
add hl, de
ld a, [hl]
call LoadOAMData
ret
BallCaptureAnimationOAMIds:
db $19, $1A, $1B, $1C, $1D, $1E, $1F, $20, $21, $22, $23, $24, $25
DrawAnimatedMon_RedStage: ; 0x17c96
ld a, [wWildMonIsHittable]
and a
ret z
ld a, $50
ld hl, hSCX
sub [hl]
ld b, a
ld a, $3e
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd5bd]
ld e, a
ld d, $0
ld hl, AnimatedMonOAMIds_RedStage
add hl, de
ld a, [hl]
call LoadOAMData
ret
AnimatedMonOAMIds_RedStage:
db $26, $27, $28, $29, $2A, $2B, $2C, $2D, $2E, $2F, $30, $31
Func_17cc4: ; 0x17cc4
ld de, wd4cd
ld hl, OAMData_17d15
call Func_17cdc
ld de, wd4d0
ld hl, OAMData_17d1b
call Func_17cdc
ld de, wd4d3
ld hl, OAMData_17d21
; fall through
Func_17cdc: ; 0x17cdc
push hl
ld hl, AnimationData_17d27
call UpdateAnimation
ld h, d
ld l, e
ld a, [hl]
and a
jr nz, .asm_17cf6
call GenRandom
and $7
add $1e
ld [hli], a
ld a, $1
ld [hli], a
xor a
ld [hl], a
.asm_17cf6
pop hl
inc de
ld a, [hSCX]
ld b, a
ld a, [hli]
sub b
ld b, a
ld a, [hSCY]
ld c, a
ld a, [hli]
sub c
ld c, a
ld a, [wd4d7]
sub [hl]
inc hl
jr z, .asm_17d0c
ld a, [de]
.asm_17d0c
ld e, a
ld d, $0
add hl, de
ld a, [hl]
call LoadOAMData
ret
OAMData_17d15:
db $3A, $4E ; x, y offsets
db $00 ; ???
db $BD, $BC, $CE ; oam ids
OAMData_17d1b:
db $53, $44 ; x, y offsets
db $01 ; ???
db $BD, $BC, $CD ; oam ids
OAMData_17d21:
db $4D, $60 ; x, y offsets
db $02 ; ???
db $BD, $BC, $CF ; oam ids
AnimationData_17d27:
; Each entry is [duration][OAM id]
db $1E, $01
db $02, $02
db $03, $01
db $02, $02
db $03, $01
db $02, $02
db $00 ; terminator
Func_17d34: ; 0x17d34
ld a, $0
ld hl, hSCX
sub [hl]
ld b, a
ld a, $10
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wStageCollisionState]
ld e, a
ld d, $0
ld hl, OAMIds_17d51
add hl, de
ld a, [hl]
call LoadOAMData
ret
OAMIds_17d51:
db $C9
db $C9
db $C9
db $C9
db $C8
db $C8
db $CA
db $CA
Func_17d59: ; 0x17d59
ld a, $74
ld hl, hSCX
sub [hl]
ld b, a
ld a, $52
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wBellsproutAnimationFrame]
ld e, a
ld d, $0
ld hl, BellsproutAnimationOAMIds
add hl, de
ld a, [hl]
call LoadOAMData
ret
BellsproutAnimationOAMIds: ; 0x17d76
db $BE
db $BF
db $C0
db $C1
Func_17d7a: ; 0x17d7a
ld a, [hGameBoyColorFlag]
and a
ret z
ld a, $67
ld hl, hSCX
sub [hl]
ld b, a
ld a, $54
ld hl, hSCY
sub [hl]
ld c, a
ld a, $cc
call LoadOAMData
ret
Func_17d92: ; 0x17d92
ld a, [hGameBoyColorFlag]
and a
ret z
ld hl, AnimationData_17dd0
ld de, wd504
call UpdateAnimation
ld a, [wd504]
and a
jr nz, .asm_17db1
ld a, $13
ld [wd504], a
xor a
ld [wd505], a
ld [wd506], a
.asm_17db1
ld a, $2b
ld hl, hSCX
sub [hl]
ld b, a
ld a, $69
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd505]
ld e, a
ld d, $0
ld hl, OAMIds_17dce
add hl, de
ld a, [hl]
call LoadOAMData
ret
OAMIds_17dce: ; 0x17dce
db $CB
db $D0
AnimationData_17dd0:
; Each entry is [duration][OAM id]
db $14, $00
db $13, $01
db $15, $00
db $12, $01
db $14, $00
db $13, $01
db $16, $00
db $13, $01
db $0 ; terminator
Func_17de1: ; 0x17de1
ld a, $88
ld hl, hSCX
sub [hl]
ld b, a
ld a, $5a
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd50a]
srl a
srl a
ld e, a
ld d, $0
ld hl, OAMIds_17e02
add hl, de
ld a, [hl]
call LoadOAMData
ret
OAMIds_17e02: ; 0x17e02
db $C2
db $C3
db $C4
db $C5
db $C6
db $C7
DrawPikachuSavers_RedStage: ; 0x17e08
ld a, [hSCX]
ld d, a
ld a, [hSCY]
ld e, a
ld a, [wd51d]
and a
ld a, [wd518]
jr z, .asm_17e33
ld a, [wd51c]
and a
jr nz, .asm_17e29
ld a, [hNumFramesDropped]
srl a
srl a
srl a
and $1
jr .asm_17e33
.asm_17e29
ld a, [wd4b4]
cp $50
ld a, $1
jr nc, .asm_17e33
xor a
.asm_17e33
sla a
ld c, a
ld b, $0
ld hl, PikachuSaverOAMOffsets_RedStage
add hl, bc
ld a, [hli]
sub d
ld b, a
ld a, [hli]
sub e
ld c, a
ld a, [wPikachuSaverAnimationFrame]
add $e
call LoadOAMData
ret
PikachuSaverOAMOffsets_RedStage:
dw $7E0F
dw $7E92
Func_17e4f: ; 0x17e4f
; unused
ld hl, UnusedData_7e55
jp Func_17e5e
UnusedData_7e55: ; 0x17e55
db $00, $2B, $69, $CB, $00, $67, $54, $CC
db $FF
Func_17e5e: ; 0x17e5e
; unused
ld a, [hGameBoyColorFlag]
ld e, a
ld a, [hSCX]
ld d, a
.asm_17e64
ld a, [hli]
cp $ff
ret z
or e
jr nz, .asm_17e70
inc hl
inc hl
inc hl
jr .asm_17e64
.asm_17e70
ld a, [hli]
sub d
ld b, a
ld a, [hSCY]
ld c, a
ld a, [hli]
sub c
ld c, a
ld a, [hli]
bit 0, e
call nz, LoadOAMData
jr .asm_17e64
DrawPinball: ; 0x17e81
ld a, [wd548]
and a
ret z
ld hl, wBallSpin
ld a, [wBallRotation]
add [hl]
ld [wBallRotation], a
ld a, [wBallXPos + 1]
inc a
ld hl, hSCX
sub [hl]
ld b, a
ld a, [wBallYPos + 1]
inc a
sub $10
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wBallRotation]
srl a
srl a
srl a ; divide wBallRotation by 8 because
srl a ; there are 8 frames of the ball spinning
and $7
add $0
call LoadOAMData
ld a, [hGameBoyColorFlag]
and a
ret nz
ld a, [hGameBoyColorFlag]
and a
ret nz
ld a, [hSGBFlag]
and a
ret nz
ld a, [wd4c5]
inc a
ld hl, hSCX
sub [hl]
ld b, a
ld a, [wd4c6]
inc a
sub $10
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd4c7]
srl a
srl a
srl a
srl a
and $7
add $0
call LoadOAMData
ld a, [wBallXPos + 1]
ld [wd4c5], a
ld a, [wBallYPos + 1]
ld [wd4c6], a
ld a, [wBallRotation]
ld [wd4c7], a
ret
Func_17efb: ; 0x17efb
ld a, [wd551]
and a
ret nz
ld a, [hNumFramesDropped]
bit 4, a
ret z
ld de, wIndicatorStates + 5
ld hl, OAMData_17f3a
ld b, $6
jr asm_17f21
Func_17f0f: ; 0x17f0f
ld a, [wd551]
and a
ret nz
ld a, [hNumFramesDropped]
bit 4, a
ret z
ld de, wIndicatorStates + 11
ld hl, OAMData_17f4c
ld b, $8
asm_17f21: ; 0x17f21
push bc
ld a, [hSCX]
ld b, a
ld a, [hli]
sub b
ld b, a
ld a, [hSCY]
ld c, a
ld a, [hli]
sub c
ld c, a
ld a, [de]
and a
ld a, [hli]
call nz, LoadOAMData
pop bc
inc de
dec b
jr nz, asm_17f21
ret
OAMData_17f3a:
db $0D, $37 ; x, y offsets
db $D1 ; oam id
db $46, $22 ; x, y offsets
db $D6 ; oam id
db $8A, $4A ; x, y offsets
db $D2 ; oam id
db $41, $81 ; x, y offsets
db $D3 ; oam id
db $3D, $65 ; x, y offsets
db $D5 ; oam id
db $73, $74 ; x, y offsets
db $D4 ; oam id
OAMData_17f4c:
db $2D, $13 ; x, y offsets
db $32 ; oam id
db $6A, $13 ; x, y offsets
db $33 ; oam id
db $25, $2D ; x, y offsets
db $34 ; oam id
db $73, $2D ; x, y offsets
db $35 ; oam id
db $0F, $40 ; x, y offsets
db $36 ; oam id
db $1F, $40 ; x, y offsets
db $36 ; oam id
db $79, $40 ; x, y offsets
db $37 ; oam id
db $89, $40 ; x, y offsets
db $37 ; oam id
Func_17f64: ; 0x17f64
ld a, [wd551]
and a
ret z
ld de, wd566
ld hl, OAMOffsets_17fa6
ld b, $c
ld c, $39
jr asm_17f84
Func_17f75: ; 0x17f75
ld a, [wd551]
and a
ret z
ld de, wd572
ld hl, OAMOffsets_17fbe
ld b, $6
ld c, $40
asm_17f84: ; 0x17f84
push bc
ld a, [de]
add c
cp c
push af
ld a, [hSCX]
ld b, a
ld a, [hli]
sub b
ld b, a
ld a, [hSCY]
ld c, a
ld a, [hli]
sub c
ld c, a
ld a, [hNumFramesDropped]
and $e
jr nz, .asm_17f9c
dec c
.asm_17f9c
pop af
call nz, LoadOAMData
pop bc
inc de
dec b
jr nz, asm_17f84
ret
OAMOffsets_17fa6:
; x, y offsets
db $4C, $0C
db $32, $12
db $66, $12
db $19, $25
db $7F, $25
db $1E, $36
db $7F, $36
db $0E, $65
db $8B, $65
db $49, $7A
db $59, $7A
db $71, $7A
OAMOffsets_17fbe:
; x, y offsets
db $3D, $13
db $5B, $13
db $31, $17
db $67, $17
db $2E, $2C
db $6A, $2C
Func_17fca: ; 0x17fca
ld a, [wd604]
and a
ret z
ld a, [wd606]
inc a
ld [wd606], a
ld a, $40
ld hl, hSCX
sub [hl]
ld b, a
ld a, $1
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd606]
srl a
srl a
srl a
and $3
add $4f
cp $52
call nz, LoadOAMData
ret

View File

@@ -0,0 +1,129 @@
DrawSpritesSeelBonus: ; 0x26b7e
ld bc, $7f65
callba DrawTimer
call Func_26bf7
callba DrawFlippers
callba DrawPinball
call Func_26ba9
call Func_26c3c
ret
Func_26ba9: ; 0x26ba9
ld de, wd76e
call Func_26bbc
ld de, wd778
call Func_26bbc
ld de, wd782
call Func_26bbc
ret
Func_26bbc: ; 0x26bbc
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, OAMIds_26bdf
add hl, de
ld a, [hl]
cp $ff
call nz, LoadOAMData2
ret
OAMIds_26bdf:
db $54, $55, $56, $57, $58, $59, $5A, $5B, $5C, $5D, $5E, $5F, $60, $61, $62, $63
db $64, $65, $66, $67, $68, $69, $6A
db $FF
Func_26bf7: ; 0x26bf7: ; 0x26bf7
ld a, [wd795]
cp $0
ret z
ld de, wd79c
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, OAMIds_26c23
add hl, de
ld a, [hl]
cp $ff
call nz, LoadOAMData2
ret
OAMIds_26c23:
db $6B, $6C, $6D, $6E, $6F, $70, $71, $72, $73, $74, $75, $76, $77, $78, $79, $7A
db $7B, $7C, $7D, $7E, $7F, $80, $81, $82
db $FF
Func_26c3c: ; 0x26c3c
ld a, [wd64e]
and a
ret z
ld a, [wd652]
ld hl, hSCX
sub [hl]
ld b, a
xor a
ld hl, hSCY
sub [hl]
ld c, a
ld a, [wd64f]
cp $a
jr c, .asm_26c5b
ld de, $0000
jr .asm_26c5e
.asm_26c5b
ld de, $0001
.asm_26c5e
ld hl, OAMIds_26c7d
add hl, de
ld a, [hl]
call LoadOAMData2
ld hl, wd64f
inc [hl]
ld a, [hl]
cp $14
ret c
ld [hl], $0
ld hl, wd650
inc [hl]
ld a, [hl]
cp $a
ret nz
xor a
ld [wd64e], a
ret
OAMIds_26c7d:
db $83, $84

View File

@@ -0,0 +1,35 @@
DrawSpritesForStage: ; 0x84b7
; Draw sprites (OAM data) for the current stage.
ld a, [wCurrentStage]
call CallInFollowingTable
CallTable_84bd: ; 0x84bd
; STAGE_RED_FIELD_TOP
padded_dab DrawSpritesRedFieldTop
; STAGE_RED_FIELD_BOTTOM
padded_dab DrawSpritesRedFieldBottom
padded_dab Func_18079
padded_dab Func_18084
; STAGE_BLUE_FIELD_TOP
padded_dab DrawSpritesBlueFieldTop
; STAGE_BLUE_FIELD_BOTTOM
padded_dab DrawSpritesBlueFieldBottom
; STAGE_GENGAR_BONUS
padded_dab DrawSpritesGengarBonus
; STAGE_GENGAR_BONUS
padded_dab DrawSpritesGengarBonus
; STAGE_MEWTWO_BONUS
padded_dab DrawSpritesMewtwoBonus
; STAGE_MEWTWO_BONUS
padded_dab DrawSpritesMewtwoBonus
; STAGE_MEOWTH_BONUS
padded_dab DrawSpritesMeowthBonus
; STAGE_MEOWTH_BONUS
padded_dab DrawSpritesMeowthBonus
; STAGE_DIGLETT_BONUS
padded_dab DrawSpritesDiglettBonus
; STAGE_DIGLETT_BONUS
padded_dab DrawSpritesDiglettBonus
; STAGE_SEEL_BONUS
padded_dab DrawSpritesSeelBonus
; STAGE_SEEL_BONUS
padded_dab DrawSpritesSeelBonus

View File

@@ -0,0 +1,8 @@
Func_18079: ; 0x18079
callba DrawPinball
ret
Func_18084: ; 0x18084
callba DrawFlippers
callba DrawPinball
ret

View File

@@ -689,7 +689,7 @@ Func_3475: ; 0x3475
ld a, [wCurrentStage]
bit 0, a
callba nz, HandleFlippers
callba Func_84b7
callba DrawSpritesForStage
call Func_33e3
call CleanOAMBuffer
rst AdvanceFrame

2132
main.asm

File diff suppressed because it is too large Load Diff