Marbles Squared is now in the last leg of development and I'm working through the minor bugs in the software - things like a single white pixel sometimes appears in the bottom of the "game over" box.
But right up to the last moments I'm still making significant changes that I won't be able to change later once it's released: the scoring system.
Originally the scoring was based on the same system as the original Palm Pilot version. Specifically, the scoring was
n * (5 + n) where
n is the blocks selected.
When I've been testing the game I hadn't noticed any particular issues. But once I set into actually playing the game, and thinking about the moves I'm placing and making good use of the undo feature (which on the Spectrum is unlimited and on the Palm Pilot was limited to a single undo per move) - suddenly I had racked up a pretty good score very quickly.
I was only on level 6, but I'd managed a score of 7,468 (using seed
#1F16 if you're interested). That's not a particularly high score, but looking back at some of the original high scores on the Palm Pilot, there were a handful of dedicated players that got close or even beyond a score of 65,535. Why is 65,535 important? Well, it's the max 16 bit value, and since I'm only storing the score as 16 bit and this version of the game takes the undo much further it's quite feasible that those higher levels are reachable.
Now the flip side of this is that the Palm Pilot was portable and when you turned it off, it suspended it state - i.e. if you were playing a long game of Marbles, you could play on the commute to work, switch off when you arrived, and on the way back home, switch on and pick up where you left off.
The Spectrum doesn't have a) the state suspension, but moreover b) it's not (that) portable! (In fact, what's really nice about the Speccy is I have to go the room with the computer in it to use it, instead of being able to simply reach for it any time I so wish).
Still, I didn't want to be making post-release changes to the scoring system, so it makes sense that I try to scale it back - albeit a little.
So now the multiplier is
1 + n which doesn't have the same profile in the scoring. I've looked at tables with potential scoring when the block count is 2 to 100 - and comparing
5 + n to
1 + n doesn't look that much different, but it's because at the larger clearings it doesn't make much difference. i.e. if the player clears 30 blocks in one go, it's 1,050 points vs. 930 points - not a big difference.
When the scoring change has a real impact is in the lower block counts. 5 touching blocks is worth 50 points vs. 30 points, and anything below is less than half the original scoring system. Most of the game points are accrued around these values, so the long run it'll make a decent difference.
What I don't want is to lose real scores - I can't be having a score in the 100,000s and losing that original data.
Thankfully I have a backup if there ever comes the day. The level gives a hint of how many times we might have overflowed. I can't imagine there will ever be a score of over 130,000 (two times 16 bit) (though I kinda don't want to jinx it), but if the level is greater than some arbitrary value and the score (overflowed) is under some other value, then it makes sense (sort of!) to take the score and add 65,535 when displaying - not that I know how to display 32bit numbers in NextBASIC yet!