diff options
author | Marcus Huderle <huderlem@gmail.com> | 2017-06-30 16:47:54 -0700 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2017-06-30 16:47:54 -0700 |
commit | 2d7a014d71211d6b84ec5cf6a516a7e567911ec1 (patch) | |
tree | 1929d81b936bd51d75fd92262344ad5b6940708f | |
parent | b9a256db9a5bdcb9d2f9000b3f72c17ccdf153d6 (diff) |
Move score and timer into respective files
-rwxr-xr-x | engine/pinball_game/score.asm | 246 | ||||
-rwxr-xr-x | engine/pinball_game/timer.asm | 58 | ||||
-rwxr-xr-x | main.asm | 307 |
3 files changed, 306 insertions, 305 deletions
diff --git a/engine/pinball_game/score.asm b/engine/pinball_game/score.asm new file mode 100755 index 0000000..4134833 --- /dev/null +++ b/engine/pinball_game/score.asm @@ -0,0 +1,246 @@ +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
+
+Func_8650: ; 0x8650
+ ld a, [wCurrentStage]
+ bit 0, a
+ jr nz, .bottomStage
+ ld a, $86
+ ld [hWY], a
+ ret
+
+.bottomStage
+ ld a, [wBallYPos + 1]
+ cp $84
+ jr nc, .asm_8670
+ ld a, [hWY]
+ sub $3
+ cp $86
+ jr nc, .asm_866d
+ ld a, $86
+.asm_866d
+ ld [hWY], a
+ ret
+
+.asm_8670
+ ld a, [hWY]
+ add $3
+ cp $90
+ jr c, .asm_867a
+ ld a, $90
+.asm_867a
+ ld [hWY], a
+ ret
diff --git a/engine/pinball_game/timer.asm b/engine/pinball_game/timer.asm new file mode 100755 index 0000000..1200877 --- /dev/null +++ b/engine/pinball_game/timer.asm @@ -0,0 +1,58 @@ +StartTimer: ; 0x867d
+; Starts the timer that counts down with the specified starting time when things
+; like CatchEm Mode start.
+; input: b = minutes
+; c = seconds
+ ld a, c
+ ld [wTimerSeconds], a
+ ld a, b
+ ld [wTimerMinutes], a
+ xor a
+ ld [wTimerFrames], a
+ ld [wd57e], a
+ ld [wd57f], a
+ ld a, $1
+ ld [wd57d], a
+ ld a, $1
+ ld [wd580], a
+ callba Func_1404a
+ ret
+
+Func_86a4: ; 0x86a4
+ ld a, [wd57f]
+ and a
+ ret nz
+ ld a, [wTimerFrames]
+ inc a
+ cp $3c
+ jr c, .asm_86b2
+ xor a
+.asm_86b2
+ ld [wTimerFrames], a
+ ret c
+ ld hl, wTimerMinutes
+ ld a, [hld]
+ or [hl]
+ jr nz, .asm_86c3
+ ld a, $1
+ ld [wd57e], a
+ ret
+
+.asm_86c3
+ ld a, [hl]
+ sub $1
+ daa
+ jr nc, .asm_86cb
+ ld a, $59
+.asm_86cb
+ ld [hli], a
+ ld a, [hl]
+ sbc $0
+ daa
+ ld [hl], a
+ ret
+
+Func_86d2: ; 0x86d2
+ xor a
+ ld [wd57d], a
+ ret
@@ -46,311 +46,8 @@ Func_84fd: jr nz, .loop ret -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 - -Func_8650: ; 0x8650 - ld a, [wCurrentStage] - bit 0, a - jr nz, .bottomStage - ld a, $86 - ld [hWY], a - ret - -.bottomStage - ld a, [wBallYPos + 1] - cp $84 - jr nc, .asm_8670 - ld a, [hWY] - sub $3 - cp $86 - jr nc, .asm_866d - ld a, $86 -.asm_866d - ld [hWY], a - ret - -.asm_8670 - ld a, [hWY] - add $3 - cp $90 - jr c, .asm_867a - ld a, $90 -.asm_867a - ld [hWY], a - ret - -StartTimer: ; 0x867d -; Starts the timer that counts down with the specified starting time when things -; like CatchEm Mode starts. -; input: b = minutes -; c = seconds - ld a, c - ld [wTimerSeconds], a - ld a, b - ld [wTimerMinutes], a - xor a - ld [wTimerFrames], a - ld [wd57e], a - ld [wd57f], a - ld a, $1 - ld [wd57d], a - ld a, $1 - ld [wd580], a - callba Func_1404a - ret - -Func_86a4: ; 0x86a4 - ld a, [wd57f] - and a - ret nz - ld a, [wTimerFrames] - inc a - cp $3c - jr c, .asm_86b2 - xor a -.asm_86b2 - ld [wTimerFrames], a - ret c - ld hl, wTimerMinutes - ld a, [hld] - or [hl] - jr nz, .asm_86c3 - ld a, $1 - ld [wd57e], a - ret - -.asm_86c3 - ld a, [hl] - sub $1 - daa - jr nc, .asm_86cb - ld a, $59 -.asm_86cb - ld [hli], a - ld a, [hl] - sbc $0 - daa - ld [hl], a - ret - -Func_86d2: ; 0x86d2 - xor a - ld [wd57d], a - ret +INCLUDE "engine/pinball_game/score.asm" +INCLUDE "engine/pinball_game/timer.asm" HandleInGameMenu: ; 0x86d7 ; Routine responsible for the "SAVE"/"CANCEL" menu. |