0xabad1dea

infosec sorceress

READ GLORY IN THE THUNDER, WORLD'S #1 SOURCE FOR TRAUMATIZED TEENS WITH TOO MUCH RESPONSIBILITY https://www.wattpad.com/story/343286820-glory-in-the-thunder


rgmechex
@rgmechex

There's a sprite in Super Mario World that is commonly referred to as the "Invisible Solid Block". You may have heard it in passing in my last video, because it too is technically a powerup sprite despite not being an intended collectable.

A list of all the technically powerups, with the invisible solid block circled Lunar Magic (a Super Mario World level editor) displays the sprite as a translucent brown block, so that's why that graphic is used here.

What does this sprite actually do, and where is it found in the game? Why does it exist? Turns out this is one of those mysterious things that really can't be explained without talking to one of the game's developers.


Sprite number $6D is the invisible solid block sprite. It does exactly what you would think. It's just a single solid tile with no graphics associated with it.

Mario in Yoshi's Island 1 Can you find where it is?

Now, this is an interactive sprite entity and not part of the tile-based level layout. This means this sprite behaves just slightly differently than an invisible solid tile just due to the different collision detection routines used for tiles as opposed to sprites.

Being a sprite, it can also be placed on top of any tile in the level, effectively turning it solid.

Mario standing on a switch block before it is activated Woah, it's like magic!

So where is this sprite used? Well, the code for the invisible solid block is actually a more generic sprite routine that is responsible for making any sprite solid. It's just that sprite $6D only calls this subroutine and nothing else.

This is mostly used by various platforms, Dolphins, Bowser Statues, Message Block, and red ? block switch.

Various platforms, a Dolphin, a Bowser Statue, a Message Block, and a red ? block switch Mario can stand on all of these sprites (not an exhaustive list).

Sprite $6D is found in the game in its basic state in four different levels: the 4 rooms that hold the 4 different Switch Palace switches.

Mario next to the Yellow Switch Now can you spot it?

So, because of reasons I'll talk about eventually, the outer corner tile here in the Switch Palaces is not a solid tile. So in order to prevent Mario from being able to enter this tile, they placed the solid invisible block sprite on top of the corner as a quick patch up. Due to the differences in collision like I mentioned, it is very easy to get Mario's feet to catch on the edge of this block if you jump at just the right spot.

Mario interacting with and jumping off of the switch palace corner It's really easy to "wall jump" off of too!

I had previously personally believed that maybe sprite $6D was originally going to be some sort of door or gate that would open when Mario got near to the big ! switches. That would sort of explain this anomaly--it's leftovers from something that ended up getting scrapped. However after looking into it more while writing this, I no longer think that is the case, and I do actually believe that it was honestly just a quick fix due to the tile being non-solid (again, I'll get to that later).


One small thing I'd like to point out first is where this sprite's code is in the game's ROM. For processing sprites, there is a massive jump table with basically all of the sprites in the game (like a huge switch statement). Often, sprites that are very similar share code, and so they all jump to the same block of code, where they are differentiated further.

;$01865E: Admist a large jump table for sprite processing
    dw $8815  ; $49: Moving pipe lip
    dw $8763  ; $4A: Green ? Orb
    dw $8801  ; $4B: Pipe Lakitu
    dw $87CF  ; $4C: Exploding Turn Block
    dw $E2CF  ; $4D: Monty Mole (from ground)
    dw $E2CF  ; $4E: Monty Mole (from wall)
    dw $87BB  ; $4F: Jumpin' Piranha Plant
    dw $87BB  ; $50: Jumpin' Piranha Plant (fire)

Notice the Monty Moles and Piranha Plants have the same pointer.

The invisible solid block is bundled with a couple of other sprites, but you'd never be able to guess what they are.

;$0186A2: Amidst a large jump table for sprite processing
    dw $8848  ; $6B: Wall Spring (left)
    dw $8848  ; $6C: Wall Spring (right)
    dw $875E  ; $6D: Invisible Solid Block
    dw $875E  ; $6E: Dino Rhino
    dw $875E  ; $6F: Dino Torch
    dw $87ED  ; $70: Pokey

The Dino Rhino and Dino Torch! Then in the code block for these sprites, the very first thing that is done is checking the ID (again) to separate out the Invisible Solid Block.

;$039C34 - Invisible Block & Dinos Main Routine
InvisBlockDinosMain:
    LDA SpriteNumber,X   ;\ Check the sprite's ID
    CMP #$6D             ;/
    BNE RunDinos
    JSL RunInvisibleBlock  
    RTL

Gotta love extra inefficiency.

My guess is that sprite $6D used to be the sprite ID for a different type of Dino Rhino that could also spit fire (there are graphics in the game for fire-spitting Dino Rhinos), however this is just speculation. When the fire-spitting variant was cut, the invisible solid block took its ID number and slotted in right there (maybe it was made specifically for the Switch Palaces, who knows). Then the original jump table wasn't modified (that table and this code were in different banks, if that has anything to do with it), and a check was added here instead.


Here is where I was going to explain why the Switch Palace corner tile is not solid, but I realized it may double or even triple the size of this post, so I'll leave today on a cliffhanger and talk about it next week! Here's a very vague hint.

A section of graphics from the game, including Yoshi's House, bonus rooms, and overworld sprites What a wild mix a graphics all contained in the same place...

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


You must log in to comment.