In the making of my NES Tetris video, I had to do a bit of research into the various sprites in the game, since they are used to display the next piece coming up. In addition to the 7 different Tetriminos, there are many other sprites such as GUI elements and a lot of ending cutscene related things.
While it wasn't important to the video, I was curious exactly where all of these sprites showed up, and how you could see them all, which led to needing to know how to trigger all of the different ending cutscenes. So in this article, we'll look at all the sprites in the sprite list, where they are from, as well as how to get every single ending in the game.
The gang's all here!
There are 86 total sprite IDs, but three of the pointers are duplicated pointing to the same data, and a few sprites are just visually similar or identical. They can be broken up into three sets: GUI elements, A type ending sprites, and B type ending sprites.
Let's look at the GUI elements first since those are pretty straight forward.
Sprite $00 is a 16x16 square used for the flashing level selector. Sprites $0D and $0E are an 8x8 square used for the flashing selector for the high score name entry screen. Sprite $02 is a completely blank sprite that is used for the frames that these selectors are hidden, causing them to flash when they are currently active.
Sometimes it's easier to make an empty sprite like this than to write code that needs to decide whether to draw a sprite or not.
Sprite $01 consists of the two arrows used in the game type selector, and sprite $53 is used in the music track selector. It's possible that the music selection option was a late addition since this sprite is almost last in the entire list, out of place from all the other GUI elements.
These cursors also use the blank sprite $02.
Sprites $04 and $05 are the pause text, in blue. Sprite $03 is the pause text but in red. I'm not sure this one is used anywhere. If it is, I can't figure out how to see it.
I presume it shows up red since that's what it looks like when you swap out one for the other.
Sprites $06-$0C are the seven Tetriminos that show up in the next box. All of these sprites always have identical coordinates on screen, so the individual tiles that make them up are offset in such a way that the piece is nicely centered in the box no matter the shape and size.
The pieces are offset in such a way that their positions need not be taken into consideration to have them all be centered nicely like this.
The reason why I mention this offset is because sprites $0F-$15 are a copy of all seven Tetriminos, but their offsets are different. These go unused in the game, but I'm not exactly sure what they would have been used for at all, since they are not nice and centered like the previous set.
Maybe these ones weren't meant to be used in this manner.
Next we'll look at the type A sprites. In this mode, your final score determines which ending you'll get.
| Score | Ending |
|---|---|
| 0-29999 | No ending cutscene |
| 30000-49999 | Tiny missile |
| 50000-69999 | Small rocket |
| 70000-99999 | Big rocket |
| 100000-119999 | Buran spacecraft |
| 120000+ | UFO, but the cathedral lifts off instead |
Each ending essentially consists of three different sprites: the rocket or building that takes off, and two animation frames for the blast of fire behind it as it goes off the top of the screen.
These sprites can be found at IDs $3E-$4A, as well as $23 and $24 for some reason:
| Lift Off Object | Sprite | Fire Sprites |
|---|---|---|
| Tiny missle | $3E | $3F & $40 |
| Small rocket | $41 | $42 & $43 |
| Big rocket | $44 | $45 & $46 |
| Buran spacecraft | $47 | $48 & $49 |
| Cathedral | $4A | $23 & $24 |
Normally the cathedral is baked into the background, but it turns into a sprite for the best ending.
The UFO sprite has ID $32, but it's clumped in with the type B sprites since it makes an appearnce there as well.
There are also a couple unused sprites in this set: a couple of clouds. These clouds end up being baked into the background in the final game, but perhaps at once point they were sprites and would move or scroll across the screen. The big cloud has ID $25 while the small cloud has ID $26. The small cloud also contains an error, so half of it uses a glitched tile.
The glitched tile $81 is actually the top of Link's hat. They probably wanted tile $82.
Finally we have the type B sprites. These can also be split into two subcategories: the bird/flying objects, and the concert sprites.
In this mode, what ending you get depends on two factors: the level you started on, and the starting stack height. What level you started on (mod 10) determines which type of bird/flying thing will appear. Level 9 and 19 are special cases where instead, a concert is played by various Nintendo characters. The number of things that show up on screen, or number of members of the concert is determined by the starting stack height plus 1.
| Starting Level | Object to Appear |
|---|---|
| 0 or 10 | Dragonfly |
| 1 or 11 | Bird |
| 2 or 12 | Penguin |
| 3 or 13 | UFO |
| 4 or 14 | Pterodactyl |
| 5 or 15 | Good Blimp |
| 6 or 16 | Ostrich |
| 7 or 17 | Dragon |
| 8 or 18 | Buran spacecraft |
| 9 or 19 | Concert |
Excluding the concert, each of the objects has two animation frames--one sprite for each. The order of these sprites in the ROM however suggests that maybe the ordering was different. There are also 2 unused objects--a propeller airplane and a helicopter.
| Object | Sprites |
|---|---|
| Dragonfly | $2B/$2C & $2D |
| Bird | $2E & $2F |
| Airplane | $30 & $31 |
| UFO | $32 & $33 |
| Pterodactyl | $34 & $35 |
| Good Blimp | $36 & $37 |
| Dragon | $38 & $39 |
| Buran spacecraft | $3A & $3B |
| Helicopter | $3C & $3D |
| Ostrich | $4B & $4C |
| Penguin | $54 & $55 |
See if you can catch the Good blimp flying around at the next sporting event you're at.
The ostrich and penguin were likely added at a later point in development. The reason why is probably because originally there was no extra space to fit such large sprites in the CHR ROM. These are the only two sprites to appear on their own graphics page. Maybe at one point the developers were trying to get away with not having to swap graphics banks here, but ended up doing it after all. This allowed for more creative use of graphics space, and the small airplane and helicopter could be swapped out for more interesting characters.
It looks like there may have been room for even more or larger characters, looking at how much empty space is around the ostrich and penguin.
Lastly is the Nintendo character concert. In the previous levels, additional characters were identical. However, in this case, a different character gets added for each additional stack height.
| Starting Height | Concert Member | From Game |
|---|---|---|
| 0 | Pit | Kid Icarus |
| 1 | Link | Legend of Zelda |
| 2 | Samus | Metroid |
| 3 | Donkey Kong | Donkey Kong |
| 4 | Bowser | Super Mario Bros. |
| 5 | Mario, Luigi, & Princess Toadstool | Super Mario Bros. |
These sprites are the most interesting. At the maximum starting height, there would be way too many sprite tiles being used at the same time, and limitations of the NES would mean that some of the characters had to be cut. However, the developers found a way around this by only turning the parts of the characters that actually move into objects. The stationary parts of characters get baked into the background.
Interestingly, the parts of Link's hands that move were not removed from the background, so the moving sprite graphics actually overlap the static background graphics.
This leads to some funny looking sprites. First is Pit who gets to play the violin. He's got two sprites (IDs $16 and $17), but they only show his torso.
Link comes next playing the flute. Sprites $18 and $19 show only his arms as his fingers animate on the instrument.
At starting height 2, Samus joins, playing the upright bass. Sprites $1A and $1B show her bow and arm moving back and forth. These sprites also include the green on her helmet, which is a clever way to get around the 4-color limit of the background tiles.
Next is Donkey Kong. He's playing the bass drum, and gets two sprites with IDs $1D and $1E. Sprite $1C actually goes unused, which is an animation frame of both of his arms hitting the drum at the same time. Of course, none of the sprites show the drum or his face, since those don't animate.
Then there's Bowser playing the accordion. Bowser is pretty large, but most of him gets baked into the background. Sprites $1F and $20 just show the accordion stretching and squeezing a bit, as well as a single tile dedicated to his foot tapping.
And finally, at the maximum starting stack height of 5, Mario, Luigi, and Princess Toadstool all get added at once to complete the concert. They aren't playing any instruments, Mario and Luigi get to dance while the Princess just claps along. Her sprites with IDs $21 and $22 are pretty small, while Mario and Luigi get to be full sprites since their entire bodies move.
Mario uses sprites $27 and $28 while Luigi gets sprites $29 and $2A, perhaps indicating that they were added in a bit later since there's a little gap in the IDs here.
The background is already blue, so to get past the 4-color tile limit, the bro's pants are transparent to let the blue come through!
One last thing however--if you manage to view the full concert like this, the four domes of Saint Basil's Cathedral turn into rockets and blast off into space. These have sprite IDs $4D-$50, with two extra sprites $51 and $52 used for the fire coming out the back.
You can support Retro Game Mechanics Explained on Patreon here! Any and all support is greatly appreciated!
