// SONIC ROBO BLAST 2
//-----------------------------------------------------------------------------
// Copyright (C) 1993-1996 by id Software, Inc.
// Copyright (C) 1998-2000 by DooM Legacy Team.
// Copyright (C) 1999-2018 by Sonic Team Junior.
//
// This program is free software distributed under the
// terms of the GNU General Public License, version 2.
// See the 'LICENSE' file for more details.
//-----------------------------------------------------------------------------
/// \file  info.h
/// \brief Thing frame/state LUT

#ifndef __INFO__
#define __INFO__

// Needed for action function pointer handling.
#include "d_think.h"
#include "sounds.h"
#include "m_fixed.h"

// dehacked.c now has lists for the more named enums! PLEASE keep them up to date!
// For great modding!!

// IMPORTANT NOTE: If you add/remove from this list of action
// functions, don't forget to update them in dehacked.c!
void A_Explode();
void A_Pain();
void A_Fall();
void A_MonitorPop();
void A_Look();
void A_Chase();
void A_FaceStabChase();
void A_FaceTarget();
void A_FaceTracer();
void A_Scream();
void A_BossDeath();
void A_CustomPower(); // Use this for a custom power
void A_GiveWeapon(); // Gives the player weapon(s)
void A_JumpShield(); // Obtained Jump Shield
void A_RingShield(); // Obtained Ring Shield
void A_RingBox(); // Obtained Ring Box Tails
void A_Invincibility(); // Obtained Invincibility Box
void A_SuperSneakers(); // Obtained Super Sneakers Box
void A_BunnyHop(); // have bunny hop tails
void A_BubbleSpawn(); // Randomly spawn bubbles
void A_FanBubbleSpawn();
void A_BubbleRise(); // Bubbles float to surface
void A_BubbleCheck(); // Don't draw if not underwater
void A_AwardScore();
void A_ExtraLife(); // Extra Life
void A_BombShield(); // Obtained Bomb Shield
void A_WaterShield(); // Obtained Water Shield
void A_ForceShield(); // Obtained Force Shield
void A_PityShield(); // Obtained Pity Shield. We're... sorry.
void A_GravityBox();
void A_ScoreRise(); // Rise the score logo
void A_ParticleSpawn();
void A_AttractChase(); // Ring Chase
void A_DropMine(); // Drop Mine from Skim or Jetty-Syn Bomber
void A_FishJump(); // Fish Jump
void A_ThrownRing(); // Sparkle trail for red ring
void A_SetSolidSteam();
void A_UnsetSolidSteam();
void A_SignPlayer();
void A_OverlayThink();
void A_JetChase();
void A_JetbThink(); // Jetty-Syn Bomber Thinker
void A_JetgThink(); // Jetty-Syn Gunner Thinker
void A_JetgShoot(); // Jetty-Syn Shoot Function
void A_ShootBullet(); // JetgShoot without reactiontime setting
void A_MinusDigging();
void A_MinusPopup();
void A_MinusCheck();
void A_ChickenCheck();
void A_MouseThink(); // Mouse Thinker
void A_DetonChase(); // Deton Chaser
void A_CapeChase(); // Fake little Super Sonic cape
void A_RotateSpikeBall(); // Spike ball rotation
void A_SlingAppear();
void A_MaceRotate();
void A_UnidusBall();
void A_RockSpawn();
void A_SetFuse();
void A_CrawlaCommanderThink(); // Crawla Commander
void A_SmokeTrailer();
void A_RingExplode();
void A_OldRingExplode();
void A_MixUp();
void A_RecyclePowers();
void A_BossScream();
void A_Boss2TakeDamage();
void A_GoopSplat();
void A_Boss2PogoSFX();
void A_Boss2PogoTarget();
void A_EggmanBox();
void A_TurretFire();
void A_SuperTurretFire();
void A_TurretStop();
void A_JetJawRoam();
void A_JetJawChomp();
void A_PointyThink();
void A_CheckBuddy();
void A_HoodThink();
void A_ArrowCheck();
void A_SnailerThink();
void A_SharpChase();
void A_SharpSpin();
void A_VultureVtol();
void A_VultureCheck();
void A_SkimChase();
void A_SkullAttack();
void A_LobShot();
void A_FireShot();
void A_SuperFireShot();
void A_BossFireShot();
void A_Boss7FireMissiles();
void A_Boss1Laser();
void A_FocusTarget();
void A_Boss4Reverse();
void A_Boss4SpeedUp();
void A_Boss4Raise();
void A_SparkFollow();
void A_BuzzFly();
void A_GuardChase();
void A_EggShield();
void A_SetReactionTime();
void A_Boss1Spikeballs();
void A_Boss3TakeDamage();
void A_Boss3Path();
void A_LinedefExecute();
void A_PlaySeeSound();
void A_PlayAttackSound();
void A_PlayActiveSound();
void A_1upThinker();
void A_BossZoom(); //Unused
void A_Boss1Chase();
void A_Boss2Chase();
void A_Boss2Pogo();
void A_Boss7Chase();
void A_BossJetFume();
void A_SpawnObjectAbsolute();
void A_SpawnObjectRelative();
void A_ChangeAngleRelative();
void A_ChangeAngleAbsolute();
void A_PlaySound();
void A_FindTarget();
void A_FindTracer();
void A_SetTics();
void A_SetRandomTics();
void A_ChangeColorRelative();
void A_ChangeColorAbsolute();
void A_MoveRelative();
void A_MoveAbsolute();
void A_Thrust();
void A_ZThrust();
void A_SetTargetsTarget();
void A_SetObjectFlags();
void A_SetObjectFlags2();
void A_RandomState();
void A_RandomStateRange();
void A_DualAction();
void A_RemoteAction();
void A_ToggleFlameJet();
void A_OrbitNights();
void A_GhostMe();
void A_SetObjectState();
void A_SetObjectTypeState();
void A_KnockBack();
void A_PushAway();
void A_RingDrain();
void A_SplitShot();
void A_MissileSplit();
void A_MultiShot();
void A_InstaLoop();
void A_Custom3DRotate();
void A_SearchForPlayers();
void A_CheckRandom();
void A_CheckTargetRings();
void A_CheckRings();
void A_CheckTotalRings();
void A_CheckHealth();
void A_CheckRange();
void A_CheckHeight();
void A_CheckTrueRange();
void A_CheckThingCount();
void A_CheckAmbush();
void A_CheckCustomValue();
void A_CheckCusValMemo();
void A_SetCustomValue();
void A_UseCusValMemo();
void A_RelayCustomValue();
void A_CusValAction();
void A_ForceStop();
void A_ForceWin();
void A_SpikeRetract();
void A_InfoState();
void A_Repeat();
void A_SetScale();
void A_RemoteDamage();
void A_HomingChase();
void A_TrapShot();
void A_VileTarget();
void A_VileAttack();
void A_VileFire();
void A_BrakChase();
void A_BrakFireShot();
void A_BrakLobShot();
void A_NapalmScatter();
void A_SpawnFreshCopy();

// ratio of states to sprites to mobj types is roughly 6 : 1 : 1
#define NUMMOBJFREESLOTS 256
#define NUMSPRITEFREESLOTS NUMMOBJFREESLOTS
#define NUMSTATEFREESLOTS (NUMMOBJFREESLOTS*8)

// Hey, moron! If you change this table, don't forget about sprnames in info.c and the sprite lights in hw_light.c!
typedef enum sprite
{
	SPR_NULL, // invisible object
	SPR_UNKN,

	SPR_THOK, // Thok! mobj
	SPR_PLAY,

	// Enemies
	SPR_POSS,
	SPR_SPOS,
	SPR_FISH, // Greenflower Fish
	SPR_BUZZ, // Buzz (Gold)
	SPR_RBUZ, // Buzz (Red)
	SPR_JETB, // Jetty-Syn Bomber
	SPR_JETW, // Jetty-Syn Water Bomber
	SPR_JETG, // Jetty-Syn Gunner
	SPR_CCOM, // Crawla Commander
	SPR_DETN, // Deton
	SPR_SKIM, // Skim mine dropper
	SPR_TRET,
	SPR_TURR, // Pop-Up Turret
	SPR_SHRP, // Sharp
	SPR_JJAW, // Jet Jaw
	SPR_SNLR, // Snailer
	SPR_VLTR, // Vulture
	SPR_PNTY, // Pointy
	SPR_ARCH, // Robo-Hood
	SPR_CBFS, // CastleBot FaceStabber (Egg Knight?)
	SPR_SPSH, // Egg Guard
	SPR_ESHI, // Egg Shield for Egg Guard
	SPR_GSNP, // Green Snapper
	SPR_MNUS, // Minus
	SPR_SSHL, // Spring Shell
	SPR_UNID, // Unidus
	SPR_BBUZ, // AquaBuzz, for Azure Temple

	// Generic Boss Items
	SPR_JETF, // Boss jet fumes

	// Boss 1 (Greenflower)
	SPR_EGGM,

	// Boss 2 (Techno Hill)
	SPR_EGGN, // Boss 2
	SPR_TNKA, // Boss 2 Tank 1
	SPR_TNKB, // Boss 2 Tank 2
	SPR_SPNK, // Boss 2 Spigot
	SPR_GOOP, // Boss 2 Goop

	// Boss 3 (Deep Sea)
	SPR_EGGO, // Boss 3
	SPR_PRPL, // Boss 3 Propeller
	SPR_FAKE, // Boss 3 Fakemobile

	// Boss 4 (Castle Eggman)
	SPR_EGGP,
	SPR_EFIR, // Boss 4 jet flame

	// Boss 5 (Arid Canyon)
	SPR_EGGQ,

	// Boss 6 (Red Volcano)
	SPR_EGGR,

	// Boss 7 (Dark City)
	SPR_BRAK,
	SPR_BGOO, // Goop
	SPR_BMSL,

	// Boss 8 (Egg Rock)
	SPR_EGGT,

	// Cy-Brak-Demon; uses SPR_BRAK as well, but has some extras
	SPR_RCKT, // Rockets!
	SPR_ELEC, // Electricity!
	SPR_TARG, // Targeting reticules!
	SPR_NPLM, // Big napalm bombs!
	SPR_MNPL, // Mini napalm bombs!

	// Metal Sonic
	SPR_METL,
	SPR_MSCF,
	SPR_MSCB,

	// Collectible Items
	SPR_RING,
	SPR_TRNG, // Team Rings
	SPR_EMMY, // emerald test
	SPR_TOKE, // Special Stage Token
	SPR_RFLG, // Red CTF Flag
	SPR_BFLG, // Blue CTF Flag
	SPR_NWNG, // NiGHTS Wing collectable item.
	SPR_EMBM, // Emblem
	SPR_CEMG, // Chaos Emeralds
	SPR_EMER, // Emerald Hunt

	// Interactive Objects
	SPR_FANS,
	SPR_BUBL, // water bubble source
	SPR_SIGN, // Level end sign
	SPR_STEM, // Steam riser
	SPR_SPIK, // Spike Ball
	SPR_SFLM, // Spin fire
	SPR_USPK, // Floor spike
	SPR_STPT, // Starpost
	SPR_BMNE, // Big floating mine

	// Monitor Boxes
	SPR_SRBX,
	SPR_RRBX,
	SPR_BRBX,
	SPR_SHTV,
	SPR_PINV,
	SPR_YLTV,
	SPR_BLTV, // Force shield
	SPR_BKTV, // Bomb shield TV
	SPR_WHTV, // Jump shield TV
	SPR_GRTV, // Pity shield TV
	SPR_ELTV, // Elemental shield TV
	SPR_EGGB, // Eggman box
	SPR_MIXU, // Player mixing monitor
	SPR_RECY, // Recycler (power mixing) monitor
	SPR_QUES, // Random monitor
	SPR_GBTV, // Gravity boots TV
	SPR_PRUP, // 1up
	SPR_PTTV, // Score TVs

	// Monitor Miscellany
	SPR_MTEX, // Exploding monitor

	// Projectiles
	SPR_MISL,
	SPR_TORP, // Torpedo
	SPR_ENRG, // Energy ball
	SPR_MINE, // Skim mine
	SPR_JBUL, // Jetty-Syn Bullet
	SPR_TRLS,
	SPR_CBLL, // Cannonball
	SPR_AROW, // Arrow
	SPR_CFIR, // Colored fire of various sorts

	// Greenflower Scenery
	SPR_FWR1,
	SPR_FWR2, // GFZ Sunflower
	SPR_FWR3, // GFZ budding flower
	SPR_FWR4,
	SPR_BUS1, // GFZ Bush w/ berries
	SPR_BUS2, // GFZ Bush w/o berries

	// Techno Hill Scenery
	SPR_THZP, // Techno Hill Zone Plant
	SPR_ALRM, // THZ2 Alarm

	// Deep Sea Scenery
	SPR_GARG, // Deep Sea Gargoyle
	SPR_SEWE, // Deep Sea Seaweed
	SPR_DRIP, // Dripping water
	SPR_CRL1, // Coral 1
	SPR_CRL2, // Coral 2
	SPR_CRL3, // Coral 3
	SPR_BCRY, // Blue Crystal

	// Castle Eggman Scenery
	SPR_CHAN, // CEZ Chain
	SPR_FLAM, // Flame
	SPR_ESTA, // Eggman esta una estatua!
	SPR_SMCH, // Small Mace Chain
	SPR_BMCH, // Big Mace Chain
	SPR_SMCE, // Small Mace
	SPR_BMCE, // Big Mace

	// Arid Canyon Scenery
	SPR_BTBL, // Big tumbleweed
	SPR_STBL, // Small tumbleweed
	SPR_CACT, // Cacti sprites

	// Red Volcano Scenery
	SPR_FLME, // Flame jet
	SPR_DFLM, // Blade's flame

	// Dark City Scenery

	// Egg Rock Scenery

	// Christmas Scenery
	SPR_XMS1,
	SPR_XMS2,
	SPR_XMS3,

	// Botanic Serenity Scenery
	SPR_BSZ1, // Tall flowers
	SPR_BSZ2, // Medium flowers
	SPR_BSZ3, // Small flowers
	SPR_BSZ4, // Tulip
	SPR_BSZ5, // Cluster of Tulips
	SPR_BSZ6, // Bush
	SPR_BSZ7, // Vine
	SPR_BSZ8, // Misc things

	// Misc Scenery
	SPR_STLG, // Stalagmites
	SPR_DBAL, // Disco
	SPR_RCRY, // ATZ Red Crystal (Target)

	// Powerup Indicators
	SPR_ARMA, // Armageddon Shield Orb
	SPR_ARMF, // Armageddon Shield Ring, Front
	SPR_ARMB, // Armageddon Shield Ring, Back
	SPR_WIND, // Whirlwind Shield Orb
	SPR_MAGN, // Attract Shield Orb
	SPR_ELEM, // Elemental Shield Orb and Fire
	SPR_FORC, // Force Shield Orb
	SPR_PITY, // Pity Shield Orb
	SPR_IVSP, // invincibility sparkles
	SPR_SSPK, // Super Sonic Spark

	SPR_GOAL, // Special Stage goal (here because lol NiGHTS)

	// Freed Animals
	SPR_BIRD, // Birdie freed!
	SPR_BUNY, // Bunny freed!
	SPR_MOUS, // Mouse
	SPR_CHIC, // Chicken
	SPR_COWZ, // Cow
	SPR_RBRD, // Red Birdie in Bubble

	// Springs
	SPR_SPRY, // yellow spring
	SPR_SPRR, // red spring
	SPR_SPRB, // Blue springs
	SPR_YSPR, // Yellow Diagonal Spring
	SPR_RSPR, // Red Diagonal Spring

	// Environmental Effects
	SPR_RAIN, // Rain
	SPR_SNO1, // Snowflake
	SPR_SPLH, // Water Splish
	SPR_SPLA, // Water Splash
	SPR_SMOK,
	SPR_BUBP, // Small bubble
	SPR_BUBO, // Medium bubble
	SPR_BUBN, // Large bubble
	SPR_BUBM, // Extra Large (would you like fries with that?) bubble
	SPR_POPP, // Extra Large bubble goes POP!
	SPR_TFOG, // Teleport Fog
	SPR_SEED, // Sonic CD flower seed
	SPR_PRTL, // Particle (for fans, etc.)

	// Game Indicators
	SPR_SCOR, // Score logo
	SPR_DRWN, // Drowning Timer
	SPR_TTAG, // Tag Sign
	SPR_GFLG, // Got Flag sign

	// Ring Weapons
	SPR_RRNG, // Red Ring
	SPR_RNGB, // Bounce Ring
	SPR_RNGR, // Rail Ring
	SPR_RNGI, // Infinity Ring
	SPR_RNGA, // Automatic Ring
	SPR_RNGE, // Explosion Ring
	SPR_RNGS, // Scatter Ring
	SPR_RNGG, // Grenade Ring

	SPR_PIKB, // Bounce Ring Pickup
	SPR_PIKR, // Rail Ring Pickup
	SPR_PIKA, // Automatic Ring Pickup
	SPR_PIKE, // Explosion Ring Pickup
	SPR_PIKS, // Scatter Ring Pickup
	SPR_PIKG, // Grenade Ring Pickup

	SPR_TAUT, // Thrown Automatic Ring
	SPR_TGRE, // Thrown Grenade Ring
	SPR_TSCR, // Thrown Scatter Ring

	// Mario-specific stuff
	SPR_COIN,
	SPR_CPRK,
	SPR_GOOM,
	SPR_BGOM,
	SPR_FFWR,
	SPR_FBLL,
	SPR_SHLL,
	SPR_PUMA,
	SPR_HAMM,
	SPR_KOOP,
	SPR_BFLM,
	SPR_MAXE,
	SPR_MUS1,
	SPR_MUS2,
	SPR_TOAD,

	// NiGHTS Stuff
	SPR_NDRN, // NiGHTS drone
	SPR_SUPE, // NiGHTS character flying
	SPR_SUPZ, // NiGHTS hurt
	SPR_NDRL, // NiGHTS character drilling
	SPR_NSPK, // NiGHTS sparkle
	SPR_NBMP, // NiGHTS Bumper
	SPR_HOOP, // NiGHTS hoop sprite
	SPR_NSCR, // NiGHTS score sprite
	SPR_NPRU, // Nights Powerups
	SPR_CAPS, // Capsule thingy for NiGHTS
	SPR_SUPT, // Super Sonic Transformation (NiGHTS)

	// Debris
	SPR_SPRK, // spark
	SPR_BOM1, // Robot Explosion
	SPR_BOM2, // Boss Explosion 1
	SPR_BOM3, // Boss Explosion 2
	SPR_BOM4, // Underwater Explosion

	// Crumbly rocks
	SPR_ROIA,
	SPR_ROIB,
	SPR_ROIC,
	SPR_ROID,
	SPR_ROIE,
	SPR_ROIF,
	SPR_ROIG,
	SPR_ROIH,
	SPR_ROII,
	SPR_ROIJ,
	SPR_ROIK,
	SPR_ROIL,
	SPR_ROIM,
	SPR_ROIN,
	SPR_ROIO,
	SPR_ROIP,

	// Blue Spheres
	SPR_BBAL,

	// Gravity Well Objects
	SPR_GWLG,
	SPR_GWLR,

	// SRB1 Sprites
	SPR_SRBA,
	SPR_SRBB,
	SPR_SRBC,
	SPR_SRBD,
	SPR_SRBE,
	SPR_SRBF,
	SPR_SRBG,
	SPR_SRBH,
	SPR_SRBI,
	SPR_SRBJ,
	SPR_SRBK,
	SPR_SRBL,
	SPR_SRBM,
	SPR_SRBN,
	SPR_SRBO,

	SPR_FIRSTFREESLOT,
	SPR_LASTFREESLOT = SPR_FIRSTFREESLOT + NUMSPRITEFREESLOTS - 1,
	NUMSPRITES
} spritenum_t;

typedef enum state
{
	S_NULL,
	S_UNKNOWN,
	S_INVISIBLE, // state for invisible sprite

	S_SPAWNSTATE,
	S_SEESTATE,
	S_MELEESTATE,
	S_MISSILESTATE,
	S_DEATHSTATE,
	S_XDEATHSTATE,
	S_RAISESTATE,

	// Thok
	S_THOK,

	S_PLAY_STND,
	S_PLAY_TAP1,
	S_PLAY_TAP2,
	S_PLAY_RUN1,
	S_PLAY_RUN2,
	S_PLAY_RUN3,
	S_PLAY_RUN4,
	S_PLAY_RUN5,
	S_PLAY_RUN6,
	S_PLAY_RUN7,
	S_PLAY_RUN8,
	S_PLAY_SPD1,
	S_PLAY_SPD2,
	S_PLAY_SPD3,
	S_PLAY_SPD4,
	S_PLAY_ATK1,
	S_PLAY_ATK2,
	S_PLAY_ATK3,
	S_PLAY_ATK4,
	S_PLAY_SPRING,
	S_PLAY_FALL1,
	S_PLAY_FALL2,
	S_PLAY_ABL1,
	S_PLAY_ABL2,
	S_PLAY_SPC1,
	S_PLAY_SPC2,
	S_PLAY_SPC3,
	S_PLAY_SPC4,
	S_PLAY_CLIMB1,
	S_PLAY_CLIMB2,
	S_PLAY_CLIMB3,
	S_PLAY_CLIMB4,
	S_PLAY_CLIMB5,
	S_PLAY_GASP,
	S_PLAY_PAIN,
	S_PLAY_DIE,
	S_PLAY_TEETER1,
	S_PLAY_TEETER2,
	S_PLAY_CARRY,
	S_PLAY_SUPERSTAND,
	S_PLAY_SUPERWALK1,
	S_PLAY_SUPERWALK2,
	S_PLAY_SUPERFLY1,
	S_PLAY_SUPERFLY2,
	S_PLAY_SUPERTEETER,
	S_PLAY_SUPERHIT,
	S_PLAY_SUPERTRANS1,
	S_PLAY_SUPERTRANS2,
	S_PLAY_SUPERTRANS3,
	S_PLAY_SUPERTRANS4,
	S_PLAY_SUPERTRANS5,
	S_PLAY_SUPERTRANS6,
	S_PLAY_SUPERTRANS7,
	S_PLAY_SUPERTRANS8,
	S_PLAY_SUPERTRANS9, // This has special significance in the code. If you add more frames, search for it and make the appropriate changes.

	// technically the player goes here but it's an infinite tic state
	S_OBJPLACE_DUMMY,

	// 1-Up Box Sprites overlay (uses player sprite)
	S_PLAY_BOX1,
	S_PLAY_BOX2,
	S_PLAY_ICON1,
	S_PLAY_ICON2,
	S_PLAY_ICON3,

	// Level end sign overlay (uses player sprite)
	S_PLAY_SIGN,

	// Blue Crawla
	S_POSS_STND,
	S_POSS_RUN1,
	S_POSS_RUN2,
	S_POSS_RUN3,
	S_POSS_RUN4,
	S_POSS_RUN5,
	S_POSS_RUN6,

	// Red Crawla
	S_SPOS_STND,
	S_SPOS_RUN1,
	S_SPOS_RUN2,
	S_SPOS_RUN3,
	S_SPOS_RUN4,
	S_SPOS_RUN5,
	S_SPOS_RUN6,

	// Greenflower Fish
	S_FISH1,
	S_FISH2,
	S_FISH3,
	S_FISH4,

	// Buzz (Gold)
	S_BUZZLOOK1,
	S_BUZZLOOK2,
	S_BUZZFLY1,
	S_BUZZFLY2,

	// Buzz (Red)
	S_RBUZZLOOK1,
	S_RBUZZLOOK2,
	S_RBUZZFLY1,
	S_RBUZZFLY2,

	// AquaBuzz
	S_BBUZZFLY1,
	S_BBUZZFLY2,

	// Jetty-Syn Bomber
	S_JETBLOOK1,
	S_JETBLOOK2,
	S_JETBZOOM1,
	S_JETBZOOM2,

	// Jetty-Syn Gunner
	S_JETGLOOK1,
	S_JETGLOOK2,
	S_JETGZOOM1,
	S_JETGZOOM2,
	S_JETGSHOOT1,
	S_JETGSHOOT2,

	// Crawla Commander
	S_CCOMMAND1,
	S_CCOMMAND2,
	S_CCOMMAND3,
	S_CCOMMAND4,

	// Deton
	S_DETON1,
	S_DETON2,
	S_DETON3,
	S_DETON4,
	S_DETON5,
	S_DETON6,
	S_DETON7,
	S_DETON8,
	S_DETON9,
	S_DETON10,
	S_DETON11,
	S_DETON12,
	S_DETON13,
	S_DETON14,
	S_DETON15,
	S_DETON16,

	// Skim Mine Dropper
	S_SKIM1,
	S_SKIM2,
	S_SKIM3,
	S_SKIM4,

	// THZ Turret
	S_TURRET,
	S_TURRETFIRE,
	S_TURRETSHOCK1,
	S_TURRETSHOCK2,
	S_TURRETSHOCK3,
	S_TURRETSHOCK4,
	S_TURRETSHOCK5,
	S_TURRETSHOCK6,
	S_TURRETSHOCK7,
	S_TURRETSHOCK8,
	S_TURRETSHOCK9,

	// Popup Turret
	S_TURRETLOOK,
	S_TURRETSEE,
	S_TURRETPOPUP1,
	S_TURRETPOPUP2,
	S_TURRETPOPUP3,
	S_TURRETPOPUP4,
	S_TURRETPOPUP5,
	S_TURRETPOPUP6,
	S_TURRETPOPUP7,
	S_TURRETPOPUP8,
	S_TURRETSHOOT,
	S_TURRETPOPDOWN1,
	S_TURRETPOPDOWN2,
	S_TURRETPOPDOWN3,
	S_TURRETPOPDOWN4,
	S_TURRETPOPDOWN5,
	S_TURRETPOPDOWN6,
	S_TURRETPOPDOWN7,
	S_TURRETPOPDOWN8,

	// Sharp
	S_SHARP_ROAM1,
	S_SHARP_ROAM2,
	S_SHARP_AIM1,
	S_SHARP_AIM2,
	S_SHARP_AIM3,
	S_SHARP_AIM4,
	S_SHARP_SPIN,

	// Jet Jaw
	S_JETJAW_ROAM1,
	S_JETJAW_ROAM2,
	S_JETJAW_ROAM3,
	S_JETJAW_ROAM4,
	S_JETJAW_ROAM5,
	S_JETJAW_ROAM6,
	S_JETJAW_ROAM7,
	S_JETJAW_ROAM8,
	S_JETJAW_CHOMP1,
	S_JETJAW_CHOMP2,
	S_JETJAW_CHOMP3,
	S_JETJAW_CHOMP4,
	S_JETJAW_CHOMP5,
	S_JETJAW_CHOMP6,
	S_JETJAW_CHOMP7,
	S_JETJAW_CHOMP8,
	S_JETJAW_CHOMP9,
	S_JETJAW_CHOMP10,
	S_JETJAW_CHOMP11,
	S_JETJAW_CHOMP12,
	S_JETJAW_CHOMP13,
	S_JETJAW_CHOMP14,
	S_JETJAW_CHOMP15,
	S_JETJAW_CHOMP16,

	// Snailer
	S_SNAILER1,

	// Vulture
	S_VULTURE_STND,
	S_VULTURE_VTOL1,
	S_VULTURE_VTOL2,
	S_VULTURE_VTOL3,
	S_VULTURE_VTOL4,
	S_VULTURE_ZOOM1,
	S_VULTURE_ZOOM2,
	S_VULTURE_ZOOM3,
	S_VULTURE_ZOOM4,
	S_VULTURE_ZOOM5,

	// Pointy
	S_POINTY1,
	S_POINTYBALL1,

	// Robo-Hood
	S_ROBOHOOD_LOOK,
	S_ROBOHOOD_STND,
	S_ROBOHOOD_SHOOT,
	S_ROBOHOOD_JUMP,
	S_ROBOHOOD_JUMP2,
	S_ROBOHOOD_FALL,

	// CastleBot FaceStabber
	S_FACESTABBER_STND1,
	S_FACESTABBER_STND2,
	S_FACESTABBER_STND3,
	S_FACESTABBER_STND4,
	S_FACESTABBER_STND5,
	S_FACESTABBER_STND6,
	S_FACESTABBER_CHARGE1,
	S_FACESTABBER_CHARGE2,
	S_FACESTABBER_CHARGE3,
	S_FACESTABBER_CHARGE4,

	// Egg Guard
	S_EGGGUARD_STND,
	S_EGGGUARD_WALK1,
	S_EGGGUARD_WALK2,
	S_EGGGUARD_WALK3,
	S_EGGGUARD_WALK4,
	S_EGGGUARD_MAD1,
	S_EGGGUARD_MAD2,
	S_EGGGUARD_MAD3,
	S_EGGGUARD_RUN1,
	S_EGGGUARD_RUN2,
	S_EGGGUARD_RUN3,
	S_EGGGUARD_RUN4,

	// Egg Shield for Egg Guard
	S_EGGSHIELD,

	// Green Snapper
	S_GSNAPPER_STND,
	S_GSNAPPER1,
	S_GSNAPPER2,
	S_GSNAPPER3,
	S_GSNAPPER4,

	// Minus
	S_MINUS_STND,
	S_MINUS_DIGGING,
	S_MINUS_POPUP,
	S_MINUS_UPWARD1,
	S_MINUS_UPWARD2,
	S_MINUS_UPWARD3,
	S_MINUS_UPWARD4,
	S_MINUS_UPWARD5,
	S_MINUS_UPWARD6,
	S_MINUS_UPWARD7,
	S_MINUS_UPWARD8,
	S_MINUS_DOWNWARD1,
	S_MINUS_DOWNWARD2,
	S_MINUS_DOWNWARD3,
	S_MINUS_DOWNWARD4,
	S_MINUS_DOWNWARD5,
	S_MINUS_DOWNWARD6,
	S_MINUS_DOWNWARD7,
	S_MINUS_DOWNWARD8,

	// Spring Shell
	S_SSHELL_STND,
	S_SSHELL_RUN1,
	S_SSHELL_RUN2,
	S_SSHELL_RUN3,
	S_SSHELL_RUN4,
	S_SSHELL_SPRING1,
	S_SSHELL_SPRING2,
	S_SSHELL_SPRING3,
	S_SSHELL_SPRING4,

	// Spring Shell (yellow)
	S_YSHELL_STND,
	S_YSHELL_RUN1,
	S_YSHELL_RUN2,
	S_YSHELL_RUN3,
	S_YSHELL_RUN4,
	S_YSHELL_SPRING1,
	S_YSHELL_SPRING2,
	S_YSHELL_SPRING3,
	S_YSHELL_SPRING4,

	// Unidus
	S_UNIDUS_STND,
	S_UNIDUS_RUN,
	S_UNIDUS_BALL,

	// Boss Explosion
	S_BPLD1,
	S_BPLD2,
	S_BPLD3,
	S_BPLD4,
	S_BPLD5,
	S_BPLD6,
	S_BPLD7,

	// S3&K Boss Explosion
	S_SONIC3KBOSSEXPLOSION1,
	S_SONIC3KBOSSEXPLOSION2,
	S_SONIC3KBOSSEXPLOSION3,
	S_SONIC3KBOSSEXPLOSION4,
	S_SONIC3KBOSSEXPLOSION5,
	S_SONIC3KBOSSEXPLOSION6,

	S_JETFUME1,
	S_JETFUME2,

	// Boss 1
	S_EGGMOBILE_STND,
	S_EGGMOBILE_LATK1,
	S_EGGMOBILE_LATK2,
	S_EGGMOBILE_LATK3,
	S_EGGMOBILE_LATK4,
	S_EGGMOBILE_LATK5,
	S_EGGMOBILE_LATK6,
	S_EGGMOBILE_LATK7,
	S_EGGMOBILE_LATK8,
	S_EGGMOBILE_LATK9,
	S_EGGMOBILE_LATK10,
	S_EGGMOBILE_RATK1,
	S_EGGMOBILE_RATK2,
	S_EGGMOBILE_RATK3,
	S_EGGMOBILE_RATK4,
	S_EGGMOBILE_RATK5,
	S_EGGMOBILE_RATK6,
	S_EGGMOBILE_RATK7,
	S_EGGMOBILE_RATK8,
	S_EGGMOBILE_RATK9,
	S_EGGMOBILE_RATK10,
	S_EGGMOBILE_PANIC1,
	S_EGGMOBILE_PANIC2,
	S_EGGMOBILE_PANIC3,
	S_EGGMOBILE_PANIC4,
	S_EGGMOBILE_PANIC5,
	S_EGGMOBILE_PANIC6,
	S_EGGMOBILE_PANIC7,
	S_EGGMOBILE_PANIC8,
	S_EGGMOBILE_PANIC9,
	S_EGGMOBILE_PANIC10,
	S_EGGMOBILE_PAIN,
	S_EGGMOBILE_PAIN2,
	S_EGGMOBILE_DIE1,
	S_EGGMOBILE_DIE2,
	S_EGGMOBILE_DIE3,
	S_EGGMOBILE_DIE4,
	S_EGGMOBILE_DIE5,
	S_EGGMOBILE_DIE6,
	S_EGGMOBILE_DIE7,
	S_EGGMOBILE_DIE8,
	S_EGGMOBILE_DIE9,
	S_EGGMOBILE_DIE10,
	S_EGGMOBILE_DIE11,
	S_EGGMOBILE_DIE12,
	S_EGGMOBILE_DIE13,
	S_EGGMOBILE_DIE14,
	S_EGGMOBILE_FLEE1,
	S_EGGMOBILE_FLEE2,
	S_EGGMOBILE_BALL,
	S_EGGMOBILE_TARGET,

	// Boss 2
	S_EGGMOBILE2_STND,
	S_EGGMOBILE2_POGO1,
	S_EGGMOBILE2_POGO2,
	S_EGGMOBILE2_POGO3,
	S_EGGMOBILE2_POGO4,
	S_EGGMOBILE2_POGO5,
	S_EGGMOBILE2_POGO6,
	S_EGGMOBILE2_POGO7,
	S_EGGMOBILE2_PAIN,
	S_EGGMOBILE2_PAIN2,
	S_EGGMOBILE2_DIE1,
	S_EGGMOBILE2_DIE2,
	S_EGGMOBILE2_DIE3,
	S_EGGMOBILE2_DIE4,
	S_EGGMOBILE2_DIE5,
	S_EGGMOBILE2_DIE6,
	S_EGGMOBILE2_DIE7,
	S_EGGMOBILE2_DIE8,
	S_EGGMOBILE2_DIE9,
	S_EGGMOBILE2_DIE10,
	S_EGGMOBILE2_DIE11,
	S_EGGMOBILE2_DIE12,
	S_EGGMOBILE2_DIE13,
	S_EGGMOBILE2_DIE14,
	S_EGGMOBILE2_FLEE1,
	S_EGGMOBILE2_FLEE2,

	S_BOSSTANK1,
	S_BOSSTANK2,
	S_BOSSSPIGOT,

	// Boss 2 Goop
	S_GOOP1,
	S_GOOP2,
	S_GOOP3,

	// Boss 3
	S_EGGMOBILE3_STND,
	S_EGGMOBILE3_ATK1,
	S_EGGMOBILE3_ATK2,
	S_EGGMOBILE3_ATK3A,
	S_EGGMOBILE3_ATK3B,
	S_EGGMOBILE3_ATK3C,
	S_EGGMOBILE3_ATK3D,
	S_EGGMOBILE3_ATK4,
	S_EGGMOBILE3_ATK5,
	S_EGGMOBILE3_LAUGH1,
	S_EGGMOBILE3_LAUGH2,
	S_EGGMOBILE3_LAUGH3,
	S_EGGMOBILE3_LAUGH4,
	S_EGGMOBILE3_LAUGH5,
	S_EGGMOBILE3_LAUGH6,
	S_EGGMOBILE3_LAUGH7,
	S_EGGMOBILE3_LAUGH8,
	S_EGGMOBILE3_LAUGH9,
	S_EGGMOBILE3_LAUGH10,
	S_EGGMOBILE3_LAUGH11,
	S_EGGMOBILE3_LAUGH12,
	S_EGGMOBILE3_LAUGH13,
	S_EGGMOBILE3_LAUGH14,
	S_EGGMOBILE3_LAUGH15,
	S_EGGMOBILE3_LAUGH16,
	S_EGGMOBILE3_LAUGH17,
	S_EGGMOBILE3_LAUGH18,
	S_EGGMOBILE3_LAUGH19,
	S_EGGMOBILE3_LAUGH20,
	S_EGGMOBILE3_PAIN,
	S_EGGMOBILE3_PAIN2,
	S_EGGMOBILE3_DIE1,
	S_EGGMOBILE3_DIE2,
	S_EGGMOBILE3_DIE3,
	S_EGGMOBILE3_DIE4,
	S_EGGMOBILE3_DIE5,
	S_EGGMOBILE3_DIE6,
	S_EGGMOBILE3_DIE7,
	S_EGGMOBILE3_DIE8,
	S_EGGMOBILE3_DIE9,
	S_EGGMOBILE3_DIE10,
	S_EGGMOBILE3_DIE11,
	S_EGGMOBILE3_DIE12,
	S_EGGMOBILE3_DIE13,
	S_EGGMOBILE3_DIE14,
	S_EGGMOBILE3_FLEE1,
	S_EGGMOBILE3_FLEE2,

	// Boss 3 Propeller
	S_PROPELLER1,
	S_PROPELLER2,
	S_PROPELLER3,
	S_PROPELLER4,
	S_PROPELLER5,
	S_PROPELLER6,
	S_PROPELLER7,

	// Boss 3 Pinch
	S_FAKEMOBILE_INIT,
	S_FAKEMOBILE,
	S_FAKEMOBILE_ATK1,
	S_FAKEMOBILE_ATK2,
	S_FAKEMOBILE_ATK3A,
	S_FAKEMOBILE_ATK3B,
	S_FAKEMOBILE_ATK3C,
	S_FAKEMOBILE_ATK3D,
	S_FAKEMOBILE_ATK4,
	S_FAKEMOBILE_ATK5,

	// Boss 4
	S_EGGMOBILE4_STND,
	S_EGGMOBILE4_LATK1,
	S_EGGMOBILE4_LATK2,
	S_EGGMOBILE4_LATK3,
	S_EGGMOBILE4_LATK4,
	S_EGGMOBILE4_LATK5,
	S_EGGMOBILE4_LATK6,
	S_EGGMOBILE4_RATK1,
	S_EGGMOBILE4_RATK2,
	S_EGGMOBILE4_RATK3,
	S_EGGMOBILE4_RATK4,
	S_EGGMOBILE4_RATK5,
	S_EGGMOBILE4_RATK6,
	S_EGGMOBILE4_RAISE1,
	S_EGGMOBILE4_RAISE2,
	S_EGGMOBILE4_RAISE3,
	S_EGGMOBILE4_RAISE4,
	S_EGGMOBILE4_RAISE5,
	S_EGGMOBILE4_RAISE6,
	S_EGGMOBILE4_RAISE7,
	S_EGGMOBILE4_RAISE8,
	S_EGGMOBILE4_RAISE9,
	S_EGGMOBILE4_RAISE10,
	S_EGGMOBILE4_PAIN,
	S_EGGMOBILE4_DIE1,
	S_EGGMOBILE4_DIE2,
	S_EGGMOBILE4_DIE3,
	S_EGGMOBILE4_DIE4,
	S_EGGMOBILE4_DIE5,
	S_EGGMOBILE4_DIE6,
	S_EGGMOBILE4_DIE7,
	S_EGGMOBILE4_DIE8,
	S_EGGMOBILE4_DIE9,
	S_EGGMOBILE4_DIE10,
	S_EGGMOBILE4_DIE11,
	S_EGGMOBILE4_DIE12,
	S_EGGMOBILE4_DIE13,
	S_EGGMOBILE4_DIE14,
	S_EGGMOBILE4_FLEE1,
	S_EGGMOBILE4_FLEE2,
	S_EGGMOBILE4_MACE,

	// Boss 4 jet flame
	S_JETFLAME1,
	S_JETFLAME2,

	// Black Eggman (Boss 7)
	S_BLACKEGG_STND,
	S_BLACKEGG_STND2,
	S_BLACKEGG_WALK1,
	S_BLACKEGG_WALK2,
	S_BLACKEGG_WALK3,
	S_BLACKEGG_WALK4,
	S_BLACKEGG_WALK5,
	S_BLACKEGG_WALK6,
	S_BLACKEGG_SHOOT1,
	S_BLACKEGG_SHOOT2,
	S_BLACKEGG_PAIN1,
	S_BLACKEGG_PAIN2,
	S_BLACKEGG_PAIN3,
	S_BLACKEGG_PAIN4,
	S_BLACKEGG_PAIN5,
	S_BLACKEGG_PAIN6,
	S_BLACKEGG_PAIN7,
	S_BLACKEGG_PAIN8,
	S_BLACKEGG_PAIN9,
	S_BLACKEGG_PAIN10,
	S_BLACKEGG_PAIN11,
	S_BLACKEGG_PAIN12,
	S_BLACKEGG_PAIN13,
	S_BLACKEGG_PAIN14,
	S_BLACKEGG_PAIN15,
	S_BLACKEGG_PAIN16,
	S_BLACKEGG_PAIN17,
	S_BLACKEGG_PAIN18,
	S_BLACKEGG_PAIN19,
	S_BLACKEGG_PAIN20,
	S_BLACKEGG_PAIN21,
	S_BLACKEGG_PAIN22,
	S_BLACKEGG_PAIN23,
	S_BLACKEGG_PAIN24,
	S_BLACKEGG_PAIN25,
	S_BLACKEGG_PAIN26,
	S_BLACKEGG_PAIN27,
	S_BLACKEGG_PAIN28,
	S_BLACKEGG_PAIN29,
	S_BLACKEGG_PAIN30,
	S_BLACKEGG_PAIN31,
	S_BLACKEGG_PAIN32,
	S_BLACKEGG_PAIN33,
	S_BLACKEGG_PAIN34,
	S_BLACKEGG_PAIN35,
	S_BLACKEGG_HITFACE1,
	S_BLACKEGG_HITFACE2,
	S_BLACKEGG_HITFACE3,
	S_BLACKEGG_HITFACE4,
	S_BLACKEGG_DIE1,
	S_BLACKEGG_DIE2,
	S_BLACKEGG_DIE3,
	S_BLACKEGG_DIE4,
	S_BLACKEGG_DIE5,
	S_BLACKEGG_MISSILE1,
	S_BLACKEGG_MISSILE2,
	S_BLACKEGG_MISSILE3,
	S_BLACKEGG_GOOP,
	S_BLACKEGG_JUMP1,
	S_BLACKEGG_JUMP2,
	S_BLACKEGG_DESTROYPLAT1,
	S_BLACKEGG_DESTROYPLAT2,
	S_BLACKEGG_DESTROYPLAT3,

	S_BLACKEGG_HELPER, // Collision helper

	S_BLACKEGG_GOOP1,
	S_BLACKEGG_GOOP2,
	S_BLACKEGG_GOOP3,
	S_BLACKEGG_GOOP4,
	S_BLACKEGG_GOOP5,
	S_BLACKEGG_GOOP6,
	S_BLACKEGG_GOOP7,

	S_BLACKEGG_MISSILE,

	// New Very-Last-Minute 2.1 Brak Eggman (Cy-Brak-demon)
	S_CYBRAKDEMON_IDLE,
	S_CYBRAKDEMON_WALK1,
	S_CYBRAKDEMON_WALK2,
	S_CYBRAKDEMON_WALK3,
	S_CYBRAKDEMON_WALK4,
	S_CYBRAKDEMON_WALK5,
	S_CYBRAKDEMON_WALK6,
	S_CYBRAKDEMON_CHOOSE_ATTACK1,
	S_CYBRAKDEMON_MISSILE_ATTACK1, // Aim
	S_CYBRAKDEMON_MISSILE_ATTACK2, // Fire
	S_CYBRAKDEMON_MISSILE_ATTACK3, // Aim
	S_CYBRAKDEMON_MISSILE_ATTACK4, // Fire
	S_CYBRAKDEMON_MISSILE_ATTACK5, // Aim
	S_CYBRAKDEMON_MISSILE_ATTACK6, // Fire
	S_CYBRAKDEMON_FLAME_ATTACK1, // Reset
	S_CYBRAKDEMON_FLAME_ATTACK2, // Aim
	S_CYBRAKDEMON_FLAME_ATTACK3, // Fire
	S_CYBRAKDEMON_FLAME_ATTACK4, // Loop
	S_CYBRAKDEMON_CHOOSE_ATTACK2,
	S_CYBRAKDEMON_VILE_ATTACK1,
	S_CYBRAKDEMON_VILE_ATTACK2,
	S_CYBRAKDEMON_VILE_ATTACK3,
	S_CYBRAKDEMON_VILE_ATTACK4,
	S_CYBRAKDEMON_VILE_ATTACK5,
	S_CYBRAKDEMON_VILE_ATTACK6,
	S_CYBRAKDEMON_NAPALM_ATTACK1,
	S_CYBRAKDEMON_NAPALM_ATTACK2,
	S_CYBRAKDEMON_NAPALM_ATTACK3,
	S_CYBRAKDEMON_FINISH_ATTACK1, // If just attacked, remove MF2_FRET w/out going back to spawnstate
	S_CYBRAKDEMON_FINISH_ATTACK2, // Force a delay between attacks so you don't get bombarded with them back-to-back
	S_CYBRAKDEMON_PAIN1,
	S_CYBRAKDEMON_PAIN2,
	S_CYBRAKDEMON_PAIN3,
	S_CYBRAKDEMON_DIE1,
	S_CYBRAKDEMON_DIE2,
	S_CYBRAKDEMON_DIE3,
	S_CYBRAKDEMON_DIE4,
	S_CYBRAKDEMON_DIE5,
	S_CYBRAKDEMON_DIE6,
	S_CYBRAKDEMON_DIE7,
	S_CYBRAKDEMON_DIE8,
	S_CYBRAKDEMON_DEINVINCIBLERIZE,
	S_CYBRAKDEMON_INVINCIBLERIZE,

	S_CYBRAKDEMONMISSILE,
	S_CYBRAKDEMONMISSILE_EXPLODE1,
	S_CYBRAKDEMONMISSILE_EXPLODE2,
	S_CYBRAKDEMONMISSILE_EXPLODE3,

	S_CYBRAKDEMONFLAMESHOT_FLY1,
	S_CYBRAKDEMONFLAMESHOT_FLY2,
	S_CYBRAKDEMONFLAMESHOT_FLY3,
	S_CYBRAKDEMONFLAMESHOT_DIE,

	S_CYBRAKDEMONFLAMEREST,

	S_CYBRAKDEMONELECTRICBARRIER_INIT1,
	S_CYBRAKDEMONELECTRICBARRIER_INIT2,
	S_CYBRAKDEMONELECTRICBARRIER_PLAYSOUND,
	S_CYBRAKDEMONELECTRICBARRIER1,
	S_CYBRAKDEMONELECTRICBARRIER2,
	S_CYBRAKDEMONELECTRICBARRIER3,
	S_CYBRAKDEMONELECTRICBARRIER4,
	S_CYBRAKDEMONELECTRICBARRIER5,
	S_CYBRAKDEMONELECTRICBARRIER6,
	S_CYBRAKDEMONELECTRICBARRIER7,
	S_CYBRAKDEMONELECTRICBARRIER8,
	S_CYBRAKDEMONELECTRICBARRIER9,
	S_CYBRAKDEMONELECTRICBARRIER10,
	S_CYBRAKDEMONELECTRICBARRIER11,
	S_CYBRAKDEMONELECTRICBARRIER12,
	S_CYBRAKDEMONELECTRICBARRIER13,
	S_CYBRAKDEMONELECTRICBARRIER14,
	S_CYBRAKDEMONELECTRICBARRIER15,
	S_CYBRAKDEMONELECTRICBARRIER16,
	S_CYBRAKDEMONELECTRICBARRIER17,
	S_CYBRAKDEMONELECTRICBARRIER18,
	S_CYBRAKDEMONELECTRICBARRIER19,
	S_CYBRAKDEMONELECTRICBARRIER20,
	S_CYBRAKDEMONELECTRICBARRIER21,
	S_CYBRAKDEMONELECTRICBARRIER22,
	S_CYBRAKDEMONELECTRICBARRIER23,
	S_CYBRAKDEMONELECTRICBARRIER24,
	S_CYBRAKDEMONELECTRICBARRIER_DIE1,
	S_CYBRAKDEMONELECTRICBARRIER_DIE2,
	S_CYBRAKDEMONELECTRICBARRIER_DIE3,
	S_CYBRAKDEMONELECTRICBARRIER_SPARK_RANDOMCHECK,
	S_CYBRAKDEMONELECTRICBARRIER_SPARK_RANDOMSUCCESS,
	S_CYBRAKDEMONELECTRICBARRIER_SPARK_RANDOMCHOOSE,
	S_CYBRAKDEMONELECTRICBARRIER_SPARK_RANDOM1,
	S_CYBRAKDEMONELECTRICBARRIER_SPARK_RANDOM2,
	S_CYBRAKDEMONELECTRICBARRIER_SPARK_RANDOM3,
	S_CYBRAKDEMONELECTRICBARRIER_SPARK_RANDOM4,
	S_CYBRAKDEMONELECTRICBARRIER_SPARK_RANDOM5,
	S_CYBRAKDEMONELECTRICBARRIER_SPARK_RANDOM6,
	S_CYBRAKDEMONELECTRICBARRIER_SPARK_RANDOM7,
	S_CYBRAKDEMONELECTRICBARRIER_SPARK_RANDOM8,
	S_CYBRAKDEMONELECTRICBARRIER_SPARK_RANDOM9,
	S_CYBRAKDEMONELECTRICBARRIER_SPARK_RANDOM10,
	S_CYBRAKDEMONELECTRICBARRIER_SPARK_RANDOM11,
	S_CYBRAKDEMONELECTRICBARRIER_SPARK_RANDOM12,
	S_CYBRAKDEMONELECTRICBARRIER_SPARK_RANDOMFAIL,
	S_CYBRAKDEMONELECTRICBARRIER_SPARK_RANDOMLOOP,
	S_CYBRAKDEMONELECTRICBARRIER_REVIVE1,
	S_CYBRAKDEMONELECTRICBARRIER_REVIVE2,
	S_CYBRAKDEMONELECTRICBARRIER_REVIVE3,

	S_CYBRAKDEMONTARGETRETICULE1,
	S_CYBRAKDEMONTARGETRETICULE2,
	S_CYBRAKDEMONTARGETRETICULE3,
	S_CYBRAKDEMONTARGETRETICULE4,
	S_CYBRAKDEMONTARGETRETICULE5,
	S_CYBRAKDEMONTARGETRETICULE6,
	S_CYBRAKDEMONTARGETRETICULE7,
	S_CYBRAKDEMONTARGETRETICULE8,
	S_CYBRAKDEMONTARGETRETICULE9,
	S_CYBRAKDEMONTARGETRETICULE10,
	S_CYBRAKDEMONTARGETRETICULE11,
	S_CYBRAKDEMONTARGETRETICULE12,
	S_CYBRAKDEMONTARGETRETICULE13,
	S_CYBRAKDEMONTARGETRETICULE14,

	S_CYBRAKDEMONTARGETDOT,

	S_CYBRAKDEMONNAPALMBOMBLARGE_FLY1,
	S_CYBRAKDEMONNAPALMBOMBLARGE_FLY2,
	S_CYBRAKDEMONNAPALMBOMBLARGE_FLY3,
	S_CYBRAKDEMONNAPALMBOMBLARGE_FLY4,
	S_CYBRAKDEMONNAPALMBOMBLARGE_DIE1, // Explode
	S_CYBRAKDEMONNAPALMBOMBLARGE_DIE2, // Outer ring
	S_CYBRAKDEMONNAPALMBOMBLARGE_DIE3, // Center
	S_CYBRAKDEMONNAPALMBOMBLARGE_DIE4, // Sound

	S_CYBRAKDEMONNAPALMBOMBSMALL,
	S_CYBRAKDEMONNAPALMBOMBSMALL_DIE1, // Explode
	S_CYBRAKDEMONNAPALMBOMBSMALL_DIE2, // Outer ring
	S_CYBRAKDEMONNAPALMBOMBSMALL_DIE3, // Inner ring
	S_CYBRAKDEMONNAPALMBOMBSMALL_DIE4, // Center
	S_CYBRAKDEMONNAPALMBOMBSMALL_DIE5, // Sound

	S_CYBRAKDEMONNAPALMFLAME_FLY1,
	S_CYBRAKDEMONNAPALMFLAME_FLY2,
	S_CYBRAKDEMONNAPALMFLAME_FLY3,
	S_CYBRAKDEMONNAPALMFLAME_FLY4,
	S_CYBRAKDEMONNAPALMFLAME_FLY5,
	S_CYBRAKDEMONNAPALMFLAME_FLY6,
	S_CYBRAKDEMONNAPALMFLAME_DIE,

	S_CYBRAKDEMONVILEEXPLOSION1,
	S_CYBRAKDEMONVILEEXPLOSION2,
	S_CYBRAKDEMONVILEEXPLOSION3,

	// Metal Sonic (Race)
	// S_PLAY_STND
	S_METALSONIC_STAND,
	// S_PLAY_TAP1
	S_METALSONIC_WAIT1,
	S_METALSONIC_WAIT2,
	// S_PLAY_RUN1
	S_METALSONIC_WALK1,
	S_METALSONIC_WALK2,
	S_METALSONIC_WALK3,
	S_METALSONIC_WALK4,
	S_METALSONIC_WALK5,
	S_METALSONIC_WALK6,
	S_METALSONIC_WALK7,
	S_METALSONIC_WALK8,
	// S_PLAY_SPD1
	S_METALSONIC_RUN1,
	S_METALSONIC_RUN2,
	S_METALSONIC_RUN3,
	S_METALSONIC_RUN4,
	// Metal Sonic (Battle)
	S_METALSONIC_FLOAT,
	S_METALSONIC_VECTOR,
	S_METALSONIC_STUN,
	S_METALSONIC_BLOCK,
	S_METALSONIC_RAISE,
	S_METALSONIC_GATHER,
	S_METALSONIC_DASH,
	S_METALSONIC_BOUNCE,
	S_METALSONIC_SHOOT,
	S_METALSONIC_PAIN,
	S_METALSONIC_DEATH,
	S_METALSONIC_FLEE1,
	S_METALSONIC_FLEE2,
	S_METALSONIC_FLEE3,
	S_METALSONIC_FLEE4,

	S_MSSHIELD_F1,
	S_MSSHIELD_F2,
	S_MSSHIELD_F3,
	S_MSSHIELD_F4,
	S_MSSHIELD_F5,
	S_MSSHIELD_F6,
	S_MSSHIELD_F7,
	S_MSSHIELD_F8,
	S_MSSHIELD_F9,
	S_MSSHIELD_F10,
	S_MSSHIELD_F11,
	S_MSSHIELD_F12,

	// Ring
	S_RING,

	// Blue Sphere for special stages
	S_BLUEBALL,
	S_BLUEBALLSPARK,

	// Gravity Wells for special stages
	S_GRAVWELLGREEN,
	S_GRAVWELLGREEN2,
	S_GRAVWELLGREEN3,

	S_GRAVWELLRED,
	S_GRAVWELLRED2,
	S_GRAVWELLRED3,

	// Individual Team Rings
	S_TEAMRING,

	// Special Stage Token
	S_EMMY,

	// Special Stage Token
	S_TOKEN,
	S_MOVINGTOKEN,

	// CTF Flags
	S_REDFLAG,
	S_BLUEFLAG,

	// Emblem
	S_EMBLEM1,
	S_EMBLEM2,
	S_EMBLEM3,
	S_EMBLEM4,
	S_EMBLEM5,
	S_EMBLEM6,
	S_EMBLEM7,
	S_EMBLEM8,
	S_EMBLEM9,
	S_EMBLEM10,
	S_EMBLEM11,
	S_EMBLEM12,
	S_EMBLEM13,
	S_EMBLEM14,
	S_EMBLEM15,
	S_EMBLEM16,
	S_EMBLEM17,
	S_EMBLEM18,
	S_EMBLEM19,
	S_EMBLEM20,
	S_EMBLEM21,
	S_EMBLEM22,
	S_EMBLEM23,
	S_EMBLEM24,
	S_EMBLEM25,
	S_EMBLEM26,

	// Chaos Emeralds
	S_CEMG1,
	S_CEMG2,
	S_CEMG3,
	S_CEMG4,
	S_CEMG5,
	S_CEMG6,
	S_CEMG7,

	// Emeralds (for hunt)
	S_EMER1,

	S_FAN,
	S_FAN2,
	S_FAN3,
	S_FAN4,
	S_FAN5,

	// Bubble Source
	S_BUBBLES1,
	S_BUBBLES2,

	// Level End Sign
	S_SIGN1,
	S_SIGN2,
	S_SIGN3,
	S_SIGN4,
	S_SIGN5,
	S_SIGN6,
	S_SIGN7,
	S_SIGN8,
	S_SIGN9,
	S_SIGN10,
	S_SIGN11,
	S_SIGN12,
	S_SIGN13,
	S_SIGN14,
	S_SIGN15,
	S_SIGN16,
	S_SIGN17,
	S_SIGN18,
	S_SIGN19,
	S_SIGN20,
	S_SIGN21,
	S_SIGN22,
	S_SIGN23,
	S_SIGN24,
	S_SIGN25,
	S_SIGN26,
	S_SIGN27,
	S_SIGN28,
	S_SIGN29,
	S_SIGN30,
	S_SIGN31,
	S_SIGN32,
	S_SIGN33,
	S_SIGN34,
	S_SIGN35,
	S_SIGN36,
	S_SIGN37,
	S_SIGN38,
	S_SIGN39,
	S_SIGN40,
	S_SIGN41,
	S_SIGN42,
	S_SIGN43,
	S_SIGN44,
	S_SIGN45,
	S_SIGN46,
	S_SIGN47,
	S_SIGN48,
	S_SIGN49,
	S_SIGN50,
	S_SIGN51,
	S_SIGN52, // Eggman
	S_SIGN53,

	// Steam Riser
	S_STEAM1,
	S_STEAM2,
	S_STEAM3,
	S_STEAM4,
	S_STEAM5,
	S_STEAM6,
	S_STEAM7,
	S_STEAM8,

	// Spike Ball
	S_SPIKEBALL1,
	S_SPIKEBALL2,
	S_SPIKEBALL3,
	S_SPIKEBALL4,
	S_SPIKEBALL5,
	S_SPIKEBALL6,
	S_SPIKEBALL7,
	S_SPIKEBALL8,

	// Fire Shield's Spawn
	S_SPINFIRE1,
	S_SPINFIRE2,
	S_SPINFIRE3,
	S_SPINFIRE4,
	S_SPINFIRE5,
	S_SPINFIRE6,

	// Spikes
	S_SPIKE1,
	S_SPIKE2,
	S_SPIKE3,
	S_SPIKE4,
	S_SPIKE5,
	S_SPIKE6,
	S_SPIKED1,
	S_SPIKED2,

	// Starpost
	S_STARPOST_IDLE,
	S_STARPOST_FLASH,
	S_STARPOST_SPIN,

	// Big floating mine
	S_BIGMINE1,
	S_BIGMINE2,
	S_BIGMINE3,
	S_BIGMINE4,
	S_BIGMINE5,
	S_BIGMINE6,
	S_BIGMINE7,
	S_BIGMINE8,

	// Cannon Launcher
	S_CANNONLAUNCHER1,
	S_CANNONLAUNCHER2,
	S_CANNONLAUNCHER3,

	// Super Ring Box
	S_SUPERRINGBOX,
	S_SUPERRINGBOX1,
	S_SUPERRINGBOX2,
	S_SUPERRINGBOX3,
	S_SUPERRINGBOX4,
	S_SUPERRINGBOX5,
	S_SUPERRINGBOX6,

	// Red Team Ring Box
	S_REDRINGBOX,
	S_REDRINGBOX1,

	// Blue Team Ring Box
	S_BLUERINGBOX,
	S_BLUERINGBOX1,

	// Super Sneakers Box
	S_SHTV,
	S_SHTV1,
	S_SHTV2,
	S_SHTV3,
	S_SHTV4,
	S_SHTV5,
	S_SHTV6,

	// Invincibility Box
	S_PINV,
	S_PINV1,
	S_PINV2,
	S_PINV3,
	S_PINV4,
	S_PINV5,
	S_PINV6,

	// 1up Box
	S_PRUP,
	S_PRUP1,
	S_PRUP2,
	S_PRUP3,
	S_PRUP4,
	S_PRUP5,
	S_PRUP6,

	// Ring Shield Box
	S_YLTV,
	S_YLTV1,
	S_YLTV2,
	S_YLTV3,
	S_YLTV4,
	S_YLTV5,
	S_YLTV6,

	// Force Shield Box
	S_BLTV1,
	S_BLTV2,
	S_BLTV3,
	S_BLTV4,
	S_BLTV5,
	S_BLTV6,
	S_BLTV7,

	// Bomb Shield Box
	S_BKTV1,
	S_BKTV2,
	S_BKTV3,
	S_BKTV4,
	S_BKTV5,
	S_BKTV6,
	S_BKTV7,

	// Jump Shield Box
	S_WHTV1,
	S_WHTV2,
	S_WHTV3,
	S_WHTV4,
	S_WHTV5,
	S_WHTV6,
	S_WHTV7,

	// Water Shield Box
	S_GRTV,
	S_GRTV1,
	S_GRTV2,
	S_GRTV3,
	S_GRTV4,
	S_GRTV5,
	S_GRTV6,

	// Pity Shield Box
	S_PITV1,
	S_PITV2,
	S_PITV3,
	S_PITV4,
	S_PITV5,
	S_PITV6,
	S_PITV7,

	// Eggman Box
	S_EGGTV1,
	S_EGGTV2,
	S_EGGTV3,
	S_EGGTV4,
	S_EGGTV5,
	S_EGGTV6,
	S_EGGTV7,

	// Teleport Box
	S_MIXUPBOX1,
	S_MIXUPBOX2,
	S_MIXUPBOX3,
	S_MIXUPBOX4,
	S_MIXUPBOX5,
	S_MIXUPBOX6,
	S_MIXUPBOX7,

	// Recycler Box
	S_RECYCLETV1,
	S_RECYCLETV2,
	S_RECYCLETV3,
	S_RECYCLETV4,
	S_RECYCLETV5,
	S_RECYCLETV6,
	S_RECYCLETV7,

	// Question Box
	S_RANDOMBOX1,
	S_RANDOMBOX2,
	S_RANDOMBOX3,

	// Gravity Boots Box
	S_GBTV1,
	S_GBTV2,
	S_GBTV3,
	S_GBTV4,
	S_GBTV5,
	S_GBTV6,
	S_GBTV7,

	// Score boxes
	S_SCORETVA1,
	S_SCORETVA2,
	S_SCORETVA3,
	S_SCORETVA4,
	S_SCORETVA5,
	S_SCORETVA6,
	S_SCORETVA7,
	S_SCORETVB1,
	S_SCORETVB2,
	S_SCORETVB3,
	S_SCORETVB4,
	S_SCORETVB5,
	S_SCORETVB6,
	S_SCORETVB7,

	// Monitor Explosion
	S_MONITOREXPLOSION1,
	S_MONITOREXPLOSION2,

	S_REDMONITOREXPLOSION1,
	S_REDMONITOREXPLOSION2,

	S_BLUEMONITOREXPLOSION1,
	S_BLUEMONITOREXPLOSION2,

	S_ROCKET,

	S_LASER,

	S_TORPEDO,

	S_ENERGYBALL1,
	S_ENERGYBALL2,

	// Skim Mine, also used by Jetty-Syn bomber
	S_MINE1,
	S_MINE_BOOM1,
	S_MINE_BOOM2,
	S_MINE_BOOM3,
	S_MINE_BOOM4,

	// Jetty-Syn Bullet
	S_JETBULLET1,
	S_JETBULLET2,

	S_TURRETLASER,
	S_TURRETLASEREXPLODE1,
	S_TURRETLASEREXPLODE2,

	// Cannonball
	S_CANNONBALL1,

	// Arrow
	S_ARROW,
	S_ARROWUP,
	S_ARROWDOWN,

	// Trapgoyle Demon fire
	S_DEMONFIRE1,
	S_DEMONFIRE2,
	S_DEMONFIRE3,
	S_DEMONFIRE4,
	S_DEMONFIRE5,
	S_DEMONFIRE6,

	S_GFZFLOWERA,
	S_GFZFLOWERA2,

	S_GFZFLOWERB1,
	S_GFZFLOWERB2,

	S_GFZFLOWERC1,

	S_BERRYBUSH,
	S_BUSH,

	// THZ Plant
	S_THZPLANT1,
	S_THZPLANT2,
	S_THZPLANT3,
	S_THZPLANT4,

	// THZ Alarm
	S_ALARM1,

	// Deep Sea Gargoyle
	S_GARGOYLE,

	// DSZ Seaweed
	S_SEAWEED1,
	S_SEAWEED2,
	S_SEAWEED3,
	S_SEAWEED4,
	S_SEAWEED5,
	S_SEAWEED6,

	// Dripping Water
	S_DRIPA1,
	S_DRIPA2,
	S_DRIPA3,
	S_DRIPA4,
	S_DRIPB1,
	S_DRIPC1,
	S_DRIPC2,

	// Coral 1
	S_CORAL1,

	// Coral 2
	S_CORAL2,

	// Coral 3
	S_CORAL3,

	// Blue Crystal
	S_BLUECRYSTAL1,

	// CEZ Chain
	S_CEZCHAIN,

	// Flame
	S_FLAME1,
	S_FLAME2,
	S_FLAME3,
	S_FLAME4,

	// Eggman Statue
	S_EGGSTATUE1,

	// CEZ hidden sling
	S_SLING1,
	S_SLING2,

	// CEZ Small Mace Chain
	S_SMALLMACECHAIN,

	// CEZ Big Mace Chain
	S_BIGMACECHAIN,

	// CEZ Small Mace
	S_SMALLMACE,

	// CEZ Big Mace
	S_BIGMACE,

	S_CEZFLOWER1,

	// Big Tumbleweed
	S_BIGTUMBLEWEED,
	S_BIGTUMBLEWEED_ROLL1,
	S_BIGTUMBLEWEED_ROLL2,
	S_BIGTUMBLEWEED_ROLL3,
	S_BIGTUMBLEWEED_ROLL4,
	S_BIGTUMBLEWEED_ROLL5,
	S_BIGTUMBLEWEED_ROLL6,
	S_BIGTUMBLEWEED_ROLL7,
	S_BIGTUMBLEWEED_ROLL8,

	// Little Tumbleweed
	S_LITTLETUMBLEWEED,
	S_LITTLETUMBLEWEED_ROLL1,
	S_LITTLETUMBLEWEED_ROLL2,
	S_LITTLETUMBLEWEED_ROLL3,
	S_LITTLETUMBLEWEED_ROLL4,
	S_LITTLETUMBLEWEED_ROLL5,
	S_LITTLETUMBLEWEED_ROLL6,
	S_LITTLETUMBLEWEED_ROLL7,
	S_LITTLETUMBLEWEED_ROLL8,

	// Cacti Sprites
	S_CACTI1,
	S_CACTI2,
	S_CACTI3,
	S_CACTI4,

	// Flame jet
	S_FLAMEJETSTND,
	S_FLAMEJETSTART,
	S_FLAMEJETSTOP,
	S_FLAMEJETFLAME1,
	S_FLAMEJETFLAME2,
	S_FLAMEJETFLAME3,

	// Spinning flame jets
	S_FJSPINAXISA1, // Counter-clockwise
	S_FJSPINAXISA2,
	S_FJSPINAXISA3,
	S_FJSPINAXISA4,
	S_FJSPINAXISA5,
	S_FJSPINAXISA6,
	S_FJSPINAXISA7,
	S_FJSPINAXISA8,
	S_FJSPINAXISA9,
	S_FJSPINHELPERA1,
	S_FJSPINHELPERA2,
	S_FJSPINHELPERA3,
	S_FJSPINAXISB1, // Clockwise
	S_FJSPINAXISB2,
	S_FJSPINAXISB3,
	S_FJSPINAXISB4,
	S_FJSPINAXISB5,
	S_FJSPINAXISB6,
	S_FJSPINAXISB7,
	S_FJSPINAXISB8,
	S_FJSPINAXISB9,
	S_FJSPINHELPERB1,
	S_FJSPINHELPERB2,
	S_FJSPINHELPERB3,

	// Blade's flame
	S_FLAMEJETFLAMEB1,
	S_FLAMEJETFLAMEB2,
	S_FLAMEJETFLAMEB3,
	S_FLAMEJETFLAMEB4,
	S_FLAMEJETFLAMEB5,
	S_FLAMEJETFLAMEB6,

	// Trapgoyles
	S_TRAPGOYLE,
	S_TRAPGOYLE_CHECK,
	S_TRAPGOYLE_FIRE1,
	S_TRAPGOYLE_FIRE2,
	S_TRAPGOYLE_FIRE3,
	S_TRAPGOYLEUP,
	S_TRAPGOYLEUP_CHECK,
	S_TRAPGOYLEUP_FIRE1,
	S_TRAPGOYLEUP_FIRE2,
	S_TRAPGOYLEUP_FIRE3,
	S_TRAPGOYLEDOWN,
	S_TRAPGOYLEDOWN_CHECK,
	S_TRAPGOYLEDOWN_FIRE1,
	S_TRAPGOYLEDOWN_FIRE2,
	S_TRAPGOYLEDOWN_FIRE3,
	S_TRAPGOYLELONG,
	S_TRAPGOYLELONG_CHECK,
	S_TRAPGOYLELONG_FIRE1,
	S_TRAPGOYLELONG_FIRE2,
	S_TRAPGOYLELONG_FIRE3,
	S_TRAPGOYLELONG_FIRE4,
	S_TRAPGOYLELONG_FIRE5,

	// ATZ's Red Crystal/Target
	S_TARGET_IDLE,
	S_TARGET_HIT1,
	S_TARGET_HIT2,
	S_TARGET_RESPAWN,
	S_TARGET_ALLDONE,

	// Stalagmites
	S_STG0,
	S_STG1,
	S_STG2,
	S_STG3,
	S_STG4,
	S_STG5,
	S_STG6,
	S_STG7,
	S_STG8,
	S_STG9,

	// Xmas-specific stuff
	S_XMASPOLE,
	S_CANDYCANE,
	S_SNOWMAN,

	// Botanic Serenity's loads of scenery states
	S_BSZTALLFLOWER_RED,
	S_BSZTALLFLOWER_PURPLE,
	S_BSZTALLFLOWER_BLUE,
	S_BSZTALLFLOWER_CYAN,
	S_BSZTALLFLOWER_YELLOW,
	S_BSZTALLFLOWER_ORANGE,
	S_BSZFLOWER_RED,
	S_BSZFLOWER_PURPLE,
	S_BSZFLOWER_BLUE,
	S_BSZFLOWER_CYAN,
	S_BSZFLOWER_YELLOW,
	S_BSZFLOWER_ORANGE,
	S_BSZSHORTFLOWER_RED,
	S_BSZSHORTFLOWER_PURPLE,
	S_BSZSHORTFLOWER_BLUE,
	S_BSZSHORTFLOWER_CYAN,
	S_BSZSHORTFLOWER_YELLOW,
	S_BSZSHORTFLOWER_ORANGE,
	S_BSZTULIP_RED,
	S_BSZTULIP_PURPLE,
	S_BSZTULIP_BLUE,
	S_BSZTULIP_CYAN,
	S_BSZTULIP_YELLOW,
	S_BSZTULIP_ORANGE,
	S_BSZCLUSTER_RED,
	S_BSZCLUSTER_PURPLE,
	S_BSZCLUSTER_BLUE,
	S_BSZCLUSTER_CYAN,
	S_BSZCLUSTER_YELLOW,
	S_BSZCLUSTER_ORANGE,
	S_BSZBUSH_RED,
	S_BSZBUSH_PURPLE,
	S_BSZBUSH_BLUE,
	S_BSZBUSH_CYAN,
	S_BSZBUSH_YELLOW,
	S_BSZBUSH_ORANGE,
	S_BSZVINE_RED,
	S_BSZVINE_PURPLE,
	S_BSZVINE_BLUE,
	S_BSZVINE_CYAN,
	S_BSZVINE_YELLOW,
	S_BSZVINE_ORANGE,
	S_BSZSHRUB,
	S_BSZCLOVER,
	S_BSZFISH,
	S_BSZSUNFLOWER,

	S_DBALL1,
	S_DBALL2,
	S_DBALL3,
	S_DBALL4,
	S_DBALL5,
	S_DBALL6,
	S_EGGSTATUE2,

	// Shield Orb
	S_ARMA1,
	S_ARMA2,
	S_ARMA3,
	S_ARMA4,
	S_ARMA5,
	S_ARMA6,
	S_ARMA7,
	S_ARMA8,
	S_ARMA9,
	S_ARMA10,
	S_ARMA11,
	S_ARMA12,
	S_ARMA13,
	S_ARMA14,
	S_ARMA15,
	S_ARMA16,

	S_ARMF1,
	S_ARMF2,
	S_ARMF3,
	S_ARMF4,
	S_ARMF5,
	S_ARMF6,
	S_ARMF7,
	S_ARMF8,
	S_ARMF9,
	S_ARMF10,
	S_ARMF11,
	S_ARMF12,
	S_ARMF13,
	S_ARMF14,
	S_ARMF15,
	S_ARMF16,

	S_ARMB1,
	S_ARMB2,
	S_ARMB3,
	S_ARMB4,
	S_ARMB5,
	S_ARMB6,
	S_ARMB7,
	S_ARMB8,
	S_ARMB9,
	S_ARMB10,
	S_ARMB11,
	S_ARMB12,
	S_ARMB13,
	S_ARMB14,
	S_ARMB15,
	S_ARMB16,

	S_WIND1,
	S_WIND2,
	S_WIND3,
	S_WIND4,
	S_WIND5,
	S_WIND6,
	S_WIND7,
	S_WIND8,

	S_MAGN1,
	S_MAGN2,
	S_MAGN3,
	S_MAGN4,
	S_MAGN5,
	S_MAGN6,
	S_MAGN7,
	S_MAGN8,
	S_MAGN9,
	S_MAGN10,
	S_MAGN11,
	S_MAGN12,

	S_FORC1,
	S_FORC2,
	S_FORC3,
	S_FORC4,
	S_FORC5,
	S_FORC6,
	S_FORC7,
	S_FORC8,
	S_FORC9,
	S_FORC10,

	S_FORC11,
	S_FORC12,
	S_FORC13,
	S_FORC14,
	S_FORC15,
	S_FORC16,
	S_FORC17,
	S_FORC18,
	S_FORC19,
	S_FORC20,

	S_ELEM1,
	S_ELEM2,
	S_ELEM3,
	S_ELEM4,
	S_ELEM5,
	S_ELEM6,
	S_ELEM7,
	S_ELEM8,
	S_ELEM9,
	S_ELEM10,
	S_ELEM11,
	S_ELEM12,

	S_ELEMF1,
	S_ELEMF2,
	S_ELEMF3,
	S_ELEMF4,
	S_ELEMF5,
	S_ELEMF6,
	S_ELEMF7,
	S_ELEMF8,

	S_PITY1,
	S_PITY2,
	S_PITY3,
	S_PITY4,
	S_PITY5,
	S_PITY6,
	S_PITY7,
	S_PITY8,
	S_PITY9,
	S_PITY10,

	// Invincibility Sparkles
	S_IVSP,

	// Super Sonic Spark
	S_SSPK1,
	S_SSPK2,
	S_SSPK3,
	S_SSPK4,
	S_SSPK5,

	// Freed Birdie
	S_BIRD1,
	S_BIRD2,
	S_BIRD3,

	// Freed Bunny
	S_BUNNY1,
	S_BUNNY2,
	S_BUNNY3,
	S_BUNNY4,
	S_BUNNY5,
	S_BUNNY6,
	S_BUNNY7,
	S_BUNNY8,
	S_BUNNY9,
	S_BUNNY10,

	// Freed Mouse
	S_MOUSE1,
	S_MOUSE2,

	// Freed Chicken
	S_CHICKEN1,
	S_CHICKENHOP,
	S_CHICKENFLY1,
	S_CHICKENFLY2,

	// Freed Cow
	S_COW1,
	S_COW2,
	S_COW3,
	S_COW4,

	// Red Birdie in Bubble
	S_RBIRD1,
	S_RBIRD2,
	S_RBIRD3,

	S_YELLOWSPRING,
	S_YELLOWSPRING2,
	S_YELLOWSPRING3,
	S_YELLOWSPRING4,
	S_YELLOWSPRING5,

	S_REDSPRING,
	S_REDSPRING2,
	S_REDSPRING3,
	S_REDSPRING4,
	S_REDSPRING5,

	// Blue Springs
	S_BLUESPRING,
	S_BLUESPRING2,
	S_BLUESPRING3,
	S_BLUESPRING4,
	S_BLUESPRING5,

	// Yellow Diagonal Spring
	S_YDIAG1,
	S_YDIAG2,
	S_YDIAG3,
	S_YDIAG4,
	S_YDIAG5,
	S_YDIAG6,
	S_YDIAG7,
	S_YDIAG8,

	// Red Diagonal Spring
	S_RDIAG1,
	S_RDIAG2,
	S_RDIAG3,
	S_RDIAG4,
	S_RDIAG5,
	S_RDIAG6,
	S_RDIAG7,
	S_RDIAG8,

	// Rain
	S_RAIN1,
	S_RAINRETURN,

	// Snowflake
	S_SNOW1,
	S_SNOW2,
	S_SNOW3,

	// Water Splish
	S_SPLISH1,
	S_SPLISH2,
	S_SPLISH3,
	S_SPLISH4,
	S_SPLISH5,
	S_SPLISH6,
	S_SPLISH7,
	S_SPLISH8,
	S_SPLISH9,

	// added water splash
	S_SPLASH1,
	S_SPLASH2,
	S_SPLASH3,

	// lava/slime damage burn smoke
	S_SMOKE1,
	S_SMOKE2,
	S_SMOKE3,
	S_SMOKE4,
	S_SMOKE5,

	// Bubbles
	S_SMALLBUBBLE,
	S_SMALLBUBBLE1,
	S_MEDIUMBUBBLE,
	S_MEDIUMBUBBLE1,
	S_LARGEBUBBLE,
	S_EXTRALARGEBUBBLE, // breathable

	S_POP1, // Extra Large bubble goes POP!

	S_FOG1,
	S_FOG2,
	S_FOG3,
	S_FOG4,
	S_FOG5,
	S_FOG6,
	S_FOG7,
	S_FOG8,
	S_FOG9,
	S_FOG10,
	S_FOG11,
	S_FOG12,
	S_FOG13,
	S_FOG14,

	S_SEED,

	S_PARTICLE,
	S_PARTICLEGEN,

	// Score Logos
	S_SCRA, // 100
	S_SCRB, // 200
	S_SCRC, // 500
	S_SCRD, // 1000
	S_SCRE, // 10000
	S_SCRF, // 400 (mario)
	S_SCRG, // 800 (mario)
	S_SCRH, // 2000 (mario)
	S_SCRI, // 4000 (mario)
	S_SCRJ, // 8000 (mario)
	S_SCRK, // 1UP (mario)

	// Drowning Timer Numbers
	S_ZERO1,
	S_ONE1,
	S_TWO1,
	S_THREE1,
	S_FOUR1,
	S_FIVE1,

	// Tag Sign
	S_TTAG1,

	// Got Flag Sign
	S_GOTFLAG1,
	S_GOTFLAG2,
	S_GOTFLAG3,
	S_GOTFLAG4,

	// Red Ring
	S_RRNG1,
	S_RRNG2,
	S_RRNG3,
	S_RRNG4,
	S_RRNG5,
	S_RRNG6,
	S_RRNG7,

	// Weapon Ring Ammo
	S_BOUNCERINGAMMO,
	S_RAILRINGAMMO,
	S_INFINITYRINGAMMO,
	S_AUTOMATICRINGAMMO,
	S_EXPLOSIONRINGAMMO,
	S_SCATTERRINGAMMO,
	S_GRENADERINGAMMO,

	// Weapon pickup
	S_BOUNCEPICKUP,
	S_BOUNCEPICKUPFADE1,
	S_BOUNCEPICKUPFADE2,
	S_BOUNCEPICKUPFADE3,
	S_BOUNCEPICKUPFADE4,
	S_BOUNCEPICKUPFADE5,
	S_BOUNCEPICKUPFADE6,
	S_BOUNCEPICKUPFADE7,
	S_BOUNCEPICKUPFADE8,

	S_RAILPICKUP,
	S_RAILPICKUPFADE1,
	S_RAILPICKUPFADE2,
	S_RAILPICKUPFADE3,
	S_RAILPICKUPFADE4,
	S_RAILPICKUPFADE5,
	S_RAILPICKUPFADE6,
	S_RAILPICKUPFADE7,
	S_RAILPICKUPFADE8,

	S_AUTOPICKUP,
	S_AUTOPICKUPFADE1,
	S_AUTOPICKUPFADE2,
	S_AUTOPICKUPFADE3,
	S_AUTOPICKUPFADE4,
	S_AUTOPICKUPFADE5,
	S_AUTOPICKUPFADE6,
	S_AUTOPICKUPFADE7,
	S_AUTOPICKUPFADE8,

	S_EXPLODEPICKUP,
	S_EXPLODEPICKUPFADE1,
	S_EXPLODEPICKUPFADE2,
	S_EXPLODEPICKUPFADE3,
	S_EXPLODEPICKUPFADE4,
	S_EXPLODEPICKUPFADE5,
	S_EXPLODEPICKUPFADE6,
	S_EXPLODEPICKUPFADE7,
	S_EXPLODEPICKUPFADE8,

	S_SCATTERPICKUP,
	S_SCATTERPICKUPFADE1,
	S_SCATTERPICKUPFADE2,
	S_SCATTERPICKUPFADE3,
	S_SCATTERPICKUPFADE4,
	S_SCATTERPICKUPFADE5,
	S_SCATTERPICKUPFADE6,
	S_SCATTERPICKUPFADE7,
	S_SCATTERPICKUPFADE8,

	S_GRENADEPICKUP,
	S_GRENADEPICKUPFADE1,
	S_GRENADEPICKUPFADE2,
	S_GRENADEPICKUPFADE3,
	S_GRENADEPICKUPFADE4,
	S_GRENADEPICKUPFADE5,
	S_GRENADEPICKUPFADE6,
	S_GRENADEPICKUPFADE7,
	S_GRENADEPICKUPFADE8,

	// Thrown Weapon Rings
	S_THROWNBOUNCE1,
	S_THROWNBOUNCE2,
	S_THROWNBOUNCE3,
	S_THROWNBOUNCE4,
	S_THROWNBOUNCE5,
	S_THROWNBOUNCE6,
	S_THROWNBOUNCE7,
	S_THROWNINFINITY1,
	S_THROWNINFINITY2,
	S_THROWNINFINITY3,
	S_THROWNINFINITY4,
	S_THROWNINFINITY5,
	S_THROWNINFINITY6,
	S_THROWNINFINITY7,
	S_THROWNAUTOMATIC1,
	S_THROWNAUTOMATIC2,
	S_THROWNAUTOMATIC3,
	S_THROWNAUTOMATIC4,
	S_THROWNAUTOMATIC5,
	S_THROWNAUTOMATIC6,
	S_THROWNAUTOMATIC7,
	S_THROWNEXPLOSION1,
	S_THROWNEXPLOSION2,
	S_THROWNEXPLOSION3,
	S_THROWNEXPLOSION4,
	S_THROWNEXPLOSION5,
	S_THROWNEXPLOSION6,
	S_THROWNEXPLOSION7,
	S_THROWNGRENADE1,
	S_THROWNGRENADE2,
	S_THROWNGRENADE3,
	S_THROWNGRENADE4,
	S_THROWNGRENADE5,
	S_THROWNGRENADE6,
	S_THROWNGRENADE7,
	S_THROWNGRENADE8,
	S_THROWNGRENADE9,
	S_THROWNGRENADE10,
	S_THROWNGRENADE11,
	S_THROWNGRENADE12,
	S_THROWNGRENADE13,
	S_THROWNGRENADE14,
	S_THROWNGRENADE15,
	S_THROWNGRENADE16,
	S_THROWNGRENADE17,
	S_THROWNGRENADE18,
	S_THROWNSCATTER,

	S_RINGEXPLODE,

	S_COIN1,
	S_COIN2,
	S_COIN3,
	S_COINSPARKLE1,
	S_COINSPARKLE2,
	S_COINSPARKLE3,
	S_COINSPARKLE4,
	S_GOOMBA1,
	S_GOOMBA1B,
	S_GOOMBA2,
	S_GOOMBA3,
	S_GOOMBA4,
	S_GOOMBA5,
	S_GOOMBA6,
	S_GOOMBA7,
	S_GOOMBA8,
	S_GOOMBA9,
	S_GOOMBA_DEAD,
	S_BLUEGOOMBA1,
	S_BLUEGOOMBA1B,
	S_BLUEGOOMBA2,
	S_BLUEGOOMBA3,
	S_BLUEGOOMBA4,
	S_BLUEGOOMBA5,
	S_BLUEGOOMBA6,
	S_BLUEGOOMBA7,
	S_BLUEGOOMBA8,
	S_BLUEGOOMBA9,
	S_BLUEGOOMBA_DEAD,

	// Mario-specific stuff
	S_FIREFLOWER1,
	S_FIREFLOWER2,
	S_FIREFLOWER3,
	S_FIREFLOWER4,
	S_FIREBALL1,
	S_FIREBALL2,
	S_FIREBALL3,
	S_FIREBALL4,
	S_FIREBALLEXP1,
	S_FIREBALLEXP2,
	S_FIREBALLEXP3,
	S_SHELL,
	S_SHELL1,
	S_SHELL2,
	S_SHELL3,
	S_SHELL4,
	S_PUMA1,
	S_PUMA2,
	S_PUMA3,
	S_PUMA4,
	S_PUMA5,
	S_PUMA6,
	S_HAMMER1,
	S_HAMMER2,
	S_HAMMER3,
	S_HAMMER4,
	S_KOOPA1,
	S_KOOPA2,
	S_KOOPAFLAME1,
	S_KOOPAFLAME2,
	S_KOOPAFLAME3,
	S_AXE1,
	S_AXE2,
	S_AXE3,
	S_MARIOBUSH1,
	S_MARIOBUSH2,
	S_TOAD,

	// Nights-specific stuff
	S_NIGHTSDRONE1,
	S_NIGHTSDRONE2,
	S_NIGHTSDRONE_SPARKLING1,
	S_NIGHTSDRONE_SPARKLING2,
	S_NIGHTSDRONE_SPARKLING3,
	S_NIGHTSDRONE_SPARKLING4,
	S_NIGHTSDRONE_SPARKLING5,
	S_NIGHTSDRONE_SPARKLING6,
	S_NIGHTSDRONE_SPARKLING7,
	S_NIGHTSDRONE_SPARKLING8,
	S_NIGHTSDRONE_SPARKLING9,
	S_NIGHTSDRONE_SPARKLING10,
	S_NIGHTSDRONE_SPARKLING11,
	S_NIGHTSDRONE_SPARKLING12,
	S_NIGHTSDRONE_SPARKLING13,
	S_NIGHTSDRONE_SPARKLING14,
	S_NIGHTSDRONE_SPARKLING15,
	S_NIGHTSDRONE_SPARKLING16,
	S_NIGHTSGOAL1,
	S_NIGHTSGOAL2,
	S_NIGHTSGOAL3,
	S_NIGHTSGOAL4,

	S_NIGHTSFLY1A,
	S_NIGHTSFLY1B,
	S_NIGHTSDRILL1A,
	S_NIGHTSDRILL1B,
	S_NIGHTSDRILL1C,
	S_NIGHTSDRILL1D,
	S_NIGHTSFLY2A,
	S_NIGHTSFLY2B,
	S_NIGHTSDRILL2A,
	S_NIGHTSDRILL2B,
	S_NIGHTSDRILL2C,
	S_NIGHTSDRILL2D,
	S_NIGHTSFLY3A,
	S_NIGHTSFLY3B,
	S_NIGHTSDRILL3A,
	S_NIGHTSDRILL3B,
	S_NIGHTSDRILL3C,
	S_NIGHTSDRILL3D,
	S_NIGHTSFLY4A,
	S_NIGHTSFLY4B,
	S_NIGHTSDRILL4A,
	S_NIGHTSDRILL4B,
	S_NIGHTSDRILL4C,
	S_NIGHTSDRILL4D,
	S_NIGHTSFLY5A,
	S_NIGHTSFLY5B,
	S_NIGHTSDRILL5A,
	S_NIGHTSDRILL5B,
	S_NIGHTSDRILL5C,
	S_NIGHTSDRILL5D,
	S_NIGHTSFLY6A,
	S_NIGHTSFLY6B,
	S_NIGHTSDRILL6A,
	S_NIGHTSDRILL6B,
	S_NIGHTSDRILL6C,
	S_NIGHTSDRILL6D,
	S_NIGHTSFLY7A,
	S_NIGHTSFLY7B,
	S_NIGHTSDRILL7A,
	S_NIGHTSDRILL7B,
	S_NIGHTSDRILL7C,
	S_NIGHTSDRILL7D,
	S_NIGHTSFLY8A,
	S_NIGHTSFLY8B,
	S_NIGHTSDRILL8A,
	S_NIGHTSDRILL8B,
	S_NIGHTSDRILL8C,
	S_NIGHTSDRILL8D,
	S_NIGHTSFLY9A,
	S_NIGHTSFLY9B,
	S_NIGHTSDRILL9A,
	S_NIGHTSDRILL9B,
	S_NIGHTSDRILL9C,
	S_NIGHTSDRILL9D,
	S_NIGHTSHURT1,
	S_NIGHTSHURT2,
	S_NIGHTSHURT3,
	S_NIGHTSHURT4,
	S_NIGHTSHURT5,
	S_NIGHTSHURT6,
	S_NIGHTSHURT7,
	S_NIGHTSHURT8,
	S_NIGHTSHURT9,
	S_NIGHTSHURT10,
	S_NIGHTSHURT11,
	S_NIGHTSHURT12,
	S_NIGHTSHURT13,
	S_NIGHTSHURT14,
	S_NIGHTSHURT15,
	S_NIGHTSHURT16,
	S_NIGHTSHURT17,
	S_NIGHTSHURT18,
	S_NIGHTSHURT19,
	S_NIGHTSHURT20,
	S_NIGHTSHURT21,
	S_NIGHTSHURT22,
	S_NIGHTSHURT23,
	S_NIGHTSHURT24,
	S_NIGHTSHURT25,
	S_NIGHTSHURT26,
	S_NIGHTSHURT27,
	S_NIGHTSHURT28,
	S_NIGHTSHURT29,
	S_NIGHTSHURT30,
	S_NIGHTSHURT31,
	S_NIGHTSHURT32,

	S_NIGHTSPARKLE1,
	S_NIGHTSPARKLE2,
	S_NIGHTSPARKLE3,
	S_NIGHTSPARKLE4,
	S_NIGHTSPARKLESUPER1,
	S_NIGHTSPARKLESUPER2,
	S_NIGHTSPARKLESUPER3,
	S_NIGHTSPARKLESUPER4,
	S_NIGHTSLOOPHELPER,

	// NiGHTS bumper
	S_NIGHTSBUMPER1,
	S_NIGHTSBUMPER2,
	S_NIGHTSBUMPER3,
	S_NIGHTSBUMPER4,
	S_NIGHTSBUMPER5,
	S_NIGHTSBUMPER6,
	S_NIGHTSBUMPER7,
	S_NIGHTSBUMPER8,
	S_NIGHTSBUMPER9,
	S_NIGHTSBUMPER10,
	S_NIGHTSBUMPER11,
	S_NIGHTSBUMPER12,

	S_HOOP,
	S_HOOP_XMASA,
	S_HOOP_XMASB,

	S_NIGHTSCORE10,
	S_NIGHTSCORE20,
	S_NIGHTSCORE30,
	S_NIGHTSCORE40,
	S_NIGHTSCORE50,
	S_NIGHTSCORE60,
	S_NIGHTSCORE70,
	S_NIGHTSCORE80,
	S_NIGHTSCORE90,
	S_NIGHTSCORE100,
	S_NIGHTSCORE10_2,
	S_NIGHTSCORE20_2,
	S_NIGHTSCORE30_2,
	S_NIGHTSCORE40_2,
	S_NIGHTSCORE50_2,
	S_NIGHTSCORE60_2,
	S_NIGHTSCORE70_2,
	S_NIGHTSCORE80_2,
	S_NIGHTSCORE90_2,
	S_NIGHTSCORE100_2,

	S_NIGHTSWING,
	S_NIGHTSWING_XMAS,

	// NiGHTS Paraloop Powerups
	S_NIGHTSPOWERUP1,
	S_NIGHTSPOWERUP2,
	S_NIGHTSPOWERUP3,
	S_NIGHTSPOWERUP4,
	S_NIGHTSPOWERUP5,
	S_NIGHTSPOWERUP6,
	S_NIGHTSPOWERUP7,
	S_NIGHTSPOWERUP8,
	S_NIGHTSPOWERUP9,
	S_NIGHTSPOWERUP10,
	S_EGGCAPSULE,

	// Orbiting Chaos Emeralds
	S_ORBITEM1,
	S_ORBITEM2,
	S_ORBITEM3,
	S_ORBITEM4,
	S_ORBITEM5,
	S_ORBITEM6,
	S_ORBITEM7,
	S_ORBITEM8,
	S_ORBITEM9,
	S_ORBITEM10,
	S_ORBITEM11,
	S_ORBITEM12,
	S_ORBITEM13,
	S_ORBITEM14,
	S_ORBITEM15,
	S_ORBITEM16,

	// "Flicky" helper
	S_NIGHTOPIANHELPER1,
	S_NIGHTOPIANHELPER2,
	S_NIGHTOPIANHELPER3,
	S_NIGHTOPIANHELPER4,
	S_NIGHTOPIANHELPER5,
	S_NIGHTOPIANHELPER6,
	S_NIGHTOPIANHELPER7,
	S_NIGHTOPIANHELPER8,

	S_CRUMBLE1,
	S_CRUMBLE2,

	S_SUPERTRANS1,
	S_SUPERTRANS2,
	S_SUPERTRANS3,
	S_SUPERTRANS4,
	S_SUPERTRANS5,
	S_SUPERTRANS6,
	S_SUPERTRANS7,
	S_SUPERTRANS8,
	S_SUPERTRANS9,

	// Spark
	S_SPRK1,
	S_SPRK2,
	S_SPRK3,
	S_SPRK4,
	S_SPRK5,
	S_SPRK6,
	S_SPRK7,
	S_SPRK8,
	S_SPRK9,
	S_SPRK10,
	S_SPRK11,
	S_SPRK12,
	S_SPRK13,
	S_SPRK14,
	S_SPRK15,
	S_SPRK16,

	// Robot Explosion
	S_XPLD1,
	S_XPLD2,
	S_XPLD3,
	S_XPLD4,

	// Underwater Explosion
	S_WPLD1,
	S_WPLD2,
	S_WPLD3,
	S_WPLD4,
	S_WPLD5,
	S_WPLD6,

	S_ROCKSPAWN,

	S_ROCKCRUMBLEA,
	S_ROCKCRUMBLEB,
	S_ROCKCRUMBLEC,
	S_ROCKCRUMBLED,
	S_ROCKCRUMBLEE,
	S_ROCKCRUMBLEF,
	S_ROCKCRUMBLEG,
	S_ROCKCRUMBLEH,
	S_ROCKCRUMBLEI,
	S_ROCKCRUMBLEJ,
	S_ROCKCRUMBLEK,
	S_ROCKCRUMBLEL,
	S_ROCKCRUMBLEM,
	S_ROCKCRUMBLEN,
	S_ROCKCRUMBLEO,
	S_ROCKCRUMBLEP,

	S_SRB1_CRAWLA1,
	S_SRB1_CRAWLA2,
	S_SRB1_CRAWLA3,
	S_SRB1_CRAWLA4,

	S_SRB1_BAT1,
	S_SRB1_BAT2,
	S_SRB1_BAT3,
	S_SRB1_BAT4,

	S_SRB1_ROBOFISH1,
	S_SRB1_ROBOFISH2,
	S_SRB1_ROBOFISH3,

	S_SRB1_VOLCANOGUY1,
	S_SRB1_VOLCANOGUY2,

	S_SRB1_HOPPY1,
	S_SRB1_HOPPY2,

	S_SRB1_HOPPYWATER1,
	S_SRB1_HOPPYWATER2,

	S_SRB1_HOPPYSKYLAB1,

	S_SRB1_MMZFLYING1,
	S_SRB1_MMZFLYING2,
	S_SRB1_MMZFLYING3,
	S_SRB1_MMZFLYING4,
	S_SRB1_MMZFLYING5,

	S_SRB1_UFO1,
	S_SRB1_UFO2,

	S_SRB1_GRAYBOT1,
	S_SRB1_GRAYBOT2,
	S_SRB1_GRAYBOT3,
	S_SRB1_GRAYBOT4,
	S_SRB1_GRAYBOT5,
	S_SRB1_GRAYBOT6,

	S_SRB1_ROBOTOPOLIS1,
	S_SRB1_ROBOTOPOLIS2,

	S_SRB1_RBZBUZZ1,
	S_SRB1_RBZBUZZ2,

	S_SRB1_RBZSPIKES1,
	S_SRB1_RBZSPIKES2,

	S_SRB1_METALSONIC1,
	S_SRB1_METALSONIC2,
	S_SRB1_METALSONIC3,

	S_SRB1_GOLDBOT1,
	S_SRB1_GOLDBOT2,
	S_SRB1_GOLDBOT3,
	S_SRB1_GOLDBOT4,
	S_SRB1_GOLDBOT5,
	S_SRB1_GOLDBOT6,

	S_SRB1_GENREX1,
	S_SRB1_GENREX2,

#ifdef SEENAMES
	S_NAMECHECK,
#endif

	S_FIRSTFREESLOT,
	S_LASTFREESLOT = S_FIRSTFREESLOT + NUMSTATEFREESLOTS - 1,
	NUMSTATES
} statenum_t;

typedef struct
{
	spritenum_t sprite;
	UINT32 frame; // we use the upper 16 bits for translucency and other shade effects
	INT32 tics;
	actionf_t action;
	INT32 var1;
	INT32 var2;
	statenum_t nextstate;
} state_t;

extern state_t states[NUMSTATES];
extern char sprnames[NUMSPRITES + 1][5];
extern state_t *astate;

typedef enum mobj_type
{
	MT_NULL,
	MT_UNKNOWN,

	MT_THOK, // Thok! mobj
	MT_PLAYER,

	// Enemies
	MT_BLUECRAWLA,
	MT_REDCRAWLA,
	MT_GFZFISH, // Greenflower Fish
	MT_GOLDBUZZ,
	MT_REDBUZZ,
	MT_AQUABUZZ, // AquaBuzz for ATZ
	MT_JETTBOMBER, // Jetty-Syn Bomber
	MT_JETTGUNNER, // Jetty-Syn Gunner
	MT_CRAWLACOMMANDER, // Crawla Commander
	MT_DETON, // Deton
	MT_SKIM, // Skim mine dropper
	MT_TURRET,
	MT_POPUPTURRET,
	MT_SHARP, // Sharp
	MT_JETJAW, // Jet Jaw
	MT_SNAILER, // Snailer
	MT_VULTURE, // Vulture
	MT_POINTY, // Pointy
	MT_POINTYBALL, // Pointy Ball
	MT_ROBOHOOD, // Robo-Hood
	MT_FACESTABBER, // CastleBot FaceStabber
	MT_EGGGUARD, // Egg Guard
	MT_EGGSHIELD, // Egg Shield for Egg Guard
	MT_GSNAPPER, // Green Snapper
	MT_MINUS, // Minus
	MT_SPRINGSHELL, // Spring Shell
	MT_YELLOWSHELL, // Spring Shell (yellow)
	MT_UNIDUS, // Unidus
	MT_UNIBALL, // Unidus Ball

	// Generic Boss Items
	MT_BOSSEXPLODE,
	MT_SONIC3KBOSSEXPLODE,
	MT_BOSSFLYPOINT,
	MT_EGGTRAP,
	MT_BOSS3WAYPOINT,
	MT_BOSS9GATHERPOINT,

	// Boss 1
	MT_EGGMOBILE,
	MT_JETFUME1,
	MT_EGGMOBILE_BALL,
	MT_EGGMOBILE_TARGET,
	MT_EGGMOBILE_FIRE,

	// Boss 2
	MT_EGGMOBILE2,
	MT_EGGMOBILE2_POGO,
	MT_BOSSTANK1,
	MT_BOSSTANK2,
	MT_BOSSSPIGOT,
	MT_GOOP,

	// Boss 3
	MT_EGGMOBILE3,
	MT_PROPELLER,
	MT_FAKEMOBILE,

	// Boss 4
	MT_EGGMOBILE4,
	MT_EGGMOBILE4_MACE,
	MT_JETFLAME,

	// Black Eggman (Boss 7)
	MT_BLACKEGGMAN,
	MT_BLACKEGGMAN_HELPER,
	MT_BLACKEGGMAN_GOOPFIRE,
	MT_BLACKEGGMAN_MISSILE,

	// New Very-Last-Minute 2.1 Brak Eggman (Cy-Brak-demon)
	MT_CYBRAKDEMON,
	MT_CYBRAKDEMON_ELECTRIC_BARRIER,
	MT_CYBRAKDEMON_MISSILE,
	MT_CYBRAKDEMON_FLAMESHOT,
	MT_CYBRAKDEMON_FLAMEREST,
	MT_CYBRAKDEMON_TARGET_RETICULE,
	MT_CYBRAKDEMON_TARGET_DOT,
	MT_CYBRAKDEMON_NAPALM_BOMB_LARGE,
	MT_CYBRAKDEMON_NAPALM_BOMB_SMALL,
	MT_CYBRAKDEMON_NAPALM_FLAMES,
	MT_CYBRAKDEMON_VILE_EXPLOSION,

	// Metal Sonic (Boss 9)
	MT_METALSONIC_RACE,
	MT_METALSONIC_BATTLE,
	MT_MSSHIELD_FRONT,
	MT_MSGATHER,

	// Collectible Items
	MT_RING,
	MT_FLINGRING, // Lost ring
	MT_BLUEBALL,  // Blue sphere replacement for special stages
	MT_REDTEAMRING,  //Rings collectable by red team.
	MT_BLUETEAMRING, //Rings collectable by blue team.
	MT_EMMY, // emerald token for special stage
	MT_TOKEN, // Special Stage Token (uncollectible part)
	MT_REDFLAG, // Red CTF Flag
	MT_BLUEFLAG, // Blue CTF Flag
	MT_EMBLEM,
	MT_EMERALD1,
	MT_EMERALD2,
	MT_EMERALD3,
	MT_EMERALD4,
	MT_EMERALD5,
	MT_EMERALD6,
	MT_EMERALD7,
	MT_EMERHUNT, // Emerald Hunt
	MT_EMERALDSPAWN, // Emerald spawner w/ delay
	MT_FLINGEMERALD, // Lost emerald

	// Springs and others
	MT_FAN,
	MT_STEAM, // Steam riser
	MT_BLUESPRING,
	MT_YELLOWSPRING,
	MT_REDSPRING,
	MT_YELLOWDIAG, // Yellow Diagonal Spring
	MT_REDDIAG, // Red Diagonal Spring

	// Interactive Objects
	MT_BUBBLES, // Bubble source
	MT_SIGN, // Level end sign
	MT_SPIKEBALL, // Spike Ball
	MT_SPECIALSPIKEBALL,
	MT_SPINFIRE,
	MT_SPIKE,
	MT_STARPOST,
	MT_BIGMINE,
	MT_BIGAIRMINE,
	MT_CANNONLAUNCHER,

	// Monitor Boxes
	MT_SUPERRINGBOX,
	MT_REDRINGBOX,
	MT_BLUERINGBOX,
	MT_SNEAKERTV,
	MT_INV,
	MT_PRUP, // 1up Box
	MT_YELLOWTV,
	MT_BLUETV,
	MT_BLACKTV, // Bomb shield TV
	MT_WHITETV, // Jump shield TV
	MT_GREENTV,
	MT_PITYTV, // Pity Shield TV
	MT_EGGMANBOX,
	MT_MIXUPBOX,
	MT_RECYCLETV,
	MT_RECYCLEICO,
	MT_QUESTIONBOX,
	MT_GRAVITYBOX,
	MT_SCORETVSMALL,
	MT_SCORETVLARGE,

	// Monitor miscellany
	MT_MONITOREXPLOSION,
	MT_REDMONITOREXPLOSION,
	MT_BLUEMONITOREXPLOSION,
	MT_RINGICO,
	MT_SHOESICO,
	MT_INVCICO,
	MT_1UPICO,
	MT_YSHIELDICO,
	MT_BSHIELDICO,
	MT_KSHIELDICO,
	MT_WSHIELDICO,
	MT_GSHIELDICO,
	MT_PITYSHIELDICO,
	MT_EGGMANICO,
	MT_MIXUPICO,
	MT_GRAVITYICO,
	MT_SCOREICOSMALL,
	MT_SCOREICOLARGE,

	// Projectiles
	MT_ROCKET,
	MT_LASER,
	MT_TORPEDO,
	MT_TORPEDO2, // silent
	MT_ENERGYBALL,
	MT_MINE, // Skim/Jetty-Syn mine
	MT_JETTBULLET, // Jetty-Syn Bullet
	MT_TURRETLASER,
	MT_CANNONBALL, // Cannonball
	MT_CANNONBALLDECOR, // Decorative/still cannonball
	MT_ARROW, // Arrow
	MT_DEMONFIRE, // Trapgoyle fire

	// Greenflower Scenery
	MT_GFZFLOWER1,
	MT_GFZFLOWER2,
	MT_GFZFLOWER3,
	MT_BERRYBUSH,
	MT_BUSH,

	// Techno Hill Scenery
	MT_THZPLANT, // THZ Plant
	MT_ALARM,

	// Deep Sea Scenery
	MT_GARGOYLE, // Deep Sea Gargoyle
	MT_SEAWEED, // DSZ Seaweed
	MT_WATERDRIP, // Dripping Water source
	MT_WATERDROP, // Water drop from dripping water
	MT_CORAL1, // Coral 1
	MT_CORAL2, // Coral 2
	MT_CORAL3, // Coral 3
	MT_BLUECRYSTAL, // Blue Crystal

	// Castle Eggman Scenery
	MT_CHAIN, // CEZ Chain
	MT_FLAME, // Flame (has corona)
	MT_EGGSTATUE, // Eggman Statue
	MT_MACEPOINT, // Mace rotation point
	MT_SWINGMACEPOINT, // Mace swinging point
	MT_HANGMACEPOINT, // Hangable mace chain
	MT_SPINMACEPOINT, // Spin/Controllable mace chain
	MT_HIDDEN_SLING, // Spin mace chain (activatable)
	MT_SMALLMACECHAIN, // Small Mace Chain
	MT_BIGMACECHAIN, // Big Mace Chain
	MT_SMALLMACE, // Small Mace
	MT_BIGMACE, // Big Mace
	MT_CEZFLOWER,

	// Arid Canyon Scenery
	MT_BIGTUMBLEWEED,
	MT_LITTLETUMBLEWEED,
	MT_CACTI1,
	MT_CACTI2,
	MT_CACTI3,
	MT_CACTI4,

	// Red Volcano Scenery
	MT_FLAMEJET,
	MT_VERTICALFLAMEJET,
	MT_FLAMEJETFLAME,

	MT_FJSPINAXISA, // Counter-clockwise
	MT_FJSPINHELPERA,
	MT_FJSPINAXISB, // Clockwise
	MT_FJSPINHELPERB,

	MT_FLAMEJETFLAMEB, // Blade's flame

	// Dark City Scenery

	// Egg Rock Scenery

	// Azure Temple Scenery
	MT_TRAPGOYLE,
	MT_TRAPGOYLEUP,
	MT_TRAPGOYLEDOWN,
	MT_TRAPGOYLELONG,
	MT_TARGET, // AKA Red Crystal

	// Stalagmites
	MT_STALAGMITE0,
	MT_STALAGMITE1,
	MT_STALAGMITE2,
	MT_STALAGMITE3,
	MT_STALAGMITE4,
	MT_STALAGMITE5,
	MT_STALAGMITE6,
	MT_STALAGMITE7,
	MT_STALAGMITE8,
	MT_STALAGMITE9,

	// Christmas Scenery
	MT_XMASPOLE,
	MT_CANDYCANE,
	MT_SNOWMAN,

	// Botanic Serenity scenery
	MT_BSZTALLFLOWER_RED,
	MT_BSZTALLFLOWER_PURPLE,
	MT_BSZTALLFLOWER_BLUE,
	MT_BSZTALLFLOWER_CYAN,
	MT_BSZTALLFLOWER_YELLOW,
	MT_BSZTALLFLOWER_ORANGE,
	MT_BSZFLOWER_RED,
	MT_BSZFLOWER_PURPLE,
	MT_BSZFLOWER_BLUE,
	MT_BSZFLOWER_CYAN,
	MT_BSZFLOWER_YELLOW,
	MT_BSZFLOWER_ORANGE,
	MT_BSZSHORTFLOWER_RED,
	MT_BSZSHORTFLOWER_PURPLE,
	MT_BSZSHORTFLOWER_BLUE,
	MT_BSZSHORTFLOWER_CYAN,
	MT_BSZSHORTFLOWER_YELLOW,
	MT_BSZSHORTFLOWER_ORANGE,
	MT_BSZTULIP_RED,
	MT_BSZTULIP_PURPLE,
	MT_BSZTULIP_BLUE,
	MT_BSZTULIP_CYAN,
	MT_BSZTULIP_YELLOW,
	MT_BSZTULIP_ORANGE,
	MT_BSZCLUSTER_RED,
	MT_BSZCLUSTER_PURPLE,
	MT_BSZCLUSTER_BLUE,
	MT_BSZCLUSTER_CYAN,
	MT_BSZCLUSTER_YELLOW,
	MT_BSZCLUSTER_ORANGE,
	MT_BSZBUSH_RED,
	MT_BSZBUSH_PURPLE,
	MT_BSZBUSH_BLUE,
	MT_BSZBUSH_CYAN,
	MT_BSZBUSH_YELLOW,
	MT_BSZBUSH_ORANGE,
	MT_BSZVINE_RED,
	MT_BSZVINE_PURPLE,
	MT_BSZVINE_BLUE,
	MT_BSZVINE_CYAN,
	MT_BSZVINE_YELLOW,
	MT_BSZVINE_ORANGE,
	MT_BSZSHRUB,
	MT_BSZCLOVER,
	MT_BSZFISH,
	MT_BSZSUNFLOWER,

	// Misc scenery
	MT_DBALL,
	MT_EGGSTATUE2,

	// Powerup Indicators
	MT_GREENORB, // Elemental shield mobj
	MT_YELLOWORB, // Attract shield mobj
	MT_BLUEORB, // Force shield mobj
	MT_BLACKORB, // Armageddon shield mobj
	MT_WHITEORB, // Whirlwind shield mobj
	MT_PITYORB, // Pity shield mobj
	MT_IVSP, // invincibility sparkles
	MT_SUPERSPARK, // Super Sonic Spark

	// Freed Animals
	MT_BIRD, // Birdie freed!
	MT_BUNNY, // Bunny freed!
	MT_MOUSE, // Mouse
	MT_CHICKEN, // Chicken
	MT_COW, // Cow
	MT_REDBIRD, // Red Birdie in Bubble

	// Environmental Effects
	MT_RAIN, // Rain
	MT_SNOWFLAKE, // Snowflake
	MT_SPLISH, // Water splish!
	MT_SMOKE,
	MT_SMALLBUBBLE, // small bubble
	MT_MEDIUMBUBBLE, // medium bubble
	MT_EXTRALARGEBUBBLE, // extra large bubble
	MT_TFOG,
	MT_SEED,
	MT_PARTICLE,
	MT_PARTICLEGEN, // For fans, etc.

	// Game Indicators
	MT_SCORE, // score logo
	MT_DROWNNUMBERS, // Drowning Timer
	MT_GOTEMERALD, // Chaos Emerald (intangible)
	MT_TAG, // Tag Sign
	MT_GOTFLAG, // Got Flag sign
	MT_GOTFLAG2, // Got Flag sign

	// Ambient Sounds
	MT_AWATERA, // Ambient Water Sound 1
	MT_AWATERB, // Ambient Water Sound 2
	MT_AWATERC, // Ambient Water Sound 3
	MT_AWATERD, // Ambient Water Sound 4
	MT_AWATERE, // Ambient Water Sound 5
	MT_AWATERF, // Ambient Water Sound 6
	MT_AWATERG, // Ambient Water Sound 7
	MT_AWATERH, // Ambient Water Sound 8
	MT_RANDOMAMBIENT,
	MT_RANDOMAMBIENT2,

	// Ring Weapons
	MT_REDRING,
	MT_BOUNCERING,
	MT_RAILRING,
	MT_INFINITYRING,
	MT_AUTOMATICRING,
	MT_EXPLOSIONRING,
	MT_SCATTERRING,
	MT_GRENADERING,

	MT_BOUNCEPICKUP,
	MT_RAILPICKUP,
	MT_AUTOPICKUP,
	MT_EXPLODEPICKUP,
	MT_SCATTERPICKUP,
	MT_GRENADEPICKUP,

	MT_THROWNBOUNCE,
	MT_THROWNINFINITY,
	MT_THROWNAUTOMATIC,
	MT_THROWNSCATTER,
	MT_THROWNEXPLOSION,
	MT_THROWNGRENADE,

	// Mario-specific stuff
	MT_COIN,
	MT_FLINGCOIN,
	MT_GOOMBA,
	MT_BLUEGOOMBA,
	MT_FIREFLOWER,
	MT_FIREBALL,
	MT_SHELL,
	MT_PUMA,
	MT_HAMMER,
	MT_KOOPA,
	MT_KOOPAFLAME,
	MT_AXE,
	MT_MARIOBUSH1,
	MT_MARIOBUSH2,
	MT_TOAD,

	// NiGHTS Stuff
	MT_AXIS,
	MT_AXISTRANSFER,
	MT_AXISTRANSFERLINE,
	MT_NIGHTSDRONE,
	MT_NIGHTSGOAL,
	MT_NIGHTSCHAR,
	MT_NIGHTSPARKLE,
	MT_NIGHTSLOOPHELPER,
	MT_NIGHTSBUMPER, // NiGHTS Bumper
	MT_HOOP,
	MT_HOOPCOLLIDE, // Collision detection for NiGHTS hoops
	MT_HOOPCENTER, // Center of a hoop
	MT_NIGHTSCORE,
	MT_NIGHTSWING,
	MT_NIGHTSSUPERLOOP,
	MT_NIGHTSDRILLREFILL,
	MT_NIGHTSHELPER,
	MT_NIGHTSEXTRATIME,
	MT_NIGHTSLINKFREEZE,
	MT_EGGCAPSULE,
	MT_NIGHTOPIANHELPER, // the actual helper object that orbits you

	// Utility Objects
	MT_TELEPORTMAN,
	MT_ALTVIEWMAN,
	MT_CRUMBLEOBJ, // Sound generator for crumbling platform
	MT_TUBEWAYPOINT,
	MT_PUSH,
	MT_PULL,
	MT_GHOST,
	MT_OVERLAY,
	MT_POLYANCHOR,
	MT_POLYSPAWN,
	MT_POLYSPAWNCRUSH,

	// Skybox objects
	MT_SKYBOX,

	// Debris
	MT_SPARK, //spark
	MT_EXPLODE, // Robot Explosion
	MT_UWEXPLODE, // Underwater Explosion
	MT_ROCKSPAWNER,
	MT_FALLINGROCK,
	MT_ROCKCRUMBLE1,
	MT_ROCKCRUMBLE2,
	MT_ROCKCRUMBLE3,
	MT_ROCKCRUMBLE4,
	MT_ROCKCRUMBLE5,
	MT_ROCKCRUMBLE6,
	MT_ROCKCRUMBLE7,
	MT_ROCKCRUMBLE8,
	MT_ROCKCRUMBLE9,
	MT_ROCKCRUMBLE10,
	MT_ROCKCRUMBLE11,
	MT_ROCKCRUMBLE12,
	MT_ROCKCRUMBLE13,
	MT_ROCKCRUMBLE14,
	MT_ROCKCRUMBLE15,
	MT_ROCKCRUMBLE16,

	MT_SRB1_CRAWLA,
	MT_SRB1_BAT,
	MT_SRB1_ROBOFISH,
	MT_SRB1_VOLCANOGUY,
	MT_SRB1_HOPPY,
	MT_SRB1_HOPPYWATER,
	MT_SRB1_HOPPYSKYLAB,
	MT_SRB1_MMZFLYING,
	MT_SRB1_UFO,
	MT_SRB1_GRAYBOT,
	MT_SRB1_ROBOTOPOLIS,
	MT_SRB1_RBZBUZZ,
	MT_SRB1_RBZSPIKES,
	MT_SRB1_METALSONIC,
	MT_SRB1_GOLDBOT,
	MT_SRB1_GENREX,
#ifdef SEENAMES
	MT_NAMECHECK,
#endif

	MT_FIRSTFREESLOT,
	MT_LASTFREESLOT = MT_FIRSTFREESLOT + NUMMOBJFREESLOTS - 1,
	NUMMOBJTYPES
} mobjtype_t;

typedef struct
{
	INT32 doomednum;
	statenum_t spawnstate;
	INT32 spawnhealth;
	statenum_t seestate;
	sfxenum_t seesound;
	INT32 reactiontime;
	sfxenum_t attacksound;
	statenum_t painstate;
	INT32 painchance;
	sfxenum_t painsound;
	statenum_t meleestate;
	statenum_t missilestate;
	statenum_t deathstate;
	statenum_t xdeathstate;
	sfxenum_t deathsound;
	fixed_t speed;
	fixed_t radius;
	fixed_t height;
	INT32 dispoffset;
	INT32 mass;
	INT32 damage;
	sfxenum_t activesound;
	UINT32 flags;
	statenum_t raisestate;
} mobjinfo_t;

extern mobjinfo_t mobjinfo[NUMMOBJTYPES];

void P_PatchInfoTables(void);

void P_BackupTables(void);

void P_ResetData(INT32 flags);

#endif
