We've just updated MediaWiki and its underlying software. If anything doesn't look or work quite right, please mention it to us. --RanAS

Super Mario World/Cluster Sprite

From SnesLab
Jump to: navigation, search

A great advantage of cluster sprites is that, unlike many other sprite types, there can be a lot of them on screen at once - hence their coined name, "cluster" sprites. Their large tables allow one to use up to 20 cluster sprites on the same screen at once. Many cluster sprites don't actually ever get up to 20 at once, however. Inside Super Mario World, there are never more than eight 1-Up sprites available at once, and a Boo ring consists of merely 10 ghosts - although it is possible to have two Boo rings beside each other (but not any more than two). The only cluster sprites which actually do use the tables to the fullest are the ghost ceiling and disappearing ghost sprites.

Much like any other sprite group which doesn't include regular sprites, cluster sprites cannot be directly inserted into the level. In the original game, they need a "host sprite" that generates them, for example sprite E1, which generates a ghost ceiling. In regards to Super Mario World hacking, it is of course possible to generate cluster sprites by other means, such as ASM hacks.

Technical Information

1-Up mushrooms being collected.

Cluster sprite number. Located at RAM Address/$7E:1892. Indicates what sprite a specific cluster sprite slot contains. A Swooper Death Bat Ceiling in Josh's Island.

These are possible values:

ID 	Name
00 	Free slot.
01 	1-Up from bonus game.
02 	Unused. (Crashes game if used.)
03 	Boo from Boo Ceiling.
04 	Boo from Boo Ring.
05 	Castle candle flame.
06 	Sumo Brother lightning flames.
07 	Reappearing Boo.
08 	Swooper bat from Swooper Death Bat Ceiling.

Hacking Information

The southeast section of a Boo ring. The first encounter with a ghost ceiling.

There is a pointer table for the original game's cluster sprites that is 18 bytes long (9 16-bit pointers) and begins at SNES $02:F825. Note that every single cluster sprite table (except $7E:1892) is a miscellaneous table; that is to say, it can have whatever purpose you assign it to. For example, SMW uses $7E:1E02 to determine the low byte of the Y position, but one doesn't have to use $7E:1E02 for the Y position. This is mostly concerning custom cluster sprites, which are in fact almost completely written from scratch - OAM routine, interaction, physics, etc.

Listed below are RAM addresses related to cluster sprites in one way or another:

RAM Addresses
Address 	Description
$7E:0F4A 	Cluster sprite table. Is used for the castle background flame's frame to display, as well as Boo ring's speed - #$00 = still; #$01-#$7F = counter-clockwise; #$80-#$FF = clockwise. Is also used for several other sprites that are generated, such as the ghost ceiling, but not necessarily for the same purpose.
$7E:0F5E 	Empty. Cleared during reset and titlescreen load. This table was probably meant to function as a cluster sprite table, but it was never used as such.
$7E:0F72 	Cluster sprite table. It could theoretically be used for any purpose, but in the original SMW, it holds the index of each individual Boo in a Boo ring (00-09). It is also used in the death bat ceiling to keep track of the bats' Y position.
$7E:0F86 	Cluster sprite table, used for various purposes including determining which Boo ring is which and determining whether or not a particular "death bat" is visible.
$7E:0F9A 	Cluster sprite table. Its purpose in SMW are the following: act as a timer for determining when death bats will fly, and as a timer to freeze an active Boo in the ghost ceiling.
$7E:18B8 	Run cluster sprite code. #$00=No; #$01=Yes. Note that this is not a table; it is only one byte.
$7E:1E02 	Cluster sprite Y position, low byte.
$7E:1E16 	Cluster sprite X position, low byte.
$7E:1E2A 	Cluster sprite Y position, high byte.
$7E:1E3E 	Cluster sprite X position, high byte.
$7E:1E52 	Cluster sprite table. Used as:
- Y position of reappearing Boos, frame 1. Not relative to screen border.
- Y speed for Boos from ghost ceiling and death bats.
$7E:1E66 	Cluster sprite table. Used as:
- X position of reappearing Boos, frame 1. Not relative to screen border.
- X speed for Boos from ghost ceiling and death bats.
$7E:1E7A 	Cluster sprite table. Used as:
- Y position of reappearing Boos, frame 2. Not relative to screen border.
- Accumulating fraction bits for fixed point Y speed of death bats.
$7E:1E8E 	Cluster sprite table. Used as:
- X position of reappearing Boos, frame 2. Not relative to screen border.