====== Special Macro 3D Objects ====== Special Macro objects are objects that are loaded into the level from the [[super_mario_64:level_commands#eload_collision|level script command 0x2E]]. Their main purpose is to save space in the ROM, since they only take up 8, 10, or 12 bytes each whereas regular objects take up 24 bytes. However, they are more limited than the regular objects loaded from the [[super_mario_64:level_commands#place_object|level script command 0x24]]. ROM Hacks of SM64 usually won't use special macro objects, since ROM space is not an issue. ---- ===== Limitations ===== * You can only directly modify the position, Y rotation, and the first two behavior parameters of the object. * They will always appear in every act in the level, as they don't have an act mask. * Each special macro object contains a preset ID, that references a list that tells the object what model ID and behavior are. ---- ===== List Format ===== The level script command 0x2E loads a list of special macro objects during it's [[sm64:collision_data#collision_loading_routine|collision loading routine]]. The length of the object is determined by the Preset ID (see preset table entries below). ==== 8 byte object ==== ''[ID ID] [XX XX] [YY YY] [ZZ ZZ]'' | IDID | Preset ID | | XXXX | X position of object (signed 16 bits) | | YYYY | Y position of object (signed 16 bits) | | ZZZZ | Z position of object (signed 16 bits) | ==== 10 byte object ==== ''[ID ID] [XX XX] [YY YY] [ZZ ZZ] [RY RY]'' | IDID | Preset ID | | XXXX | X position of object (signed 16 bits) | | YYYY | Y position of object (signed 16 bits) | | ZZZZ | Z position of object (signed 16 bits) | | RYRY | Y Rotation | ==== 12 byte object ==== ''[ID ID] [XX XX] [YY YY] [ZZ ZZ] [RY RY] [B1] [B2]'' | IDID | Preset ID | | XXXX | X position of object (signed 16 bits) | | YYYY | Y position of object (signed 16 bits) | | ZZZZ | Z position of object (signed 16 bits) | | RYRY | Y Rotation | | B1 | Replaces B.Param 1 value if not zero | | B2 | Replaces B.Param 2 value if not zero | ---- ===== Special Macro Preset Table ===== The Preset ID is used to get the Model ID, Behavior address, and the default Behavior parameters for the object. The location of this table differs based on the version of the game you are using. ^Version^ROM Address^ |North America (US)| 0xED350 | |Europe| 0xBE100 | |Japanese| 0xEC240 | |Japanese (Shindou Edition)| 0xC98D0 | |Chinese IQue| 0xCBD90 | ==== Entry Format ==== Each entry in the table takes up 8 bytes. The list ends when a preset ID of 255 (0xFF) is found. ''[ID] [B1] [B2] [MM] [BS BS BS BS]'' | ID | Preset ID | | B1 | Default B.Param 1 value | | B2 | Default B.Param 2 value | | MM | Model ID | | BSBSBSBS | Segment address of behavior | ==== Entries ==== Anything with a question mark (?) means that it is a guess, and needs to be verified. ^Preset ID^Length^Object Name^Behavior Address^Model ID^B.Param 1^B.Param 2^ |0|10| Unused? |0x00000000|0x00|0x01|0x00| |1|8?| Yellow Coin (for triggers?) |0x1300091C|0x74|0x00|0x00| |2|8?| Yellow Coin (for triggers?) |0x1300091C|0x74|0x00|0x00| |3|10?| Unused Level Geometry? |0x13002A48|0xB8|0x00|0x00| |4|8?| Boo Buddy group (x3) |0x130027D0|0x54|0x00|0x00| |5|8?| Castle Floor Trap |0x13002A5C|0xAC|0x00|0x00| |6|8?| Moving Hexagonal Mesh (LLL) |0x13001D78|0x36|0x00|0x00| |7|8?| Unused? |0x13001DA4|0x37|0x00|0x00| |8|8?| Bascule Bridge (LLL) |0x130038D0|0x38|0x01|0x00| |9|10?| Unused? |0x13002A48|0x00|0x00|0x00| |10|8?| Rotating Hexa-Block with Fire Bars (LLL) |0x13001DA8|0x3A|0x00|0x00| |11|8?| Floating Wood Bridge (LLL) |0x13001E30|0x00|0x00|0x00| |12|8?| Alternate Tumbling Bridge? |0x13000C64|0x00|0x00|0x00| |13|8?| Rotating Hexagonal Ring Platform (LLL) |0x13001E6C|0x3E|0x00|0x00| |14|8?| Sinking Lava Platform (LLL) |0x13001E94|0x3F|0x01|0x00| |15|8?| Tilting Square Platform (LLL) |0x13001EC4|0x40|0x00|0x00| |16|8?| Small Tilting Platform (LLL) |0x13001EF8|0x41|0x00|0x00| |17|8?| Bowser Puzzle (LLL) |0x13002068|0x00|0x00|0x00| |18|8?| Mr. I |0x13000054|0x00|0x00|0x00| |19|8?| Bully |0x1300362C|0x56|0x00|0x00| |20|8?| Big Bully Boss (LLL) |0x13003660|0x57|0x00|0x00| |21|10?| Unused Level Geometry? |0x13002A48|0x00|0x00|0x00| |22|10?| Unused Level Geometry? |0x13002A48|0x00|0x00|0x00| |23|10?| Unused Level Geometry? |0x13002A48|0x00|0x00|0x00| |24|10?| Unused Level Geometry? |0x13002A48|0x00|0x00|0x00| |25|10?| Unused Level Geometry? |0x13002A48|0x00|0x00|0x00| |26|8?| Moving Blue Coin |0x130030A4|0x74|0x00|0x00| |27|8?| Beta Chest? |0x13000278|0x65|0x00|0x00| |28|8?| Manta Rings (Water Levels Only) |0x13003738|0x68|0x00|0x00| |29|8| Bomb |0x130037EC|0xB3|0x00|0x00| |30|8?| Unused Level Geometry? |0x13002A48|0x00|0x03|0x00| |31|8?| Unused Level Geometry? |0x13002A48|0x00|0x00|0x00| |32|8?| Butterfly |0x130033BC|0xBB|0x00|0x00| |33|8| Bowser |0x13001850|0x64|0x00|0x00| |34|8?| Rotating Wooden Bridge (WF) |0x130006E0|0xAF|0x00|0x00| |35|8?| Pushy Rock with eyes (WF) |0x13003910|0xAE|0x01|0x00| |36|8?| Sliding Brick Platform (WF) |0x13003970|0xAD|0x01|0x00| |37|8?| Under Tower (WF) |0x130012F4|0x00|0x00|0x00| |38|8?| Unused? |0x130006D8|0x00|0x00|0x00| |39|8?| Tumbling Bridge (WF) |0x13000C28|0xB2|0x00|0x00| |40|8?| Big Pushy Rock with eyes (WF) |0x13003940|0xB1|0x00|0x00| |101|10| Level Geometry* |0x13002A48|0x03|0x01|0x00| |102|10| Level Geometry* |0x13002A48|0x04|0x01|0x00| |103|10| Level Geometry* |0x13002A48|0x05|0x01|0x00| |104|10| Level Geometry* |0x13002A48|0x06|0x01|0x00| |105|10| Level Geometry* |0x13002A48|0x07|0x01|0x00| |106|10| Level Geometry* |0x13002A48|0x08|0x01|0x00| |107|10| Level Geometry* |0x13002A48|0x09|0x01|0x00| |108|10| Level Geometry* |0x13002A48|0x0A|0x01|0x00| |109|10| Level Geometry* |0x13002A48|0x0B|0x01|0x00| |110|10| Level Geometry* |0x13002A48|0x0C|0x01|0x00| |111|10| Level Geometry* |0x13002A48|0x0D|0x01|0x00| |112|10| Level Geometry* |0x13002A48|0x0E|0x01|0x00| |113|10| Level Geometry* |0x13002A48|0x0F|0x01|0x00| |114|10| Level Geometry* |0x13002A48|0x10|0x01|0x00| |115|10| Level Geometry* |0x13002A48|0x11|0x01|0x00| |116|10| Level Geometry* |0x13002A48|0x12|0x01|0x00| |117|10| Level Geometry* |0x13002A48|0x13|0x01|0x00| |118|10| Level Geometry* |0x13002A48|0x14|0x01|0x00| |119|10| Level Geometry* |0x13002A48|0x15|0x01|0x00| |120|10| Level Geometry* |0x13002A48|0x16|0x01|0x00| |121|8| Bubbly Tree |0x13002AA4|0x17|0x00|0x00| |122|8| Spikey Tree |0x13002AA4|0x18|0x00|0x00| |123|8| Snow Tree |0x13002AA4|0x19|0x00|0x00| |124|8?| Unused Tree? |0x13002AA4|0x1A|0x00|0x00| |125|8| Palm Tree |0x13002AA4|0x1B|0x00|0x00| |137|10?| Unused Door? |0x13000B0C|0x1C|0x01|0x00| |126|10| Door |0x13000B0C|0x1D|0x01|0x00| |127|10?| Unused Door? |0x13000B0C|0x1E|0x01|0x00| |128|10| Metal Door (HMC) |0x13000B0C|0x1F|0x01|0x00| |129|10| Hazy Maze Door |0x13000B0C|0x20|0x01|0x00| |130|10?| Unused Door? |0x13000B0C|0x21|0x01|0x00| |138|10| Castle Door (0 Stars) |0x13000B0C|0x22|0x04|0x00| |139|10| Castle Door (1 Stars) |0x13000B0C|0x23|0x04|0x01| |140|10| Castle Door (3 Stars) |0x13000B0C|0x24|0x04|0x03| |141|10?| Unused Door? |0x13000B0C|0x25|0x04|0x00| |136|12| Castle Warp Door |0x13000AFC|0x26|0x02|0x00| |131|12| Warp Door |0x13000AFC|0x27|0x02|0x00| |132|12?| Unused Warp Door? |0x13000AFC|0x28|0x02|0x00| |133|12| Metal Warp Door |0x13000AFC|0x29|0x02|0x00| |134|12?| Unused Warp Door? |0x13000AFC|0x2A|0x02|0x00| |135|12?| Unused Warp Door? |0x13000AFC|0x2B|0x02|0x00| * Level Geometry has different names based on the level you are in.