mirror of
https://github.com/pret/pokepinball.git
synced 2026-04-25 15:35:38 -05:00
247 lines
3.3 KiB
NASM
247 lines
3.3 KiB
NASM
Func_8524: ; 0x8524
|
|
ld hl, wScore + $5
|
|
lb bc, $0c, $01
|
|
.loop
|
|
ld a, [hl]
|
|
swap a
|
|
and $f
|
|
call .GetDigit
|
|
inc de
|
|
dec b
|
|
ld a, [hld]
|
|
and $f
|
|
call .GetDigit
|
|
inc de
|
|
dec b
|
|
jr nz, .loop
|
|
ld a, $86
|
|
ld [de], a
|
|
inc de
|
|
ret
|
|
|
|
.GetDigit: ; 0x8543
|
|
jr nz, .okay
|
|
ld a, b
|
|
dec a
|
|
jr z, .okay
|
|
ld a, c
|
|
and a
|
|
ret nz
|
|
.okay
|
|
add $86 ; 0
|
|
ld [de], a
|
|
ld c, $0
|
|
ld a, b
|
|
cp $c
|
|
jr z, .load_tile_82
|
|
cp $9
|
|
jr z, .load_tile_82
|
|
cp $6
|
|
jr z, .load_tile_82
|
|
cp $3
|
|
ret nz
|
|
.load_tile_82
|
|
set 7, e
|
|
ld a, $82 ; ,
|
|
ld [de], a
|
|
res 7, e
|
|
ret
|
|
|
|
Func_8569:
|
|
xor a
|
|
ld hl, wAddScoreQueue
|
|
ld b, $31
|
|
.asm_856f
|
|
ld [hli], a
|
|
ld [hli], a
|
|
dec b
|
|
jr nz, .asm_856f
|
|
ld [hli], a
|
|
ret
|
|
|
|
AddBigBCD6FromQueueWithBallMultiplier: ; 0x8576
|
|
ld h, b
|
|
ld l, c
|
|
ld a, [wAddScoreQueueOffset]
|
|
ld e, a
|
|
ld d, wAddScoreQueue / $100
|
|
ld a, [wBallType]
|
|
and a
|
|
jr nz, .asm_8585
|
|
inc a
|
|
.asm_8585
|
|
ld b, a
|
|
jr asm_8592
|
|
|
|
AddBigBCD6FromQueue: ; 0x8588
|
|
; bc - Points to BCD buffer
|
|
ld h, b
|
|
ld l, c
|
|
ld a, [wAddScoreQueueOffset]
|
|
ld e, a
|
|
ld d, wAddScoreQueue / $100
|
|
ld b, $1
|
|
asm_8592:
|
|
push hl
|
|
x = 0
|
|
rept 6
|
|
ld a, [de]
|
|
if x == 0
|
|
add [hl]
|
|
else
|
|
adc [hl]
|
|
endc
|
|
daa
|
|
ld [de], a
|
|
inc de
|
|
inc hl
|
|
x = x + 1
|
|
endr
|
|
ld a, e
|
|
cp wAddScoreQueueEnd % $100
|
|
jr nz, .okay
|
|
ld e, wAddScoreQueue % $100
|
|
.okay
|
|
pop hl
|
|
dec b
|
|
jr nz, asm_8592
|
|
ld a, e
|
|
ld [wAddScoreQueueOffset], a
|
|
ret
|
|
|
|
Func_85c7: ; 0x85c7
|
|
ld a, [hNumFramesDropped]
|
|
and $3
|
|
ret nz
|
|
ld a, [wd478]
|
|
ld l, a
|
|
ld h, wAddScoreQueue / $100
|
|
ld de, wScore
|
|
ld a, [wAddScoreQueueOffset]
|
|
cp l
|
|
jr nz, .asm_85de
|
|
ld [wd479], a
|
|
.asm_85de
|
|
push hl
|
|
ld a, [hli]
|
|
or [hl]
|
|
inc hl
|
|
or [hl]
|
|
inc hl
|
|
or [hl]
|
|
inc hl
|
|
or [hl]
|
|
inc hl
|
|
or [hl]
|
|
pop hl
|
|
jr nz, .value_is_nonzero
|
|
ld a, [wd479]
|
|
ld [wd478], a
|
|
ret
|
|
|
|
.value_is_nonzero
|
|
ld a, [de]
|
|
add [hl]
|
|
daa
|
|
ld [de], a
|
|
ld [hl], $0
|
|
inc de
|
|
inc hl
|
|
ld a, [de]
|
|
adc [hl]
|
|
daa
|
|
ld [de], a
|
|
ld [hl], $0
|
|
inc de
|
|
inc hl
|
|
ld a, [de]
|
|
adc [hl]
|
|
daa
|
|
ld [de], a
|
|
ld [hl], $0
|
|
inc de
|
|
inc hl
|
|
ld a, [de]
|
|
adc [hl]
|
|
daa
|
|
ld [de], a
|
|
ld [hl], $0
|
|
inc de
|
|
inc hl
|
|
ld a, [de]
|
|
adc [hl]
|
|
daa
|
|
ld [de], a
|
|
ld [hl], $0
|
|
inc de
|
|
inc hl
|
|
ld a, [de]
|
|
adc [hl]
|
|
daa
|
|
ld [de], a
|
|
ld [hl], $0
|
|
call c, SetMaxScore
|
|
inc de
|
|
inc hl
|
|
ld a, l
|
|
cp $60
|
|
jr nz, .asm_862d
|
|
ld l, $0
|
|
.asm_862d
|
|
ld a, l
|
|
ld [wd478], a
|
|
ld a, $1
|
|
ld [wd49f], a
|
|
ret
|
|
|
|
SetMaxScore: ; 0x8637
|
|
push hl
|
|
ld hl, wScore
|
|
ld a, $99
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld [hli], a
|
|
pop hl
|
|
ret
|
|
|
|
Func_8645: ; 0x8645
|
|
xor a
|
|
ld [wd49f], a
|
|
ld de, wBottomMessageBuffer + $47
|
|
call Func_8524
|
|
ret
|
|
|
|
HideScoreIfBallLow: ; 0x8650
|
|
ld a, [wCurrentStage]
|
|
bit 0, a
|
|
jr nz, .bottomStage ;if on upper stage, score is up
|
|
ld a, $86
|
|
ld [hWY], a
|
|
ret
|
|
|
|
.bottomStage
|
|
ld a, [wBallYPos + 1]
|
|
cp $84
|
|
jr nc, .BallLow ;if ballY pos less than or equal to 132, raise score, else lower score
|
|
ld a, [hWY]
|
|
sub $3
|
|
cp $86
|
|
jr nc, .DontClampHigh ;if result is less than 132, clamp to 132, else just load it in
|
|
ld a, $86
|
|
.DontClampHigh
|
|
ld [hWY], a
|
|
ret
|
|
|
|
.BallLow
|
|
ld a, [hWY]
|
|
add $3
|
|
cp $90
|
|
jr c, .DontClampLow ;if result is more than 144, clamp to 144, else just load it in
|
|
ld a, $90
|
|
.DontClampLow
|
|
ld [hWY], a
|
|
ret
|