Sometimes I feel like I should put a content warning here when the technical level of a post is higher than usual. This one would probably be a five out of five for geekery. It’s a video from NESHacker on counting score on the Nintendo Entertainment System. But I don’t want to discourage you from watching it! It’s nine minutes long, and it contains a definition of the term double dabble.
Human-readable numbers are tracked by computers in a number of different ways. Nowadays we basically just do a printf or some version of it, but on a 1 megahertz platform, optimization really matters. It’s easy to think of computers as being impossibly fast, but in truth speed only ever counts relative to the efficiency of the algorithm you use. Computers are fast, but they aren’t all that fast.
One of the big tradeoffs in processor design is, fewer complex instructions that do a lot but take a lot of cycles, and processor complexity, to execute, or many simple instructions, each doing little and being relatively simple, and not needing a complex processor design to implement.
The 6502 microprocessor generally follows the latter design philosophy. It made some important tradeoffs to keep costs down. For example, it doesn’t have hardware that can multiply arbitrary numbers together. It relies on the programmer, or else a library author, to use the instructions given to code their own multiplication algorithm, if they need one. The result is going to be slower, probably, that if the chip had the circuits to do this automatically in silicon, but it reduced the cost of the chip, basically allowing more to be made, or else increasing the profits for the manufacturer.
Personally I’m a fan of just storing the score as a series of digits that match up to their positions in the character set. Gain 1,000 points? Just bump the 1000s-place up by one, and if it goes past 9, subtract 10 and bump the 10,000s place. That’s a tried-and-true system that many games use, and works well if all you ever have to do is add numbers. Comparing values, like for detecting extra life award levels, make things slightly more complex, but not by much. There’s sometimes other factors involved though, and that may explain why Super Mario Bros. uses different systems for its counters, as explained by NESHacker.
Looks like we’re on another Youtube binge, ayup ayup. This time it’s another hopeful video constructor asking us to consider the oddity of the score system in the original Mega Man (a.k.a. Rockman).
When you post as many Youtube videos as I do, it’s easy to form opinions about their style. That of “TheRetroDude,” as he styles himself, is interesting, it’s still hyper-edited in the way that so many Youtubers loathsomely adopt, but it’s not nearly as distracting as those. He keeps the volume down, as well as the number of swoopy objects tearing around the screen like a toddler newly introduced to Toblerone.
He has good points about how extraneous the game’s scoring system is too, although his misgivings could be laid against many other games. In Super Mario Bros, score is mostly a spacer before toppled turtles start giving extra lives. I think that score isn’t a bad addition to a game as long as it’s implemented thoughtfully, yet for too long it hasn’t been. Even in the NES days it was included to give players a short term goal to aim for, when they didn’t really need it.
What would a good scoring system look like, one that rewarded skill? Well–
Losing a life would reset score to that at the last passed checkpoint, eliminating point pressing from lives.
Extra lives at game end would be worth a bonus each.
Game timers are worth a small, yet substantial, award at level end, to prioritize fast play over slow.
Awards should be given for score, most typically extra lives, but others are possible too.
Replaying levels, and other means of “minting points,” earning arbitrary scores, should be ruthlessly eliminated. If the player can replay levels indefinitely then think about if your game really needs a score, and if it does, don’t allow players to earn more points from replaying them without costing them the points from that last pass.
Two games that come to mind that do scores well are:
ZANAC on the NES, being a scrolling shooter without checkpointing score is generally fair, although it is possible to warp backwards does break the no-replay rule, and
Star Fox 64, which only adds a level’s score to the player’s total at its end. SF64 is a game obviously designed around score attacks.
Where was I? Oh! Here is that video about Mega Man’s scoring system.
On Romhack Thursdays, we bring you interesting finds from the world of game modifications.
The gaming world is abuzz about speedruns. Speedruns are what gaming since at least Sonic CD call “time attacks,” attempts to play a game while minimizing the completion time. The phrase is a somewhat awkward borrowing from Japanese, as are a number of other gaming terms, like “stage clear” or “level up,” that happened when their gaming culture began to seep out overseas with the popularity of Japanese consoles and games from the time of the NES and SNES. (I am not certain, but I wouldn’t be surprised that the earliest English use of “level up” was in a Final Fantasy game.)
But that’s a digression. Sorry, I tend to make them a lot. Let’s go back to time attacks. Another version of the idea is a score attack, a play of a game with the intent to get a high score. For a lot of the arcade era, score attacks were just how you played video games, and there didn’t need to be a special term for them.
Score in games has become much less important over the years, but it still persists in places. Super Mario Bros. is a notable early game that still has score, but devalues it. If you find a repeatable extra life (like from using a turtle shell to defeat a lot of enemies), you can mint points, that is to say, earn scores that are arbitrarily high, by getting the life and all the points up to it on a level, dying on purpose, then repeating those actions on the next and successive lives.
It took a long time but that was the beginning of the death knell for the importance of score in games. It didn’t help that, while score is important in a way in Super Mario Bros., since it’s a frequent award and needed as a spacer before the game starts awarding extra lives, it’s used for nothing else. Super Mario games will grant extra lives at the drop of Mario’s ubiquitous hat, but they won’t give you any just for earning points.
One game that does earn you extra lives for scoring points, interestingly, is Sonic the Hedgehog 2. Not the first Sonic game, which takes more of a Super Mario approach, but both Sonic 2, and all the versions of Sonic 3, give you an extra life for every 50,000 points you earn. They also copy Mario’s gimmick of scoring more points if you can defeat enemies without landing from a jump, or destroying blocks. Although unlike Mario’s progression of something like 100, 200, 500, 1,000, 2,000, 5,000, it’s more like 100, 200, 500, then 1,000 a few times, then suddenly 10,000.
Both series are keen to give you all these points, but other than Sonic’s extra lives, they aren’t good for much. Super Mario Bros. 3 gives you a card-matching minigame for every 80,000 points you collect, and sometimes other rewards if you match score digits with each other. Sonic was content to have extra lives be the main reward for high scores, even if the rest of the game gives you plenty of extra lives anyway. More recent games seem to be phasing out even the notion of a life counter, which has given them rather a dearth of things to reward players with.
Well, my plea to gamedevs of the current age is to reconsider score! It’s not a bad measure of player skill, if you design it carefully! It’s easy, if you’re careless, to allow the player to create score loops, which make a mockery of scoreboards, but it gives players something to shoot for other than just game completion.
Score can make for an interesting alternative to plain old time attacks, since it lets the designer create alternative rewards for skillful play. That is why I find score attack romhacks to be interesting, especially when they provide a purpose for score beyond just an increasing number.
The focus of this post is a score attack mod for Sonic the Hedgehog 2. Even though it uses score to award extra lives, this hack rips that out, and instead makes the player’s score into a life meter of a sort. You start out with 5,000 points, but rapidly lose points. In addition to the normal kinds of in-level scoring, you get 50 points for every ring you collect, 1,000 for crossing a checkpoint (which otherwise don’t work) and 2,000 points for each extra life found in a level. When you get hit you lose some points, but can earn some of them back by collecting the rings that spill out. On the other hand, you don’t get the score awards you would normally get for finishing a level, so no 50,000-point time bonus if you can finish Emerald Hill Zone 1 in less than 30 seconds. The Special Stages have also been disabled, so those can’t be used to milk bonus points either. The score countdown stops when you don’t have control over Sonic, when you’re invincible, and when you each the end of a level (passing the goal sign or beating a boss).
There are no lives really; if your character dies, you restart the level with the score you had when it began, mine 5,000 points. That takes care of score loops, since you don’t carry over any points you earned before dying. That makes the game a bit hard for casual play, a frequent issue with romhacks, but an interesting challenge for Sonic 2 experts.
The hack is playable under a number of rules, and with either Sonic, Tails or Knuckles, with each character’s signature moves and abilities. The drop dash from Sonic Mania is even enabled by default. And SRAM support has been hacked in, in order to save your best scores.
It’s an interesting modification to the game to support a different style of playing. If you enjoy the classic Sonic games, you might want to give it a shot!