-
Notifications
You must be signed in to change notification settings - Fork 7
Faster Instant Score Tally
(Original guide by Mercury; Additional content by RetroKoH)
Source: ReadySonic, Commits
Commit: 905faf0
This mod can be toggled in S1Fixed by setting SpeedUpScoreTally to 0, 1 or 2.
Do you hate waiting in a Sonic game? Do you feel like it's ridiculous that you have to wait for daring to... GO FAST? Are you a speedrunner that uses In-Game Time (IGT) as opposed to Real Time (RT) because the score tally takes too long? We've got a mod for you!
Straight from ReadySonic is a mod that takes influence from the Game Gear Sonic games by allowing you to hold A, B, or C to speed up the score tally.
First, we need to open _incObj\3A Got Through Card.asm and go to Got_TimeBonus. We're going to replace the following code:
Got_TimeBonus:
bsr.w DisplaySprite
move.b #1,(f_endactbonus).w ; set time/ring bonus update flag
moveq #0,d0
tst.w (v_timebonus).w ; is time bonus = zero?
beq.s Got_RingBonus ; if yes, branch
addi.w #10,d0 ; add 10 to score
subi.w #10,(v_timebonus).w ; subtract 10 from time bonus
Got_RingBonus:
tst.w (v_ringbonus).w ; is ring bonus = zero?
beq.s Got_ChkBonus ; if yes, branch
addi.w #10,d0 ; add 10 to score
subi.w #10,(v_ringbonus).w ; subtract 10 from ring bonus
Got_ChkBonus:
tst.w d0 ; is there any bonus?
bne.s Got_AddBonus ; if yes, branch...with this:
Got_TimeBonus:
bsr.w DisplaySprite
move.b #10,d1 ; set score decrement to 10
move.b (v_jpadhold1).w,d0
andi.b #btnABC,d0 ; is A, B or C pressed?
beq.w .dontspeedup ; if not, branch
move.b #100,d1 ; increase score decrement to 100
.dontspeedup:
move.b #1,(f_endactbonus).w ; set time/ring bonus update flag
moveq #0,d0
tst.w (v_timebonus).w ; is time bonus = zero?
beq.s Got_RingBonus ; if yes, branch
cmp.w (v_timebonus).w,d1 ; compare time bonus to score decrement
blt.s .skip ; if it's greater or equal, branch
move.w (v_timebonus).w,d1 ; else, set the decrement to the remaining bonus
.skip:
add.w d1,d0 ; add decrement to score
sub.w d1,(v_timebonus).w ; subtract decrement from time bonus
Got_RingBonus:
tst.w (v_ringbonus).w ; is ring bonus = zero?
beq.s Got_ChkBonus ; if yes, branch
cmp.w (v_ringbonus).w,d1 ; compare ring bonus to score decrement
blt.s .skip ; if it's greater or equal, branch
move.w (v_ringbonus).w,d1 ; else, set the decrement to the remaining bonus
.skip:
add.w d1,d0 ; add decrement to score
sub.w d1,(v_ringbonus).w ; subtract decrement from ring bonus
Got_ChkBonus:
tst.w d0 ; is there any bonus?
bne.s Got_AddBonus ; if yes, branchA similar thing has to be done for the Special Stage score tally. In _incObj\7E Special Stage Results.asm, go to SSR_RingBonus and replace this code:
SSR_RingBonus: ; Routine 6
bsr.w DisplaySprite
move.b #1,(f_endactbonus).w ; set ring bonus update flag
tst.w (v_ringbonus).w ; is ring bonus = zero?
beq.s loc_C8C4 ; if yes, branch
subi.w #10,(v_ringbonus).w ; subtract 10 from ring bonus
moveq #10,d0 ; add 10 to score...with this:
SSR_RingBonus: ; Routine 6
bsr.w DisplaySprite
move.b #1,(f_endactbonus).w ; set ring bonus update flag
tst.w (v_ringbonus).w ; is ring bonus = zero?
beq.s loc_C8C4 ; if yes, branch
moveq #10,d1 ; set score decrement to 10
move.b (v_jpadhold1).w,d0
andi.b #btnABC,d0 ; is A, B or C pressed?
beq.w .dontspeedup ; if not, branch
move.b #100,d1 ; increase score decrement to 100
.dontspeedup:
moveq #0,d0
cmp.w (v_ringbonus).w,d1 ; compare ring bonus to score decrement
blt.s .skip ; if it's greater or equal, branch
move.w (v_ringbonus).w,d1 ; else, set the decrement to the remaining bonus
.skip:
add.w d1,d0 ; add decrement to score
sub.w d1,(v_ringbonus).w ; subtract decrement from ring bonusIs that still not fast enough for you? You want instant??? Ok... lucky for you, I've got you covered. We are going to cover the same files at the same labels, so buckle up!
First, we need to open _incObj\3A Got Through Card.asm and go to Got_TimeBonus. We're going to replace the following code:
Got_TimeBonus:
bsr.w DisplaySprite
move.b #1,(f_endactbonus).w ; set time/ring bonus update flag
moveq #0,d0
tst.w (v_timebonus).w ; is time bonus = zero?
beq.s Got_RingBonus ; if yes, branch
addi.w #10,d0 ; add 10 to score
subi.w #10,(v_timebonus).w ; subtract 10 from time bonus
Got_RingBonus:
tst.w (v_ringbonus).w ; is ring bonus = zero?
beq.s Got_ChkBonus ; if yes, branch
addi.w #10,d0 ; add 10 to score
subi.w #10,(v_ringbonus).w ; subtract 10 from ring bonus
Got_ChkBonus:
tst.w d0 ; is there any bonus?
bne.s Got_AddBonus ; if yes, branch...with this:
Got_TimeBonus: ; Routine 6
bsr.w DisplaySprite
move.b #1,(f_endactbonus).w ; set time/ring bonus update flag
moveq #0,d0
move.w (v_timebonus).w,d0 ; load time bonus to d0
clr.w (v_timebonus).w ; clear time bonus
add.w (v_ringbonus).w,d0 ; load ring bonus to d0
clr.w (v_ringbonus).w ; clear ring bonus
jsr (AddPoints).l ; add to scoreWe can also remove the block of code at Got_AddBonus:
-Got_AddBonus:
- jsr (AddPoints).l
- move.b (v_vbla_byte).w,d0
- andi.b #3,d0
- bne.s locret_C692
- move.w #sfx_Switch,d0
- jmp (PlaySound_Special).w ; play "blip" soundA similar thing has to be done for the Special Stage score tally. In _incObj\7E Special Stage Results.asm, go to SSR_RingBonus and replace this code:
SSR_RingBonus: ; Routine 6
bsr.w DisplaySprite
move.b #1,(f_endactbonus).w ; set ring bonus update flag
tst.w (v_ringbonus).w ; is ring bonus = zero?
beq.s loc_C8C4 ; if yes, branch
subi.w #10,(v_ringbonus).w ; subtract 10 from ring bonus
moveq #10,d0 ; add 10 to score
jsr (AddPoints).l
move.b (v_vbla_byte).w,d0
andi.b #3,d0
bne.s locret_C8EA
move.w #sfx_Switch,d0
jmp (PlaySound_Special).w ; play "blip" sound
; ===========================================================================
loc_C8C4:with this:
SSR_RingBonus: ; Routine 6
bsr.w DisplaySprite
move.b #1,(f_endactbonus).w ; set time/ring bonus update flag
moveq #0,d0
move.w (v_ringbonus).w,d0 ; load ring bonus to d0
clr.w (v_ringbonus).w ; clear ring bonus
jsr (AddPoints).l ; add to scoreBoom! Gotta go instantaneously fast.