import dataclasses
from typing import Any, Iterable, TypeVar

# RAM address used in evaluating switch for hatless Mario
marioHatSwitch = 0x80277740
marioLowPolySwitch = 0x80277150

marioFaceExpressionCount = 4

loadMarioMIO0 = 0x2ABCA0
loadMarioGeo = 0x2ABCB8

# Full available rom interval for extended 0x04 bank (from SM64 Editor)
marioFullRomInterval = (0x11D8930, 0x11FFF00)
defaultExtendSegment4 = (0x11A35B8, 0x11FFF00)

mainLevelLoadScriptSegment = {0x15: (0x2ABCA0, 0x2AC6B0)}

bank0Segment = {0x00: (0x000000, 0x7FFFFF)}

# Segments for common geolayouts and Mario
loadSegmentAddresses = {0x03: 0x2ABCAC, 0x04: 0x2ABCA0, 0x13: 0x2ABCD0, 0x16: 0x2ABCC4, 0x17: 0x2ABCB8}

lightIndices = [0x86, 0x88, 0x8A, 0x8C, 0x8E, 0x90, 0x92, 0x94]

originalMarioHeadROMInterval = (0x011B4F58, 0x011B5710)

marioVanishOffsets = {
    "regular": 0xB0C,
    "metal": 0x9EC,
}

NULL = 0x00000000

MIN_U8 = 0
MAX_U8 = (2**8) - 1

MIN_S8 = -(2**7)
MAX_S8 = (2**7) - 1

MIN_S16 = -(2**15)
MAX_S16 = (2**15) - 1

MIN_U16 = 0
MAX_U16 = 2**16 - 1

MIN_S32 = -(2**31)
MAX_S32 = 2**31 - 1

MIN_U32 = 0
MAX_U32 = 2**32 - 1

SegmentData = dict[int, tuple[int, int]]

commonGeolayoutPointers = {
    "Dorrie": [2039136, "HMC"],
    "Bowser": [1809204, "BFB"],
    "Bowser 2": [1809328, "BFB"],
    "Lakitu": [1985520, "CC"],
}


OLD_BINARY_LEVEL_ENUMS = [
    "bbh",  # Big Boo's Haunt
    "ccm",  # Cool Cool Mountain
    "castle_inside",  # Inside Castle
    "hmc",  # Hazy Maze Cave
    "ssl",  # Shifting Sand Land
    "bob",  # Bob-Omb's Battlefield
    "sl",  # Snow Man's Land
    "wdw",  # Wet Dry World
    "jrb",  # Jolly Roger Bay
    "thi",  # Tiny Huge Island
    "ttc",  # Tick Tock Clock
    "rr",  # Rainbow Ride
    "castle_grounds",  # Castle Grounds
    "bitdw",  # Bowser In The Dark World
    "vcutm",  # Vanish Cap
    "bitfs",  # Bowser's Fire Sea
    "sa",  # Secret Aquarium
    "bits",  # Bowser In The Sky
    "lll",  # Lethal Lava Land
    "ddd",  # Dire Dire Docks
    "wf",  # Whomp's Fortress
    "ending",  # Picture at the end
    "castle_courtyard",  # Castle Courtyard
    "pss",  # Peach's Secret Slide
    "cotmc",  # Cavern Of The Metal Cap
    "totwc",  # Tower Of The Wing Cap
    "bowser_1",  # Bowser Battle 1
    "wmotr",  # Wing Mario Over The Rainbow
    "bowser_2",  # Bowser Battle 2
    "bowser_3",  # Bowser Battle 3
    "ttm",  # Tall Tall Mountain
]

enumLevelNames = [
    ("bob", "Bob-omb Battlefield", "Bob-omb Battlefield", 5),
    ("wf", "Whomp's Fortress", "Whomp's Fortress", 32),
    ("jrb", "Jolly Roger Bay", "Jolly Roger Bay", 18),
    ("ccm", "Cool Cool Mountain", "Cool Cool Mountain", 12),
    ("bbh", "Big Boo's Haunt", "Big Boo's Haunt", 1),
    ("hmc", "Hazy Maze Cave", "Hazy Maze Cave", 16),
    ("lll", "Lethal Lava Land", "Lethal Lava Land", 19),
    ("ssl", "Shifting Sand Land", "Shifting Sand Land", 25),
    ("ddd", "Dire Dire Docks", "Dire Dire Docks", 14),
    ("sl", "Snowman's Land", "Snowman's Land", 24),
    ("wdw", "Wet Dry World", "Wet Dry World", 31),
    ("ttm", "Tall Tall Mountain", "Tall Tall Mountain", 29),
    ("thi", "Tiny Huge Island", "Tiny Huge Island", 26),
    ("ttc", "Tick Tock Clock", "Tick Tock Clock", 28),
    ("rr", "Rainbow Ride", "Rainbow Ride", 22),
    ("", "Castle", "", 34),
    ("castle_courtyard", "Castle Courtyard", "Castle Courtyard", 9),
    ("castle_grounds", "Castle Grounds", "Castle Grounds", 10),
    ("castle_inside", "Castle Inside", "Castle Inside", 11),
    ("", "Extra Courses", "", 35),
    ("totwc", "Tower Of The Wing Cap", "Tower Of The Wing Cap", 27),
    ("cotmc", "Cavern Of The Metal Cap", "Cavern Of The Metal Cap", 13),
    ("vcutm", "Vanish Cap Under The Moat", "Vanish Cap Under The Moat", 30),
    ("pss", "Peach's Secret Slide", "Peach's Secret Slide", 21),
    ("sa", "Secret Aquarium", "Secret Aquarium", 23),
    ("wmotr", "Wing Mario Over The Rainbow", "Wing Mario Over The Rainbow", 33),
    ("bitdw", "Bowser In The Dark World", "Bowser In The Dark World", 2),
    ("bowser_1", "Bowser Battle 1", "Bowser Battle 1", 6),
    ("bitfs", "Bowser In The Fire Sea", "Bowser In The Fire Sea", 3),
    ("bowser_2", "Bowser Battle 2", "Bowser Battle 2", 7),
    ("bits", "Bowser In The Sky", "Bowser In The Sky", 4),
    ("bowser_3", "Bowser Battle 3", "Bowser Battle 3", 8),
    ("", "Special", "", 36),
    ("Custom", "Custom", "Custom", 0),
    ("intro", "Intro", "Intro", 17),
    ("menu", "Menu", "Menu", 20),
    ("ending", "Picture at the end", "Cake screen", 15),
]

levelIDNames = {
    "bbh": "LEVEL_BBH",
    "bitdw": "LEVEL_BITDW",
    "bitfs": "LEVEL_BITFS",
    "bits": "LEVEL_BITS",
    "bob": "LEVEL_BOB",
    "bowser_1": "LEVEL_BOWSER_1",
    "bowser_2": "LEVEL_BOWSER_2",
    "bowser_3": "LEVEL_BOWSER_3",
    "castle_courtyard": "LEVEL_CASTLE_COURTYARD",
    "castle_grounds": "LEVEL_CASTLE_GROUNDS",
    "castle_inside": "LEVEL_CASTLE",
    "ccm": "LEVEL_CCM",
    "cotmc": "LEVEL_COTMC",
    "ddd": "LEVEL_DDD",
    "ending": "LEVEL_ENDING",
    "hmc": "LEVEL_HMC",
    "intro": "LEVEL_INTRO",
    "jrb": "LEVEL_JRB",
    "lll": "LEVEL_LLL",
    "menu": "LEVEL_MENU",
    "pss": "LEVEL_PSS",
    "rr": "LEVEL_RR",
    "sa": "LEVEL_SA",
    "sl": "LEVEL_SL",
    "ssl": "LEVEL_SSL",
    "thi": "LEVEL_THI",
    "totwc": "LEVEL_TOTWC",
    "ttc": "LEVEL_TTC",
    "ttm": "LEVEL_TTM",
    "vcutm": "LEVEL_VCUTM",
    "wdw": "LEVEL_WDW",
    "wf": "LEVEL_WF",
    "wmotr": "LEVEL_WMOTR",
}

cameraTriggerNames = {
    "bbh": "sCamBBH",
    "bitdw": "sCamBitDW",
    "bitfs": "sCamBitFS",
    "bits": "sCamBitS",
    "bob": "sCamBOB",
    "bowser_1": "sCamBowser_1",
    "bowser_2": "sCamBowser_2",
    "bowser_3": "sCamBowser_3",
    "castle_courtyard": "sCamCastleCourtyard",
    "castle_grounds": "sCamCastleGrounds",
    "castle_inside": "sCamCastle",
    "ccm": "sCamCCM",
    "cotmc": "sCamCotMC",
    "ddd": "sCamDDD",
    "ending": "sCamEnding",
    "hmc": "sCamHMC",
    "intro": "sCamIntro",
    "jrb": "sCamJRB",
    "lll": "sCamLLL",
    "menu": "sCamMenu",
    "pss": "sCamPSS",
    "rr": "sCamRR",
    "sa": "sCamSA",
    "sl": "sCamSL",
    "ssl": "sCamSSL",
    "thi": "sCamTHI",
    "totwc": "sCamTotWC",
    "ttc": "sCamTTC",
    "ttm": "sCamTTM",
    "vcutm": "sCamVCUtM",
    "wdw": "sCamWDW",
    "wf": "sCamWF",
    "wmotr": "sCamWMOtR",
}


class SM64_CharacterImportData:
    def __init__(self, geoAddr, level, switchDict):
        self.geoAddr = geoAddr
        self.level = level
        self.switchDict = switchDict


character_enums = [
    ("Mario", "Mario", "Mario"),
    ("Peach", "Peach", "Peach"),
    # ("Bowser" ,  "Bowser" , "Bowser" ),
    # ("Koopa" ,  "Koopa" , "Koopa" ),
    # ("Toad" ,  "Toad" , "Toad" )
]

# switch index starts at 1.
# switch option index starts at 0.
sm64_character_data = {
    "Mario": SM64_CharacterImportData(
        "12A784",
        "CG",
        {
            1: {0: "Ignore"},  # Low poly mario
            2: {
                1: "Material",  # metal mario
                2: "Draw Layer",  # vanish mario
                3: "Material",  # metal vanish mario
            },
            3: {},  # cap vs no cap
            4: {  # face animation (cap)
                0: "Material",
                1: "Material",
                2: "Material",
                3: "Material",
                4: "Material",
                5: "Material",
                6: "Material",
                7: "Material",
            },
            5: {  # face animation (no cap)
                0: "Material",
                1: "Material",
                2: "Material",
                3: "Material",
                4: "Material",
                5: "Material",
                6: "Material",
                7: "Material",
            },
            6: {  # right fist type
                # 0 = closed, 1 = open, 2 is something, 3-5 are same as 2
                3: "Ignore",
                4: "Ignore",
                5: "Ignore",
            },
            7: {  # left fist type
                # 0 = closed, 1 = open, 2 = peace, 3 = hold cap, 4 = hold cap wing
            },
        },
    ),
    "Peach": SM64_CharacterImportData(
        "180950",
        "CG",
        {
            1: {  # transparent peach
                1: "Draw Layer",
            },
            2: {  # 0-3 = face animation kissing, 4-7 = face animation normal
                0: "Material",
                1: "Material",
                2: "Material",
                3: "Material",
                4: "Material",
                5: "Material",
                6: "Material",
                7: "Material",
            },
        },
    ),
}

level_pointers = {
    "bbh": 0x2AC094,
    "ccm": 0x2AC0A8,
    "castle_inside": 0x2AC0BC,
    "hmc": 0x2AC0D0,
    "ssl": 0x2AC0E4,
    "bob": 0x2AC0F8,
    "sl": 0x2AC10C,
    "wdw": 0x2AC120,
    "jrb": 0x2AC134,
    "thi": 0x2AC148,
    "ttc": 0x2AC15C,
    "rr": 0x2AC170,
    "castle_grounds": 0x2AC184,
    "bitdw": 0x2AC198,
    "vcutm": 0x2AC1AC,
    "bitfs": 0x2AC1C0,
    "sa": 0x2AC1D4,
    "bits": 0x2AC1E8,
    "lll": 0x2AC1FC,
    "ddd": 0x2AC210,
    "wf": 0x2AC224,
    "ending": 0x2AC238,
    "castle_courtyard": 0x2AC24C,
    "pss": 0x2AC260,
    "cotmc": 0x2AC274,
    "totwc": 0x2AC288,
    "bowser_1": 0x2AC29C,
    "wmotr": 0x2AC2B0,
    "bowser_2": 0x2AC2C4,
    "bowser_3": 0x2AC2D8,
    "ttm": 0x2AC2EC,
    "menu": 0x2A6130,
    "intro": 0x269EB0,
}

insertableBinaryTypes = {
    "Display List": 0,
    "Geolayout": 1,
    "Animation": 2,
    "Collision": 3,
    "Animation Table": 4,
    "Animation DMA Table": 5,
}
enumBehaviourPresets = [
    ("Custom", "Custom", "Custom"),
    ("1300407c", "1 Up", "1 Up"),
    ("130040b4", "1 Up Jump On Approach", "1 Up Jump On Approach"),
    ("13004010", "1 Up Running Away", "1 Up Running Away"),
    ("13004044", "1 Up Sliding", "1 Up Sliding"),
    ("13003fdc", "1 Up Walking", "1 Up Walking"),
    ("13003048", "Act Selector", "Act Selector"),
    ("1300302c", "Act Selector Star Type", "Act Selector Star Type"),
    ("13004ecc", "Activated Back And Forth Platform", "Activated Back And Forth Platform"),
    ("13001778", "Alpha Boo Key", "Alpha Boo Key"),
    ("13003c90", "Ambient Sounds", "Ambient Sounds"),
    ("1300269c", "Animated Texture", "Animated Texture"),
    ("13004ea0", "Animates On Floor Switch Press", "Animates On Floor Switch Press"),
    ("13000cc8", "Another Elavator", "Another Elavator"),
    ("130013dc", "Another Tilting Platform", "Another Tilting Platform"),
    ("13004314", "Arrow Lift", "Arrow Lift"),
    ("130028cc", "BBH Tilting Trap Platform", "BBH Tilting Trap Platform"),
    ("13000c44", "BBH Tumbling Bridge", "BBH Tumbling Bridge"),
    ("13000fc8", "BITFS Sinking Cage Platform", "BITFS Sinking Cage Platform"),
    ("13000f9c", "BITFS Sinking Platforms", "BITFS Sinking Platforms"),
    ("13001030", "BITFS Tilting Inverted Pyramid", "BITFS Tilting Inverted Pyramid"),
    ("13003aa4", "BOB Bowling Ball Spawner", "BOB Bowling Ball Spawner"),
    ("13002768", "Balcony Big Boo", "Balcony Big Boo"),
    ("13005610", "Beginning Lakitu", "Beginning Lakitu"),
    ("13005638", "Beginning Peach", "Beginning Peach"),
    ("13001744", "Beta Boo Key", "Beta Boo Key"),
    ("130029b4", "Beta Bowser Anchor", "Beta Bowser Anchor"),
    ("13000278", "Beta Chest Bottom", "Beta Chest Bottom"),
    ("1300029c", "Beta Chest Lid", "Beta Chest Lid"),
    ("13001298", "Beta Fish Splash Spawner", "Beta Fish Splash Spawner"),
    ("13003420", "Beta Holdable Object", "Beta Holdable Object"),
    ("130010b8", "Beta Moving Flames", "Beta Moving Flames"),
    ("130010a8", "Beta Moving Flames Spawn", "Beta Moving Flames Spawn"),
    ("13001634", "Beta Trampoline Spring", "Beta Trampoline Spring"),
    ("13001608", "Beta Trampoline Top", "Beta Trampoline Top"),
    ("13003d74", "Big Boulder", "Big Boulder"),
    ("13003da0", "Big Boulder Generator", "Big Boulder Generator"),
    ("13003660", "Big Bully", "Big Bully"),
    ("13003694", "Big Bully With Minions", "Big Bully With Minions"),
    ("13003700", "Big Chill Bully", "Big Chill Bully"),
    ("13003d4c", "Big Snowman Whole", "Big Snowman Whole"),
    ("13005354", "Bird", "Bird"),
    ("13003c7c", "Birds Sound Loop", "Birds Sound Loop"),
    ("13001254", "Black Smoke Bowser", "Black Smoke Bowser"),
    ("13001214", "Black Smoke Mario", "Black Smoke Mario"),
    ("1300127c", "Black Smoke Upward", "Black Smoke Upward"),
    ("13001984", "Blue Bowser Flame", "Blue Bowser Flame"),
    ("13003104", "Blue Coin Jumping", "Blue Coin Jumping"),
    ("130030d4", "Blue Coin Sliding", "Blue Coin Sliding"),
    ("13002568", "Blue Coin Switch", "Blue Coin Switch"),
    ("13001b2c", "Blue Fish", "Blue Fish"),
    ("13001a0c", "Blue Flames Group", "Blue Flames Group"),
    ("13003174", "Bobomb", "Bobomb"),
    ("13000254", "Bobomb Anchor Mario", "Bobomb Anchor Mario"),
    ("130031dc", "Bobomb Buddy", "Bobomb Buddy"),
    ("13003228", "Bobomb Buddy Opens Cannon", "Bobomb Buddy Opens Cannon"),
    ("13003558", "Bobomb Bully Death Smoke", "Bobomb Bully Death Smoke"),
    ("130035b0", "Bobomb Explosion Bubble", "Bobomb Explosion Bubble"),
    ("13003600", "Bobomb Explosion Bubble 3600", "Bobomb Explosion Bubble 3600"),
    ("130031ac", "Bobomb Fuse Smoke", "Bobomb Fuse Smoke"),
    ("130027e4", "Boo", "Boo"),
    ("13002898", "Boo Boss Spawned Bridge", "Boo Boss Spawned Bridge"),
    ("1300167c", "Boo Cage", "Boo Cage"),
    ("130026d4", "Boo In Castle", "Boo In Castle"),
    ("13002710", "Boo With Cage", "Boo With Cage"),
    ("130050f4", "Book Switch", "Book Switch"),
    ("130050b4", "Bookend Spawn", "Bookend Spawn"),
    ("13001168", "Bouncing Fireball", "Bouncing Fireball"),
    ("13001184", "Bouncing Fireball Flame", "Bouncing Fireball Flame"),
    ("13003a58", "Bowling Ball", "Bowling Ball"),
    ("13001850", "Bowser", "Bowser"),
    ("130018cc", "Bowser Body Anchor", "Bowser Body Anchor"),
    ("130037ec", "Bowser Bomb", "Bowser Bomb"),
    ("1300381c", "Bowser Bomb Explosion", "Bowser Bomb Explosion"),
    ("13003840", "Bowser Bomb Smoke", "Bowser Bomb Smoke"),
    ("13003ee4", "Bowser Course Red Coin Star", "Bowser Course Red Coin Star"),
    ("13001904", "Bowser Flame Spawn", "Bowser Flame Spawn"),
    ("130016e4", "Bowser Key", "Bowser Key"),
    ("13001bd4", "Bowser Key Course Exit", "Bowser Key Course Exit"),
    ("13001bb4", "Bowser Key Unlock Door", "Bowser Key Unlock Door"),
    ("130011d0", "Bowser Shock Wave", "Bowser Shock Wave"),
    ("130022d8", "Bowser Sub Door", "Bowser Sub Door"),
    ("13001828", "Bowser Tail Anchor", "Bowser Tail Anchor"),
    ("13002308", "Bowsers Sub", "Bowsers Sub"),
    ("13000db4", "Break Box Triangle", "Break Box Triangle"),
    ("130014e0", "Breakable Box", "Breakable Box"),
    ("13004218", "Breakable Box Small", "Breakable Box Small"),
    ("13000d98", "Breath Particle Spawner", "Breath Particle Spawner"),
    ("1300220c", "Bub", "Bub"),
    ("130055dc", "Bubba", "Bubba"),
    ("130002e4", "Bubble Maybe", "Bubble Maybe"),
    ("130002b8", "Bubble Particle Spawner", "Bubble Particle Spawner"),
    ("13002cb0", "Bubble Splash", "Bubble Splash"),
    ("1300179c", "Bullet Bill", "Bullet Bill"),
    ("13000600", "Bullet Bill Cannon", "Bullet Bill Cannon"),
    ("130033bc", "Butterfly", "Butterfly"),
    ("130015c0", "CCM Touched Star Spawn", "CCM Touched Star Spawn"),
    ("13004954", "Camera Lakitu", "Camera Lakitu"),
    ("130004a8", "Cannon", "Cannon"),
    ("130004e4", "Cannon Barrel", "Cannon Barrel"),
    ("13004f28", "Cannon Barrel Bubbles", "Cannon Barrel Bubbles"),
    ("13000500", "Cannon Base Unused", "Cannon Base Unused"),
    ("13003274", "Cannon Closed", "Cannon Closed"),
    ("130001cc", "Cap Switch", "Cap Switch"),
    ("130001ac", "Cap Switch Base", "Cap Switch Base"),
    ("13003454", "Carry Something 1", "Carry Something 1"),
    ("1300345c", "Carry Something 2", "Carry Something 2"),
    ("13003464", "Carry Something 3", "Carry Something 3"),
    ("1300346c", "Carry Something 4", "Carry Something 4"),
    ("13003474", "Carry Something 5", "Carry Something 5"),
    ("1300347c", "Carry Something 6", "Carry Something 6"),
    ("13003c58", "Castle Flag Waving", "Castle Flag Waving"),
    ("13002a5c", "Castle Floor Trap", "Castle Floor Trap"),
    ("13003868", "Celebration Star", "Celebration Star"),
    ("13003888", "Celebration Star Sparkle", "Celebration Star Sparkle"),
    ("1300478c", "Chain Chomp", "Chain Chomp"),
    ("130047e4", "Chain Chomp Chain Part", "Chain Chomp Chain Part"),
    ("13004868", "Chain Chomp Gate", "Chain Chomp Gate"),
    ("13001b70", "Checkerboard Elevator Group", "Checkerboard Elevator Group"),
    ("13001b88", "Checkerboard Platform Sub", "Checkerboard Platform Sub"),
    ("130021e4", "Chirp Chirp", "Chirp Chirp"),
    ("130021f4", "Chirp Chirp Unused", "Chirp Chirp Unused"),
    ("13000528", "Chuckya", "Chuckya"),
    ("13000584", "Chuckya Anchor Mario", "Chuckya Anchor Mario"),
    ("13003388", "Circling Amp", "Circling Amp"),
    ("13005440", "Clam Shell", "Clam Shell"),
    ("13001c8c", "Clock Hour Hand", "Clock Hour Hand"),
    ("13001c7c", "Clock Minute Hand", "Clock Minute Hand"),
    ("13004988", "Cloud", "Cloud"),
    ("130049ac", "Cloud Part", "Cloud Part"),
    ("13005414", "Coffin", "Coffin"),
    ("130053f4", "Coffin Spawner", "Coffin Spawner"),
    ("130008ec", "Coin Formation", "Coin Formation"),
    ("130008d0", "Coin Formation Spawn", "Coin Formation Spawn"),
    ("13000888", "Coin Inside Boo", "Coin Inside Boo"),
    ("130009e0", "Coin Sparkles", "Coin Sparkles"),
    ("130041bc", "Controllable Platform", "Controllable Platform"),
    ("130041f0", "Controllable Platform Sub", "Controllable Platform Sub"),
    ("130027d0", "Courtyard Boo Triplet", "Courtyard Boo Triplet"),
    ("13001098", "Cut Out Object", "Cut Out Object"),
    ("13001000", "DDD Moving Pole", "DDD Moving Pole"),
    ("13005528", "DDD Pole", "DDD Pole"),
    ("13001c34", "DDD Warp", "DDD Warp"),
    ("13002f70", "Death Warp", "Death Warp"),
    ("1300442c", "Decorative Pendulum", "Decorative Pendulum"),
    ("13000e3c", "Dirt Particle Spawner", "Dirt Particle Spawner"),
    ("13005504", "Donut Platform", "Donut Platform"),
    ("130054ec", "Donut Platform Spawner", "Donut Platform Spawner"),
    ("13000b0c", "Door", "Door"),
    ("13000afc", "Door Warp", "Door Warp"),
    ("13004f90", "Dorrie", "Dorrie"),
    ("1300565c", "End Birds 1", "End Birds 1"),
    ("13005680", "End Birds 2", "End Birds 2"),
    ("13000eac", "End Peach", "End Peach"),
    ("13000e88", "End Toad", "End Toad"),
    ("13004918", "Enemy Lakitu", "Enemy Lakitu"),
    ("13002250", "Exclamation Box", "Exclamation Box"),
    ("13000720", "Exit Podium Warp", "Exit Podium Warp"),
    ("13003510", "Explosion", "Explosion"),
    ("130052b4", "Eyerok Boss", "Eyerok Boss"),
    ("130052d0", "Eyerok Hand", "Eyerok Hand"),
    ("1300075c", "Fading Warp", "Fading Warp"),
    ("13001958", "Falling Bowser Platform", "Falling Bowser Platform"),
    ("130043a0", "Falling Pillar", "Falling Pillar"),
    ("130043c4", "Falling Pillar Hitbox", "Falling Pillar Hitbox"),
    ("13004b44", "Ferris Wheel Axle", "Ferris Wheel Axle"),
    ("13004b6c", "Ferris Wheel Platform", "Ferris Wheel Platform"),
    ("130011ec", "Fire Particle Spawner", "Fire Particle Spawner"),
    ("13005120", "Fire Piranha Plant", "Fire Piranha Plant"),
    ("1300518c", "Fire Spitter", "Fire Spitter"),
    ("13002178", "Fish", "Fish"),
    ("1300213c", "Fish 2", "Fish 2"),
    ("1300214c", "Fish 3", "Fish 3"),
    ("13000494", "Fish Group", "Fish Group"),
    ("13000c84", "Flame", "Flame"),
    ("13001a30", "Flame Bouncing", "Flame Bouncing"),
    ("13001aa4", "Flame Bowser", "Flame Bowser"),
    ("130019c8", "Flame Floating Landing", "Flame Floating Landing"),
    ("13001ae8", "Flame Large Burning Out", "Flame Large Burning Out"),
    ("13001a74", "Flame Moving Forward Growing", "Flame Moving Forward Growing"),
    ("13001108", "Flamethrower", "Flamethrower"),
    ("13001124", "Flamethrower Flame", "Flamethrower Flame"),
    ("13001468", "Floor Switch Animates Object", "Floor Switch Animates Object"),
    ("13001478", "Floor Switch Grills", "Floor Switch Grills"),
    ("13001484", "Floor Switch Hardcoded Model", "Floor Switch Hardcoded Model"),
    ("130014ac", "Floor Switch Hidden Objects", "Floor Switch Hidden Objects"),
    ("13002a7c", "Floor Trap In Castle", "Floor Trap In Castle"),
    ("130046dc", "Fly Guy", "Fly Guy"),
    ("130051ac", "Flyguy Flame", "Flyguy Flame"),
    ("1300506c", "Flying Bookend", "Flying Bookend"),
    ("13003a30", "Free Bowling Ball", "Free Bowling Ball"),
    ("13002790", "Ghost Hunt Big Boo", "Ghost Hunt Big Boo"),
    ("13002804", "Ghost Hunt Boo", "Ghost Hunt Boo"),
    ("13000118", "Giant Pole", "Giant Pole"),
    ("13000a14", "Golden Coin Sparkles", "Golden Coin Sparkles"),
    ("1300472c", "Goomba", "Goomba"),
    ("13004770", "Goomba Triplet Spawner", "Goomba Triplet Spawner"),
    ("13001714", "Grand Star", "Grand Star"),
    ("13000b58", "Grindel", "Grindel"),
    ("13000d30", "HMC Elevator Platform", "HMC Elevator Platform"),
    ("130028fc", "Haunted Bookshelf", "Haunted Bookshelf"),
    ("130050d4", "Haunted Bookshelf Manager", "Haunted Bookshelf Manager"),
    ("13004fd4", "Haunted Chair", "Haunted Chair"),
    ("13001548", "Heave Ho", "Heave Ho"),
    ("130015a4", "Heave Ho Throw Mario", "Heave Ho Throw Mario"),
    ("130040ec", "Hidden 1 Up", "Hidden 1 Up"),
    ("13004148", "Hidden 1 Up In Pole", "Hidden 1 Up In Pole"),
    ("130041a4", "Hidden 1 Up In Pole Spawner", "Hidden 1 Up In Pole Spawner"),
    ("13004180", "Hidden 1 Up In Pole Trigger", "Hidden 1 Up In Pole Trigger"),
    ("13004124", "Hidden 1 Up Trigger", "Hidden 1 Up Trigger"),
    ("13003cb8", "Hidden At 120 Stars", "Hidden At 120 Stars"),
    ("13002588", "Hidden Blue Coin", "Hidden Blue Coin"),
    ("130014bc", "Hidden Object", "Hidden Object"),
    ("13003e8c", "Hidden Red Coin Star", "Hidden Red Coin Star"),
    ("1300286c", "Hidden Staircase Step", "Hidden Staircase Step"),
    ("13003efc", "Hidden Star", "Hidden Star"),
    ("13003f1c", "Hidden Star Trigger", "Hidden Star Trigger"),
    ("13003354", "Homing Amp", "Homing Amp"),
    ("130033ec", "Hoot", "Hoot"),
    ("13000a98", "Hor Star Particle Spawner", "Hor Star Particle Spawner"),
    ("1300525c", "Horizontal Grindel", "Horizontal Grindel"),
    ("13002ce0", "Idle Water Wave", "Idle Water Wave"),
    ("130016b8", "Igloo", "Igloo"),
    ("1300246c", "In Sunken Ship", "In Sunken Ship"),
    ("13002480", "In Sunken Ship 2", "In Sunken Ship 2"),
    ("130023ec", "In Sunken Ship 3", "In Sunken Ship 3"),
    ("13002620", "Initialize Changing Water Level", "Initialize Changing Water Level"),
    ("130029b0", "Inside Cannon", "Inside Cannon"),
    ("130056a4", "Intro Scene", "Intro Scene"),
    ("13001bf4", "Invisible Objects Under Bridge", "Invisible Objects Under Bridge"),
    ("13004400", "JRB Floating Box", "JRB Floating Box"),
    ("130042e4", "JRB Floating Platform", "JRB Floating Platform"),
    ("130023a4", "JRB Sliding Box", "JRB Sliding Box"),
    ("130032c8", "Jet Stream", "Jet Stream"),
    ("13003738", "Jet Stream Ring Spawner", "Jet Stream Ring Spawner"),
    ("13003750", "Jet Stream Water Ring", "Jet Stream Water Ring"),
    ("13001650", "Jumping Box", "Jumping Box"),
    ("1300066c", "Kickable Board", "Kickable Board"),
    ("130001f4", "King Bobomb", "King Bobomb"),
    ("13005310", "Klepto", "Klepto"),
    ("13004580", "Koopa", "Koopa"),
    ("130045f8", "Koopa Flag", "Koopa Flag"),
    ("130045d0", "Koopa Race Endpoint", "Koopa Race Endpoint"),
    ("13001f3c", "Koopa Shell", "Koopa Shell"),
    ("13001f68", "Koopa Shell Flame", "Koopa Shell Flame"),
    ("13000708", "Koopa Shell Underwater", "Koopa Shell Underwater"),
    ("13002068", "LLL Bowser Puzzle", "LLL Bowser Puzzle"),
    ("13002038", "LLL Bowser Puzzle Piece", "LLL Bowser Puzzle Piece"),
    ("130038e8", "LLL Drawbridge", "LLL Drawbridge"),
    ("130038d0", "LLL Drawbridge Spawner", "LLL Drawbridge Spawner"),
    ("13001e30", "LLL Floating Wood Bridge", "LLL Floating Wood Bridge"),
    ("13002018", "LLL Hexagonal Mesh", "LLL Hexagonal Mesh"),
    ("13001d78", "LLL Moving Octagonal Mesh Platform", "LLL Moving Octagonal Mesh Platform"),
    ("13003fa4", "LLL Rolling Log", "LLL Rolling Log"),
    ("13001da8", "LLL Rotating Block With Fire Bars", "LLL Rotating Block With Fire Bars"),
    ("13001dcc", "LLL Rotating Hex Flame", "LLL Rotating Hex Flame"),
    ("13001d14", "LLL Rotating Hexagonal Platform", "LLL Rotating Hexagonal Platform"),
    ("13001e6c", "LLL Rotating Hexagonal Ring", "LLL Rotating Hexagonal Ring"),
    ("13001e94", "LLL Sinking Rectangular Platform", "LLL Sinking Rectangular Platform"),
    ("13001d40", "LLL Sinking Rock Block", "LLL Sinking Rock Block"),
    ("13001ec4", "LLL Sinking Square Platforms", "LLL Sinking Square Platforms"),
    ("13001ef8", "LLL Tilting Inverted Pyramid", "LLL Tilting Inverted Pyramid"),
    ("13000c64", "LLL Tumbling Bridge", "LLL Tumbling Bridge"),
    ("13003f78", "LLL Volcano Falling Trap", "LLL Volcano Falling Trap"),
    ("13001e04", "LLL Wood Piece", "LLL Wood Piece"),
    ("13003940", "Large Bomp", "Large Bomp"),
    ("1300215c", "Large Fish Group", "Large Fish Group"),
    ("13001390", "Leaf Particle Spawner", "Leaf Particle Spawner"),
    ("13001cb0", "Macro Ukiki", "Macro Ukiki"),
    ("13005024", "Mad Piano", "Mad Piano"),
    ("13004370", "Manta Ray", "Manta Ray"),
    ("130037e0", "Manta Ray Ring Manager", "Manta Ray Ring Manager"),
    ("13003798", "Manta Ray Water Ring", "Manta Ray Water Ring"),
    ("13002ec0", "Mario", "Mario"),
    ("13002fe4", "Menu Button", "Menu Button"),
    ("13003008", "Menu Button Manager", "Menu Button Manager"),
    ("13002968", "Merry Go Round", "Merry Go Round"),
    ("1300277c", "Merry Go Round Big Boo", "Merry Go Round Big Boo"),
    ("130027f4", "Merry Go Round Boo", "Merry Go Round Boo"),
    ("13002684", "Merry Go Round Boo Manager", "Merry Go Round Boo Manager"),
    ("1300292c", "Mesh Elevator", "Mesh Elevator"),
    ("130032e0", "Message Panel", "Message Panel"),
    ("13003dd8", "Metal Cap", "Metal Cap"),
    ("130044fc", "Mips", "Mips"),
    ("13000e24", "Mist Circ Particle Spawner", "Mist Circ Particle Spawner"),
    ("130024ac", "Mist Particle Spawner", "Mist Particle Spawner"),
    ("13001c58", "Moat Grills", "Moat Grills"),
    ("130039a0", "Moneybag", "Moneybag"),
    ("130039d4", "Moneybag Hidden", "Moneybag Hidden"),
    ("13004a00", "Monty Mole", "Monty Mole"),
    ("13004a58", "Monty Mole Hole", "Monty Mole Hole"),
    ("13004a78", "Monty Mole Rock", "Monty Mole Rock"),
    ("130030a4", "Moving Blue Coin", "Moving Blue Coin"),
    ("13003068", "Moving Yellow Coin", "Moving Yellow Coin"),
    ("13004dbc", "Mr. Blizzard", "Mr. Blizzard"),
    ("13004e08", "Mr. Blizzard Snowball", "Mr. Blizzard Snowball"),
    ("13000054", "Mr. I ", "Mr. I "),
    ("13000830", "Mr. I Blue Coin", "Mr. I Blue Coin"),
    ("1300008c", "Mr. I Body", "Mr. I Body"),
    ("130000ac", "Mr. I Particle", "Mr. I Particle"),
    ("13003df8", "Normal Cap", "Normal Cap"),
    ("13003484", "Object Bubble", "Object Bubble"),
    ("13002d28", "Object Water Splash", "Object Water Splash"),
    ("130034c4", "Object Water Wave", "Object Water Wave"),
    ("13002db0", "Object Wave Trail", "Object Wave Trail"),
    ("13004e78", "Octagonal Platform Rotating", "Octagonal Platform Rotating"),
    ("1300090c", "One Coin", "One Coin"),
    ("130025c0", "Openable Cage Door", "Openable Cage Door"),
    ("130025e0", "Openable Grill", "Openable Grill"),
    ("13004348", "Orange Number", "Orange Number"),
    ("13002f80", "Painting Death Warp", "Painting Death Warp"),
    ("130020d8", "Penguin Baby", "Penguin Baby"),
    ("130053c4", "Penguin Race Finish Line", "Penguin Race Finish Line"),
    ("130053dc", "Penguin Race Shortcut Check", "Penguin Race Shortcut Check"),
    ("130043e0", "Pillar Base", "Pillar Base"),
    ("13001fbc", "Piranha Plant", "Piranha Plant"),
    ("1300142c", "Piranha Plant Bubble", "Piranha Plant Bubble"),
    ("13001448", "Piranha Plant Waking Bubbles", "Piranha Plant Waking Bubbles"),
    ("13003a08", "Pit Bowling Ball", "Pit Bowling Ball"),
    ("13004ab0", "Platform On Track", "Platform On Track"),
    ("13002998", "Plays Music Track When Touched", "Plays Music Track When Touched"),
    ("13000428", "Plunge Bubble", "Plunge Bubble"),
    ("13004634", "Pokey", "Pokey"),
    ("13004668", "Pokey Body Part", "Pokey Body Part"),
    ("13000144", "Pole Grabbing", "Pole Grabbing"),
    ("13000a78", "Pound Tiny Star Particle", "Pound Tiny Star Particle"),
    ("13000abc", "Punch Tiny Triangle", "Punch Tiny Triangle"),
    ("130000f8", "Purple Particle", "Purple Particle"),
    ("13002558", "Purple Switch Hidden Boxes", "Purple Switch Hidden Boxes"),
    ("13001518", "Pushable Metal Box", "Pushable Metal Box"),
    ("13003b60", "Pyramid Elevator", "Pyramid Elevator"),
    ("13003b98", "Pyramid Elevator Trajectory Marker Ball", "Pyramid Elevator Trajectory Marker Ball"),
    ("13003c0c", "Pyramid Pillar Touch Detector", "Pyramid Pillar Touch Detector"),
    ("13003bb4", "Pyramid Top", "Pyramid Top"),
    ("13003bec", "Pyramid Top Fragment", "Pyramid Top Fragment"),
    ("13003ae0", "RR Cruiser Wing", "RR Cruiser Wing"),
    ("13000cfc", "RR Elevator Platform", "RR Elevator Platform"),
    ("130010d8", "RR Rotating Bridge Platform", "RR Rotating Bridge Platform"),
    ("13005380", "Racing Penguin", "Racing Penguin"),
    ("13002fa0", "Random Animated Texture", "Random Animated Texture"),
    ("13004ef8", "Recovery Heart", "Recovery Heart"),
    ("13003eac", "Red Coin", "Red Coin"),
    ("1300556c", "Red Coin Star Marker", "Red Coin Star Marker"),
    ("13003614", "Respawner", "Respawner"),
    ("130022b8", "Rock Solid", "Rock Solid"),
    ("130006d8", "Rotating Counter Clockwise", "Rotating Counter Clockwise"),
    ("1300227c", "Rotating Exclamation Mark", "Rotating Exclamation Mark"),
    ("130005b4", "Rotating Platform", "Rotating Platform"),
    ("13002e3c", "SL Snowman Wind", "SL Snowman Wind"),
    ("13002e58", "SL Walking Penguin", "SL Walking Penguin"),
    ("13003b30", "SSL Moving Pyramid Wall", "SSL Moving Pyramid Wall"),
    ("13003ca4", "Sand Sound Loop", "Sand Sound Loop"),
    ("13002b5c", "Scuttlebug", "Scuttlebug"),
    ("13002ba0", "Scuttlebug Spawn", "Scuttlebug Spawn"),
    ("13003134", "Seaweed", "Seaweed"),
    ("13003158", "Seaweed Bundle", "Seaweed Bundle"),
    ("13004b1c", "Seesaw Platform", "Seesaw Platform"),
    ("13002d7c", "Shallow Water Splash", "Shallow Water Splash"),
    ("13002d50", "Shallow Water Wave", "Shallow Water Wave"),
    ("130023d0", "Ship Part 3", "Ship Part 3"),
    ("13003324", "Sign On Wall", "Sign On Wall"),
    ("130009a4", "Single Coin Gets Spawned", "Single Coin Gets Spawned"),
    ("13005468", "Skeeter", "Skeeter"),
    ("130054a0", "Skeeter Wave", "Skeeter Wave"),
    ("13004e4c", "Sliding Platform 2", "Sliding Platform 2"),
    ("13004244", "Sliding Snow Mound", "Sliding Snow Mound"),
    ("13003910", "Small Bomp", "Small Bomp"),
    ("1300362c", "Small Bully", "Small Bully"),
    ("130036c8", "Small Chill Bully", "Small Chill Bully"),
    ("13000400", "Small Particle", "Small Particle"),
    ("1300046c", "Small Particle Bubbles", "Small Particle Bubbles"),
    ("13000444", "Small Particle Snow", "Small Particle Snow"),
    ("130020e8", "Small Penguin", "Small Penguin"),
    ("13005158", "Small Piranha Flame", "Small Piranha Flame"),
    ("13000338", "Small Water Wave", "Small Water Wave"),
    ("13000398", "Small Water Wave 398", "Small Water Wave 398"),
    ("13002bcc", "Small Whomp", "Small Whomp"),
    ("13003588", "Smoke", "Smoke"),
    ("13001da4", "Snow Ball", "Snow Ball"),
    ("13004270", "Snow Mound Spawn", "Snow Mound Spawn"),
    ("13000e58", "Snow Particle Spawner", "Snow Particle Spawner"),
    ("13003d34", "Snowmans Body Checkpoint", "Snowmans Body Checkpoint"),
    ("13003ce4", "Snowmans Bottom", "Snowmans Bottom"),
    ("13003d0c", "Snowmans Head", "Snowmans Head"),
    ("130051e0", "Snufit", "Snufit"),
    ("1300521c", "Snufit Balls", "Snufit Balls"),
    ("1300229c", "Sound Spawner", "Sound Spawner"),
    ("13002ad0", "Sparkle", "Sparkle"),
    ("13002b08", "Sparkle Particle Spawner", "Sparkle Particle Spawner"),
    ("13002af0", "Sparkle Spawn", "Sparkle Spawn"),
    ("130007f8", "Spawned Star", "Spawned Star"),
    ("1300080c", "Spawned Star No Level Exit", "Spawned Star No Level Exit"),
    ("13003b00", "Spindel", "Spindel"),
    ("130012b4", "Spindrift", "Spindrift"),
    ("130049c8", "Spiny", "Spiny"),
    ("13001408", "Squarish Path Moving", "Squarish Path Moving"),
    ("13001064", "Squishable Platform", "Squishable Platform"),
    ("13003e3c", "Star", "Star"),
    ("13000000", "Star Door", "Star Door"),
    ("130038b0", "Star Key Collection Puff Spawner", "Star Key Collection Puff Spawner"),
    ("13003e64", "Star Spawn Coordinates", "Star Spawn Coordinates"),
    ("130029e4", "Static Checkered Platform", "Static Checkered Platform"),
    ("13002a48", "Static Object", "Static Object"),
    ("13002e20", "Strong Wind Particle", "Strong Wind Particle"),
    ("130016ac", "Stub", "Stub"),
    ("13001d0c", "Stub 1D0C", "Stub 1D0C"),
    ("13001d70", "Stub 1D70", "Stub 1D70"),
    ("1300241c", "Sunken Ship Part", "Sunken Ship Part"),
    ("1300244c", "Sunken Ship Part 2", "Sunken Ship Part 2"),
    ("1300243c", "Sunken Ship Set Rotation", "Sunken Ship Set Rotation"),
    ("13002338", "Sushi Shark", "Sushi Shark"),
    ("13002388", "Sushi Shark Collision Child", "Sushi Shark Collision Child"),
    ("130054b8", "Swing Platform", "Swing Platform"),
    ("13004698", "Swoop", "Swoop"),
    ("13003ac8", "THI Bowling Ball Spawner", "THI Bowling Ball Spawner"),
    ("13000174", "THI Huge Island Top", "THI Huge Island Top"),
    ("13000194", "THI Tiny Island Top", "THI Tiny Island Top"),
    ("13004d64", "TTC 2D Rotator", "TTC 2D Rotator"),
    ("13004ccc", "TTC Cog", "TTC Cog"),
    ("13004d28", "TTC Elevator", "TTC Elevator"),
    ("13004c94", "TTC Moving Bar", "TTC Moving Bar"),
    ("13004c24", "TTC Pendulum", "TTC Pendulum"),
    ("13004cf8", "TTC Pit Block", "TTC Pit Block"),
    ("13004bf0", "TTC Rotating Solid", "TTC Rotating Solid"),
    ("13004d90", "TTC Spinner", "TTC Spinner"),
    ("13004c5c", "TTC Treadmill", "TTC Treadmill"),
    ("13003a80", "TTM Bowling Ball Spawner", "TTM Bowling Ball Spawner"),
    ("13003f40", "TTM Rolling Log", "TTM Rolling Log"),
    ("13001b54", "Tank Fish Group", "Tank Fish Group"),
    ("13000940", "Temporary Yellow Coin", "Temporary Yellow Coin"),
    ("13000984", "Ten Coins Spawn", "Ten Coins Spawn"),
    ("13000964", "Three Coins Spawn", "Three Coins Spawn"),
    ("13000bc8", "Thwomp", "Thwomp"),
    ("13000b8c", "Thwomp 2", "Thwomp 2"),
    ("13001920", "Tilting Bowser Lava Platform", "Tilting Bowser Lava Platform"),
    ("13002e04", "Tiny Strong Wind Particle", "Tiny Strong Wind Particle"),
    ("13002ef8", "Toad Message", "Toad Message"),
    ("130005d8", "Tower", "Tower"),
    ("130006a4", "Tower Door", "Tower Door"),
    ("130012f4", "Tower Platform Group", "Tower Platform Group"),
    ("13001f90", "Tox Box", "Tox Box"),
    ("13004af4", "Track Ball", "Track Ball"),
    ("130044b8", "Treasure Chest Bottom", "Treasure Chest Bottom"),
    ("130044e0", "Treasure Chest Top", "Treasure Chest Top"),
    ("13004494", "Treasure Chests", "Treasure Chests"),
    ("13004470", "Treasure Chests JRB", "Treasure Chests JRB"),
    ("1300444c", "Treasure Chests Ship", "Treasure Chests Ship"),
    ("13002aa4", "Tree", "Tree"),
    ("130013c4", "Tree Leaf", "Tree Leaf"),
    ("130013a8", "Tree Snow", "Tree Snow"),
    ("13000ad8", "Triangle Particle Spawner", "Triangle Particle Spawner"),
    ("13005598", "Triplet Butterfly", "Triplet Butterfly"),
    ("13000c04", "Tumbling Bridge Platform", "Tumbling Bridge Platform"),
    ("13002088", "Tuxies Mother", "Tuxies Mother"),
    ("13002650", "Tweester", "Tweester"),
    ("13002634", "Tweester Sand Particle", "Tweester Sand Particle"),
    ("13000f08", "Ukiki", "Ukiki"),
    ("13000f48", "Ukiki Cage", "Ukiki Cage"),
    ("13000f14", "Ukiki Cage Child", "Ukiki Cage Child"),
    ("13000f2c", "Ukiki Cage Star", "Ukiki Cage Star"),
    ("13004f40", "Unagi", "Unagi"),
    ("13004f78", "Unagi Subobject", "Unagi Subobject"),
    ("13002f40", "Unlock Door Star", "Unlock Door Star"),
    ("130005a8", "Unused 05A8", "Unused 05A8"),
    ("13000dfc", "Unused 0DFC", "Unused 0DFC"),
    ("13001820", "Unused 1820", "Unused 1820"),
    ("13001f30", "Unused 1F30", "Unused 1F30"),
    ("130020e0", "Unused 20E0", "Unused 20E0"),
    ("13002a10", "Unused 2A10", "Unused 2A10"),
    ("13002a54", "Unused 2A54", "Unused 2A54"),
    ("13002a20", "Unused Fake Star", "Unused Fake Star"),
    ("13000ed0", "Unused Particle Spawn", "Unused Particle Spawn"),
    ("130015e4", "Unused Poundable Platform", "Unused Poundable Platform"),
    ("13003e1c", "Vanish Cap", "Vanish Cap"),
    ("13000a54", "Vert Star Particle Spawner", "Vert Star Particle Spawner"),
    ("13001e4c", "Volcano Flames", "Volcano Flames"),
    ("13003c44", "Volcano Sound Loop", "Volcano Sound Loop"),
    ("13002194", "WDW Express Elevator", "WDW Express Elevator"),
    ("130021c0", "WDW Express Elevator Platform", "WDW Express Elevator Platform"),
    ("130042b4", "WDW Rectangular Floating Platform", "WDW Rectangular Floating Platform"),
    ("13004284", "WDW Square Floating Platform", "WDW Square Floating Platform"),
    ("13000638", "WF Breakable Wall Left", "WF Breakable Wall Left"),
    ("13000624", "WF Breakable Wall Right", "WF Breakable Wall Right"),
    ("13001340", "WF Elevator Tower Platform", "WF Elevator Tower Platform"),
    ("130006e0", "WF Rotating Wooden Platform", "WF Rotating Wooden Platform"),
    ("13003970", "WF Sliding Platform", "WF Sliding Platform"),
    ("13001318", "WF Sliding Tower Platform", "WF Sliding Tower Platform"),
    ("13001368", "WF Solid Tower Platform", "WF Solid Tower Platform"),
    ("13000c28", "WF Tumbling Bridge", "WF Tumbling Bridge"),
    ("13000a34", "Wall Tiny Star Particle", "Wall Tiny Star Particle"),
    ("13000780", "Warp", "Warp"),
    ("130007a0", "Warp Pipe", "Warp Pipe"),
    ("13002f60", "Warps 60 (Instant Active)", "Warps 60"),
    ("13002f64", "Warps 64 (Airborne)", "Warps 64"),
    ("13002f68", "Warps 68 (Hard Air Knockback)", "Warps 68"),
    ("13002f6c", "Warps 6C (Spin Airborne Circle)", "Warps 6C"),
    ("13002f74", "Warps 74 (Spin Airborne)", "Warps 74"),
    ("13002f78", "Warps 78 (Flying)", "Warps 78"),
    ("13002f7c", "Warps 7C (Painting Star Collect)", "Warps 7C"),
    ("13002f84", "Warps 84 (Airborne Death)", "Warps 84"),
    ("13002f88", "Warps 88 (Airborne Star Collect)", "Warps 88"),
    ("13002f8c", "Warps 8C (Launch Star Collect)", "Warps 8C"),
    ("13002f90", "Warps 90 (Launch Death)", "Warps 90"),
    ("13002f94", "Warps 94 (Swimming)", "Warps 94"),
    ("130003bc", "Water Air Bubble", "Water Air Bubble"),
    ("13004ba8", "Water Bomb", "Water Bomb"),
    ("13004f10", "Water Bomb Cannon", "Water Bomb Cannon"),
    ("13004bd4", "Water Bomb Shadow", "Water Bomb Shadow"),
    ("13004b8c", "Water Bomb Spawner", "Water Bomb Spawner"),
    ("13002c60", "Water Droplet", "Water Droplet"),
    ("13002c7c", "Water Droplet Splash", "Water Droplet Splash"),
    ("130025f8", "Water Level Diamond", "Water Level Diamond"),
    ("13001c04", "Water Level Pillar", "Water Level Pillar"),
    ("13000d6c", "Water Mist", "Water Mist"),
    ("13000dd8", "Water Mist 2", "Water Mist 2"),
    ("13002c14", "Water Splash", "Water Splash"),
    ("13003c30", "Waterfall Sound Loop", "Waterfall Sound Loop"),
    ("13002dc0", "Wave Trail", "Wave Trail"),
    ("130032a8", "Whirlpool", "Whirlpool"),
    ("130024dc", "White Puff 1", "White Puff 1"),
    ("13002500", "White Puff 2", "White Puff 2"),
    ("130007dc", "White Puff Explosion", "White Puff Explosion"),
    ("130017f4", "White Puff Smoke", "White Puff Smoke"),
    ("13002528", "White Puff Smoke 2", "White Puff Smoke 2"),
    ("13002bb8", "Whomp King Boss", "Whomp King Boss"),
    ("130048e0", "Wiggler Body", "Wiggler Body"),
    ("13004898", "Wiggler Head", "Wiggler Head"),
    ("13000e70", "Wind", "Wind"),
    ("13003db8", "Wing Cap", "Wing Cap"),
    ("1300481c", "Wooden Post", "Wooden Post"),
    ("13002fc0", "Yellow Background In Menu", "Yellow Background In Menu"),
    ("13002ea8", "Yellow Ball", "Yellow Ball"),
    ("1300091c", "Yellow Coin", "Yellow Coin"),
    ("13004538", "Yoshi", "Yoshi"),
]
enumModelIDs = [
    ("Custom", "Custom", "Custom"),
    ("MODEL_1UP", "1 Up", "1 Up"),
    ("MODEL_AMP", "Amp", "Amp"),
    ("MODEL_BBH_HAUNTED_DOOR", "BBH Haunted Door", "BBH Haunted Door"),
    ("MODEL_BBH_MERRY_GO_ROUND", "BBH Merry Go Round", "BBH Merry Go Round"),
    ("MODEL_BBH_MESH_ELEVATOR", "BBH Mesh Elevator", "BBH Mesh Elevator"),
    ("MODEL_BBH_MOVING_BOOKSHELF", "BBH Moving Bookshelf", "BBH Moving Bookshelf"),
    ("MODEL_BBH_STAIRCASE_STEP", "BBH Staircase Step", "BBH Staircase Step"),
    ("MODEL_BBH_TILTING_FLOOR_PLATFORM", "BBH Tilting Floor Platform", "BBH Tilting Floor Platform"),
    ("MODEL_BBH_TUMBLING_PLATFORM", "BBH Tumbling Platform", "BBH Tumbling Platform"),
    ("MODEL_BBH_TUMBLING_PLATFORM_PART", "BBH Tumbling Platform Part", "BBH Tumbling Platform Part"),
    ("MODEL_BBH_WOODEN_TOMB", "BBH Wooden Tomb", "BBH Wooden Tomb"),
    ("MODEL_BITDW_BLUE_PLATFORM", "BITDW Blue Platform", "BITDW Blue Platform"),
    ("MODEL_BITDW_FERRIS_WHEEL_AXLE", "BITDW Ferris Wheel Axle", "BITDW Ferris Wheel Axle"),
    ("MODEL_BITDW_SEESAW_PLATFORM", "BITDW Seesaw Platform", "BITDW Seesaw Platform"),
    ("MODEL_BITDW_SLIDING_PLATFORM", "BITDW Sliding Platform", "BITDW Sliding Platform"),
    ("MODEL_BITDW_SQUARE_PLATFORM", "BITDW Square Platform", "BITDW Square Platform"),
    ("MODEL_BITDW_STAIRCASE", "BITDW Staircase", "BITDW Staircase"),
    ("MODEL_BITDW_STAIRCASE_FRAME1", "BITDW Staircase Frame1", "BITDW Staircase Frame1"),
    ("MODEL_BITDW_STAIRCASE_FRAME2", "BITDW Staircase Frame2", "BITDW Staircase Frame2"),
    ("MODEL_BITDW_STAIRCASE_FRAME3", "BITDW Staircase Frame3", "BITDW Staircase Frame3"),
    ("MODEL_BITDW_STAIRCASE_FRAME4", "BITDW Staircase Frame4", "BITDW Staircase Frame4"),
    ("MODEL_BITDW_WARP_PIPE", "BITDW Warp Pipe", "BITDW Warp Pipe"),
    ("MODEL_BITFS_BLUE_POLE", "BITFS Blue Pole", "BITFS Blue Pole"),
    ("MODEL_BITFS_ELEVATOR", "BITFS Elevator", "BITFS Elevator"),
    ("MODEL_BITFS_MOVING_SQUARE_PLATFORM", "BITFS Moving Square Platform", "BITFS Moving Square Platform"),
    ("MODEL_BITFS_PLATFORM_ON_TRACK", "BITFS Platform On Track", "BITFS Platform On Track"),
    ("MODEL_BITFS_SEESAW_PLATFORM", "BITFS Seesaw Platform", "BITFS Seesaw Platform"),
    ("MODEL_BITFS_SINKING_CAGE_PLATFORM", "BITFS Sinking Cage Platform", "BITFS Sinking Cage Platform"),
    ("MODEL_BITFS_SINKING_PLATFORMS", "BITFS Sinking Platforms", "BITFS Sinking Platforms"),
    ("MODEL_BITFS_SLIDING_PLATFORM", "BITFS Sliding Platform", "BITFS Sliding Platform"),
    ("MODEL_BITFS_STRETCHING_PLATFORMS", "BITFS Stretching Platforms", "BITFS Stretching Platforms"),
    ("MODEL_BITFS_TILTING_SQUARE_PLATFORM", "BITFS Tilting Square Platform", "BITFS Tilting Square Platform"),
    ("MODEL_BITFS_TUMBLING_PLATFORM", "BITFS Tumbling Platform", "BITFS Tumbling Platform"),
    ("MODEL_BITFS_TUMBLING_PLATFORM_PART", "BITFS Tumbling Platform Part", "BITFS Tumbling Platform Part"),
    ("MODEL_BITS_ARROW_PLATFORM", "BITS Arrow Platform", "BITS Arrow Platform"),
    ("MODEL_BITS_BLUE_PLATFORM", "BITS Blue Platform", "BITS Blue Platform"),
    ("MODEL_BITS_FERRIS_WHEEL_AXLE", "BITS Ferris Wheel Axle", "BITS Ferris Wheel Axle"),
    ("MODEL_BITS_OCTAGONAL_PLATFORM", "BITS Octagonal Platform", "BITS Octagonal Platform"),
    ("MODEL_BITS_SEESAW_PLATFORM", "BITS Seesaw Platform", "BITS Seesaw Platform"),
    ("MODEL_BITS_SLIDING_PLATFORM", "BITS Sliding Platform", "BITS Sliding Platform"),
    ("MODEL_BITS_STAIRCASE", "BITS Staircase", "BITS Staircase"),
    ("MODEL_BITS_STAIRCASE_FRAME1", "BITS Staircase Frame1", "BITS Staircase Frame1"),
    ("MODEL_BITS_STAIRCASE_FRAME2", "BITS Staircase Frame2", "BITS Staircase Frame2"),
    ("MODEL_BITS_STAIRCASE_FRAME3", "BITS Staircase Frame3", "BITS Staircase Frame3"),
    ("MODEL_BITS_STAIRCASE_FRAME4", "BITS Staircase Frame4", "BITS Staircase Frame4"),
    ("MODEL_BITS_TILTING_W_PLATFORM", "BITS Tilting With Platform", "BITS Tilting With Platform"),
    ("MODEL_BITS_TWIN_SLIDING_PLATFORMS", "BITS Twin Sliding Platforms", "BITS Twin Sliding Platforms"),
    ("MODEL_BITS_WARP_PIPE", "BITS Warp Pipe", "BITS Warp Pipe"),
    ("MODEL_BOB_BARS_GRILLS", "BOB Bars Grills", "BOB Bars Grills"),
    ("MODEL_BOB_BUBBLY_TREE", "BOB Bubbly Tree", "BOB Bubbly Tree"),
    ("MODEL_BOB_CHAIN_CHOMP_GATE", "BOB Chain Chomp Gate", "BOB Chain Chomp Gate"),
    ("MODEL_BOB_SEESAW_PLATFORM", "BOB Seesaw Platform", "BOB Seesaw Platform"),
    ("MODEL_BETA_BOO_KEY", "Beta Boo Key", "Beta Boo Key"),
    ("MODEL_BIG_CHILL_BULLY", "Big Chill Bully", "Big Chill Bully"),
    ("MODEL_BIRDS", "Birds", "Birds"),
    ("MODEL_BLACK_BOBOMB", "Black Bobomb", "Black Bobomb"),
    ("MODEL_BLARGG", "Blargg", "Blargg"),
    ("MODEL_BLUE_COIN", "Blue Coin", "Blue Coin"),
    ("MODEL_BLUE_COIN_NO_SHADOW", "Blue Coin No Shadow", "Blue Coin No Shadow"),
    ("MODEL_BLUE_COIN_SWITCH", "Blue Coin Switch", "Blue Coin Switch"),
    ("MODEL_BLUE_FLAME", "Blue Flame", "Blue Flame"),
    ("MODEL_BOBOMB_BUDDY", "Bobomb Buddy", "Bobomb Buddy"),
    ("MODEL_BOO", "Boo", "Boo"),
    ("MODEL_BOO_CASTLE", "Boo Castle", "Boo Castle"),
    ("MODEL_BOOKEND", "Bookend", "Bookend"),
    ("MODEL_BOOKEND_PART", "Bookend Part", "Bookend Part"),
    ("MODEL_BOWLING_BALL", "Bowling Ball", "Bowling Ball"),
    ("MODEL_BOWSER", "Bowser", "Bowser"),
    ("MODEL_BOWSER_2_TILTING_ARENA", "Bowser 2 Tilting Arena", "Bowser 2 Tilting Arena"),
    ("MODEL_BOWSER_3_FALLING_PLATFORM_1", "Bowser 3 Falling Platform 1", "Bowser 3 Falling Platform 1"),
    ("MODEL_BOWSER_3_FALLING_PLATFORM_10", "Bowser 3 Falling Platform 10", "Bowser 3 Falling Platform 10"),
    ("MODEL_BOWSER_3_FALLING_PLATFORM_2", "Bowser 3 Falling Platform 2", "Bowser 3 Falling Platform 2"),
    ("MODEL_BOWSER_3_FALLING_PLATFORM_3", "Bowser 3 Falling Platform 3", "Bowser 3 Falling Platform 3"),
    ("MODEL_BOWSER_3_FALLING_PLATFORM_4", "Bowser 3 Falling Platform 4", "Bowser 3 Falling Platform 4"),
    ("MODEL_BOWSER_3_FALLING_PLATFORM_5", "Bowser 3 Falling Platform 5", "Bowser 3 Falling Platform 5"),
    ("MODEL_BOWSER_3_FALLING_PLATFORM_6", "Bowser 3 Falling Platform 6", "Bowser 3 Falling Platform 6"),
    ("MODEL_BOWSER_3_FALLING_PLATFORM_7", "Bowser 3 Falling Platform 7", "Bowser 3 Falling Platform 7"),
    ("MODEL_BOWSER_3_FALLING_PLATFORM_8", "Bowser 3 Falling Platform 8", "Bowser 3 Falling Platform 8"),
    ("MODEL_BOWSER_3_FALLING_PLATFORM_9", "Bowser 3 Falling Platform 9", "Bowser 3 Falling Platform 9"),
    ("MODEL_BOWSER_BOMB", "Bowser Bomb", "Bowser Bomb"),
    ("MODEL_BOWSER_BOMB_CHILD_OBJ", "Bowser Bomb Child Obj", "Bowser Bomb Child Obj"),
    ("MODEL_BOWSER_FLAMES", "Bowser Flames", "Bowser Flames"),
    ("MODEL_BOWSER_KEY", "Bowser Key", "Bowser Key"),
    ("MODEL_BOWSER_KEY_CUTSCENE", "Bowser Key Cutscene", "Bowser Key Cutscene"),
    ("MODEL_BOWSER_SMOKE", "Bowser Smoke", "Bowser Smoke"),
    ("MODEL_BOWSER_WAVE", "Bowser Wave", "Bowser Wave"),
    ("MODEL_BOWSER2", "Bowser2", "Bowser2"),
    ("MODEL_BREAKABLE_BOX", "Breakable Box", "Breakable Box"),
    ("MODEL_BREAKABLE_BOX_SMALL", "Breakable Box Small", "Breakable Box Small"),
    ("MODEL_BUB", "Bub", "Bub"),
    ("MODEL_BUBBA", "Bubba", "Bubba"),
    ("MODEL_BUBBLE", "Bubble", "Bubble"),
    ("MODEL_BULLET_BILL", "Bullet Bill", "Bullet Bill"),
    ("MODEL_BULLY", "Bully", "Bully"),
    ("MODEL_BULLY_BOSS", "Bully Boss", "Bully Boss"),
    ("MODEL_BURN_SMOKE", "Burn Smoke", "Burn Smoke"),
    ("MODEL_BURN_SMOKE_UNUSED", "Burn Smoke Unused", "Burn Smoke Unused"),
    ("MODEL_BUTTERFLY", "Butterfly", "Butterfly"),
    ("MODEL_CCM_CABIN_DOOR", "CCM Cabin Door", "CCM Cabin Door"),
    ("MODEL_CCM_ROPEWAY_LIFT", "CCM Ropeway Lift", "CCM Ropeway Lift"),
    ("MODEL_CCM_SNOW_TREE", "CCM Snow Tree", "CCM Snow Tree"),
    ("MODEL_CCM_SNOWMAN_BASE", "CCM Snowman Base", "CCM Snowman Base"),
    ("MODEL_CCM_SNOWMAN_HEAD", "CCM Snowman Head", "CCM Snowman Head"),
    ("MODEL_CANNON_BARREL", "Cannon Barrel", "Cannon Barrel"),
    ("MODEL_CANNON_BASE", "Cannon Base", "Cannon Base"),
    ("MODEL_CAP_SWITCH", "Cap Switch", "Cap Switch"),
    ("MODEL_CAP_SWITCH_BASE", "Cap Switch Base", "Cap Switch Base"),
    ("MODEL_CAP_SWITCH_EXCLAMATION", "Cap Switch Exclamation", "Cap Switch Exclamation"),
    ("MODEL_CARTOON_STAR", "Cartoon Star", "Cartoon Star"),
    ("MODEL_CASTLE_BOWSER_TRAP", "Castle Bowser Trap", "Castle Bowser Trap"),
    ("MODEL_CASTLE_CASTLE_DOOR", "Castle Castle Door", "Castle Castle Door"),
    ("MODEL_CASTLE_CASTLE_DOOR_UNUSED", "Castle Castle Door Unused", "Castle Castle Door Unused"),
    ("MODEL_CASTLE_CLOCK_HOUR_HAND", "Castle Clock Hour Hand", "Castle Clock Hour Hand"),
    ("MODEL_CASTLE_CLOCK_MINUTE_HAND", "Castle Clock Minute Hand", "Castle Clock Minute Hand"),
    ("MODEL_CASTLE_CLOCK_PENDULUM", "Castle Clock Pendulum", "Castle Clock Pendulum"),
    ("MODEL_CASTLE_DOOR_0_STARS", "Castle Door 0 Stars", "Castle Door 0 Stars"),
    ("MODEL_CASTLE_DOOR_1_STAR", "Castle Door 1 Star", "Castle Door 1 Star"),
    ("MODEL_CASTLE_DOOR_3_STARS", "Castle Door 3 Stars", "Castle Door 3 Stars"),
    ("MODEL_CASTLE_GROUNDS_BUBBLY_TREE", "Castle Grounds Bubbly Tree", "Castle Grounds Bubbly Tree"),
    ("MODEL_CASTLE_GROUNDS_CANNON_GRILL", "Castle Grounds Cannon Grill", "Castle Grounds Cannon Grill"),
    ("MODEL_CASTLE_GROUNDS_CASTLE_DOOR", "Castle Grounds Castle Door", "Castle Grounds Castle Door"),
    ("MODEL_CASTLE_GROUNDS_FLAG", "Castle Grounds Flag", "Castle Grounds Flag"),
    ("MODEL_CASTLE_GROUNDS_METAL_DOOR", "Castle Grounds Metal Door", "Castle Grounds Metal Door"),
    ("MODEL_CASTLE_GROUNDS_VCUTM_GRILL", "Castle Grounds Vcutm Grill", "Castle Grounds Vcutm Grill"),
    ("MODEL_CASTLE_GROUNDS_WARP_PIPE", "Castle Grounds Warp Pipe", "Castle Grounds Warp Pipe"),
    ("MODEL_CASTLE_KEY_DOOR", "Castle Key Door", "Castle Key Door"),
    ("MODEL_CASTLE_METAL_DOOR", "Castle Metal Door", "Castle Metal Door"),
    ("MODEL_CASTLE_STAR_DOOR_30_STARS", "Castle Star Door 30 Stars", "Castle Star Door 30 Stars"),
    ("MODEL_CASTLE_STAR_DOOR_50_STARS", "Castle Star Door 50 Stars", "Castle Star Door 50 Stars"),
    ("MODEL_CASTLE_STAR_DOOR_70_STARS", "Castle Star Door 70 Stars", "Castle Star Door 70 Stars"),
    ("MODEL_CASTLE_STAR_DOOR_8_STARS", "Castle Star Door 8 Stars", "Castle Star Door 8 Stars"),
    ("MODEL_CASTLE_WATER_LEVEL_PILLAR", "Castle Water Level Pillar", "Castle Water Level Pillar"),
    ("MODEL_CASTLE_WOODEN_DOOR", "Castle Wooden Door", "Castle Wooden Door"),
    ("MODEL_CASTLE_WOODEN_DOOR_UNUSED", "Castle Wooden Door Unused", "Castle Wooden Door Unused"),
    ("MODEL_CHAIN_CHOMP", "Chain Chomp", "Chain Chomp"),
    ("MODEL_CHECKERBOARD_PLATFORM", "Checkerboard Platform", "Checkerboard Platform"),
    ("MODEL_CHILL_BULLY", "Chill Bully", "Chill Bully"),
    ("MODEL_CHUCKYA", "Chuckya", "Chuckya"),
    ("MODEL_CLAM_SHELL", "Clam Shell", "Clam Shell"),
    ("MODEL_COURTYARD_SPIKY_TREE", "Courtyard Spiky Tree", "Courtyard Spiky Tree"),
    ("MODEL_COURTYARD_WOODEN_DOOR", "Courtyard Wooden Door", "Courtyard Wooden Door"),
    ("MODEL_CYAN_FISH", "Cyan Fish", "Cyan Fish"),
    ("MODEL_DDD_BOWSER_SUB", "DDD Bowser Sub", "DDD Bowser Sub"),
    ("MODEL_DDD_BOWSER_SUB_DOOR", "DDD Bowser Sub Door", "DDD Bowser Sub Door"),
    ("MODEL_DDD_POLE", "DDD Pole", "DDD Pole"),
    ("MODEL_DL_CANNON_LID", "DL Cannon Lid", "DL Cannon Lid"),
    ("MODEL_DL_MONTY_MOLE_HOLE", "DL Monty Mole Hole", "DL Monty Mole Hole"),
    ("MODEL_DL_WHIRLPOOL", "DL Whirlpool", "DL Whirlpool"),
    ("MODEL_DIRT_ANIMATION", "Dirt Animation", "Dirt Animation"),
    ("MODEL_DORRIE", "Dorrie", "Dorrie"),
    ("MODEL_ENEMY_LAKITU", "Enemy Lakitu", "Enemy Lakitu"),
    ("MODEL_EXCLAMATION_BOX", "Exclamation Box", "Exclamation Box"),
    ("MODEL_EXCLAMATION_BOX_OUTLINE", "Exclamation Box Outline", "Exclamation Box Outline"),
    ("MODEL_EXCLAMATION_POINT", "Exclamation Point", "Exclamation Point"),
    ("MODEL_EXPLOSION", "Explosion", "Explosion"),
    ("MODEL_EYEROK_LEFT_HAND", "Eyerok Left Hand", "Eyerok Left Hand"),
    ("MODEL_EYEROK_RIGHT_HAND", "Eyerok Right Hand", "Eyerok Right Hand"),
    ("MODEL_FISH", "Fish", "Fish"),
    ("MODEL_FISH_SHADOW", "Fish Shadow", "Fish Shadow"),
    ("MODEL_FLYGUY", "Flyguy", "Flyguy"),
    ("MODEL_FWOOSH", "Fwoosh", "Fwoosh"),
    ("MODEL_GOOMBA", "Goomba", "Goomba"),
    ("MODEL_HMC_ELEVATOR_PLATFORM", "HMC Elevator Platform", "HMC Elevator Platform"),
    ("MODEL_HMC_HAZY_MAZE_DOOR", "HMC Hazy Maze Door", "HMC Hazy Maze Door"),
    ("MODEL_HMC_METAL_ARROW_PLATFORM", "HMC Metal Arrow Platform", "HMC Metal Arrow Platform"),
    ("MODEL_HMC_METAL_DOOR", "HMC Metal Door", "HMC Metal Door"),
    ("MODEL_HMC_METAL_PLATFORM", "HMC Metal Platform", "HMC Metal Platform"),
    ("MODEL_HMC_RED_GRILLS", "HMC Red Grills", "HMC Red Grills"),
    ("MODEL_HMC_ROCK_PIECE", "HMC Rock Piece", "HMC Rock Piece"),
    ("MODEL_HMC_ROCK_SMALL_PIECE", "HMC Rock Small Piece", "HMC Rock Small Piece"),
    ("MODEL_HMC_ROLLING_ROCK", "HMC Rolling Rock", "HMC Rolling Rock"),
    ("MODEL_HMC_WOODEN_DOOR", "HMC Wooden Door", "HMC Wooden Door"),
    ("MODEL_HAUNTED_CAGE", "Haunted Cage", "Haunted Cage"),
    ("MODEL_HAUNTED_CHAIR", "Haunted Chair", "Haunted Chair"),
    ("MODEL_HEART", "Heart", "Heart"),
    ("MODEL_HEAVE_HO", "Heave Ho", "Heave Ho"),
    ("MODEL_HOOT", "Hoot", "Hoot"),
    ("MODEL_IDLE_WATER_WAVE", "Idle Water Wave", "Idle Water Wave"),
    ("MODEL_JRB_FALLING_PILLAR", "JRB Falling Pillar", "JRB Falling Pillar"),
    ("MODEL_JRB_FALLING_PILLAR_BASE", "JRB Falling Pillar Base", "JRB Falling Pillar Base"),
    ("MODEL_JRB_FLOATING_PLATFORM", "JRB Floating Platform", "JRB Floating Platform"),
    ("MODEL_JRB_ROCK", "JRB Rock", "JRB Rock"),
    ("MODEL_JRB_SHIP_BACK_LEFT_PART", "JRB Ship Back Left Part", "JRB Ship Back Left Part"),
    ("MODEL_JRB_SHIP_BACK_RIGHT_PART", "JRB Ship Back Right Part", "JRB Ship Back Right Part"),
    ("MODEL_JRB_SHIP_LEFT_HALF_PART", "JRB Ship Left Half Part", "JRB Ship Left Half Part"),
    ("MODEL_JRB_SHIP_RIGHT_HALF_PART", "JRB Ship Right Half Part", "JRB Ship Right Half Part"),
    ("MODEL_JRB_SLIDING_BOX", "JRB Sliding Box", "JRB Sliding Box"),
    ("MODEL_JRB_SUNKEN_SHIP", "JRB Sunken Ship", "JRB Sunken Ship"),
    ("MODEL_JRB_SUNKEN_SHIP_BACK", "JRB Sunken Ship Back", "JRB Sunken Ship Back"),
    ("MODEL_KING_BOBOMB", "King Bobomb", "King Bobomb"),
    ("MODEL_KLEPTO", "Klepto", "Klepto"),
    ("MODEL_KOOPA_FLAG", "Koopa Flag", "Koopa Flag"),
    ("MODEL_KOOPA_SHELL", "Koopa Shell", "Koopa Shell"),
    ("MODEL_KOOPA_WITH_SHELL", "Koopa With Shell", "Koopa With Shell"),
    ("MODEL_KOOPA_WITHOUT_SHELL", "Koopa Without Shell", "Koopa Without Shell"),
    ("MODEL_LLL_BOWSER_PIECE_1", "LLL Bowser Piece 1", "LLL Bowser Piece 1"),
    ("MODEL_LLL_BOWSER_PIECE_10", "LLL Bowser Piece 10", "LLL Bowser Piece 10"),
    ("MODEL_LLL_BOWSER_PIECE_11", "LLL Bowser Piece 11", "LLL Bowser Piece 11"),
    ("MODEL_LLL_BOWSER_PIECE_12", "LLL Bowser Piece 12", "LLL Bowser Piece 12"),
    ("MODEL_LLL_BOWSER_PIECE_13", "LLL Bowser Piece 13", "LLL Bowser Piece 13"),
    ("MODEL_LLL_BOWSER_PIECE_14", "LLL Bowser Piece 14", "LLL Bowser Piece 14"),
    ("MODEL_LLL_BOWSER_PIECE_2", "LLL Bowser Piece 2", "LLL Bowser Piece 2"),
    ("MODEL_LLL_BOWSER_PIECE_3", "LLL Bowser Piece 3", "LLL Bowser Piece 3"),
    ("MODEL_LLL_BOWSER_PIECE_4", "LLL Bowser Piece 4", "LLL Bowser Piece 4"),
    ("MODEL_LLL_BOWSER_PIECE_5", "LLL Bowser Piece 5", "LLL Bowser Piece 5"),
    ("MODEL_LLL_BOWSER_PIECE_6", "LLL Bowser Piece 6", "LLL Bowser Piece 6"),
    ("MODEL_LLL_BOWSER_PIECE_7", "LLL Bowser Piece 7", "LLL Bowser Piece 7"),
    ("MODEL_LLL_BOWSER_PIECE_8", "LLL Bowser Piece 8", "LLL Bowser Piece 8"),
    ("MODEL_LLL_BOWSER_PIECE_9", "LLL Bowser Piece 9", "LLL Bowser Piece 9"),
    ("MODEL_LLL_DRAWBRIDGE_PART", "LLL Drawbridge Part", "LLL Drawbridge Part"),
    ("MODEL_LLL_FALLING_PLATFORM", "LLL Falling Platform", "LLL Falling Platform"),
    ("MODEL_LLL_LARGE_FALLING_PLATFORM", "LLL Large Falling Platform", "LLL Large Falling Platform"),
    ("MODEL_LLL_LARGE_WOOD_BRIDGE", "LLL Large Wood Bridge", "LLL Large Wood Bridge"),
    (
        "MODEL_LLL_MOVING_OCTAGONAL_MESH_PLATFORM",
        "LLL Moving Octagonal Mesh Platform",
        "LLL Moving Octagonal Mesh Platform",
    ),
    ("MODEL_LLL_ROLLING_LOG", "LLL Rolling Log", "LLL Rolling Log"),
    ("MODEL_LLL_ROTATING_BLOCK_FIRE_BARS", "LLL Rotating Block Fire Bars", "LLL Rotating Block Fire Bars"),
    ("MODEL_LLL_ROTATING_HEXAGONAL_PLATFORM", "LLL Rotating Hexagonal Platform", "LLL Rotating Hexagonal Platform"),
    ("MODEL_LLL_ROTATING_HEXAGONAL_RING", "LLL Rotating Hexagonal Ring", "LLL Rotating Hexagonal Ring"),
    ("MODEL_LLL_SINKING_RECTANGULAR_PLATFORM", "LLL Sinking Rectangular Platform", "LLL Sinking Rectangular Platform"),
    ("MODEL_LLL_SINKING_ROCK_BLOCK", "LLL Sinking Rock Block", "LLL Sinking Rock Block"),
    ("MODEL_LLL_SINKING_SQUARE_PLATFORMS", "LLL Sinking Square Platforms", "LLL Sinking Square Platforms"),
    ("MODEL_LLL_TILTING_SQUARE_PLATFORM", "LLL Tilting Square Platform", "LLL Tilting Square Platform"),
    ("MODEL_LLL_VOLCANO_FALLING_TRAP", "LLL Volcano Falling Trap", "LLL Volcano Falling Trap"),
    ("MODEL_LLL_WOOD_BRIDGE", "LLL Wood Bridge", "LLL Wood Bridge"),
    ("MODEL_LAKITU", "Lakitu", "Lakitu"),
    ("MODEL_LEAVES", "Leaves", "Leaves"),
    ("MODEL_LEVEL_GEOMETRY_03", "Level Geometry 03", "Level Geometry 03"),
    ("MODEL_LEVEL_GEOMETRY_03", "Level Geometry 03", "Level Geometry 03"),
    ("MODEL_LEVEL_GEOMETRY_04", "Level Geometry 04", "Level Geometry 04"),
    ("MODEL_LEVEL_GEOMETRY_04", "Level Geometry 04", "Level Geometry 04"),
    ("MODEL_LEVEL_GEOMETRY_05", "Level Geometry 05", "Level Geometry 05"),
    ("MODEL_LEVEL_GEOMETRY_05", "Level Geometry 05", "Level Geometry 05"),
    ("MODEL_LEVEL_GEOMETRY_06", "Level Geometry 06", "Level Geometry 06"),
    ("MODEL_LEVEL_GEOMETRY_06", "Level Geometry 06", "Level Geometry 06"),
    ("MODEL_LEVEL_GEOMETRY_07", "Level Geometry 07", "Level Geometry 07"),
    ("MODEL_LEVEL_GEOMETRY_07", "Level Geometry 07", "Level Geometry 07"),
    ("MODEL_LEVEL_GEOMETRY_08", "Level Geometry 08", "Level Geometry 08"),
    ("MODEL_LEVEL_GEOMETRY_08", "Level Geometry 08", "Level Geometry 08"),
    ("MODEL_LEVEL_GEOMETRY_09", "Level Geometry 09", "Level Geometry 09"),
    ("MODEL_LEVEL_GEOMETRY_09", "Level Geometry 09", "Level Geometry 09"),
    ("MODEL_LEVEL_GEOMETRY_09", "Level Geometry 09", "Level Geometry 09"),
    ("MODEL_LEVEL_GEOMETRY_0A", "Level Geometry 0A", "Level Geometry 0A"),
    ("MODEL_LEVEL_GEOMETRY_0A", "Level Geometry 0A", "Level Geometry 0A"),
    ("MODEL_LEVEL_GEOMETRY_0B", "Level Geometry 0B", "Level Geometry 0B"),
    ("MODEL_LEVEL_GEOMETRY_0B", "Level Geometry 0B", "Level Geometry 0B"),
    ("MODEL_LEVEL_GEOMETRY_0C", "Level Geometry 0C", "Level Geometry 0C"),
    ("MODEL_LEVEL_GEOMETRY_0C", "Level Geometry 0C", "Level Geometry 0C"),
    ("MODEL_LEVEL_GEOMETRY_0D", "Level Geometry 0D", "Level Geometry 0D"),
    ("MODEL_LEVEL_GEOMETRY_0D", "Level Geometry 0D", "Level Geometry 0D"),
    ("MODEL_LEVEL_GEOMETRY_0E", "Level Geometry 0E", "Level Geometry 0E"),
    ("MODEL_LEVEL_GEOMETRY_0F", "Level Geometry 0F", "Level Geometry 0F"),
    ("MODEL_LEVEL_GEOMETRY_10", "Level Geometry 10", "Level Geometry 10"),
    ("MODEL_LEVEL_GEOMETRY_10", "Level Geometry 10", "Level Geometry 10"),
    ("MODEL_LEVEL_GEOMETRY_11", "Level Geometry 11", "Level Geometry 11"),
    ("MODEL_LEVEL_GEOMETRY_12", "Level Geometry 12", "Level Geometry 12"),
    ("MODEL_LEVEL_GEOMETRY_12", "Level Geometry 12", "Level Geometry 12"),
    ("MODEL_LEVEL_GEOMETRY_13", "Level Geometry 13", "Level Geometry 13"),
    ("MODEL_LEVEL_GEOMETRY_14", "Level Geometry 14", "Level Geometry 14"),
    ("MODEL_LEVEL_GEOMETRY_15", "Level Geometry 15", "Level Geometry 15"),
    ("MODEL_LEVEL_GEOMETRY_16", "Level Geometry 16", "Level Geometry 16"),
    ("MODEL_LEVEL_GEOMETRY_16", "Level Geometry 16", "Level Geometry 16"),
    ("MODEL_LEVEL_GEOMETRY_16", "Level Geometry 16", "Level Geometry 16"),
    ("MODEL_LEVEL_GEOMETRY_16", "Level Geometry 16", "Level Geometry 16"),
    ("MODEL_LUIGI", "Luigi", "Luigi"),
    ("MODEL_MAD_PIANO", "Mad Piano", "Mad Piano"),
    ("MODEL_MAIN_MENU_BLUE_COPY_BUTTON", "Main Menu Blue Copy Button", "Main Menu Blue Copy Button"),
    ("MODEL_MAIN_MENU_GENERIC_BUTTON", "Main Menu Generic Button", "Main Menu Generic Button"),
    ("MODEL_MAIN_MENU_GREEN_SCORE_BUTTON", "Main Menu Green Score Button", "Main Menu Green Score Button"),
    ("MODEL_MAIN_MENU_MARIO_NEW_BUTTON", "Main Menu Mario New Button", "Main Menu Mario New Button"),
    ("MODEL_MAIN_MENU_MARIO_NEW_BUTTON_FADE", "Main Menu Mario New Button Fade", "Main Menu Mario New Button Fade"),
    ("MODEL_MAIN_MENU_MARIO_SAVE_BUTTON", "Main Menu Mario Save Button", "Main Menu Mario Save Button"),
    ("MODEL_MAIN_MENU_MARIO_SAVE_BUTTON_FADE", "Main Menu Mario Save Button Fade", "Main Menu Mario Save Button Fade"),
    ("MODEL_MAIN_MENU_PURPLE_SOUND_BUTTON", "Main Menu Purple Sound Button", "Main Menu Purple Sound Button"),
    ("MODEL_MAIN_MENU_RED_ERASE_BUTTON", "Main Menu Red Erase Button", "Main Menu Red Erase Button"),
    ("MODEL_MAIN_MENU_YELLOW_FILE_BUTTON", "Main Menu Yellow File Button", "Main Menu Yellow File Button"),
    ("MODEL_MANTA_RAY", "Manta Ray", "Manta Ray"),
    ("MODEL_MARIO", "Mario", "Mario"),
    ("MODEL_MARIOS_CAP", "Mario's Cap", "Mario's Cap"),
    ("MODEL_MARIOS_METAL_CAP", "Mario's Metal Cap", "Mario's Metal Cap"),
    ("MODEL_MARIOS_WING_CAP", "Mario's Wing Cap", "Mario's Wing Cap"),
    ("MODEL_MARIOS_WINGED_METAL_CAP", "Mario's Winged Metal Cap", "Mario's Winged Metal Cap"),
    ("MODEL_METAL_BOX", "Metal Box", "Metal Box"),
    ("MODEL_METAL_BOX_DL", "Metal Box DL", "Metal Box DL"),
    ("MODEL_METALLIC_BALL", "Metallic Ball", "Metallic Ball"),
    ("MODEL_MIPS", "Mips", "Mips"),
    ("MODEL_MIST", "Mist", "Mist"),
    ("MODEL_MONEYBAG", "Moneybag", "Moneybag"),
    ("MODEL_MONTY_MOLE", "Monty Mole", "Monty Mole"),
    ("MODEL_MR_BLIZZARD", "Mr. Blizzard", "Mr. Blizzard"),
    ("MODEL_MR_BLIZZARD_HIDDEN", "Mr. Blizzard Hidden", "Mr. Blizzard Hidden"),
    ("MODEL_MR_I", "Mr. I", "Mr. I"),
    ("MODEL_MR_I_IRIS", "Mr. I Iris", "Mr. I Iris"),
    ("MODEL_NONE", "None", "None"),
    ("MODEL_NUMBER", "Number", "Number"),
    ("MODEL_PEACH", "Peach", "Peach"),
    ("MODEL_PEBBLE", "Pebble", "Pebble"),
    ("MODEL_PENGUIN", "Penguin", "Penguin"),
    ("MODEL_PIRANHA_PLANT", "Piranha Plant", "Piranha Plant"),
    ("MODEL_POKEY_BODY_PART", "Pokey Body Part", "Pokey Body Part"),
    ("MODEL_POKEY_HEAD", "Pokey Head", "Pokey Head"),
    ("MODEL_PURPLE_MARBLE", "Purple Marble", "Purple Marble"),
    ("MODEL_PURPLE_SWITCH", "Purple Switch", "Purple Switch"),
    ("MODEL_RR_CRUISER_WING", "RR Cruiser Wing", "RR Cruiser Wing"),
    ("MODEL_RR_DONUT_PLATFORM", "RR Donut Platform", "RR Donut Platform"),
    ("MODEL_RR_ELEVATOR_PLATFORM", "RR Elevator Platform", "RR Elevator Platform"),
    ("MODEL_RR_FLYING_CARPET", "RR Flying Carpet", "RR Flying Carpet"),
    ("MODEL_RR_L_SHAPED_PLATFORM", "RR L Shaped Platform", "RR L Shaped Platform"),
    ("MODEL_RR_OCTAGONAL_PLATFORM", "RR Octagonal Platform", "RR Octagonal Platform"),
    ("MODEL_RR_ROTATING_BRIDGE_PLATFORM", "RR Rotating Bridge Platform", "RR Rotating Bridge Platform"),
    ("MODEL_RR_SEESAW_PLATFORM", "RR Seesaw Platform", "RR Seesaw Platform"),
    ("MODEL_RR_SLIDING_PLATFORM", "RR Sliding Platform", "RR Sliding Platform"),
    ("MODEL_RR_SWINGING_PLATFORM", "RR Swinging Platform", "RR Swinging Platform"),
    ("MODEL_RR_TRIANGLE_PLATFORM", "RR Triangle Platform", "RR Triangle Platform"),
    ("MODEL_RR_TRICKY_TRIANGLES", "RR Tricky Triangles", "RR Tricky Triangles"),
    ("MODEL_RR_TRICKY_TRIANGLES_FRAME1", "RR Tricky Triangles Frame1", "RR Tricky Triangles Frame1"),
    ("MODEL_RR_TRICKY_TRIANGLES_FRAME2", "RR Tricky Triangles Frame2", "RR Tricky Triangles Frame2"),
    ("MODEL_RR_TRICKY_TRIANGLES_FRAME3", "RR Tricky Triangles Frame3", "RR Tricky Triangles Frame3"),
    ("MODEL_RR_TRICKY_TRIANGLES_FRAME4", "RR Tricky Triangles Frame4", "RR Tricky Triangles Frame4"),
    ("MODEL_RED_COIN", "Red Coin", "Red Coin"),
    ("MODEL_RED_COIN_NO_SHADOW", "Red Coin No Shadow", "Red Coin No Shadow"),
    ("MODEL_RED_FLAME", "Red Flame", "Red Flame"),
    ("MODEL_RED_FLAME_SHADOW", "Red Flame Shadow", "Red Flame Shadow"),
    ("MODEL_SL_CRACKED_ICE", "SL Cracked Ice", "SL Cracked Ice"),
    ("MODEL_SL_CRACKED_ICE_CHUNK", "SL Cracked Ice Chunk", "SL Cracked Ice Chunk"),
    ("MODEL_SL_SNOW_TREE", "SL Snow Tree", "SL Snow Tree"),
    ("MODEL_SL_SNOW_TRIANGLE", "SL Snow Triangle", "SL Snow Triangle"),
    ("MODEL_SSL_GRINDEL", "SSL Grindel", "SSL Grindel"),
    ("MODEL_SSL_MOVING_PYRAMID_WALL", "SSL Moving Pyramid Wall", "SSL Moving Pyramid Wall"),
    ("MODEL_SSL_PALM_TREE", "SSL Palm Tree", "SSL Palm Tree"),
    ("MODEL_SSL_PYRAMID_ELEVATOR", "SSL Pyramid Elevator", "SSL Pyramid Elevator"),
    ("MODEL_SSL_PYRAMID_TOP", "SSL Pyramid Top", "SSL Pyramid Top"),
    ("MODEL_SSL_SPINDEL", "SSL Spindel", "SSL Spindel"),
    ("MODEL_SSL_TOX_BOX", "SSL Tox Box", "SSL Tox Box"),
    ("MODEL_SAND_DUST", "Sand Dust", "Sand Dust"),
    ("MODEL_SCUTTLEBUG", "Scuttlebug", "Scuttlebug"),
    ("MODEL_SEAWEED", "Seaweed", "Seaweed"),
    ("MODEL_SKEETER", "Skeeter", "Skeeter"),
    ("MODEL_SMALL_WATER_SPLASH", "Small Water Splash", "Small Water Splash"),
    ("MODEL_SMOKE", "Smoke", "Smoke"),
    ("MODEL_SNUFIT", "Snufit", "Snufit"),
    ("MODEL_SPARKLES", "Sparkles", "Sparkles"),
    ("MODEL_SPARKLES_ANIMATION", "Sparkles Animation", "Sparkles Animation"),
    ("MODEL_SPINDRIFT", "Spindrift", "Spindrift"),
    ("MODEL_SPINY", "Spiny", "Spiny"),
    ("MODEL_SPINY_BALL", "Spiny Ball", "Spiny Ball"),
    ("MODEL_STAR", "Star", "Star"),
    ("MODEL_SUSHI", "Sushi", "Sushi"),
    ("MODEL_SWOOP", "Swoop", "Swoop"),
    ("MODEL_THI_BUBBLY_TREE", "THI Bubbly Tree", "THI Bubbly Tree"),
    ("MODEL_THI_HUGE_ISLAND_TOP", "THI Huge Island Top", "THI Huge Island Top"),
    ("MODEL_THI_TINY_ISLAND_TOP", "THI Tiny Island Top", "THI Tiny Island Top"),
    ("MODEL_THI_WARP_PIPE", "THI Warp Pipe", "THI Warp Pipe"),
    ("MODEL_TTC_CLOCK_HAND", "TTC Clock Hand", "TTC Clock Hand"),
    ("MODEL_TTC_ELEVATOR_PLATFORM", "TTC Elevator Platform", "TTC Elevator Platform"),
    ("MODEL_TTC_LARGE_GEAR", "TTC Large Gear", "TTC Large Gear"),
    ("MODEL_TTC_LARGE_TREADMILL", "TTC Large Treadmill", "TTC Large Treadmill"),
    ("MODEL_TTC_PENDULUM", "TTC Pendulum", "TTC Pendulum"),
    ("MODEL_TTC_PIT_BLOCK", "TTC Pit Block", "TTC Pit Block"),
    ("MODEL_TTC_PIT_BLOCK_UNUSED", "TTC Pit Block Unused", "TTC Pit Block Unused"),
    ("MODEL_TTC_PUSH_BLOCK", "TTC Push Block", "TTC Push Block"),
    ("MODEL_TTC_ROTATING_CUBE", "TTC Rotating Cube", "TTC Rotating Cube"),
    ("MODEL_TTC_ROTATING_HEXAGON", "TTC Rotating Hexagon", "TTC Rotating Hexagon"),
    ("MODEL_TTC_ROTATING_PRISM", "TTC Rotating Prism", "TTC Rotating Prism"),
    ("MODEL_TTC_ROTATING_TRIANGLE", "TTC Rotating Triangle", "TTC Rotating Triangle"),
    ("MODEL_TTC_SMALL_GEAR", "TTC Small Gear", "TTC Small Gear"),
    ("MODEL_TTC_SMALL_TREADMILL", "TTC Small Treadmill", "TTC Small Treadmill"),
    ("MODEL_TTC_SPINNER", "TTC Spinner", "TTC Spinner"),
    ("MODEL_TTM_BLUE_SMILEY", "TTM Blue Smiley", "TTM Blue Smiley"),
    ("MODEL_TTM_MOON_SMILEY", "TTM Moon Smiley", "TTM Moon Smiley"),
    ("MODEL_TTM_ROLLING_LOG", "TTM Rolling Log", "TTM Rolling Log"),
    ("MODEL_TTM_SLIDE_EXIT_PODIUM", "TTM Slide Exit Podium", "TTM Slide Exit Podium"),
    ("MODEL_TTM_STAR_CAGE", "TTM Star Cage", "TTM Star Cage"),
    ("MODEL_TTM_STAR_SMILEY", "TTM Star Smiley", "TTM Star Smiley"),
    ("MODEL_TTM_YELLOW_SMILEY", "TTM Yellow Smiley", "TTM Yellow Smiley"),
    ("MODEL_THWOMP", "Thwomp", "Thwomp"),
    ("MODEL_TOAD", "Toad", "Toad"),
    ("MODEL_TRAJECTORY_MARKER_BALL", "Trajectory Marker Ball", "Trajectory Marker Ball"),
    ("MODEL_TRAMPOLINE", "Trampoline", "Trampoline"),
    ("MODEL_TRAMPOLINE_BASE", "Trampoline Base", "Trampoline Base"),
    ("MODEL_TRAMPOLINE_CENTER", "Trampoline Center", "Trampoline Center"),
    ("MODEL_TRANSPARENT_STAR", "Transparent Star", "Transparent Star"),
    ("MODEL_TREASURE_CHEST_BASE", "Treasure Chest Base", "Treasure Chest Base"),
    ("MODEL_TREASURE_CHEST_LID", "Treasure Chest Lid", "Treasure Chest Lid"),
    ("MODEL_TWEESTER", "Tweester", "Tweester"),
    ("MODEL_UKIKI", "Ukiki", "Ukiki"),
    ("MODEL_UNAGI", "Unagi", "Unagi"),
    ("MODEL_UNKNOWN_54", "Unknown 54", "Unknown 54"),
    ("MODEL_UNKNOWN_58", "Unknown 58", "Unknown 58"),
    ("MODEL_UNKNOWN_7D", "Unknown 7D", "Unknown 7D"),
    ("MODEL_UNKNOWN_AC", "Unknown AC", "Unknown AC"),
    ("MODEL_UNKNOWN_B8", "Unknown B8", "Unknown B8"),
    ("MODEL_UNKNOWN_DOOR_1E", "Unknown Door 1E", "Unknown Door 1E"),
    ("MODEL_UNKNOWN_DOOR_21", "Unknown Door 21", "Unknown Door 21"),
    ("MODEL_UNKNOWN_DOOR_28", "Unknown Door 28", "Unknown Door 28"),
    ("MODEL_UNKNOWN_DOOR_2A", "Unknown Door 2A", "Unknown Door 2A"),
    ("MODEL_UNKNOWN_DOOR_2B", "Unknown Door 2B", "Unknown Door 2B"),
    ("MODEL_UNKNOWN_TREE_1A", "Unknown Tree 1A", "Unknown Tree 1A"),
    (
        "MODEL_VCUTM_CHECKERBOARD_PLATFORM_SPAWNER",
        "Vcutm Checkerboard Platform Spawner",
        "Vcutm Checkerboard Platform Spawner",
    ),
    ("MODEL_VCUTM_SEESAW_PLATFORM", "Vcutm Seesaw Platform", "Vcutm Seesaw Platform"),
    ("MODEL_VCUTM_WARP_PIPE", "Vcutm Warp Pipe", "Vcutm Warp Pipe"),
    ("MODEL_WDW_ARROW_LIFT", "WDW Arrow Lift", "WDW Arrow Lift"),
    ("MODEL_WDW_BUBBLY_TREE", "WDW Bubbly Tree", "WDW Bubbly Tree"),
    ("MODEL_WDW_EXPRESS_ELEVATOR", "WDW Express Elevator", "WDW Express Elevator"),
    ("MODEL_WDW_HIDDEN_PLATFORM", "WDW Hidden Platform", "WDW Hidden Platform"),
    (
        "MODEL_WDW_RECTANGULAR_FLOATING_PLATFORM",
        "WDW Rectangular Floating Platform",
        "WDW Rectangular Floating Platform",
    ),
    ("MODEL_WDW_ROTATING_PLATFORM", "WDW Rotating Platform", "WDW Rotating Platform"),
    ("MODEL_WDW_SQUARE_FLOATING_PLATFORM", "WDW Square Floating Platform", "WDW Square Floating Platform"),
    ("MODEL_WDW_WATER_LEVEL_DIAMOND", "WDW Water Level Diamond", "WDW Water Level Diamond"),
    ("MODEL_WF_BREAKABLE_WALL_LEFT", "WF Breakable Wall Left", "WF Breakable Wall Left"),
    ("MODEL_WF_BREAKABLE_WALL_RIGHT", "WF Breakable Wall Right", "WF Breakable Wall Right"),
    ("MODEL_WF_BUBBLY_TREE", "WF Bubbly Tree", "WF Bubbly Tree"),
    ("MODEL_WF_GIANT_POLE", "WF Giant Pole", "WF Giant Pole"),
    ("MODEL_WF_KICKABLE_BOARD", "WF Kickable Board", "WF Kickable Board"),
    ("MODEL_WF_KICKABLE_BOARD_FELLED", "WF Kickable Board Felled", "WF Kickable Board Felled"),
    ("MODEL_WF_LARGE_BOMP", "WF Large Bomp", "WF Large Bomp"),
    ("MODEL_WF_ROTATING_PLATFORM", "WF Rotating Platform", "WF Rotating Platform"),
    ("MODEL_WF_ROTATING_WOODEN_PLATFORM", "WF Rotating Wooden Platform", "WF Rotating Wooden Platform"),
    ("MODEL_WF_SLIDING_PLATFORM", "WF Sliding Platform", "WF Sliding Platform"),
    ("MODEL_WF_SMALL_BOMP", "WF Small Bomp", "WF Small Bomp"),
    ("MODEL_WF_TOWER_DOOR", "WF Tower Door", "WF Tower Door"),
    ("MODEL_WF_TOWER_SQUARE_PLATORM", "WF Tower Square Platorm", "WF Tower Square Platorm"),
    ("MODEL_WF_TOWER_SQUARE_PLATORM_ELEVATOR", "WF Tower Square Platorm Elevator", "WF Tower Square Platorm Elevator"),
    ("MODEL_WF_TOWER_SQUARE_PLATORM_UNUSED", "WF Tower Square Platorm Unused", "WF Tower Square Platorm Unused"),
    ("MODEL_WF_TOWER_TRAPEZOID_PLATORM", "WF Tower Trapezoid Platorm", "WF Tower Trapezoid Platorm"),
    ("MODEL_WF_TUMBLING_BRIDGE", "WF Tumbling Bridge", "WF Tumbling Bridge"),
    ("MODEL_WF_TUMBLING_BRIDGE_PART", "WF Tumbling Bridge Part", "WF Tumbling Bridge Part"),
    ("MODEL_WATER_BOMB", "Water Bomb", "Water Bomb"),
    ("MODEL_WATER_BOMB_SHADOW", "Water Bomb Shadow", "Water Bomb Shadow"),
    ("MODEL_WATER_MINE", "Water Mine", "Water Mine"),
    ("MODEL_WATER_RING", "Water Ring", "Water Ring"),
    ("MODEL_WATER_SPLASH", "Water Splash", "Water Splash"),
    ("MODEL_WAVE_TRAIL", "Wave Trail", "Wave Trail"),
    ("MODEL_WHITE_PARTICLE", "White Particle", "White Particle"),
    ("MODEL_WHITE_PARTICLE_DL", "White Particle DL", "White Particle DL"),
    ("MODEL_WHITE_PARTICLE_SMALL", "White Particle Small", "White Particle Small"),
    ("MODEL_WHITE_PUFF", "White Puff", "White Puff"),
    ("MODEL_WHOMP", "Whomp", "Whomp"),
    ("MODEL_WIGGLER_BODY", "Wiggler Body", "Wiggler Body"),
    ("MODEL_WIGGLER_HEAD", "Wiggler Head", "Wiggler Head"),
    ("MODEL_WOODEN_POST", "Wooden Post", "Wooden Post"),
    ("MODEL_WOODEN_SIGNPOST", "Wooden Signpost", "Wooden Signpost"),
    ("MODEL_YELLOW_COIN", "Yellow Coin", "Yellow Coin"),
    ("MODEL_YELLOW_COIN_NO_SHADOW", "Yellow Coin No Shadow", "Yellow Coin No Shadow"),
    ("MODEL_YELLOW_SPHERE", "Yellow Sphere", "Yellow Sphere"),
    ("MODEL_YOSHI", "Yoshi", "Yoshi"),
    ("MODEL_YOSHI_EGG", "Yoshi Egg", "Yoshi Egg"),
]
enumSpecialsNames = [
    ("Custom", "Custom", "Custom"),
    ("special_0stars_door", "0 Stars Door", "0 Stars Door"),
    ("special_1star_door", "1 Star Door", "1 Star Door"),
    ("special_3star_door", "3 Star Door", "3 Star Door"),
    ("special_big_bully", "Big Bully", "Big Bully"),
    ("special_boo", "Boo", "Boo"),
    ("special_bowser", "Bowser", "Bowser"),
    ("special_bubble_tree", "Bubble Tree", "Bubble Tree"),
    ("special_butterfly", "Butterfly", "Butterfly"),
    ("special_castle_door", "Castle Door", "Castle Door"),
    ("special_castle_door_warp", "Castle Door Warp", "Castle Door Warp"),
    ("special_empty_21", "Empty 21", "Empty 21"),
    ("special_empty_22", "Empty 22", "Empty 22"),
    ("special_empty_23", "Empty 23", "Empty 23"),
    ("special_empty_24", "Empty 24", "Empty 24"),
    ("special_empty_25", "Empty 25", "Empty 25"),
    ("special_empty_30", "Empty 30", "Empty 30"),
    ("special_empty_31", "Empty 31", "Empty 31"),
    ("special_empty_9", "Empty 9", "Empty 9"),
    ("special_hmc_door", "HMC Door", "HMC Door"),
    ("special_haunted_door", "Haunted Door", "Haunted Door"),
    ("special_jrb_chest", "JRB Chest", "JRB Chest"),
    ("special_key_door", "Key Door", "Key Door"),
    ("special_lll_bowser_puzzle", "LLL Bowser Puzzle", "LLL Bowser Puzzle"),
    ("special_lll_drawbridge_spawner", "LLL Drawbridge Spawner", "LLL Drawbridge Spawner"),
    ("special_lll_floating_wood_bridge", "LLL Floating Wood Bridge", "LLL Floating Wood Bridge"),
    (
        "special_lll_moving_octagonal_mesh_platform",
        "LLL Moving Octagonal Mesh Platform",
        "LLL Moving Octagonal Mesh Platform",
    ),
    (
        "special_lll_rotating_block_with_fire_bars",
        "LLL Rotating Block With Fire Bars",
        "LLL Rotating Block With Fire Bars",
    ),
    ("special_lll_rotating_hexagonal_ring", "LLL Rotating Hexagonal Ring", "LLL Rotating Hexagonal Ring"),
    (
        "special_lll_sinking_rectangular_platform",
        "LLL Sinking Rectangular Platform",
        "LLL Sinking Rectangular Platform",
    ),
    ("special_lll_sinking_square_platforms", "LLL Sinking Square Platforms", "LLL Sinking Square Platforms"),
    ("special_lll_tilting_square_platform", "LLL Tilting Square Platform", "LLL Tilting Square Platform"),
    ("special_large_bomp", "Large Bomp", "Large Bomp"),
    ("special_level_geo_03", "Level Geo 03", "Level Geo 03"),
    ("special_level_geo_04", "Level Geo 04", "Level Geo 04"),
    ("special_level_geo_05", "Level Geo 05", "Level Geo 05"),
    ("special_level_geo_06", "Level Geo 06", "Level Geo 06"),
    ("special_level_geo_07", "Level Geo 07", "Level Geo 07"),
    ("special_level_geo_08", "Level Geo 08", "Level Geo 08"),
    ("special_level_geo_09", "Level Geo 09", "Level Geo 09"),
    ("special_level_geo_0A", "Level Geo 0A", "Level Geo 0A"),
    ("special_level_geo_0B", "Level Geo 0B", "Level Geo 0B"),
    ("special_level_geo_0C", "Level Geo 0C", "Level Geo 0C"),
    ("special_level_geo_0D", "Level Geo 0D", "Level Geo 0D"),
    ("special_level_geo_0E", "Level Geo 0E", "Level Geo 0E"),
    ("special_level_geo_0F", "Level Geo 0F", "Level Geo 0F"),
    ("special_level_geo_10", "Level Geo 10", "Level Geo 10"),
    ("special_level_geo_11", "Level Geo 11", "Level Geo 11"),
    ("special_level_geo_12", "Level Geo 12", "Level Geo 12"),
    ("special_level_geo_13", "Level Geo 13", "Level Geo 13"),
    ("special_level_geo_14", "Level Geo 14", "Level Geo 14"),
    ("special_level_geo_15", "Level Geo 15", "Level Geo 15"),
    ("special_level_geo_16", "Level Geo 16", "Level Geo 16"),
    ("special_metal_door", "Metal Door", "Metal Door"),
    ("special_metal_door_warp", "Metal Door Warp", "Metal Door Warp"),
    ("special_mine", "Mine", "Mine"),
    ("special_moving_blue_coin", "Moving Blue Coin", "Moving Blue Coin"),
    ("special_mr_i", "Mr. I", "Mr. I"),
    ("special_null_end", "Null End", "Null End"),
    ("special_null_start", "Null Start", "Null Start"),
    ("special_palm_tree", "Palm Tree", "Palm Tree"),
    ("special_rotating_counter_clockwise", "Rotating Counter Clockwise", "Rotating Counter Clockwise"),
    ("special_small_bomp", "Small Bomp", "Small Bomp"),
    ("special_small_bully", "Small Bully", "Small Bully"),
    ("special_snow_ball", "Snow Ball", "Snow Ball"),
    ("special_snow_tree", "Snow Tree", "Snow Tree"),
    ("special_spiky_tree", "Spiky Tree", "Spiky Tree"),
    ("special_tower_platform_group", "Tower Platform Group", "Tower Platform Group"),
    ("special_tumbling_platform", "Tumbling Platform", "Tumbling Platform"),
    ("special_unknown_3", "Unknown 3", "Unknown 3"),
    ("special_unknown_5", "Unknown 5", "Unknown 5"),
    ("special_unknown_door", "Unknown Door", "Unknown Door"),
    ("special_unknown_tree", "Unknown Tree", "Unknown Tree"),
    ("special_unknown1_door_warp", "Unknown1 Door Warp", "Unknown1 Door Warp"),
    ("special_unknown2_door", "Unknown2 Door", "Unknown2 Door"),
    ("special_unknown2_door_warp", "Unknown2 Door Warp", "Unknown2 Door Warp"),
    ("special_unknown3_door_warp", "Unknown3 Door Warp", "Unknown3 Door Warp"),
    ("special_wf_rotating_wooden_platform", "WF Rotating Wooden Platform", "WF Rotating Wooden Platform"),
    ("special_wf_sliding_platform", "WF Sliding Platform", "WF Sliding Platform"),
    ("special_wf_tumbling_bridge", "WF Tumbling Bridge", "WF Tumbling Bridge"),
    ("special_water_ring", "Water Ring", "Water Ring"),
    ("special_wooden_door", "Wooden Door", "Wooden Door"),
    ("special_wooden_door", "Wooden Door", "Wooden Door"),
    ("special_wooden_door_warp", "Wooden Door Warp", "Wooden Door Warp"),
    ("special_yellow_coin", "Yellow Coin", "Yellow Coin"),
    ("special_yellow_coin_2", "Yellow Coin 2", "Yellow Coin 2"),
]
enumMacrosNames = [
    ("Custom", "Custom", "Custom"),
    ("macro_1up", "1 Up", "1 Up"),
    ("macro_1up_2", "1 Up 2", "1 Up 2"),
    ("macro_1up_3", "1 Up 3", "1 Up 3"),
    ("macro_1up_jump_on_approach", "1 Up Jump On Approach", "1 Up Jump On Approach"),
    ("macro_1up_sliding", "1 Up Sliding", "1 Up Sliding"),
    ("macro_bits_arrow_platform", "BITS Arrow Platform", "BITS Arrow Platform"),
    ("macro_bits_ferris_wheel_axle", "BITS Ferris Wheel Axle", "BITS Ferris Wheel Axle"),
    ("macro_bits_octagonal_platform", "BITS Octagonal Platform", "BITS Octagonal Platform"),
    ("macro_bits_seesaw_platform", "BITS Seesaw Platform", "BITS Seesaw Platform"),
    ("macro_bits_sliding_platform", "BITS Sliding Platform", "BITS Sliding Platform"),
    ("macro_bits_staircase", "BITS Staircase", "BITS Staircase"),
    ("macro_bits_tilting_w_platform", "BITS Tilting W Platform", "BITS Tilting W Platform"),
    ("macro_bits_twin_sliding_platforms", "BITS Twin Sliding Platforms", "BITS Twin Sliding Platforms"),
    ("macro_bits_unknown_352", "BITS Unknown 352", "BITS Unknown 352"),
    ("macro_beta_chest", "Beta Chest", "Beta Chest"),
    ("macro_beta_key", "Beta Key", "Beta Key"),
    ("macro_blue_coin_switch", "Blue Coin Switch", "Blue Coin Switch"),
    ("macro_bob_koopa_the_quick", "Bob Koopa The Quick", "Bob Koopa The Quick"),
    ("macro_bobomb", "Bobomb", "Bobomb"),
    ("macro_bobomb_buddy_opens_cannon", "Bobomb Buddy Opens Cannon", "Bobomb Buddy Opens Cannon"),
    ("macro_bobomb_buddy_opens_cannon_copy", "Bobomb Buddy Opens Cannon Copy", "Bobomb Buddy Opens Cannon Copy"),
    ("macro_bobomb_still", "Bobomb Still", "Bobomb Still"),
    ("macro_boo", "Boo", "Boo"),
    ("macro_boo_copy", "Boo Copy", "Boo Copy"),
    ("macro_boo_group", "Boo Group", "Boo Group"),
    ("macro_boo_with_cage", "Boo With Cage", "Boo With Cage"),
    ("macro_bouncing_fireball", "Bouncing Fireball", "Bouncing Fireball"),
    ("macro_bouncing_fireball_copy", "Bouncing Fireball Copy", "Bouncing Fireball Copy"),
    ("macro_box_1up", "Box 1 Up", "Box 1 Up"),
    ("macro_box_1up_running_away", "Box 1 Up Running Away", "Box 1 Up Running Away"),
    ("macro_box_koopa_shell", "Box Koopa Shell", "Box Koopa Shell"),
    ("macro_box_metal_cap", "Box Metal Cap", "Box Metal Cap"),
    ("macro_box_one_coin", "Box One Coin", "Box One Coin"),
    ("macro_box_star_1", "Box Star 1", "Box Star 1"),
    ("macro_box_star_2", "Box Star 2", "Box Star 2"),
    ("macro_box_star_3", "Box Star 3", "Box Star 3"),
    ("macro_box_star_4", "Box Star 4", "Box Star 4"),
    ("macro_box_star_5", "Box Star 5", "Box Star 5"),
    ("macro_box_star_6", "Box Star 6", "Box Star 6"),
    ("macro_box_ten_coins", "Box Ten Coins", "Box Ten Coins"),
    ("macro_box_three_coins", "Box Three Coins", "Box Three Coins"),
    ("macro_box_vanish_cap", "Box Vanish Cap", "Box Vanish Cap"),
    ("macro_box_wing_cap", "Box Wing Cap", "Box Wing Cap"),
    ("macro_breakable_box_giant", "Breakable Box Giant", "Breakable Box Giant"),
    ("macro_breakable_box_no_coins", "Breakable Box No Coins", "Breakable Box No Coins"),
    ("macro_breakable_box_small", "Breakable Box Small", "Breakable Box Small"),
    ("macro_breakable_box_three_coins", "Breakable Box Three Coins", "Breakable Box Three Coins"),
    ("macro_bullet_bill_cannon", "Bullet Bill Cannon", "Bullet Bill Cannon"),
    ("macro_bully", "Bully", "Bully"),
    ("macro_bully_2", "Bully 2", "Bully 2"),
    ("macro_butterfly", "Butterfly", "Butterfly"),
    ("macro_butterfly_triplet", "Butterfly Triplet", "Butterfly Triplet"),
    ("macro_butterfly_triplet_2", "Butterfly Triplet 2", "Butterfly Triplet 2"),
    ("macro_cannon_closed", "Cannon Closed", "Cannon Closed"),
    ("macro_cannon_open", "Cannon Open", "Cannon Open"),
    ("macro_chain_chomp", "Chain Chomp", "Chain Chomp"),
    ("macro_chirp_chirp", "Chirp Chirp", "Chirp Chirp"),
    ("macro_chuckya", "Chuckya", "Chuckya"),
    ("macro_circling_amp", "Circling Amp", "Circling Amp"),
    ("macro_clam_shell", "Clam Shell", "Clam Shell"),
    ("macro_coin_arrow", "Coin Arrow", "Coin Arrow"),
    ("macro_coin_arrow_flying", "Coin Arrow Flying", "Coin Arrow Flying"),
    ("macro_coin_line_horizontal", "Coin Line Horizontal", "Coin Line Horizontal"),
    ("macro_coin_line_horizontal_flying", "Coin Line Horizontal Flying", "Coin Line Horizontal Flying"),
    ("macro_coin_line_vertical", "Coin Line Vertical", "Coin Line Vertical"),
    ("macro_coin_ring_horizontal", "Coin Ring Horizontal", "Coin Ring Horizontal"),
    ("macro_coin_ring_horizontal_flying", "Coin Ring Horizontal Flying", "Coin Ring Horizontal Flying"),
    ("macro_coin_ring_vertical", "Coin Ring Vertical", "Coin Ring Vertical"),
    ("macro_empty_100", "Empty 100", "Empty 100"),
    ("macro_empty_101", "Empty 101", "Empty 101"),
    ("macro_empty_102", "Empty 102", "Empty 102"),
    ("macro_empty_103", "Empty 103", "Empty 103"),
    ("macro_empty_104", "Empty 104", "Empty 104"),
    ("macro_empty_105", "Empty 105", "Empty 105"),
    ("macro_empty_116", "Empty 116", "Empty 116"),
    ("macro_empty_117", "Empty 117", "Empty 117"),
    ("macro_empty_118", "Empty 118", "Empty 118"),
    ("macro_empty_119", "Empty 119", "Empty 119"),
    ("macro_empty_120", "Empty 120", "Empty 120"),
    ("macro_empty_121", "Empty 121", "Empty 121"),
    ("macro_empty_122", "Empty 122", "Empty 122"),
    ("macro_empty_124", "Empty 124", "Empty 124"),
    ("macro_empty_127", "Empty 127", "Empty 127"),
    ("macro_empty_128", "Empty 128", "Empty 128"),
    ("macro_empty_129", "Empty 129", "Empty 129"),
    ("macro_empty_130", "Empty 130", "Empty 130"),
    ("macro_empty_131", "Empty 131", "Empty 131"),
    ("macro_empty_132", "Empty 132", "Empty 132"),
    ("macro_empty_133", "Empty 133", "Empty 133"),
    ("macro_empty_134", "Empty 134", "Empty 134"),
    ("macro_empty_135", "Empty 135", "Empty 135"),
    ("macro_empty_136", "Empty 136", "Empty 136"),
    ("macro_empty_142", "Empty 142", "Empty 142"),
    ("macro_empty_143", "Empty 143", "Empty 143"),
    ("macro_empty_144", "Empty 144", "Empty 144"),
    ("macro_empty_145", "Empty 145", "Empty 145"),
    ("macro_empty_146", "Empty 146", "Empty 146"),
    ("macro_empty_147", "Empty 147", "Empty 147"),
    ("macro_empty_148", "Empty 148", "Empty 148"),
    ("macro_empty_149", "Empty 149", "Empty 149"),
    ("macro_empty_15", "Empty 15", "Empty 15"),
    ("macro_empty_150", "Empty 150", "Empty 150"),
    ("macro_empty_155", "Empty 155", "Empty 155"),
    ("macro_empty_157", "Empty 157", "Empty 157"),
    ("macro_empty_158", "Empty 158", "Empty 158"),
    ("macro_empty_159", "Empty 159", "Empty 159"),
    ("macro_empty_16", "Empty 16", "Empty 16"),
    ("macro_empty_160", "Empty 160", "Empty 160"),
    ("macro_empty_161", "Empty 161", "Empty 161"),
    ("macro_empty_162", "Empty 162", "Empty 162"),
    ("macro_empty_163", "Empty 163", "Empty 163"),
    ("macro_empty_164", "Empty 164", "Empty 164"),
    ("macro_empty_168", "Empty 168", "Empty 168"),
    ("macro_empty_17", "Empty 17", "Empty 17"),
    ("macro_empty_173", "Empty 173", "Empty 173"),
    ("macro_empty_174", "Empty 174", "Empty 174"),
    ("macro_empty_175", "Empty 175", "Empty 175"),
    ("macro_empty_176", "Empty 176", "Empty 176"),
    ("macro_empty_177", "Empty 177", "Empty 177"),
    ("macro_empty_178", "Empty 178", "Empty 178"),
    ("macro_empty_179", "Empty 179", "Empty 179"),
    ("macro_empty_18", "Empty 18", "Empty 18"),
    ("macro_empty_180", "Empty 180", "Empty 180"),
    ("macro_empty_181", "Empty 181", "Empty 181"),
    ("macro_empty_182", "Empty 182", "Empty 182"),
    ("macro_empty_183", "Empty 183", "Empty 183"),
    ("macro_empty_184", "Empty 184", "Empty 184"),
    ("macro_empty_185", "Empty 185", "Empty 185"),
    ("macro_empty_186", "Empty 186", "Empty 186"),
    ("macro_empty_187", "Empty 187", "Empty 187"),
    ("macro_empty_188", "Empty 188", "Empty 188"),
    ("macro_empty_19", "Empty 19", "Empty 19"),
    ("macro_empty_197", "Empty 197", "Empty 197"),
    ("macro_empty_198", "Empty 198", "Empty 198"),
    ("macro_empty_199", "Empty 199", "Empty 199"),
    ("macro_empty_200", "Empty 200", "Empty 200"),
    ("macro_empty_201", "Empty 201", "Empty 201"),
    ("macro_empty_202", "Empty 202", "Empty 202"),
    ("macro_empty_203", "Empty 203", "Empty 203"),
    ("macro_empty_204", "Empty 204", "Empty 204"),
    ("macro_empty_205", "Empty 205", "Empty 205"),
    ("macro_empty_206", "Empty 206", "Empty 206"),
    ("macro_empty_207", "Empty 207", "Empty 207"),
    ("macro_empty_208", "Empty 208", "Empty 208"),
    ("macro_empty_209", "Empty 209", "Empty 209"),
    ("macro_empty_210", "Empty 210", "Empty 210"),
    ("macro_empty_211", "Empty 211", "Empty 211"),
    ("macro_empty_212", "Empty 212", "Empty 212"),
    ("macro_empty_213", "Empty 213", "Empty 213"),
    ("macro_empty_214", "Empty 214", "Empty 214"),
    ("macro_empty_215", "Empty 215", "Empty 215"),
    ("macro_empty_216", "Empty 216", "Empty 216"),
    ("macro_empty_217", "Empty 217", "Empty 217"),
    ("macro_empty_218", "Empty 218", "Empty 218"),
    ("macro_empty_219", "Empty 219", "Empty 219"),
    ("macro_empty_220", "Empty 220", "Empty 220"),
    ("macro_empty_221", "Empty 221", "Empty 221"),
    ("macro_empty_222", "Empty 222", "Empty 222"),
    ("macro_empty_223", "Empty 223", "Empty 223"),
    ("macro_empty_224", "Empty 224", "Empty 224"),
    ("macro_empty_225", "Empty 225", "Empty 225"),
    ("macro_empty_226", "Empty 226", "Empty 226"),
    ("macro_empty_227", "Empty 227", "Empty 227"),
    ("macro_empty_228", "Empty 228", "Empty 228"),
    ("macro_empty_229", "Empty 229", "Empty 229"),
    ("macro_empty_230", "Empty 230", "Empty 230"),
    ("macro_empty_231", "Empty 231", "Empty 231"),
    ("macro_empty_232", "Empty 232", "Empty 232"),
    ("macro_empty_233", "Empty 233", "Empty 233"),
    ("macro_empty_244", "Empty 244", "Empty 244"),
    ("macro_empty_245", "Empty 245", "Empty 245"),
    ("macro_empty_246", "Empty 246", "Empty 246"),
    ("macro_empty_247", "Empty 247", "Empty 247"),
    ("macro_empty_248", "Empty 248", "Empty 248"),
    ("macro_empty_249", "Empty 249", "Empty 249"),
    ("macro_empty_250", "Empty 250", "Empty 250"),
    ("macro_empty_254", "Empty 254", "Empty 254"),
    ("macro_empty_257", "Empty 257", "Empty 257"),
    ("macro_empty_264", "Empty 264", "Empty 264"),
    ("macro_empty_265", "Empty 265", "Empty 265"),
    ("macro_empty_266", "Empty 266", "Empty 266"),
    ("macro_empty_267", "Empty 267", "Empty 267"),
    ("macro_empty_268", "Empty 268", "Empty 268"),
    ("macro_empty_269", "Empty 269", "Empty 269"),
    ("macro_empty_270", "Empty 270", "Empty 270"),
    ("macro_empty_271", "Empty 271", "Empty 271"),
    ("macro_empty_272", "Empty 272", "Empty 272"),
    ("macro_empty_273", "Empty 273", "Empty 273"),
    ("macro_empty_274", "Empty 274", "Empty 274"),
    ("macro_empty_275", "Empty 275", "Empty 275"),
    ("macro_empty_276", "Empty 276", "Empty 276"),
    ("macro_empty_277", "Empty 277", "Empty 277"),
    ("macro_empty_278", "Empty 278", "Empty 278"),
    ("macro_empty_279", "Empty 279", "Empty 279"),
    ("macro_empty_280", "Empty 280", "Empty 280"),
    ("macro_empty_282", "Empty 282", "Empty 282"),
    ("macro_empty_283", "Empty 283", "Empty 283"),
    ("macro_empty_284", "Empty 284", "Empty 284"),
    ("macro_empty_285", "Empty 285", "Empty 285"),
    ("macro_empty_286", "Empty 286", "Empty 286"),
    ("macro_empty_287", "Empty 287", "Empty 287"),
    ("macro_empty_288", "Empty 288", "Empty 288"),
    ("macro_empty_294", "Empty 294", "Empty 294"),
    ("macro_empty_295", "Empty 295", "Empty 295"),
    ("macro_empty_296", "Empty 296", "Empty 296"),
    ("macro_empty_297", "Empty 297", "Empty 297"),
    ("macro_empty_298", "Empty 298", "Empty 298"),
    ("macro_empty_299", "Empty 299", "Empty 299"),
    ("macro_empty_300", "Empty 300", "Empty 300"),
    ("macro_empty_301", "Empty 301", "Empty 301"),
    ("macro_empty_302", "Empty 302", "Empty 302"),
    ("macro_empty_304", "Empty 304", "Empty 304"),
    ("macro_empty_305", "Empty 305", "Empty 305"),
    ("macro_empty_306", "Empty 306", "Empty 306"),
    ("macro_empty_307", "Empty 307", "Empty 307"),
    ("macro_empty_308", "Empty 308", "Empty 308"),
    ("macro_empty_309", "Empty 309", "Empty 309"),
    ("macro_empty_310", "Empty 310", "Empty 310"),
    ("macro_empty_311", "Empty 311", "Empty 311"),
    ("macro_empty_312", "Empty 312", "Empty 312"),
    ("macro_empty_330", "Empty 330", "Empty 330"),
    ("macro_empty_331", "Empty 331", "Empty 331"),
    ("macro_empty_332", "Empty 332", "Empty 332"),
    ("macro_empty_333", "Empty 333", "Empty 333"),
    ("macro_empty_334", "Empty 334", "Empty 334"),
    ("macro_empty_335", "Empty 335", "Empty 335"),
    ("macro_empty_336", "Empty 336", "Empty 336"),
    ("macro_empty_337", "Empty 337", "Empty 337"),
    ("macro_empty_338", "Empty 338", "Empty 338"),
    ("macro_empty_344", "Empty 344", "Empty 344"),
    ("macro_empty_345", "Empty 345", "Empty 345"),
    ("macro_empty_346", "Empty 346", "Empty 346"),
    ("macro_empty_347", "Empty 347", "Empty 347"),
    ("macro_empty_348", "Empty 348", "Empty 348"),
    ("macro_empty_349", "Empty 349", "Empty 349"),
    ("macro_empty_355", "Empty 355", "Empty 355"),
    ("macro_empty_356", "Empty 356", "Empty 356"),
    ("macro_empty_361", "Empty 361", "Empty 361"),
    ("macro_empty_362", "Empty 362", "Empty 362"),
    ("macro_empty_363", "Empty 363", "Empty 363"),
    ("macro_empty_364", "Empty 364", "Empty 364"),
    ("macro_empty_365", "Empty 365", "Empty 365"),
    ("macro_empty_5", "Empty 5", "Empty 5"),
    ("macro_empty_52", "Empty 52", "Empty 52"),
    ("macro_empty_80", "Empty 80", "Empty 80"),
    ("macro_empty_83", "Empty 83", "Empty 83"),
    ("macro_empty_90", "Empty 90", "Empty 90"),
    ("macro_empty_91", "Empty 91", "Empty 91"),
    ("macro_empty_92", "Empty 92", "Empty 92"),
    ("macro_empty_95", "Empty 95", "Empty 95"),
    ("macro_empty_99", "Empty 99", "Empty 99"),
    ("macro_enemy_lakitu", "Enemy Lakitu", "Enemy Lakitu"),
    ("macro_fake_star", "Fake Star", "Fake Star"),
    ("macro_fire_fly_guy", "Fire Fly Guy", "Fire Fly Guy"),
    ("macro_fire_piranha_plant", "Fire Piranha Plant", "Fire Piranha Plant"),
    ("macro_fire_piranha_plant_2", "Fire Piranha Plant 2", "Fire Piranha Plant 2"),
    ("macro_fire_spitter", "Fire Spitter", "Fire Spitter"),
    ("macro_fish_group", "Fish Group", "Fish Group"),
    ("macro_fish_group_2", "Fish Group 2", "Fish Group 2"),
    ("macro_fish_group_3", "Fish Group 3", "Fish Group 3"),
    ("macro_fish_group_4", "Fish Group 4", "Fish Group 4"),
    ("macro_flamethrower", "Flamethrower", "Flamethrower"),
    ("macro_floor_switch_hidden_objects", "Floor Switch Hidden Objects", "Floor Switch Hidden Objects"),
    ("macro_fly_guy", "Fly Guy", "Fly Guy"),
    ("macro_free_bowling_ball", "Free Bowling Ball", "Free Bowling Ball"),
    ("macro_goomba", "Goomba", "Goomba"),
    ("macro_goomba_quintuplet_spawner", "Goomba Quintuplet Spawner", "Goomba Quintuplet Spawner"),
    ("macro_goomba_triplet_spawner", "Goomba Triplet Spawner", "Goomba Triplet Spawner"),
    ("macro_haunted_chair", "Haunted Chair", "Haunted Chair"),
    ("macro_haunted_chair_copy", "Haunted Chair Copy", "Haunted Chair Copy"),
    ("macro_haunted_chair_copy2", "Haunted Chair Copy2", "Haunted Chair Copy2"),
    ("macro_heave_ho", "Heave Ho", "Heave Ho"),
    ("macro_hidden_1up", "Hidden 1 Up", "Hidden 1 Up"),
    ("macro_hidden_1up_in_pole", "Hidden 1 Up In Pole", "Hidden 1 Up In Pole"),
    ("macro_hidden_1up_trigger", "Hidden 1 Up Trigger", "Hidden 1 Up Trigger"),
    ("macro_hidden_blue_coin", "Hidden Blue Coin", "Hidden Blue Coin"),
    ("macro_hidden_box", "Hidden Box", "Hidden Box"),
    ("macro_hidden_object_2", "Hidden Object 2", "Hidden Object 2"),
    ("macro_hidden_object_3", "Hidden Object 3", "Hidden Object 3"),
    ("macro_hidden_star_trigger", "Hidden Star Trigger", "Hidden Star Trigger"),
    ("macro_homing_amp", "Homing Amp", "Homing Amp"),
    ("macro_huge_goomba", "Huge Goomba", "Huge Goomba"),
    ("macro_jet_stream_ring_spawner", "Jet Stream Ring Spawner", "Jet Stream Ring Spawner"),
    ("macro_jet_stream_ring_spawner_copy", "Jet Stream Ring Spawner Copy", "Jet Stream Ring Spawner Copy"),
    ("macro_jumping_box", "Jumping Box", "Jumping Box"),
    ("macro_koopa", "Koopa", "Koopa"),
    ("macro_koopa_race_endpoint", "Koopa Race Endpoint", "Koopa Race Endpoint"),
    ("macro_koopa_shell_underwater", "Koopa Shell Underwater", "Koopa Shell Underwater"),
    ("macro_koopa_shellless", "Koopa Shellless", "Koopa Shellless"),
    ("macro_metal_cap_switch", "Metal Cap Switch", "Metal Cap Switch"),
    ("macro_moneybag", "Moneybag", "Moneybag"),
    ("macro_monty_mole", "Monty Mole", "Monty Mole"),
    ("macro_monty_mole_2", "Monty Mole 2", "Monty Mole 2"),
    ("macro_monty_mole_hole", "Monty Mole Hole", "Monty Mole Hole"),
    ("macro_moving_blue_coin", "Moving Blue Coin", "Moving Blue Coin"),
    ("macro_mr_blizzard", "Mr. Blizzard", "Mr. Blizzard"),
    ("macro_mr_blizzard_2", "Mr. Blizzard 2", "Mr. Blizzard 2"),
    ("macro_mr_blizzard_copy", "Mr. Blizzard Copy", "Mr. Blizzard Copy"),
    ("macro_mr_i", "Mr. I", "Mr. I"),
    ("macro_piranha_plant", "Piranha Plant", "Piranha Plant"),
    ("macro_pokey", "Pokey", "Pokey"),
    ("macro_pokey_copy", "Pokey Copy", "Pokey Copy"),
    ("macro_pushable_metal_box", "Pushable Metal Box", "Pushable Metal Box"),
    ("macro_recovery_heart", "Recovery Heart", "Recovery Heart"),
    ("macro_red_coin", "Red Coin", "Red Coin"),
    ("macro_scuttlebug", "Scuttlebug", "Scuttlebug"),
    ("macro_scuttlebug_spawner", "Scuttlebug Spawner", "Scuttlebug Spawner"),
    ("macro_seaweed_bundle", "Seaweed Bundle", "Seaweed Bundle"),
    ("macro_sign_on_wall", "Sign On Wall", "Sign On Wall"),
    ("macro_skeeter", "Skeeter", "Skeeter"),
    ("macro_sliding_blue_coin", "Sliding Blue Coin", "Sliding Blue Coin"),
    ("macro_small_penguin", "Small Penguin", "Small Penguin"),
    ("macro_snufit", "Snufit", "Snufit"),
    ("macro_spindrift", "Spindrift", "Spindrift"),
    ("macro_sushi", "Sushi", "Sushi"),
    ("macro_swoop", "Swoop", "Swoop"),
    ("macro_swoop_2", "Swoop 2", "Swoop 2"),
    ("macro_thi_koopa_the_quick", "THI Koopa The Quick", "THI Koopa The Quick"),
    ("macro_ttc_clock_hand", "TTC Clock Hand", "TTC Clock Hand"),
    ("macro_ttc_elevator_platform", "TTC Elevator Platform", "TTC Elevator Platform"),
    ("macro_ttc_large_gear", "TTC Large Gear", "TTC Large Gear"),
    ("macro_ttc_large_treadmill", "TTC Large Treadmill", "TTC Large Treadmill"),
    ("macro_ttc_large_treadmill_2", "TTC Large Treadmill 2", "TTC Large Treadmill 2"),
    ("macro_ttc_pendulum", "TTC Pendulum", "TTC Pendulum"),
    ("macro_ttc_pit_block", "TTC Pit Block", "TTC Pit Block"),
    ("macro_ttc_pit_block_2", "TTC Pit Block 2", "TTC Pit Block 2"),
    ("macro_ttc_push_block", "TTC Push Block", "TTC Push Block"),
    ("macro_ttc_rotating_cube", "TTC Rotating Cube", "TTC Rotating Cube"),
    ("macro_ttc_rotating_hexagon", "TTC Rotating Hexagon", "TTC Rotating Hexagon"),
    ("macro_ttc_rotating_prism", "TTC Rotating Prism", "TTC Rotating Prism"),
    ("macro_ttc_rotating_triangle", "TTC Rotating Triangle", "TTC Rotating Triangle"),
    ("macro_ttc_small_gear", "TTC Small Gear", "TTC Small Gear"),
    ("macro_ttc_small_treadmill", "TTC Small Treadmill", "TTC Small Treadmill"),
    ("macro_ttc_small_treadmill_2", "TTC Small Treadmill 2", "TTC Small Treadmill 2"),
    ("macro_ttc_spinner", "TTC Spinner", "TTC Spinner"),
    ("macro_thwomp", "Thwomp", "Thwomp"),
    ("macro_tiny_goomba", "Tiny Goomba", "Tiny Goomba"),
    ("macro_tornado", "Tornado", "Tornado"),
    ("macro_tox_box", "Tox Box", "Tox Box"),
    ("macro_tuxies_mother", "Tuxies Mother", "Tuxies Mother"),
    ("macro_tuxies_mother_copy", "Tuxies Mother Copy", "Tuxies Mother Copy"),
    ("macro_ukiki", "Ukiki", "Ukiki"),
    ("macro_ukiki_2", "Ukiki 2", "Ukiki 2"),
    ("macro_unagi", "Unagi", "Unagi"),
    ("macro_unknown_123", "Unknown 123", "Unknown 123"),
    ("macro_unknown_137", "Unknown 137", "Unknown 137"),
    ("macro_unknown_28", "Unknown 28", "Unknown 28"),
    ("macro_unknown_303", "Unknown 303", "Unknown 303"),
    ("macro_unknown_40", "Unknown 40", "Unknown 40"),
    ("macro_unknown_41", "Unknown 41", "Unknown 41"),
    ("macro_unknown_59", "Unknown 59", "Unknown 59"),
    ("macro_unknown_96", "Unknown 96", "Unknown 96"),
    ("macro_vanish_cap_switch", "Vanish Cap Switch", "Vanish Cap Switch"),
    ("macro_water_bomb_cannon", "Water Bomb Cannon", "Water Bomb Cannon"),
    ("macro_water_bomb_cannon_copy", "Water Bomb Cannon Copy", "Water Bomb Cannon Copy"),
    ("macro_water_bomb_spawner", "Water Bomb Spawner", "Water Bomb Spawner"),
    ("macro_water_mine", "Water Mine", "Water Mine"),
    ("macro_whomp", "Whomp", "Whomp"),
    ("macro_wiggler", "Wiggler", "Wiggler"),
    ("macro_wing_cap_switch", "Wing Cap Switch", "Wing Cap Switch"),
    ("macro_wooden_post", "Wooden Post", "Wooden Post"),
    ("macro_wooden_post_copy", "Wooden Post Copy", "Wooden Post Copy"),
    ("macro_wooden_signpost", "Wooden Signpost", "Wooden Signpost"),
    ("macro_yellow_cap_switch", "Yellow Cap Switch", "Yellow Cap Switch"),
    ("macro_yellow_coin", "Yellow Coin", "Yellow Coin"),
    ("macro_yellow_coin_2", "Yellow Coin 2", "Yellow Coin 2"),
]

enumBehaviorMacros = [
    ("Custom", "Custom", ""),
    ("BEGIN", "BEGIN", "Starts the behavior, places it in a specific group"),
    ("DELAY", "DELAY", "Delays bhv by number of frames"),
    ("CALL", "CALL", "Jumps to a new cmd and stores return addr in the object's stack"),
    ("RETURN", "RETURN", "Jumps back to last cmd on the object's stack"),
    ("GOTO", "GOTO", "Jumps to new cmd without saving a return addr"),
    ("BEGIN_REPEAT", "BEGIN_REPEAT", "Start of a loop that will repeat N times"),
    ("END_REPEAT", "END_REPEAT", "End of repeating loop"),
    (
        "END_REPEAT_CONTINUE",
        "END_REPEAT_CONTINUE",
        "End of repeating loop, but continues cmds on same frame as loop end",
    ),
    ("BEGIN_LOOP", "BEGIN_LOOP", "Start of infinite loop"),
    ("END_LOOP", "END_LOOP", "End of infinite loop"),
    ("BREAK", "BREAK", "Exit behavior, object remains"),
    ("CALL_NATIVE", "CALL_NATIVE", "Execute a native game function"),
    ("ADD_FLOAT", "ADD_FLOAT", "Adds float value to obj field"),
    ("SET_FLOAT", "SET_FLOAT", "Sets float value to obj field"),
    ("ADD_INT", "ADD_INT", "Adds int value to obj field"),
    ("SET_INT", "SET_INT", "Set int value to obj field"),
    ("OR_INT", "OR_INT", "Bitwise OR int value to obj field"),
    ("BIT_CLEAR", "BIT_CLEAR", "Bitwise Clear int value to obj field"),
    ("SET_INT_RAND_RSHIFT", "SET_INT_RAND_RSHIFT", "Set random float value to obj field with min and R shifted"),
    ("SET_RANDOM_FLOAT", "SET_RANDOM_FLOAT", "Set random float value to obj field with min"),
    ("SET_RANDOM_INT", "SET_RANDOM_INT", "Set random int value to obj field with min"),
    ("ADD_RANDOM_FLOAT", "ADD_RANDOM_FLOAT", "Add random int value to obj field with min"),
    ("ADD_INT_RAND_RSHIFT", "ADD_INT_RAND_RSHIFT", "Add random int value to obj field with min and R shifted"),
    ("CMD_NOP_1", "CMD_NOP_1", "No Operation"),
    ("SET_MODEL", "SET_MODEL", "Sets model ID"),
    ("SPAWN_CHILD", "SPAWN_CHILD", "Spawn object with model ID and behavior, sets spawn parent to this obj"),
    ("DEACTIVATE", "DEACTIVATE", "Stops behavior and deletes object"),
    ("DROP_TO_FLOOR", "DROP_TO_FLOOR", "Drops obj to floor"),
    ("SUM_FLOAT", "SUM_FLOAT", "Sets obj field to sum of two float obj field values"),
    ("SUM_INT", "SUM_INT", "Sets obj field to sum of two int obj field values"),
    ("BILLBOARD", "BILLBOARD", "Billboards object"),
    ("CYLBOARD", "CYLBOARD", "Cylboards object"),
    ("HIDE", "HIDE", "Hides object"),
    ("SET_HITBOX", "SET_HITBOX", "Sets a cylinder hitbox"),
    ("DELAY_VAR", "DELAY_VAR", "Delay bhv by obj field number of frames"),
    ("LOAD_ANIMATIONS", "LOAD_ANIMATIONS", "Sets vptr to field, usually used for anims"),
    ("ANIMATE", "ANIMATE", "Sets animation index of object"),
    (
        "SPAWN_CHILD_WITH_PARAM",
        "SPAWN_CHILD_WITH_PARAM",
        "Spawns object with model ID, behavior and bparam, sets spawn parent to this obj",
    ),
    ("LOAD_COLLISION_DATA", "LOAD_COLLISION_DATA", "Loads collision data"),
    ("SET_HITBOX_WITH_OFFSET", "SET_HITBOX_WITH_OFFSET", "Sets a hitbox with a negative vertical offset"),
    ("SPAWN_OBJ", "SPAWN_OBJ", "Spawn object with model ID and behavior, sets spawn parent to this obj"),
    ("SET_HOME", "SET_HOME", "Sets objects home"),
    ("SET_HURTBOX", "SET_HURTBOX", "Sets a cyliner hurtbox"),
    ("SET_INTERACT_TYPE", "SET_INTERACT_TYPE", "Sets interaction type"),
    ("SET_OBJ_PHYSICS", "SET_OBJ_PHYSICS", "Sets physics values used during obj_step function"),
    ("SET_INTERACT_SUBTYPE", "SET_INTERACT_SUBTYPE", "Sets object's interaction subtype"),
    ("SCALE", "SCALE", "Scales object"),
    ("PARENT_BIT_CLEAR", "PARENT_BIT_CLEAR", "Bit clear parent object's obj field value"),
    ("ANIMATE_TEXTURE", "ANIMATE_TEXTURE", "Increases obj field value every N frames"),
    ("DISABLE_RENDERING", "DISABLE_RENDERING", "Disables rendering for object"),
    ("SPAWN_WATER_DROPLET", "SPAWN_WATER_DROPLET", "Spawns a water droplet"),
]

behaviorMacroArguments = {
    "BEGIN": ("Group Num",),
    "DELAY": ("Num Frames",),
    "CALL": ("Behavior Addr",),
    "RETURN": (),
    "GOTO": ("Behavior Addr",),
    "BEGIN_REPEAT": ("Num Repeats",),
    "END_REPEAT": (),
    "END_REPEAT_CONTINUE": (),
    "BEGIN_LOOP": (),
    "END_LOOP": (),
    "BREAK": (),
    "CALL_NATIVE": ("Function Name",),
    "ADD_FLOAT": ("Obj Field", "Value"),
    "SET_FLOAT": ("Obj Field", "Value"),
    "ADD_INT": ("Obj Field", "Value"),
    "SET_INT": ("Obj Field", "Value"),
    "OR_INT": ("Obj Field", "Flags"),
    "BIT_CLEAR": ("Obj Field", "Flags"),
    "SET_INT_RAND_RSHIFT": ("Obj Field", "Min", "R shift"),
    "SET_RANDOM_FLOAT": ("Obj Field", "Min", "Range"),
    "SET_RANDOM_INT": ("Obj Field", "Min", "Range"),
    "ADD_RANDOM_FLOAT": ("Obj Field", "Min", "Range"),
    "ADD_INT_RAND_RSHIFT": ("Obj Field", "Min", "R shift"),
    "CMD_NOP_1": (),
    "SET_MODEL": ("Model ID",),
    "SPAWN_CHILD": ("Model ID", "Behavior Addr"),
    "DEACTIVATE": (),
    "DROP_TO_FLOOR": (),
    "SUM_FLOAT": ("Dest Obj Field", "Src Obj Field 1", "Src Obj Field 2"),
    "SUM_INT": ("Dest Obj Field", "Src Obj Field 1", "Src Obj Field 2"),
    "BILLBOARD": (),
    "CYLBOARD": (),
    "HIDE": (),
    "SET_HITBOX": ("Radius", "Height"),
    "DELAY_VAR": ("Obj Field",),
    "LOAD_ANIMATIONS": ("Obj Field", "Vptr"),
    "ANIMATE": ("Anim Index",),
    "SPAWN_CHILD_WITH_PARAM": ("Bparam", "Model ID", "Behavior Addr"),
    "LOAD_COLLISION_DATA": ("Collision Name",),
    "SPAWN_OBJ": ("Model ID", "Behavior Addr"),
    "SET_HOME": (),
    "SET_HURTBOX": ("Radius", "Height"),
    "SET_INTERACT_TYPE": ("Interaction Type",),
    "SET_OBJ_PHYSICS": (
        "Wall Hitbox Radius",
        "Gravity",
        "Bounce",
        "Drag",
        "Friction",
        "Buoyancy",
        "unused1",
        "unused2",
    ),
    "SET_INTERACT_SUBTYPE": ("Interaction Subtype",),
    "SCALE": (
        "unused",
        "Scale Percent",
    ),
    "PARENT_BIT_CLEAR": ("Obj Field", "Flags"),
    "ANIMATE_TEXTURE": ("Obj Field", "Rate"),
    "DISABLE_RENDERING": (),
    "SPAWN_WATER_DROPLET": ("Droplet Params",),
    "Custom": (),
}

enumPresetBehaviors = [
    ("Custom", "Custom", ""),
    ("Static Solid Object", "Static Solid Object", "A static solid object"),
    ("Rotating Solid Object", "Rotating Solid Object", "A rotating solid object"),
    ("Moving Solid Object", "Moving Solid Object", "A solid object that moves up and down"),
    ("Pole-like", "Pole-like", "A pole like object"),
    ("Flame-like", "Flame-like", "An animated object with burning interaction"),
    ("Talking NPC", "Talking NPC", "A NPC you can speak to, not animated by default"),
]

behaviorPresetContents = {
    "Static Solid Object": (
        ("BEGIN", ("OBJ_LIST_SURFACE",)),
        (
            "OR_INT",
            (
                "oFlags",
                "OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE",
            ),
        ),
        ("LOAD_COLLISION_DATA", ("inherit",)),
        ("BEGIN_LOOP", ()),
        ("CALL_NATIVE", ("load_object_collision_model",)),
        ("END_LOOP", ("")),
    ),
    "Rotating Solid Object": (
        ("BEGIN", ("OBJ_LIST_SURFACE",)),
        (
            "OR_INT",
            (
                "oFlags",
                "OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE",
            ),
        ),
        ("LOAD_COLLISION_DATA", ("inherit",)),
        ("BEGIN_LOOP", ()),
        ("ADD_INT", ("oFaceAngleYaw", "200")),
        ("CALL_NATIVE", ("load_object_collision_model",)),
        ("END_LOOP", ("")),
    ),
    "Moving Solid Object": (
        ("BEGIN", ("OBJ_LIST_SURFACE",)),
        (
            "OR_INT",
            (
                "oFlags",
                "OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE",
            ),
        ),
        ("LOAD_COLLISION_DATA", ("inherit",)),
        ("BEGIN_LOOP", ()),
        ("CALL_NATIVE", ("bhv_ssl_moving_pyramid_wall_loop",)),
        ("END_LOOP", ("")),
    ),
    "Pole-like": (
        ("BEGIN", ("OBJ_LIST_POLELIKE",)),
        (
            "OR_INT",
            (
                "oFlags",
                "OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE",
            ),
        ),
        ("SET_INTERACT_TYPE", ("INTERACT_POLE",)),
        ("SET_HITBOX", ("inherit", "inherit")),
        ("CALL_NATIVE", ("bhv_pole_init",)),
        ("SET_INT", ("oIntangibleTimer", "0")),
        ("BEGIN_LOOP", ()),
        ("CALL_NATIVE", ("bhv_pole_base_loop",)),
        ("END_LOOP", ("")),
    ),
    "Flame-like": (
        ("BEGIN", ("OBJ_LIST_LEVEL",)),
        ("BILLBOARD", ()),
        (
            "OR_INT",
            (
                "oFlags",
                "OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE",
            ),
        ),
        ("SET_INTERACT_TYPE", ("INTERACT_FLAME",)),
        ("SET_HITBOX", ("inherit", "inherit")),
        ("SET_INT", ("oIntangibleTimer", "0")),
        ("BEGIN_LOOP", ()),
        ("SET_INT", ("oInteractStatus", "0")),
        ("ANIMATE_TEXTURE", ("oAnimState", "2")),
        ("END_LOOP", ("")),
    ),
    "Talking NPC": (
        ("BEGIN", ("OBJ_LIST_GENACTOR",)),
        (
            "OR_INT",
            (
                "oFlags",
                "OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE",
            ),
        ),
        ("SET_INTERACT_TYPE", ("INTERACT_TEXT",)),
        ("SET_HITBOX", ("inherit", "inherit")),
        ("SET_INT", ("oInteractionSubtype", "INT_SUBTYPE_SIGN")),
        ("BEGIN_LOOP", ()),
        ("SET_INT", ("oIntangibleTimer", "0")),
        ("SET_INT", ("oInteractStatus", "0")),
        ("END_LOOP", ("")),
    ),
}

obj_group_enums = [
    ("Custom", "Custom", "Custom"),
    ("OBJ_LIST_PLAYER", "OBJ_LIST_PLAYER", "OBJ_LIST_PLAYER"),
    ("OBJ_LIST_UNUSED_1", "OBJ_LIST_UNUSED_1", "OBJ_LIST_UNUSED_1"),
    ("OBJ_LIST_DESTRUCTIVE", "OBJ_LIST_DESTRUCTIVE", "OBJ_LIST_DESTRUCTIVE"),
    ("OBJ_LIST_UNUSED_3", "OBJ_LIST_UNUSED_3", "OBJ_LIST_UNUSED_3"),
    ("OBJ_LIST_GENACTOR", "OBJ_LIST_GENACTOR", "OBJ_LIST_GENACTOR"),
    ("OBJ_LIST_PUSHABLE", "OBJ_LIST_PUSHABLE", "OBJ_LIST_PUSHABLE"),
    ("OBJ_LIST_LEVEL", "OBJ_LIST_LEVEL", "OBJ_LIST_LEVEL"),
    ("OBJ_LIST_UNUSED_7", "OBJ_LIST_UNUSED_7", "OBJ_LIST_UNUSED_7"),
    ("OBJ_LIST_DEFAULT", "OBJ_LIST_DEFAULT", "OBJ_LIST_DEFAULT"),
    ("OBJ_LIST_SURFACE", "OBJ_LIST_SURFACE", "OBJ_LIST_SURFACE"),
    ("OBJ_LIST_POLELIKE", "OBJ_LIST_POLELIKE", "OBJ_LIST_POLELIKE"),
    ("OBJ_LIST_SPAWNER", "OBJ_LIST_SPAWNER", "OBJ_LIST_SPAWNER"),
    ("OBJ_LIST_UNIMPORTANT", "OBJ_LIST_UNIMPORTANT", "OBJ_LIST_UNIMPORTANT"),
]

obj_field_enums = [
    ("Custom", "Custom", "Custom"),
    ("oFlags", "oFlags", "oFlags"),
    ("oDialogResponse", "oDialogResponse", "oDialogResponse"),
    ("oDialogState", "oDialogState", "oDialogState"),
    ("oObjScale", "oObjScale", "oObjScale"),
    ("oIntangibleTimer", "oIntangibleTimer", "oIntangibleTimer"),
    ("oPosX", "oPosX", "oPosX"),
    ("oPosY", "oPosY", "oPosY"),
    ("oPosZ", "oPosZ", "oPosZ"),
    ("oVelX", "oVelX", "oVelX"),
    ("oVelY", "oVelY", "oVelY"),
    ("oVelZ", "oVelZ", "oVelZ"),
    ("oForwardVel", "oForwardVel", "oForwardVel"),
    ("oMoveAnglePitch", "oMoveAnglePitch", "oMoveAnglePitch"),
    ("oMoveAngleYaw", "oMoveAngleYaw", "oMoveAngleYaw"),
    ("oMoveAngleRoll", "oMoveAngleRoll", "oMoveAngleRoll"),
    ("oFaceAnglePitch", "oFaceAnglePitch", "oFaceAnglePitch"),
    ("oFaceAngleYaw", "oFaceAngleYaw", "oFaceAngleYaw"),
    ("oFaceAngleRoll", "oFaceAngleRoll", "oFaceAngleRoll"),
    ("oGraphYOffset", "oGraphYOffset", "oGraphYOffset"),
    ("oActiveParticleFlags", "oActiveParticleFlags", "oActiveParticleFlags"),
    ("oGravity", "oGravity", "oGravity"),
    ("oFloorHeight", "oFloorHeight", "oFloorHeight"),
    ("oMoveFlags", "oMoveFlags", "oMoveFlags"),
    ("oAnimState", "oAnimState", "oAnimState"),
    ("oAngleVelPitch", "oAngleVelPitch", "oAngleVelPitch"),
    ("oAngleVelYaw", "oAngleVelYaw", "oAngleVelYaw"),
    ("oAngleVelRoll", "oAngleVelRoll", "oAngleVelRoll"),
    ("oAnimations", "oAnimations", "oAnimations"),
    ("oHeldState", "oHeldState", "oHeldState"),
    ("oWallHitboxRadius", "oWallHitboxRadius", "oWallHitboxRadius"),
    ("oDragStrength", "oDragStrength", "oDragStrength"),
    ("oInteractType", "oInteractType", "oInteractType"),
    ("oInteractStatus", "oInteractStatus", "oInteractStatus"),
    ("oParentRelativePosX", "oParentRelativePosX", "oParentRelativePosX"),
    ("oParentRelativePosY", "oParentRelativePosY", "oParentRelativePosY"),
    ("oParentRelativePosZ", "oParentRelativePosZ", "oParentRelativePosZ"),
    ("oBehParams2ndByte", "oBehParams2ndByte", "oBehParams2ndByte"),
    ("oAction", "oAction", "oAction"),
    ("oSubAction", "oSubAction", "oSubAction"),
    ("oTimer", "oTimer", "oTimer"),
    ("oBounciness", "oBounciness", "oBounciness"),
    ("oDistanceToMario", "oDistanceToMario", "oDistanceToMario"),
    ("oAngleToMario", "oAngleToMario", "oAngleToMario"),
    ("oHomeX", "oHomeX", "oHomeX"),
    ("oHomeY", "oHomeY", "oHomeY"),
    ("oHomeZ", "oHomeZ", "oHomeZ"),
    ("oFriction", "oFriction", "oFriction"),
    ("oBuoyancy", "oBuoyancy", "oBuoyancy"),
    ("oSoundStateID", "oSoundStateID", "oSoundStateID"),
    ("oOpacity", "oOpacity", "oOpacity"),
    ("oDamageOrCoinValue", "oDamageOrCoinValue", "oDamageOrCoinValue"),
    ("oHealth", "oHealth", "oHealth"),
    ("oBehParams", "oBehParams", "oBehParams"),
    ("oPrevAction", "oPrevAction", "oPrevAction"),
    ("oInteractionSubtype", "oInteractionSubtype", "oInteractionSubtype"),
    ("oCollisionDistance", "oCollisionDistance", "oCollisionDistance"),
    ("oNumLootCoins", "oNumLootCoins", "oNumLootCoins"),
    ("oDrawingDistance", "oDrawingDistance", "oDrawingDistance"),
    ("oRoom", "oRoom", "oRoom"),
    ("oWallAngle", "oWallAngle", "oWallAngle"),
    ("oFloorType", "oFloorType", "oFloorType"),
    ("oFloorRoom", "oFloorRoom", "oFloorRoom"),
    ("oAngleToHome", "oAngleToHome", "oAngleToHome"),
    ("oFloor", "oFloor", "oFloor"),
    ("oDeathSound", "oDeathSound", "oDeathSound"),
]

# groups you can select for levels
groupsSeg5 = [
    ("group1", "group1", "Ground objects (Thwomp, Heave-Ho, Hoot etc.)"),
    ("group2", "group2", "Bully/Blargg"),
    ("group3", "group3", "King Bob-Omb"),
    ("group4", "group4", "Water Objects (Unagi, Manta, Clam)"),
    ("group5", "group5", "Sand Objects (Pokey, Eyerock, klepto)"),
    ("group6", "group6", "TTM Objects (Monty Mole, uUkiki, Fwoosh)"),
    ("group7", "group7", "Snow Objects (Mr Blizzard, Spindrift etc.)"),
    ("group8", "group8", "Cap Switch"),
    ("group9", "group9", "Haunted Objects (Boo, Mad Piano etc.)"),
    ("group10", "group10", "Peach/Yoshi"),
    ("group11", "group11", "THI Ojbects (Lakitu, Wiggler, Bubba)"),
    ("None", "None", "None"),
    ("Custom", "Custom", "Custom"),
]


groupsSeg6 = [
    ("group12", "group12", "Bowser/Bowser Bomb"),
    ("group13", "group13", "Water Objects (Skeeter, Treasure Chest etc.)"),
    ("group14", "group14", "Ground Objects (Piranha Plant, Chain Chomp etc.)"),
    ("group15", "group15", "Castle Objects (MIPS, Toad etc.)"),
    ("group16", "group16", "Ice Objects (Chill Bully, Moneybags)"),
    ("group17", "group17", "Cave Objects (Swoop, Scuttlebug, Dorrie etc.)"),
    ("None", "None", "None"),
    ("Custom", "Custom", "Custom"),
]

groups_seg8 = [
    ("common0", "common0", "Generic course objects (Goomba, Bob-ombs, Cannon etc.)"),
    ("None", "None", "None"),
    ("Custom", "Custom", "Custom"),
]


# groups you can use for the combined object export
groups_obj_export = [
    ("common0", "common0", "chuckya, boxes, blue coin switch"),
    ("common1", "common1", "warp pipe, particles, trees, star, door"),
    ("group0", "group0", "Mario, particles etc."),
    ("group1", "group1", "Ground objects (Thwomp, Heave-Ho, Hoot etc.)"),
    ("group2", "group2", "Bully/Blargg"),
    ("group3", "group3", "King Bob-Omb"),
    ("group4", "group4", "Water Objects (Unagi, Manta, Clam)"),
    ("group5", "group5", "Sand Objects (Pokey, Eyerock, klepto)"),
    ("group6", "group6", "TTM Objects (Monty Mole, uUkiki, Fwoosh)"),
    ("group7", "group7", "Snow Objects (Mr Blizzard, Spindrift etc.)"),
    ("group8", "group8", "Cap Switch"),
    ("group9", "group9", "Haunted Objects (Boo, Mad Piano etc.)"),
    ("group10", "group10", "Peach/Yoshi"),
    ("group11", "group11", "THI Ojbects (Lakitu, Wiggler, Bubba)"),
    ("group12", "group12", "Bowser/Bowser Bomb"),
    ("group13", "group13", "Water Objects (Skeeter, Treasure Chest etc.)"),
    ("group14", "group14", "Ground Objects (Piranha Plant, Chain Chomp etc.)"),
    ("group15", "group15", "Castle Objects (MIPS, Toad etc.)"),
    ("group16", "group16", "Ice Objects (Chill Bully, Moneybags)"),
    ("group17", "group17", "Cave Objects (Swoop, Scuttlebug, Dorrie etc.)"),
    ("Custom", "Custom", "Custom"),
]

BEHAVIOR_EXITS = [
    "RETURN",
    "GOTO",
    "END_LOOP",
    "BREAK",
    "BREAK_UNUSED",
    "DEACTIVATE",
]

BEHAVIOR_COMMANDS = [
    # Name, Size
    ("BEGIN", 1),  # bhv_cmd_begin
    ("DELAY", 1),  # bhv_cmd_delay
    ("CALL", 1),  # bhv_cmd_call
    ("RETURN", 1),  # bhv_cmd_return
    ("GOTO", 1),  # bhv_cmd_goto
    ("BEGIN_REPEAT", 1),  # bhv_cmd_begin_repeat
    ("END_REPEAT", 1),  # bhv_cmd_end_repeat
    ("END_REPEAT_CONTINUE", 1),  # bhv_cmd_end_repeat_continue
    ("BEGIN_LOOP", 1),  # bhv_cmd_begin_loop
    ("END_LOOP", 1),  # bhv_cmd_end_loop
    ("BREAK", 1),  # bhv_cmd_break
    ("BREAK_UNUSED", 1),  # bhv_cmd_break_unused
    ("CALL_NATIVE", 2),  # bhv_cmd_call_native
    ("ADD_FLOAT", 1),  # bhv_cmd_add_float
    ("SET_FLOAT", 1),  # bhv_cmd_set_float
    ("ADD_INT", 1),  # bhv_cmd_add_int
    ("SET_INT", 1),  # bhv_cmd_set_int
    ("OR_INT", 1),  # bhv_cmd_or_int
    ("BIT_CLEAR", 1),  # bhv_cmd_bit_clear
    ("SET_INT_RAND_RSHIFT", 2),  # bhv_cmd_set_int_rand_rshift
    ("SET_RANDOM_FLOAT", 2),  # bhv_cmd_set_random_float
    ("SET_RANDOM_INT", 2),  # bhv_cmd_set_random_int
    ("ADD_RANDOM_FLOAT", 2),  # bhv_cmd_add_random_float
    ("ADD_INT_RAND_RSHIFT", 2),  # bhv_cmd_add_int_rand_rshift
    ("NOP_1", 1),  # bhv_cmd_nop_1
    ("NOP_2", 1),  # bhv_cmd_nop_2
    ("NOP_3", 1),  # bhv_cmd_nop_3
    ("SET_MODEL", 1),  # bhv_cmd_set_model
    ("SPAWN_CHILD", 3),  # bhv_cmd_spawn_child
    ("DEACTIVATE", 1),  # bhv_cmd_deactivate
    ("DROP_TO_FLOOR", 1),  # bhv_cmd_drop_to_floor
    ("SUM_FLOAT", 1),  # bhv_cmd_sum_float
    ("SUM_INT", 1),  # bhv_cmd_sum_int
    ("BILLBOARD", 1),  # bhv_cmd_billboard
    ("HIDE", 1),  # bhv_cmd_hide
    ("SET_HITBOX", 2),  # bhv_cmd_set_hitbox
    ("NOP_4", 1),  # bhv_cmd_nop_4
    ("DELAY_VAR", 1),  # bhv_cmd_delay_var
    ("BEGIN_REPEAT_UNUSED", 1),  # bhv_cmd_begin_repeat_unused
    ("LOAD_ANIMATIONS", 2),  # bhv_cmd_load_animations
    ("ANIMATE", 1),  # bhv_cmd_animate
    ("SPAWN_CHILD_WITH_PARAM", 3),  # bhv_cmd_spawn_child_with_param
    ("LOAD_COLLISION_DATA", 2),  # bhv_cmd_load_collision_data
    ("SET_HITBOX_WITH_OFFSET", 3),  # bhv_cmd_set_hitbox_with_offset
    ("SPAWN_OBJ", 3),  # bhv_cmd_spawn_obj
    ("SET_HOME", 1),  # bhv_cmd_set_home
    ("SET_HURTBOX", 2),  # bhv_cmd_set_hurtbox
    ("SET_INTERACT_TYPE", 2),  # bhv_cmd_set_interact_type
    ("SET_OBJ_PHYSICS", 5),  # bhv_cmd_set_obj_physics
    ("SET_INTERACT_SUBTYPE", 2),  # bhv_cmd_set_interact_subtype
    ("SCALE", 1),  # bhv_cmd_scale
    ("PARENT_BIT_CLEAR", 2),  # bhv_cmd_parent_bit_clear
    ("ANIMATE_TEXTURE", 1),  # bhv_cmd_animate_texture
    ("DISABLE_RENDERING", 1),  # bhv_cmd_disable_rendering
    ("SET_INT_UNUSED", 2),  # bhv_cmd_set_int_unused
    ("SPAWN_WATER_DROPLET", 2),  # bhv_cmd_spawn_water_droplet
]

T = TypeVar("T")
DictOrVal = T | dict[str, T] | None
ListOrVal = T | list[T] | None


def as_list(val: ListOrVal[Any]) -> list[T]:
    if isinstance(val, Iterable):
        return list(val)
    if val is None:
        return []
    return [val]


def as_dict(val: DictOrVal[T], name: str = "") -> dict[str, T]:
    """If val is a dict, returns it, otherwise returns {name: member}"""
    if isinstance(val, dict):
        return val
    elif val is not None:
        return {name: val}
    return {}


def validate_dict(val: DictOrVal, val_type: type):
    return all(isinstance(k, str) and isinstance(v, val_type) for k, v in as_dict(val).items())


def validate_list(val: ListOrVal, val_type: type):
    return all(isinstance(v, val_type) for v in as_list(val))


@dataclasses.dataclass
class AnimInfo:
    address: int
    behaviours: DictOrVal[int] = dataclasses.field(default_factory=dict)
    size: int | None = None  # None means the size can be determined from the NULL delimiter
    ignore_bone_count: bool = False
    dma: bool = False
    directory: str | None = None
    names: list[str] = dataclasses.field(default_factory=list)

    def __post_init__(self):
        assert isinstance(self.address, int)
        assert validate_dict(self.behaviours, int)
        assert self.size is None or isinstance(self.size, int)
        assert isinstance(self.ignore_bone_count, bool)
        assert isinstance(self.dma, bool)
        assert self.directory is None or isinstance(self.directory, str)
        assert validate_list(self.names, str)


@dataclasses.dataclass
class ModelIDInfo:
    number: int
    enum: str

    def __post_init__(self):
        assert isinstance(self.number, int)
        assert isinstance(self.enum, str)


@dataclasses.dataclass
class DisplaylistInfo:
    address: int
    # Displaylists are compressed, so their c name can´t be fetched from func_map like geolayouts
    c_name: str

    def __post_init__(self):
        assert isinstance(self.address, int)
        assert isinstance(self.c_name, str)


@dataclasses.dataclass
class ModelInfo:
    model_id: ListOrVal[ModelIDInfo] = dataclasses.field(default_factory=list)
    geolayout: int | None = None
    displaylist: DisplaylistInfo | None = None

    def __post_init__(self):
        self.model_id = as_list(self.model_id)
        assert validate_list(self.model_id, ModelIDInfo)
        assert validate_list(self.geolayout, int)
        assert validate_list(self.displaylist, DisplaylistInfo)


@dataclasses.dataclass
class CollisionInfo:
    address: int
    c_name: str

    def __post_init__(self):
        assert isinstance(self.address, int)
        assert isinstance(self.c_name, str)


@dataclasses.dataclass
class ActorPresetInfo:
    decomp_path: str = None
    level: str | None = None
    group: str | None = None
    animation: DictOrVal[AnimInfo] = dataclasses.field(default_factory=dict)
    models: DictOrVal[ModelInfo] = dataclasses.field(default_factory=dict)
    collision: DictOrVal[CollisionInfo] = dataclasses.field(default_factory=dict)

    def __post_init__(self):
        assert self.decomp_path is not None and isinstance(self.decomp_path, str)
        assert self.group is None or isinstance(self.group, str)
        assert validate_dict(self.animation, AnimInfo)
        assert validate_dict(self.models, ModelInfo)
        assert validate_dict(self.collision, CollisionInfo)
        group_to_level = {
            "common0": "bbh",
            "common1": "bbh",
            "group0": "bbh",
            "group1": "wf",
            "group2": "lll",
            "group3": "bob",
            "group4": "jrb",
            "group5": "ssl",
            "group6": "ttm",
            "group7": "ccm",
            "group8": "vcutm",
            "group9": "bbh",
            "group10": "castle_grounds",
            "group11": "thi",
            "group12": "bowser_1",
            "group13": "wdw",
            "group14": "bob",
            "group15": "castle_inside",
            "group16": "ccm",
            "group17": "hmc",
        }
        if self.level is None and self.group is not None:
            self.level = group_to_level[self.group]
        assert isinstance(self.level, str)

    @staticmethod
    def get_member_as_dict(name: str, member: DictOrVal[T]):
        return as_dict(member, name)


ACTOR_PRESET_INFO = {
    "Amp": ActorPresetInfo(
        decomp_path="actors/amp",
        group="common0",
        animation=AnimInfo(
            address=0x8004034,
            behaviours={"Circling Amp": 0x13003388, "Homing Amp": 0x13003354},
            names=["Moving"],
            ignore_bone_count=True,
        ),
        models=ModelInfo(model_id=ModelIDInfo(0xC2, "MODEL_AMP"), geolayout=0xF000028),
    ),
    "Bird": ActorPresetInfo(
        decomp_path="actors/bird",
        group="group10",
        animation=AnimInfo(
            address=0x50009E8,
            behaviours={"Bird": 0x13005354, "End Birds 1": 0x1300565C, "End Birds 2": 0x13005680},
            names=["Flying", "Gliding"],
        ),
        models=ModelInfo(model_id=ModelIDInfo(0x54, "MODEL_BIRDS"), geolayout=0xC000000),
    ),
    "Blargg": ActorPresetInfo(
        decomp_path="actors/blargg",
        group="group2",
        animation=AnimInfo(address=0x500616C, names=["Idle", "Bite"]),
        models=ModelInfo(model_id=ModelIDInfo(0x54, "MODEL_BLARGG"), geolayout=0xC000240),
    ),
    "Blue Coin Switch": ActorPresetInfo(
        decomp_path="actors/blue_coin_switch",
        group="common0",
        models=ModelInfo(model_id=ModelIDInfo(0x8C, "MODEL_BLUE_COIN_SWITCH"), geolayout=0xF000000),
        collision=CollisionInfo(address=0x8000E98, c_name="blue_coin_switch_seg8_collision_08000E98"),
    ),
    "Blue Fish": ActorPresetInfo(
        decomp_path="actors/blue_fish",
        group="common1",
        animation=AnimInfo(address=0x301C2B0, behaviours=0x13001B2C, names=["Swimming", "Diving"]),
        models={
            "Fish": ModelInfo(model_id=ModelIDInfo(0xB9, "MODEL_FISH"), geolayout=0x16000C44),
            "Fish (With Shadow)": ModelInfo(model_id=ModelIDInfo(0xBA, "MODEL_FISH_SHADOW"), geolayout=0x16000BEC),
        },
    ),
    "Bobomb": ActorPresetInfo(
        decomp_path="actors/bobomb",
        group="common0",
        animation=AnimInfo(
            address=0x802396C,
            behaviours={"Bobomb": 0x13003174, "Bobomb Buddy": 0x130031DC, "Bobomb Buddy (Opens Cannon)": 0x13003228},
            names=["Walking", "Strugling"],
        ),
        models={
            "Bobomb": ModelInfo(model_id=ModelIDInfo(0xBC, "MODEL_BLACK_BOBOMB"), geolayout=0xF0007B8),
            "Bobomb Buddy": ModelInfo(model_id=ModelIDInfo(0xC3, "MODEL_BOBOMB_BUDDY"), geolayout=0xF0008F4),
        },
    ),
    "Bowser Bomb": ActorPresetInfo(
        decomp_path="actors/bomb",
        group="group12",
        models=ModelInfo(
            model_id=[ModelIDInfo(0x65, "MODEL_BOWSER_BOMB_CHILD_OBJ"), ModelIDInfo(0xB3, "MODEL_BOWSER_BOMB")],
            geolayout=0xD000BBC,
        ),
    ),
    "Boo": ActorPresetInfo(
        decomp_path="actors/boo",
        group="group9",
        models=ModelInfo(model_id=ModelIDInfo(0x54, "MODEL_BOO"), geolayout=0xC000224),
    ),
    "Boo (Inside Castle)": ActorPresetInfo(
        decomp_path="actors/boo_castle",
        group="group15",
        models=ModelInfo(model_id=ModelIDInfo(0x65, "MODEL_BOO_CASTLE"), geolayout=0xD0005B0),
    ),
    "Bookend": ActorPresetInfo(
        decomp_path="actors/book",
        group="group9",
        models=ModelInfo(model_id=ModelIDInfo(0x59, "MODEL_BOOKEND"), geolayout=0xC0000C0),
    ),
    "Bookend Part": ActorPresetInfo(
        decomp_path="actors/bookend",
        group="group9",
        animation=AnimInfo(address=0x5002540, behaviours=0x1300506C, names=["Opening Mouth", "Bite", "Closed"]),
        models=ModelInfo(model_id=ModelIDInfo(0x58, "MODEL_BOOKEND_PART"), geolayout=0xC000000),
    ),
    "Metal Ball": ActorPresetInfo(
        decomp_path="actors/bowling_ball",
        group="common0",
        models={
            "Bowling Ball": ModelInfo(model_id=ModelIDInfo(0xB4, "MODEL_BOWLING_BALL"), geolayout=0xF000640),
            "Trajectory Marker Ball": ModelInfo(
                model_id=ModelIDInfo(0xE1, "MODEL_TRAJECTORY_MARKER_BALL"), geolayout=0xF00066C
            ),
        },
    ),
    "Bowser": ActorPresetInfo(
        decomp_path="actors/bowser",
        group="group12",
        animation=AnimInfo(
            address=0x60577E0,
            behaviours=0x13001850,
            size=27,
            ignore_bone_count=True,
            names=[
                "Stand Up",
                "Stand Up (Unused)",
                "Shaking",
                "Grabbed",
                "Broken Animation (Unused)",
                "Fall Down",
                "Fire Breath",
                "Jump",
                "Jump Stop",
                "Jump Start",
                "Dance",
                "Fire Breath Up",
                "Idle",
                "Slow Gait",
                "Look Down Stop Walk",
                "Look Up Start Walk",
                "Flip Down",
                "Lay Down",
                "Run Start",
                "Run",
                "Run Stop",
                "Run Slip",
                "Fire Breath Quick",
                "Edge Move",
                "Edge Stop",
                "Flip",
                "Stand Up From Flip",
            ],
        ),
        models={
            "Bowser": ModelInfo(model_id=ModelIDInfo(0x64, "MODEL_BOWSER"), geolayout=0xD000AC4),
            "Bowser (No Shadow)": ModelInfo(model_id=ModelIDInfo(0x69, "MODEL_BOWSER_NO_SHADOW"), geolayout=0xD000B40),
        },
    ),
    "Bowser Flame": ActorPresetInfo(
        decomp_path="actors/bowser_flame",
        group="group12",
        models=ModelInfo(model_id=ModelIDInfo(0x67, "MODEL_BOWSER_FLAMES"), geolayout=0xD000000),
    ),
    "Bowser Key": ActorPresetInfo(
        decomp_path="actors/bowser_key",
        group="common1",
        animation=AnimInfo(
            address=0x30172D0,
            behaviours={"Bowser Key": 0x13001BB4, "Bowser Key (Cutscene)": 0x13001BD4},
            size=2,
            names=["Unlock Door", "Course Exit"],
        ),
        models={
            "Bowser Key (Cutscene)": ModelInfo(
                model_id=ModelIDInfo(0xC8, "MODEL_BOWSER_KEY_CUTSCENE"), geolayout=0x16000AB0
            ),
            "Bowser Key": ModelInfo(model_id=ModelIDInfo(0xCC, "MODEL_BOWSER_KEY"), geolayout=0x16000A84),
        },
    ),
    "Breakable Box": ActorPresetInfo(
        decomp_path="actors/breakable_box",
        group="common0",
        models={
            "Breakable Box": ModelInfo(model_id=ModelIDInfo(0x81, "MODEL_BREAKABLE_BOX"), geolayout=0xF0005D0),
            "Breakable Box (Small)": ModelInfo(
                model_id=ModelIDInfo(0x82, "MODEL_BREAKABLE_BOX_SMALL"), geolayout=0xF000610
            ),
        },
        collision=CollisionInfo(address=0x8012D70, c_name="breakable_box_seg8_collision_08012D70"),
    ),
    "Bub": ActorPresetInfo(
        decomp_path="actors/bub",
        group="group13",
        animation=AnimInfo(address=0x6012354, behaviours=0x1300220C, names=["Swimming"]),
        models=ModelInfo(model_id=ModelIDInfo(0x64, "MODEL_BUB"), geolayout=0xD00038C),
    ),
    "Bubba": ActorPresetInfo(
        decomp_path="actors/bubba",
        group="group11",
        models=ModelInfo(model_id=ModelIDInfo(0x59, "MODEL_BUBBA"), geolayout=0xC000000),
    ),
    "Bubble": ActorPresetInfo(
        decomp_path="actors/bubble",
        group="group0",
        models={
            "Bubble": ModelInfo(model_id=ModelIDInfo(0xA8, "MODEL_BUBBLE"), geolayout=0x17000000),
            "Bubble Marble": ModelInfo(model_id=ModelIDInfo(0xAA, "MODEL_PURPLE_MARBLE"), geolayout=0x1700001C),
        },
    ),
    "Bullet Bill": ActorPresetInfo(
        decomp_path="actors/bullet_bill",
        group="group1",
        models=ModelInfo(model_id=ModelIDInfo(0x54, "MODEL_BULLET_BILL"), geolayout=0xC000264),
    ),
    "Bully": ActorPresetInfo(
        decomp_path="actors/bully",
        group="group2",
        animation=AnimInfo(
            address=0x500470C,
            behaviours={"Bully": 0x13003660, "Bully (With Minions)": 0x13003694, "Bully (Small)": 0x1300362C},
            names=["Patrol", "Chase", "Falling over (Unused)", "Knockback"],
        ),
        models=ModelInfo(model_id=ModelIDInfo(0x56, "MODEL_BULLY"), geolayout=0xC000000),
    ),
    "Burn Smoke": ActorPresetInfo(
        decomp_path="actors/burn_smoke",
        group="group0",
        models=ModelInfo(model_id=ModelIDInfo(0x94, "MODEL_BURN_SMOKE"), geolayout=0x17000084),
    ),
    "Butterfly": ActorPresetInfo(
        decomp_path="actors/butterfly",
        group="common1",
        animation=AnimInfo(
            address=0x30056B0,
            behaviours={"Butterfly": 0x130033BC, "Triplet Butterfly": 0x13005598},
            size=2,
            names=["Flying", "Resting"],
        ),
        models=ModelInfo(model_id=ModelIDInfo(0xBB, "MODEL_BUTTERFLY"), geolayout=0x160000A8),
    ),
    "Cannon Barrel": ActorPresetInfo(
        decomp_path="actors/cannon_barrel",
        group="common0",
        models=ModelInfo(model_id=ModelIDInfo(0x7F, "MODEL_CANNON_BARREL"), geolayout=0xF0001C0),
    ),
    "Cannon Base": ActorPresetInfo(
        decomp_path="actors/cannon_base",
        group="common0",
        models=ModelInfo(model_id=ModelIDInfo(0x80, "MODEL_CANNON_BASE"), geolayout=0xF0001A8),
    ),
    "Cannon Lid": ActorPresetInfo(
        decomp_path="actors/cannon_lid",
        group="common0",
        collision=CollisionInfo(address=0x8004950, c_name="cannon_lid_seg8_collision_08004950"),
        models=ModelInfo(
            model_id=ModelIDInfo(0xC9, "MODEL_DL_CANNON_LID"),
            displaylist=DisplaylistInfo(0x80048E0, "cannon_lid_seg8_dl_080048E0"),
        ),
    ),
    "Cap Switch": ActorPresetInfo(
        decomp_path="actors/capswitch",
        group="group8",
        models={
            "Cap Switch": ModelInfo(model_id=ModelIDInfo(0x55, "MODEL_CAP_SWITCH"), geolayout=0xC000048),
            "Cap Switch (Exclamation)": ModelInfo(
                model_id=ModelIDInfo(0x54, "MODEL_CAP_SWITCH_EXCLAMATION"),
                displaylist=DisplaylistInfo(0x5002E00, "cap_switch_exclamation_seg5_dl_05002E00"),
            ),
            "Cap Switch (Base)": ModelInfo(
                model_id=ModelIDInfo(0x56, "MODEL_CAP_SWITCH_BASE"),
                displaylist=DisplaylistInfo(0x5003120, "cap_switch_base_seg5_dl_05003120"),
            ),
        },
        collision={
            "Cap Switch (Base)": CollisionInfo(address=0x50033D0, c_name="capswitch_collision_050033D0"),
            "Cap Switch (Top)": CollisionInfo(address=0x5003448, c_name="capswitch_collision_05003448"),
        },
    ),
    "Chain Ball": ActorPresetInfo(  # also known as metallic ball
        decomp_path="actors/chain_ball",
        group="group14",
        models=ModelInfo(model_id=ModelIDInfo(0x65, "MODEL_METALLIC_BALL"), geolayout=0xD0005D0),
    ),
    "Chain Chomp": ActorPresetInfo(
        decomp_path="actors/chain_chomp",
        group="group14",
        animation=AnimInfo(address=0x6025178, behaviours=0x1300478C, names=["Chomping"]),
        models=ModelInfo(model_id=ModelIDInfo(0x66, "MODEL_CHAIN_CHOMP"), geolayout=0xD0005EC),
    ),
    "Haunted Chair": ActorPresetInfo(
        decomp_path="actors/chair",
        group="group9",
        animation=AnimInfo(address=0x5005784, behaviours=0x13004FD4, names=["Default Pose"]),
        models=ModelInfo(model_id=ModelIDInfo(0x56, "MODEL_HAUNTED_CHAIR"), geolayout=0xC0000D8),
    ),
    "Checkerboard Platform": ActorPresetInfo(
        decomp_path="actors/checkerboard_platform",
        group="common0",
        models=ModelInfo(model_id=ModelIDInfo(0xCA, "MODEL_CHECKERBOARD_PLATFORM"), geolayout=0xF0004E4),
        collision=CollisionInfo(address=0x800D710, c_name="checkerboard_platform_seg8_collision_0800D710"),
    ),
    "Chilly Chief": ActorPresetInfo(
        decomp_path="actors/chilly_chief",
        group="group16",
        animation=AnimInfo(
            address=0x6003994,
            behaviours={"Chilly Chief (Small)": 0x130036C8, "Chilly Chief (Big)": 0x13003700},
            names=["Patrol", "Chase", "Falling over (Unused)", "Knockback"],
        ),
        models={
            "Chilly Chief (Small)": ModelInfo(model_id=ModelIDInfo(0x64, "MODEL_CHILL_BULLY"), geolayout=0x6003754),
            "Chilly Chief (Big)": ModelInfo(model_id=ModelIDInfo(0x65, "MODEL_BIG_CHILL_BULLY"), geolayout=0x6003874),
        },
    ),
    "Chuckya": ActorPresetInfo(
        decomp_path="actors/chuckya",
        group="common0",
        animation=AnimInfo(
            address=0x800C070,
            behaviours=0x13000528,
            names=["Grab Mario", "Holding Mario", "Being Held", "Throwing", "Moving", "Balancing/Idle (Unused)"],
        ),
        models=ModelInfo(model_id=ModelIDInfo(0xDF, "MODEL_CHUCKYA"), geolayout=0xF0001D8),
    ),
    "Clam Shell": ActorPresetInfo(
        decomp_path="actors/clam",
        group="group4",
        animation=AnimInfo(address=0x5001744, behaviours=0x13005440, names=["Close", "Open"]),
        models=ModelInfo(model_id=ModelIDInfo(0x58, "MODEL_CLAM_SHELL"), geolayout=0xC000000),
    ),
    "Coin": ActorPresetInfo(
        decomp_path="actors/coin",
        group="common1",
        models={
            "Yellow Coin": ModelInfo(model_id=ModelIDInfo(0x74, "MODEL_YELLOW_COIN"), geolayout=0x1600013C),
            "Yellow Coin (No Shadow)": ModelInfo(
                model_id=ModelIDInfo(0x75, "MODEL_YELLOW_COIN_NO_SHADOW"), geolayout=0x160001A0
            ),
            "Blue Coin": ModelInfo(model_id=ModelIDInfo(0x76, "MODEL_BLUE_COIN"), geolayout=0x16000200),
            "Blue Coin (No Shadow)": ModelInfo(
                model_id=ModelIDInfo(0x77, "MODEL_BLUE_COIN_NO_SHADOW"), geolayout=0x16000264
            ),
            "Red Coin": ModelInfo(model_id=ModelIDInfo(0xD7, "MODEL_RED_COIN"), geolayout=0x160002C4),
            "Red Coin (No Shadow)": ModelInfo(
                model_id=ModelIDInfo(0xD8, "MODEL_RED_COIN_NO_SHADOW"), geolayout=0x16000328
            ),
        },
    ),
    "Cyan Fish": ActorPresetInfo(
        decomp_path="actors/cyan_fish",
        group="group13",
        animation=AnimInfo(address=0x600E264, names=["Swimming"]),
        models=ModelInfo(model_id=ModelIDInfo(0x67, "MODEL_CYAN_FISH"), geolayout=0xD000324),
    ),
    "Dirt": ActorPresetInfo(
        decomp_path="actors/dirt",
        group="common1",
        models={
            "Dirt": ModelInfo(model_id=ModelIDInfo(0x8A, "MODEL_DIRT_ANIMATION"), geolayout=0x16000ED4),
            "(Unused) Cartoon Start": ModelInfo(model_id=ModelIDInfo(0x8B, "MODEL_CARTOON_STAR"), geolayout=0x16000F24),
        },
    ),
    "Door": ActorPresetInfo(
        decomp_path="actors/door",
        group="common1",
        animation=AnimInfo(
            address=0x30156C0,
            behaviours=0x13000B0C,
            names=[
                "Closed",
                "Open and Close",
                "Open and Close (Slower?)",
                "Open and Close (Slower? Last 10 frames)",
                "Open and Close (Last 10 frames)",
            ],
            ignore_bone_count=True,
        ),
        models={
            "Castle Door": ModelInfo(
                model_id=[
                    ModelIDInfo(0x26, "MODEL_CASTLE_GROUNDS_CASTLE_DOOR"),
                    ModelIDInfo(0x26, "MODEL_CASTLE_CASTLE_DOOR"),
                    ModelIDInfo(0x1C, "MODEL_CASTLE_CASTLE_DOOR_UNUSED"),
                ],
                geolayout=0x160003A8,
            ),
            "Cabin Door": ModelInfo(model_id=ModelIDInfo(0x27, "MODEL_CCM_CABIN_DOOR"), geolayout=0x1600043C),
            "Wooden Door": ModelInfo(
                model_id=[
                    ModelIDInfo(0x1D, "MODEL_CASTLE_WOODEN_DOOR_UNUSED"),
                    ModelIDInfo(0x1D, "MODEL_HMC_WOODEN_DOOR"),
                    ModelIDInfo(0x27, "MODEL_CASTLE_WOODEN_DOOR"),
                    ModelIDInfo(0x27, "MODEL_COURTYARD_WOODEN_DOOR"),
                ],
                geolayout=0x160004D0,
            ),
            "Wooden Door 2": ModelInfo(geolayout=0x16000564),
            "Metal Door": ModelInfo(
                model_id=[
                    ModelIDInfo(0x1F, "MODEL_HMC_METAL_DOOR"),
                    ModelIDInfo(0x29, "MODEL_CASTLE_METAL_DOOR"),
                    ModelIDInfo(0x29, "MODEL_CASTLE_GROUNDS_METAL_DOOR"),
                ],
                geolayout=0x16000618,
            ),
            "Hazy Maze Door": ModelInfo(model_id=ModelIDInfo(0x20, "MODEL_HMC_HAZY_MAZE_DOOR"), geolayout=0x1600068C),
            "Haunted Door": ModelInfo(model_id=ModelIDInfo(0x1D, "MODEL_BBH_HAUNTED_DOOR"), geolayout=0x16000720),
            "Castle Door (0 Star)": ModelInfo(
                model_id=ModelIDInfo(0x22, "MODEL_CASTLE_DOOR_0_STARS"), geolayout=0x160007B4
            ),
            "Castle Door (1 Star)": ModelInfo(
                model_id=ModelIDInfo(0x23, "MODEL_CASTLE_DOOR_1_STAR"), geolayout=0x16000868
            ),
            "Castle Door (3 Star)": ModelInfo(
                model_id=ModelIDInfo(0x24, "MODEL_CASTLE_DOOR_3_STARS"), geolayout=0x1600091C
            ),
            "Key Door": ModelInfo(model_id=ModelIDInfo(0x25, "MODEL_CASTLE_KEY_DOOR"), geolayout=0x160009D0),
        },
    ),
    "Dorrie": ActorPresetInfo(
        decomp_path="actors/dorrie",
        group="group17",
        animation=AnimInfo(
            address=0x600F638, behaviours=0x13004F90, size=3, names=["Idle", "Moving", "Lower and Raise Head"]
        ),
        models=ModelInfo(model_id=ModelIDInfo(0x68, "MODEL_DORRIE"), geolayout=0xD000230),
    ),
    "Exclamation Box": ActorPresetInfo(
        decomp_path="actors/exclamation_box",
        group="common0",
        models=ModelInfo(model_id=ModelIDInfo(0x89, "MODEL_EXCLAMATION_BOX"), geolayout=0xF000694),
    ),
    "Exclamation Box Outline": ActorPresetInfo(
        decomp_path="actors/exclamation_box_outline",
        group="common0",
        models={
            "Exclamation Box Outline": ModelInfo(
                model_id=ModelIDInfo(0x83, "MODEL_EXCLAMATION_BOX_OUTLINE"), geolayout=0xF000A5A
            ),
            "Exclamation Point": ModelInfo(
                model_id=ModelIDInfo(0x84, "MODEL_EXCLAMATION_POINT"),
                displaylist=DisplaylistInfo(0x8025F08, "exclamation_box_outline_seg8_dl_08025F08"),
            ),
        },
        collision=CollisionInfo(address=0x8025F78, c_name="exclamation_box_outline_seg8_collision_08025F78"),
    ),
    "Explosion": ActorPresetInfo(
        decomp_path="actors/explosion",
        group="common1",
        models=ModelInfo(model_id=ModelIDInfo(0xCD, "MODEL_EXPLOSION"), geolayout=0x16000040),
    ),
    "Eyerok": ActorPresetInfo(
        decomp_path="actors/eyerok",
        group="group5",
        animation=AnimInfo(
            address=0x50116E4,
            behaviours=0x130052B4,
            names=["Recovering", "Death", "Idle", "Attacked", "Open", "Show Eye", "Sleep", "Close"],
        ),
        models={
            "Eyerok Left Hand": ModelInfo(model_id=ModelIDInfo(0x58, "MODEL_EYEROK_LEFT_HAND"), geolayout=0xC0005A8),
            "Eyerok Right Hand": ModelInfo(model_id=ModelIDInfo(0x59, "MODEL_EYEROK_RIGHT_HAND"), geolayout=0xC0005E4),
        },
    ),
    "Flame": ActorPresetInfo(
        decomp_path="actors/flame",
        group="common1",
        models={
            "Red Flame (With Shadow)": ModelInfo(
                model_id=ModelIDInfo(0xCB, "MODEL_RED_FLAME_SHADOW"), geolayout=0x16000B10
            ),
            "Red Flame": ModelInfo(model_id=ModelIDInfo(0x90, "MODEL_RED_FLAME"), geolayout=0x16000B2C),
            "Blue Flame": ModelInfo(model_id=ModelIDInfo(0x91, "MODEL_BLUE_FLAME"), geolayout=0x16000B8C),
        },
    ),
    "Fly Guy": ActorPresetInfo(
        decomp_path="actors/flyguy",
        group="common0",
        animation=AnimInfo(address=0x8011A64, behaviours=0x130046DC, names=["Flying"]),
        models=ModelInfo(model_id=ModelIDInfo(0xDC, "MODEL_FLYGUY"), geolayout=0xF000518),
    ),
    "Fwoosh": ActorPresetInfo(
        decomp_path="actors/fwoosh",
        group="group6",
        models=ModelInfo(model_id=ModelIDInfo(0x57, "MODEL_FWOOSH"), geolayout=0xC00036C),
    ),
    "Goomba": ActorPresetInfo(
        decomp_path="actors/goomba",
        group="common0",
        animation=AnimInfo(address=0x801DA4C, behaviours=0x1300472C, names=["Walking"]),
        models=ModelInfo(model_id=ModelIDInfo(0xC0, "MODEL_GOOMBA"), geolayout=0xF0006E4),
    ),
    "Haunted Cage": ActorPresetInfo(
        decomp_path="actors/haunted_cage",
        group="group9",
        models=ModelInfo(model_id=ModelIDInfo(0x5A, "MODEL_HAUNTED_CAGE"), geolayout=0xC000274),
    ),
    "Heart": ActorPresetInfo(
        decomp_path="actors/heart",
        group="common0",
        models=ModelInfo(model_id=ModelIDInfo(0x78, "MODEL_HEART"), geolayout=0xF0004FC),
    ),
    "Heave-Ho": ActorPresetInfo(
        decomp_path="actors/heave_ho",
        group="group1",
        animation=AnimInfo(address=0x501534C, behaviours=0x13001548, names=["Moving", "Throwing", "Stop"]),
        models=ModelInfo(model_id=ModelIDInfo(0x59, "MODEL_HEAVE_HO"), geolayout=0xC00028C),
    ),
    "Hoot": ActorPresetInfo(
        decomp_path="actors/hoot",
        group="group1",
        animation=AnimInfo(address=0x5005768, behaviours=0x130033EC, names=["Flying", "Flying Fast"]),
        models=ModelInfo(model_id=ModelIDInfo(0x56, "MODEL_HOOT"), geolayout=0xC000018),
    ),
    "Bowser Impact Ring": ActorPresetInfo(
        decomp_path="actors/impact_ring",
        group="group12",
        models=ModelInfo(model_id=ModelIDInfo(0x68, "MODEL_BOWSER_WAVE"), geolayout=0xD000090),
    ),
    "Bowser Impact Smoke": ActorPresetInfo(
        decomp_path="actors/impact_smoke",
        group="group12",
        models=ModelInfo(model_id=ModelIDInfo(0x66, "MODEL_BOWSER_SMOKE"), geolayout=0xD000BFC),
    ),
    "King Bobomb": ActorPresetInfo(
        decomp_path="actors/bobomb",
        group="group3",
        animation=AnimInfo(
            address=0x500FE30,
            behaviours=0x130001F4,
            size=12,
            names=[
                "Grab Mario",
                "Holding Mario",
                "Hit Ground",
                "Unkwnown (Unused)",
                "Stomp",
                "Idle",
                "Being Held",
                "Landing",
                "Jump",
                "Throw Mario",
                "Stand Up",
                "Walking",
            ],
        ),
        models=ModelInfo(model_id=ModelIDInfo(0x56, "MODEL_KING_BOBOMB"), geolayout=0xC000000),
    ),
    "Klepto": ActorPresetInfo(
        decomp_path="actors/klepto",
        group="group5",
        animation=AnimInfo(
            address=0x5008CFC,
            behaviours=0x13005310,
            names=[
                "Dive",
                "Struck By Mario",
                "Dive at Mario",
                "Dive at Mario 2",
                "Dive at Mario 3",
                "Dive at Mario 4",
                "Dive Flap",
                "Dive Flap 2",
            ],
        ),
        models=ModelInfo(model_id=ModelIDInfo(0x57, "MODEL_KLEPTO"), geolayout=0xC000000),
    ),
    "Koopa": ActorPresetInfo(
        decomp_path="actors/koopa",
        group="group14",
        animation=AnimInfo(
            address=0x6011364,
            behaviours=0x13004580,
            names=[
                "Falling Over (Unused Shelled Act 3)",
                "Run Away",
                "Laying (Unshelled)",
                "Running",
                "Run (Unused)",
                "Laying (Shelled)",
                "Stand Up",
                "Stopped",
                "Wake Up (Unused)",
                "Walk",
                "Walk Stop",
                "Walk Start",
                "Jump",
                "Land",
            ],
        ),
        models={
            "Koopa (Without Shell)": ModelInfo(
                model_id=ModelIDInfo(0xBF, "MODEL_KOOPA_WITHOUT_SHELL"), geolayout=0xD0000D0
            ),
            "Koopa (With Shell)": ModelInfo(model_id=ModelIDInfo(0x68, "MODEL_KOOPA_WITH_SHELL"), geolayout=0xD000214),
        },
    ),
    "Koopa Flag": ActorPresetInfo(
        decomp_path="actors/koopa_flag",
        group="group14",
        animation=AnimInfo(address=0x6001028, behaviours=0x130045F8, names=["Waving"]),
        models=ModelInfo(model_id=ModelIDInfo(0x6A, "MODEL_KOOPA_FLAG"), geolayout=0xD000000),
    ),
    "Koopa Shell": ActorPresetInfo(
        decomp_path="actors/koopa_shell",
        group="common0",
        models={
            "Koopa Shell": ModelInfo(model_id=ModelIDInfo(0xBE, "MODEL_KOOPA_SHELL"), geolayout=0xF000AB0),
            "(Unused) Koopa Shell 1": ModelInfo(geolayout=0xF000ADC),
            "(Unused) Koopa Shell 2": ModelInfo(geolayout=0xF000B08),
        },
    ),
    "Lakitu (Cameraman)": ActorPresetInfo(
        decomp_path="actors/lakitu_cameraman",
        group="group15",
        animation=AnimInfo(
            address=0x60058F8,
            behaviours={"Lakitu (Beginning)": 0x13005610, "Lakitu (Cameraman)": 0x13004954},
            names=["Flying"],
        ),
        models=ModelInfo(model_id=ModelIDInfo(0x66, "MODEL_LAKITU"), geolayout=0xD000000),
    ),
    "Lakitu (Enemy)": ActorPresetInfo(
        decomp_path="actors/lakitu_enemy",
        group="group11",
        animation=AnimInfo(
            address=0x50144D4, behaviours=0x13004918, names=["Flying", "No Spiny", "Throw Spiny", "Hold Spiny"]
        ),
        models=ModelInfo(model_id=ModelIDInfo(0x54, "MODEL_ENEMY_LAKITU"), geolayout=0xC0001BC),
    ),
    "Leaves": ActorPresetInfo(
        decomp_path="actors/leaves",
        group="common1",
        models=ModelInfo(model_id=ModelIDInfo(0xA2, "MODEL_LEAVES"), geolayout=0x16000C8C),
    ),
    "Mad Piano": ActorPresetInfo(
        decomp_path="actors/mad_piano",
        group="group9",
        animation=AnimInfo(address=0x5009B14, behaviours=0x13005024, names=["Sleeping", "Chomping"]),
        models=ModelInfo(model_id=ModelIDInfo(0x57, "MODEL_MAD_PIANO"), geolayout=0xC0001B4),
    ),
    "Manta Ray": ActorPresetInfo(
        decomp_path="actors/manta",
        group="group4",
        animation=AnimInfo(address=0x5008EB4, behaviours=0x13004370, names=["Swimming"]),
        models=ModelInfo(model_id=ModelIDInfo(0x54, "MODEL_MANTA_RAY"), geolayout=0x5008D14),
    ),
    "Mario": ActorPresetInfo(
        decomp_path="actors/mario",
        group="group0",
        animation=AnimInfo(
            address=0x4EC000,
            dma=True,
            directory="assets/anims",
            names=[
                "Slow ledge climb up",
                "Fall over backwards",
                "Backward air kb",
                "Dying on back",
                "Backflip",
                "Climbing up pole",
                "Grab pole short",
                "Grab pole swing part 1",
                "Grab pole swing part 2",
                "Handstand idle",
                "Handstand jump",
                "Start handstand",
                "Return from handstand",
                "Idle on pole",
                "A pose",
                "Skid on ground",
                "Stop skid",
                "Crouch from fast longjump",
                "Crouch from a slow longjump",
                "Fast longjump",
                "Slow longjump",
                "Airborne on stomach",
                "Walk with light object",
                "Run with light object",
                "Slow walk with light object",
                "Shivering and warming hands",
                "Shivering return to idle ",
                "Shivering",
                "Climb down on ledge",
                "Waving (Credits)",
                "Look up (Credits)",
                "Return from look up (Credits)",
                "Raising hand (Credits)",
                "Lowering hand (Credits)",
                "Taking off cap (Credits)",
                "Start walking and look up (Credits)",
                "Look back then run (Credits)",
                "Final Bowser - Raise hand and spin",
                "Final Bowser - Wing cap take off",
                "Peach sign (Credits)",
                "Stand up from lava boost",
                "Fire/Lava burn",
                "Wing cap flying",
                "Hang on owl",
                "Land on stomach",
                "Air forward kb",
                "Dying on stomach",
                "Suffocating",
                "Coughing",
                "Throw catch key",
                "Dying fall over",
                "Idle on ledge",
                "Fast ledge grab",
                "Hang on ceiling",
                "Put cap on",
                "Take cap off then on",
                "Quickly put cap on",
                "Head stuck in ground",
                "Ground pound landing",
                "Triple jump ground-pound",
                "Start ground-pound",
                "Ground-pound",
                "Bottom stuck in ground",
                "Idle with light object",
                "Jump land with light object",
                "Jump with light object",
                "Fall land with light object",
                "Fall with light object",
                "Fall from sliding with light object",
                "Sliding on bottom with light object",
                "Stand up from sliding with light object",
                "Riding shell",
                "Walking",
                "Forward flip",
                "Jump riding shell",
                "Land from double jump",
                "Double jump fall",
                "Single jump",
                "Land from single jump",
                "Air kick",
                "Double jump rise",
                "Start forward spinning",
                "Throw light object",
                "Fall from slide kick",
                "Bend kness riding shell",
                "Legs stuck in ground",
                "General fall",
                "General land",
                "Being grabbed",
                "Grab heavy object",
                "Slow land from dive",
                "Fly from cannon",
                "Moving right while hanging",
                "Moving left while hanging",
                "Missing cap",
                "Pull door walk in",
                "Push door walk in",
                "Unlock door",
                "Start reach pocket",
                "Reach pocket",
                "Stop reach pocket",
                "Ground throw",
                "Ground kick",
                "First punch",
                "Second punch",
                "First punch fast",
                "Second punch fast",
                "Pick up light object",
                "Pushing",
                "Start riding shell",
                "Place light object",
                "Forward spinning",
                "Backward spinning",
                "Breakdance",
                "Running",
                "Running (unused)",
                "Soft back kb",
                "Soft front kb",
                "Dying in quicksand",
                "Idle in quicksand",
                "Move in quicksand",
                "Electrocution",
                "Shocked",
                "Backward kb",
                "Forward kb",
                "Idle heavy object",
                "Stand against wall",
                "Side step left",
                "Side step right",
                "Start sleep idle",
                "Start sleep scratch",
                "Start sleep yawn",
                "Start sleep sitting",
                "Sleep idle",
                "Sleep start laying",
                "Sleep laying",
                "Dive",
                "Slide dive",
                "Ground bonk",
                "Stop slide light object",
                "Slide kick",
                "Crouch from slide kick",
                "Slide motionless",
                "Stop slide",
                "Fall from slide",
                "Slide",
                "Tiptoe",
                "Twirl land",
                "Twirl",
                "Start twirl",
                "Stop crouching",
                "Start crouching",
                "Crouching",
                "Crawling",
                "Stop crawling",
                "Start crawling",
                "Summon star",
                "Return star approach door",
                "Backwards water kb",
                "Swim with object part 1",
                "Swim with object part 2",
                "Flutter kick with object",
                "Action end with object in water",
                "Stop holding object in water",
                "Holding object in water",
                "Drowning part 1",
                "Drowning part 2",
                "Dying in water",
                "Forward kb in water",
                "Falling from water",
                "Swimming part 1",
                "Swimming part 2",
                "Flutter kick",
                "Action end in water",
                "Pick up object in water",
                "Grab object in water part 2",
                "Grab object in water part 1",
                "Throw object in water",
                "Idle in water",
                "Star dance in water",
                "Return from in water star dance",
                "Grab bowser",
                "Swing bowser",
                "Release bowser",
                "Holding bowser",
                "Heavy throw",
                "Walk panting",
                "Walk with heavy object",
                "Turning part 1",
                "Turning part 2",
                "Side flip land",
                "Side flip",
                "Triple jump land",
                "Triple jump",
                "First person",
                "Idle head left",
                "Idle head right",
                "Idle head center",
                "Handstand left",
                "Handstand right",
                "Wake up from sleeping",
                "Wake up from laying",
                "Start tiptoeing",
                "Slide jump",
                "Start wallkick",
                "Star dance",
                "Return from star dance",
                "Forwards spinning flip",
                "Triple jump fly",
            ],
        ),
        models=ModelInfo(model_id=ModelIDInfo(0x1, "MODEL_MARIO"), geolayout=0x17002DD4),
    ),
    "Mario's Cap": ActorPresetInfo(
        decomp_path="actors/mario_cap",
        group="common1",
        models={
            "Mario's Cap": ModelInfo(model_id=ModelIDInfo(0x88, "MODEL_MARIOS_CAP"), geolayout=0x16000CA4),
            "Mario's Metal Cap": ModelInfo(model_id=ModelIDInfo(0x86, "MODEL_MARIOS_METAL_CAP"), geolayout=0x16000CF0),
            "Mario's Wing Cap": ModelInfo(model_id=ModelIDInfo(0x87, "MODEL_MARIOS_WING_CAP"), geolayout=0x16000D3C),
            "Mario's Winged Metal Cap": ModelInfo(
                model_id=ModelIDInfo(0x85, "MODEL_MARIOS_WINGED_METAL_CAP"), geolayout=0x16000DA8
            ),
        },
    ),
    "Metal Box": ActorPresetInfo(
        decomp_path="actors/metal_box",
        group="common0",
        models={
            "Metal Box": ModelInfo(model_id=ModelIDInfo(0xD9, "MODEL_METAL_BOX"), geolayout=0xF000A30),
            "Metal Box (DL)": ModelInfo(
                model_id=ModelIDInfo(0xDA, "MODEL_METAL_BOX_DL"), displaylist=DisplaylistInfo(0x8024BB8, "metal_box_dl")
            ),
        },
        collision=CollisionInfo(address=0x8024C28, c_name="metal_box_seg8_collision_08024C28"),
    ),
    "Mips": ActorPresetInfo(
        decomp_path="actors/mips",
        group="group15",
        animation=AnimInfo(
            address=0x6015724, behaviours=0x130044FC, names=["Idle", "Hopping", "Thrown", "Thrown (Unused)", "Held"]
        ),
        models=ModelInfo(model_id=ModelIDInfo(0x64, "MODEL_MIPS"), geolayout=0xD000448),
    ),
    "Mist": ActorPresetInfo(
        decomp_path="actors/mist",
        group="common1",
        models={
            "Mist": ModelInfo(model_id=ModelIDInfo(0x8E, "MODEL_MIST"), geolayout=0x16000000),
            "White Puff": ModelInfo(model_id=ModelIDInfo(0xE0, "MODEL_WHITE_PUFF"), geolayout=0x16000020),
        },
    ),
    "Moneybag": ActorPresetInfo(
        decomp_path="actors/moneybag",
        group="group16",
        animation=AnimInfo(address=0x6005E5C, behaviours=0x130039A0, names=["Idle", "Prepare", "Jump", "Land", "Walk"]),
        models=ModelInfo(model_id=ModelIDInfo(0x66, "MODEL_MONEYBAG"), geolayout=0xD0000F0),
    ),
    "Monty Mole": ActorPresetInfo(
        decomp_path="actors/monty_mole",
        group="group6",
        animation=AnimInfo(
            address=0x5007248,
            behaviours=0x13004A00,
            names=[
                "Jump Into Hole",
                "Rise",
                "Get Rock",
                "Begin Jump Into Hole",
                "Jump Out Of Hole Down",
                "Unused 5",  # TODO: Figure out
                "Unused 6",
                "Unused 7",
                "Throw Rock",
                "Jump Out Of Hole Up",
            ],
        ),
        models=ModelInfo(model_id=ModelIDInfo(0x55, "MODEL_MONTY_MOLE"), geolayout=0xC000000),
    ),
    "Montey Mole Hole": ActorPresetInfo(
        decomp_path="actors/monty_mole_hole",
        group="group6",
        models=ModelInfo(
            model_id=ModelIDInfo(0x54, "MODEL_DL_MONTY_MOLE_HOLE"),
            displaylist=DisplaylistInfo(0x5000840, "monty_mole_hole_seg5_dl_05000840"),
        ),
    ),
    "Mr. I Eyeball": ActorPresetInfo(
        decomp_path="actors/mr_i_eyeball",
        group="group16",
        models=ModelInfo(model_id=ModelIDInfo(0x67, "MODEL_MR_I"), geolayout=0xD000000),
    ),
    "Mr. I Iris": ActorPresetInfo(
        decomp_path="actors/mr_i_iris",
        group="group16",
        models=ModelInfo(model_id=ModelIDInfo(0x66, "MODEL_MR_I_IRIS"), geolayout=0xD00001C),
    ),
    "Mushroom 1up": ActorPresetInfo(
        decomp_path="actors/mushroom_1up",
        group="common1",
        models=ModelInfo(model_id=ModelIDInfo(0xD4, "MODEL_1UP"), geolayout=0x16000E84),
    ),
    "Orange Numbers": ActorPresetInfo(
        decomp_path="actors/number",
        group="common1",
        models=ModelInfo(model_id=ModelIDInfo(0xDB, "MODEL_NUMBER"), geolayout=0x16000E14),
    ),
    "Peach": ActorPresetInfo(
        decomp_path="actors/peach",
        group="group10",
        animation=AnimInfo(
            address=0x501C504,
            behaviours={"Peach (Beginning)": 0x13005638, "Peach (End)": 0x13000EAC},
            names=[
                "Listen Everybody",
                "Turning Away",
                "Walking away",
                "Walking away 2",
                "Descend",
                "Descend And Look Down",
                "Look Up And Open Eyes",
                "Mario",
                "Power Of The Stars",
                "Thanks To You",
                "Kiss",
                "Waving",
            ],
        ),
        models=ModelInfo(model_id=ModelIDInfo(0xDE, "MODEL_PEACH"), geolayout=0xC000410),
    ),
    "Pebble": ActorPresetInfo(
        decomp_path="actors/pebble",
        group="common1",
        models=ModelInfo(
            model_id=ModelIDInfo(0xA1, "MODEL_PEBBLE"),
            displaylist=DisplaylistInfo(0x301CB00, "pebble_seg3_dl_0301CB00"),
        ),
    ),
    "Penguin": ActorPresetInfo(
        decomp_path="actors/penguin",
        group="group7",
        animation=AnimInfo(
            address=0x5008B74,
            behaviours={
                "Penguin (Tuxies Mother)": 0x13002088,
                "Penguin (Small)": 0x130020E8,
                "Penguin (SML)": 0x13002E58,
                "Racing Penguin": 0x13005380,
            },
            size=5,
            names=["Walk", "Dive Slide", "Stand Up", "Idle", "Walk"],
        ),
        models=ModelInfo(model_id=ModelIDInfo(0x57, "MODEL_PENGUIN"), geolayout=0xC000104),
        collision=CollisionInfo(address=0x5008B88, c_name="penguin_seg5_collision_05008B88"),
    ),
    "Piranha Plant": ActorPresetInfo(
        decomp_path="actors/piranha_plant",
        group="group14",
        animation=AnimInfo(
            address=0x601C31C,
            behaviours={"Fire Piranha Plant": 0x13005120, "Piranha Plant": 0x13001FBC},
            names=[
                "Bite",
                "Sleeping? (Unused)",
                "Falling over",
                "Bite (Unused)",
                "Grow",
                "Attacked",
                "Stop Bitting",
                "Sleeping (Unused)",
                "Sleeping",
                "Bite (Duplicate)",
            ],
        ),
        models=ModelInfo(model_id=ModelIDInfo(0x64, "MODEL_PIRANHA_PLANT"), geolayout=0xD000358),
    ),
    "Pokey": ActorPresetInfo(
        decomp_path="actors/pokey",
        group="group5",
        models={
            "Pokey Head": ModelInfo(model_id=ModelIDInfo(0x54, "MODEL_POKEY_HEAD"), geolayout=0xC000610),
            "Pokey Body Part": ModelInfo(model_id=ModelIDInfo(0x55, "MODEL_POKEY_BODY_PART"), geolayout=0xC000644),
        },
    ),
    "Wooden Post": ActorPresetInfo(
        decomp_path="actors/poundable_pole",
        group="group14",
        models=ModelInfo(model_id=ModelIDInfo(0x6B, "MODEL_WOODEN_POST"), geolayout=0xD0000B8),
        collision=CollisionInfo(address=0x6002490, c_name="poundable_pole_collision_06002490"),
    ),
    # Should the power meter be included?
    "Power Meter": ActorPresetInfo(
        decomp_path="actors/power_meter",
        group="common1",
        models={
            "Power Meter (Base)": ModelInfo(displaylist=DisplaylistInfo(0x3029480, "dl_power_meter_base")),
            "Power Meter (Health)": ModelInfo(
                displaylist=DisplaylistInfo(0x3029570, "dl_power_meter_health_segments_begin")
            ),
        },
    ),
    "Purple Switch": ActorPresetInfo(
        decomp_path="actors/purple_switch",
        group="common0",
        models=ModelInfo(model_id=ModelIDInfo(0xCF, "MODEL_PURPLE_SWITCH"), geolayout=0xF0004CC),
        collision=CollisionInfo(address=0x800C7A8, c_name="purple_switch_seg8_collision_0800C7A8"),
    ),
    "Sand": ActorPresetInfo(
        decomp_path="actors/sand",
        group="common1",
        models=ModelInfo(
            model_id=ModelIDInfo(0x9F, "MODEL_SAND_DUST"),
            displaylist=DisplaylistInfo(0x302BCD0, "sand_seg3_dl_0302BCD0"),
        ),
    ),
    "Scuttlebug": ActorPresetInfo(
        decomp_path="actors/scuttlebug",
        group="group17",
        animation=AnimInfo(address=0x6015064, behaviours=0x13002B5C, names=["Walking"]),
        models=ModelInfo(model_id=ModelIDInfo(0x65, "MODEL_SCUTTLEBUG"), geolayout=0xD000394),
    ),
    "Seaweed": ActorPresetInfo(
        decomp_path="actors/seaweed",
        group="group13",
        animation=AnimInfo(address=0x0600A4D4, behaviours=0x13003134, size=1, names=["Wave"]),
        models=ModelInfo(model_id=ModelIDInfo(0xC1, "MODEL_SEAWEED"), geolayout=0xD000284),
    ),
    "Skeeter": ActorPresetInfo(
        decomp_path="actors/skeeter",
        group="group13",
        animation=AnimInfo(
            address=0x6007DE0, behaviours=0x13005468, size=4, names=["Water Lunge", "Water Idle", "Walk", "Idle"]
        ),
        models=ModelInfo(model_id=ModelIDInfo(0x69, "MODEL_SKEETER"), geolayout=0xD000000),
    ),
    "(Beta) Boo Key": ActorPresetInfo(
        decomp_path="actors/small_key",
        group="group9",
        models=ModelInfo(model_id=ModelIDInfo(0x55, "MODEL_BETA_BOO_KEY"), geolayout=0xC000188),
    ),
    "(Unused) Smoke": ActorPresetInfo(  # TODO: double check
        decomp_path="actors/smoke",
        group="group6",
        models=ModelInfo(displaylist=DisplaylistInfo(0x5007AF8, "smoke_seg5_dl_05007AF8")),
    ),
    "Mr. Blizzard": ActorPresetInfo(
        decomp_path="actors/snowman",
        group="group7",
        animation=AnimInfo(
            address=0x500D118, behaviours={"Mr. Blizzard": 0x13004DBC}, names=["Spawn Snowball", "Throw Snowball"]
        ),
        models={
            "Mr. Blizzard": ModelInfo(model_id=ModelIDInfo(0x56, "MODEL_MR_BLIZZARD"), geolayout=0xC000348),
            "Mr. Blizzard (Hidden)": ModelInfo(
                model_id=ModelIDInfo(0x55, "MODEL_MR_BLIZZARD_HIDDEN"), geolayout=0xC00021C
            ),
        },
    ),
    "Snufit": ActorPresetInfo(
        decomp_path="actors/snufit",
        group="group17",
        models=ModelInfo(model_id=ModelIDInfo(0xCE, "MODEL_SNUFIT"), geolayout=0xD0001A0),
    ),
    "Sparkle": ActorPresetInfo(
        decomp_path="actors/sparkle",
        group="group0",
        models=ModelInfo(model_id=ModelIDInfo(0x95, "MODEL_SPARKLES"), geolayout=0x170001BC),
    ),
    "Sparkle Animation": ActorPresetInfo(
        decomp_path="actors/sparkle_animation",
        group="group0",
        models=ModelInfo(model_id=ModelIDInfo(0x8F, "MODEL_SPARKLES_ANIMATION"), geolayout=0x17000284),
    ),
    "Spindrift": ActorPresetInfo(
        decomp_path="actors/spindrift",
        group="group7",
        animation=AnimInfo(address=0x5002D68, behaviours=0x130012B4, names=["Flying"]),
        models=ModelInfo(model_id=ModelIDInfo(0x54, "MODEL_SPINDRIFT"), geolayout=0xC000000),
    ),
    "Spiny": ActorPresetInfo(
        decomp_path="actors/spiny",
        group="group11",
        animation=AnimInfo(address=0x5016EAC, behaviours={"Spiny": 0x130049C8}, names=["Walk"]),
        models=ModelInfo(model_id=ModelIDInfo(0x56, "MODEL_SPINY"), geolayout=0xC000328),
    ),
    "Spiny Egg": ActorPresetInfo(
        decomp_path="actors/spiny_egg",
        group="group11",
        animation=AnimInfo(address=0x50157E4, names=["Default"]),
        models=ModelInfo(model_id=ModelIDInfo(0x55, "MODEL_SPINY_BALL"), geolayout=0xC000290),
    ),
    "Springboard": ActorPresetInfo(
        decomp_path="actors/springboard",
        group="group8",
        models={
            "Springboard Top": ModelInfo(model_id=ModelIDInfo(0xB5, "MODEL_TRAMPOLINE"), geolayout=0xC000000),
            "Springboard Middle": ModelInfo(model_id=ModelIDInfo(0xB6, "MODEL_TRAMPOLINE_CENTER"), geolayout=0xC000018),
            "Springboard Bottom": ModelInfo(model_id=ModelIDInfo(0xB7, "MODEL_TRAMPOLINE_BASE"), geolayout=0xC000030),
        },
    ),
    "Star": ActorPresetInfo(
        decomp_path="actors/star",
        group="common1",
        models=ModelInfo(model_id=ModelIDInfo(0x7A, "MODEL_STAR"), geolayout=0x16000EA0),
    ),
    "Small Water Splash": ActorPresetInfo(
        decomp_path="actors/stomp_smoke",
        group="group0",
        models={
            "Small Water Splash": ModelInfo(
                model_id=ModelIDInfo(0xA5, "MODEL_SMALL_WATER_SPLASH"), geolayout=0x1700009C
            ),
            "(Unused) Small Water Splash": ModelInfo(geolayout=0x170000E0),
        },
    ),
    "Sushi Shark": ActorPresetInfo(
        decomp_path="actors/sushi",
        group="group4",
        animation=AnimInfo(address=0x500AE54, behaviours=0x13002338, size=1, names=["Swimming", "Diving"]),
        models=ModelInfo(model_id=ModelIDInfo(0x56, "MODEL_SUSHI"), geolayout=0xC000068),
    ),
    "Swoop": ActorPresetInfo(
        decomp_path="actors/swoop",
        group="group17",
        animation=AnimInfo(address=0x60070D0, behaviours=0x13004698, size=2, names=["Idle", "Move"]),
        models=ModelInfo(model_id=ModelIDInfo(0x64, "MODEL_SWOOP"), geolayout=0xD0000DC),
    ),
    "Test Plataform": ActorPresetInfo(
        decomp_path="actors/test_plataform",
        group="common0",
        collision=CollisionInfo(address=0x80262F8, c_name="unknown_seg8_collision_080262F8"),
    ),
    "Thwomp": ActorPresetInfo(
        decomp_path="actors/thwomp",
        group="group1",
        models=ModelInfo(model_id=ModelIDInfo(0x58, "MODEL_THWOMP"), geolayout=0xC000248),
        collision={
            "Thwomp": CollisionInfo(address=0x500B7D0, c_name="thwomp_seg5_collision_0500B7D0"),
            "Thwomp 2": CollisionInfo(address=0x500B92C, c_name="thwomp_seg5_collision_0500B92C"),
        },
    ),
    "Toad": ActorPresetInfo(
        decomp_path="actors/toad",
        group="group15",
        animation=AnimInfo(
            address=0x600FC48,
            behaviours={"End Toad": 0x13000E88, "Toad Message": 0x13002EF8},
            size=8,
            names=[
                "Wave Then Run (West)",
                "Walking (West)",
                "Node Then Turn (East)",
                "Walking (East)",
                "Standing (West)",
                "Standing (East)",
                "Waving Both Arms (West)",
                "Waving One Arm (East)",
            ],
        ),
        models=ModelInfo(model_id=ModelIDInfo(0xDD, "MODEL_TOAD"), geolayout=0xD0003E4),
    ),
    "Tweester/Tornado": ActorPresetInfo(
        decomp_path="actors/tornado",
        group="group5",
        models=ModelInfo(model_id=ModelIDInfo(0x56, "MODEL_TWEESTER"), geolayout=0x5014630),
    ),
    "Transparent Star": ActorPresetInfo(
        decomp_path="actors/transperant_star",
        group="common1",
        models=ModelInfo(model_id=ModelIDInfo(0x79, "MODEL_TRANSPARENT_STAR"), geolayout=0x16000F6C),
    ),
    "Treasure Chest": ActorPresetInfo(
        decomp_path="actors/treasure_chest",
        group="group13",
        models={
            "Treasure Chest Base": ModelInfo(
                model_id=ModelIDInfo(0x65, "MODEL_TREASURE_CHEST_BASE"), geolayout=0xD000450
            ),
            "Treasure Chest Lid": ModelInfo(
                model_id=ModelIDInfo(0x66, "MODEL_TREASURE_CHEST_LID"), geolayout=0xD000468
            ),
        },
    ),
    "Tree": ActorPresetInfo(
        decomp_path="actors/tree",
        group="common1",
        models={
            "Bubbly Tree": ModelInfo(
                model_id=[
                    ModelIDInfo(0x17, "MODEL_BOB_BUBBLY_TREE"),
                    ModelIDInfo(0x17, "MODEL_WDW_BUBBLY_TREE"),
                    ModelIDInfo(0x17, "MODEL_CASTLE_GROUNDS_BUBBLY_TREE"),
                    ModelIDInfo(0x17, "MODEL_WF_BUBBLY_TREE"),
                    ModelIDInfo(0x17, "MODEL_THI_BUBBLY_TREE"),
                ],
                geolayout=0x16000FE8,
            ),
            "Pine Tree": ModelInfo(model_id=ModelIDInfo(0x18, "MODEL_COURTYARD_SPIKY_TREE"), geolayout=0x16001000),
            "(Unused) Pine Tree": ModelInfo(geolayout=0x16001030),
            "Snow Tree": ModelInfo(
                model_id=[ModelIDInfo(0x19, "MODEL_CCM_SNOW_TREE"), ModelIDInfo(0x19, "MODEL_SL_SNOW_TREE")],
                geolayout=0x16001018,
            ),
            "Palm Tree": ModelInfo(model_id=ModelIDInfo(0x1B, "MODEL_SSL_PALM_TREE"), geolayout=0x16001048),
        },
    ),
    "Ukiki": ActorPresetInfo(
        decomp_path="actors/ukiki",
        group="group6",
        animation=AnimInfo(
            address=0x5015784,
            behaviours={"Ukiki": 0x13001CB0},
            names=[
                "Run",
                "Walk (Unused)",
                "Apose (Unused)",
                "Death (Unused)",
                "Screech",
                "Jump Clap",
                "Hop (Unused)",
                "Land",
                "Jump",
                "Itch",
                "Handstand",
                "Turn",
                "Held",
            ],
        ),
        models=ModelInfo(model_id=ModelIDInfo(0x56, "MODEL_UKIKI"), geolayout=0xC000110),
    ),
    "Unagi": ActorPresetInfo(
        decomp_path="actors/unagi",
        group="group4",
        animation=AnimInfo(
            address=0x5012824,
            behaviours=0x13004F40,
            size=7,
            names=["Yawn", "Bite", "Swimming", "Static Straight", "Idle", "Open Mouth", "Idle 2"],
        ),
        models=ModelInfo(model_id=ModelIDInfo(0x55, "MODEL_UNAGI"), geolayout=0xC00010C),
    ),
    "Smoke": ActorPresetInfo(
        decomp_path="actors/walk_smoke",
        group="group0",
        models=ModelInfo(model_id=ModelIDInfo(0x96, "MODEL_SMOKE"), geolayout=0x17000038),
    ),
    "Warp Collision": ActorPresetInfo(
        decomp_path="actors/warp_collision",
        group="common1",
        collision={
            "Door": CollisionInfo(address=0x301CE78, c_name="door_seg3_collision_0301CE78"),
            "LLL Hexagonal Mesh": CollisionInfo(address=0x301CECC, c_name="lll_hexagonal_mesh_seg3_collision_0301CECC"),
        },
    ),
    "Warp Pipe": ActorPresetInfo(
        decomp_path="actors/warp_pipe",
        group="common1",
        models=ModelInfo(
            model_id=[
                ModelIDInfo(0x49, "MODEL_BITS_WARP_PIPE"),
                ModelIDInfo(0x12, "MODEL_BITDW_WARP_PIPE"),
                ModelIDInfo(0x16, "MODEL_THI_WARP_PIPE"),
                ModelIDInfo(0x16, "MODEL_VCUTM_WARP_PIPE"),
                ModelIDInfo(0x16, "MODEL_CASTLE_GROUNDS_WARP_PIPE"),
            ],
            geolayout=0x16000388,
        ),
    ),
    "Water Bomb": ActorPresetInfo(
        decomp_path="actors/water_bubble",
        group="group3",
        models={
            "Water Bomb": ModelInfo(model_id=ModelIDInfo(0x54, "MODEL_WATER_BOMB"), geolayout=0xC000308),
            "Water Bomb's Shadow": ModelInfo(
                model_id=ModelIDInfo(0x55, "MODEL_WATER_BOMB_SHADOW"), geolayout=0xC000328
            ),
        },
    ),
    "Water Mine": ActorPresetInfo(
        decomp_path="actors/water_mine",
        group="group13",
        models=ModelInfo(model_id=ModelIDInfo(0xB3, "MODEL_WATER_MINE"), geolayout=0xD0002F4),
    ),
    "Water Ring": ActorPresetInfo(
        decomp_path="actors/water_ring",
        group="group13",
        animation=AnimInfo(
            address=0x6013F7C,
            behaviours={"Water Ring (Jet Stream)": 0x13003750, "Water Ring (Manta Ray)": 0xC66C16},
            names=["Wobble"],
        ),
        models=ModelInfo(model_id=ModelIDInfo(0x68, "MODEL_WATER_RING"), geolayout=0xD000414),
    ),
    "Water Splash": ActorPresetInfo(
        decomp_path="actors/water_splash",
        group="group0",
        models=ModelInfo(model_id=ModelIDInfo(0xA7, "MODEL_WATER_SPLASH"), geolayout=0x17000230),
    ),
    "Water Wave": ActorPresetInfo(
        decomp_path="actors/water_wave",
        group="group0",
        models={
            "Idle Water Wave": ModelInfo(model_id=ModelIDInfo(0xA6, "MODEL_IDLE_WATER_WAVE"), geolayout=0x17000124),
            "Water Wave Trail": ModelInfo(model_id=ModelIDInfo(0xA3, "MODEL_WAVE_TRAIL"), geolayout=0x17000168),
        },
    ),
    "Whirlpool": ActorPresetInfo(
        decomp_path="actors/whirlpool",
        group="group4",
        models=ModelInfo(
            model_id=ModelIDInfo(0x57, "MODEL_DL_WHIRLPOOL"),
            displaylist=DisplaylistInfo(0x5013CB8, "whirlpool_seg5_dl_05013CB8"),
        ),
    ),
    "White Particle": ActorPresetInfo(
        decomp_path="actors/white_particle",
        group="common1",
        models={
            "White Particle": ModelInfo(model_id=ModelIDInfo(0xA0, "MODEL_WHITE_PARTICLE"), geolayout=0x16000F98),
            "White Particle (DL)": ModelInfo(
                model_id=ModelIDInfo(0x9E, "MODEL_WHITE_PARTICLE_DL"),
                displaylist=DisplaylistInfo(0x302C8A0, "white_particle_dl"),
            ),
        },
    ),
    "White Particle Small": ActorPresetInfo(
        decomp_path="actors/white_particle_small",
        group="group0",
        models={
            "White Particle Small": ModelInfo(
                model_id=ModelIDInfo(0xA4, "MODEL_WHITE_PARTICLE_SMALL"),
                displaylist=DisplaylistInfo(0x4032A18, "white_particle_small_dl"),
            ),
            "(Unused) White Particle Small": ModelInfo(
                displaylist=DisplaylistInfo(0x4032A30, "white_particle_small_unused_dl")
            ),
        },
    ),
    "Whomp": ActorPresetInfo(
        decomp_path="actors/whomp",
        group="group14",
        animation=AnimInfo(address=0x6020A04, behaviours=0x13002BCC, size=2, names=["Walk", "Jump"]),
        models=ModelInfo(model_id=ModelIDInfo(0x67, "MODEL_WHOMP"), geolayout=0xD000480),
        collision=CollisionInfo(address=0x6020A0C, c_name="whomp_seg6_collision_06020A0C"),
    ),
    "Wiggler Body": ActorPresetInfo(
        decomp_path="actors/wiggler_body",
        group="group11",
        animation=AnimInfo(address=0x500C874, behaviours=0x130048E0, size=1, names=["Walk"]),
        models=ModelInfo(model_id=ModelIDInfo(0x58, "MODEL_WIGGLER_BODY"), geolayout=0x500C778),
    ),
    "Wiggler Head": ActorPresetInfo(
        decomp_path="actors/wiggler_head",
        group="group11",
        animation=AnimInfo(address=0x500EC8C, behaviours=0x13004898, size=1, names=["Walk"]),
        models=ModelInfo(model_id=ModelIDInfo(0x57, "MODEL_WIGGLER_HEAD"), geolayout=0xC000030),
    ),
    "Wooden Signpost": ActorPresetInfo(
        decomp_path="actors/wooden_signpost",
        group="common1",
        models=ModelInfo(model_id=ModelIDInfo(0x7C, "MODEL_WOODEN_SIGNPOST"), geolayout=0x16000FB4),
        collision=CollisionInfo(address=0x302DD80, c_name="wooden_signpost_seg3_collision_0302DD80"),
    ),
    "Yellow Sphere (Bowser 1)": ActorPresetInfo(
        decomp_path="actors/yellow_sphere",
        group="group12",
        models=ModelInfo(model_id=ModelIDInfo(0x3, "MODEL_LEVEL_GEOMETRY_03"), geolayout=0xD0000B0),
    ),
    "Yellow Sphere": ActorPresetInfo(
        decomp_path="actors/yellow_sphere_small",
        group="group1",
        models=ModelInfo(model_id=ModelIDInfo(0x55, "MODEL_YELLOW_SPHERE"), geolayout=0xC000000),
    ),
    "Yoshi": ActorPresetInfo(
        decomp_path="actors/yoshi",
        group="group10",
        animation=AnimInfo(address=0x50241E8, behaviours=0x13004538, names=["Idle", "Walk", "Jump"]),
        models=ModelInfo(model_id=ModelIDInfo(0x55, "MODEL_YOSHI"), geolayout=0xC000468),
    ),
    "(Unused) Yoshi Egg": ActorPresetInfo(
        decomp_path="actors/yoshi_egg",
        group="group1",
        models=ModelInfo(model_id=ModelIDInfo(0x57, "MODEL_YOSHI_EGG"), geolayout=0xC0001E4),
    ),
    "Castle Flag": ActorPresetInfo(
        decomp_path="levels/castle_grounds/areas/1/11",
        level="CG",
        animation=AnimInfo(address=0x700C95C, behaviours=0x13003C58, size=1, names=["Wave"]),
        models=ModelInfo(model_id=ModelIDInfo(0x37, "MODEL_CASTLE_GROUNDS_FLAG"), geolayout=0xE000660),
    ),
}

sm64_world_defaults = {
    "geometryMode": {
        "zBuffer": True,
        "shade": True,
        "cullBack": True,
        "lighting": True,
        "shadeSmooth": True,
    },
    "otherModeH": {
        "textureFilter": "G_TF_BILERP",
        "perspectiveCorrection": "G_TP_PERSP",
        "textureConvert": "G_TC_FILT",
        "pipelineMode": "G_PM_1PRIMITIVE",
    },
}
