summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2017-06-30 16:47:54 -0700
committerMarcus Huderle <huderlem@gmail.com>2017-06-30 16:47:54 -0700
commit2d7a014d71211d6b84ec5cf6a516a7e567911ec1 (patch)
tree1929d81b936bd51d75fd92262344ad5b6940708f
parentb9a256db9a5bdcb9d2f9000b3f72c17ccdf153d6 (diff)
Move score and timer into respective files
-rwxr-xr-xengine/pinball_game/score.asm246
-rwxr-xr-xengine/pinball_game/timer.asm58
-rwxr-xr-xmain.asm307
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
diff --git a/main.asm b/main.asm
index 8af5936..799d7da 100755
--- a/main.asm
+++ b/main.asm
@@ -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.