Cluster sprite number. Indicates what sprite a specific cluster sprite slot contains.
These are possible values:
|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.|
|08||Swooper bat from Swooper Death Bat Ceiling.|
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 eachother (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.
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:
|$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.