I'm just attempting to use the machine's (Genie) original six digit numeric displays. No modern LCD screens, no MPF-MC even running. On older SS games, since they still have chimes (or simple tone boards that are analogous to chimes), they still count off scores individually in the same way an EM would. For instance, scoring 500 points would result in five one-hundred point chimes (or beeps) and the player's score on the numeric display would be incremented by one hundred points five times.
As another detail, on Count-Down, if I hit a 500 point drop target, and then while it's counting off the 5x 100 points I hit a 1000 point rollover, it will continue to score the 5x 100 and then after those are complete score the 1x 1000. Or if I do a 5000 point target and then a 100 point rollover the same thing happens (there's no priority given to different score values). There must be some internal queue of sets of points to award that it works through.
From some rom hacking I've done previously I also observed that on newer SS like Black Knight, instead of a queue of points, they just have one counter for each digit of the score, and it works through those until they're all zero. Meanwhile there's also an option in their bytecode to 'score immediate' and just add some score directly, bypassing the queues.
I've been able to come up with something similar to the individual digit queues using a timer:
I keep one player variable for each digit:
player_vars:
thousands:
initial_value: 0
hundreds:
initial_value: 0
tens:
initial_value: 0
then when I want to score I increment those instead of accessing the score directly:
laneA_active{current_player.a==1}:
thousands: 5
laneA_active{current_player.a==0}:
hundreds: 5
I have a timer that is triggered by any increments to the queues (although it's a bit messy trying to only stop it once all the queues reach zero):
timers:
score:
start_value: 1
end_value: 0
direction: down
restart_on_complete: yes
tick_interval: 200ms
control_events:
- action: stop
event: player_thousands{value==0 and current_player.hundreds==0 and current_player.tens==0}
- action: stop
event: player_hundreds{value==0 and current_player.thousands==0 and current_player.tens==0}
- action: stop
event: player_tens{value==0 and current_player.hundreds==0 and current_player.thousands==0}
- action: start
event: player_thousands{change>0 and prev_value==0}
- action: start
event: player_hundreds{change>0 and prev_value==0}
- action: start
event: player_tens{change>0 and prev_value==0}
I then watch the timer to actually do the scoring:
coil_player:
timer_score_tick{current_player.thousands>0}: thousandsChime
timer_score_tick{current_player.thousands==0 and current_player.hundreds>0}: hundredsChime
timer_score_tick{current_player.thousands==0 and current_player.hundreds==0 and current_player.tens>0}: tensChime
timer_score_tick{current_player.thousands>0}:
thousands: -1
score: 1000
timer_score_tick{current_player.hundreds>0}:
hundreds: -1
score: 100
timer_score_tick{current_player.tens>0}:
tens: -1
score: 10
This approximation is fairly serviceable as far as scoring things like 500s goes, but it can't really queue up a sequence like 10, 500, 10, 2000 or something and rattle it back off the way the original game (Genie) that I'm trying to recreate would