xdaniel

Hey there~

πŸ“œ Hobby programmer, ROM hacker, retro computers & consoles, anime & manga fan, sometimes NSFW?

🌐 πŸ‡©πŸ‡ͺ/native, πŸ‡ΊπŸ‡ΈπŸ‡¬πŸ‡§πŸ‡¦πŸ‡Ί/good, πŸ‡―πŸ‡΅/へた

πŸ”’ @xdn-desync

πŸ“· via Picrew by 🐦kureihii https://picrew.me/image_maker/1272810


🌍 Website
xdaniel.neocities.org/
🐦 Twitter
twitter.com/xdanieldzd
⌨️ GitHub
github.com/xdanieldzd
⛏️ The Cutting Room Floor
tcrf.net/User:Xdaniel

rgmechex
@rgmechex

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.

Best ending of a NES Tetris Type B gameThe 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.

A couple oranges squaresSometimes 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.

A couple sets of arrowsThese 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.

Two words 'PAUSE'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 seven Tetriminos fitting nicely into the next boxThe 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.

The seven Tetriminos not fitting so nicely into the next boxMaybe 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.

ScoreEnding
0-29999No ending cutscene
30000-49999Tiny missile
50000-69999Small rocket
70000-99999Big rocket
100000-119999Buran 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 ObjectSpriteFire 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

Four rockets in increasing sizes, and a cathedralNormally 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.

A couple of clouds, one with a glitched tileThe 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 LevelObject to Appear
0 or 10Dragonfly
1 or 11Bird
2 or 12Penguin
3 or 13UFO
4 or 14Pterodactyl
5 or 15Good Blimp
6 or 16Ostrich
7 or 17Dragon
8 or 18Buran spacecraft
9 or 19Concert

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.

ObjectSprites
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

All of the different kinds of ending charactersSee 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.

Two graphics files used in NES TetrisIt 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 HeightConcert MemberFrom Game
0PitKid Icarus
1LinkLegend of Zelda
2SamusMetroid
3Donkey KongDonkey Kong
4BowserSuper Mario Bros.
5Mario, Luigi, & Princess ToadstoolSuper 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.

The ending concert with all of the objects removedInterestingly, 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.

Two sprites of Pit's arms

Link comes next playing the flute. Sprites $18 and $19 show only his arms as his fingers animate on the instrument.

Two sprites of Link's hands

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.

Two sprites of Samus's arm moving

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.

Three sprites of Donkey Kong's arms

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.

Two sprites of Bowser's hands and foot

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.

Two sprites each of the Princess's hands, Mario and Luigi jumpingThe 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.

Four sprites for four of the domes of the cathedral, as well as two more fire sprites

You can support Retro Game Mechanics Explained on Patreon here! Any and all support is greatly appreciated!


You must log in to comment.

in reply to @rgmechex's post:

iirc, there was a full disassembly of this game done. would be interesting to pick through it to see if there's anything else not documented around.

also leaves me wondering what the earliest Virus prototype looks like compared to Tetris

e: is that big heart in the graphics page even used? i feel like it isn't but i can't say for sure