#========================================================#
#Start of Freeslots. (Note that alot are added in Lua)
#========================================================#

#Note, SOC becomes LIVID if you put a space after your freeslot, so avoid that!

FREESLOT
S_XSAUTOFRAME#Custom States. Things are defined in Lua.
S_XSTHOK#Copy of S_THOK state to prevent other mods from messing with things.
S_XSUNDERGLOW
S_PLAY_S_XTRANSFORM
S_PLAY_XZIPPREPSUPER
S_PLAY_XZIPBRAKESUPER
S_PLAY_XZIPSLIDE
S_PLAY_XZIPSLIDE2
S_PLAY_XZIPLEAP
S_PLAY_XSNAPDIVE
S_PLAY_XDIVEFLIP1
S_PLAY_XDIVEFLIP2
S_PLAY_XDIVEFLIP3
S_PLAY_XDIVEFLIP4
S_PLAY_XKICK1
S_PLAY_XKICK2
S_PLAY_XKICK3
S_PLAY_XKICK4
S_PLAY_XRINGBURST
S_PLAY_XWALLRUN
S_XSWINDLINE1S
S_XSWINDLINE2S
S_XSWINDLINE3S
S_XSWINDLINE4S
SPR_XSG1#X Sonic Graphic Objects 1
SPR_XSG2#X Sonic Graphic Objects 2
SPR_XSG3#X Sonic Graphic Objects 3
SPR_XSG4#X Sonic Graphic Objects 4
SPR_XSG5#X Sonic Graphic Objects 5
SPR_XSG9#X Sonic Graphic Objects 9
SPR_XSAA#X Sonic Aura 1
SPR_XSAB#X Sonic Aura 2(Crouch)
SPR_XSAC#X Sonic Aura 3(SuperFlight)
SPR_XSE9#X Style Emeralds
SPR_XTK6#Chaos Emerald Sprite. Seperate for 3D model convenience.
SPR_XTK7#X Sonic's thok sprite. Not that he has a thok, but he needs the sprite anyway without mod intervention.
SPR_XTK8#Big glowing light.
SPR_XTKE#Emeralds+Emerald Lights
SPR_XSWL#Windlines
SKINCOLOR_SONIKKU
SKINCOLOR_SHADO
SKINCOLOR_TEIRUSU
SKINCOLOR_NAKKURUSU
SKINCOLOR_EMI-ROZU
SKINCOLOR_SUPASONIKKU
SKINCOLOR_DAKUSONIKKU
SKINCOLOR_XSBLUETRAIL
SKINCOLOR_XSSUPERAURA
SKINCOLOR_XSSUPERBLUR
SKINCOLOR_XSDARKNESS
SKINCOLOR_PUREBLACK
SPR2_RBRX
SPR2_SXTF
SPR2_WLRN
SPR2_DIVE
SPR2_GRND
SPR2_FKIK
SPR2_SHIT

#========================================================#
#Start of Custom Sprites
#========================================================#

#SPR2_SXTF is X Sonic's custom transformation sprites

Sprite2 SPR2_SXTF
Default = SPR2_TRNS

#This is Sonic's skydiving animation!

Sprite2 SPR2_DIVE
Default = SPR2_FALL

#We use custom sprites for the wallrun to support the halfpipe mod.

Sprite2 SPR2_WLRN
Default = SPR2_RUN_

#For grind rails. If it's not added, then the load order can cause issues!

Sprite2 SPR2_GRND
Default = SPR2_ROLL

#Other mod support sprites.

Sprite2 SPR2_FKIK
Default = SPR2_WALK

Sprite2 SPR2_SHIT
Default = SPR2_PAIN


#========================================================#
#Start of Skin Colors
#========================================================#

SKINCOLOR SKINCOLOR_SONIKKU
NAME = SONIKKU
RAMP = 133,134,135,149,150,151,153,154,155,156,156,168,169,169,253,31
INVCOLOR = SKINCOLOR_FLAME
INVSHADE = 3
CHATCOLOR = V_BLUEMAP
ACCESSIBLE = TRUE

SKINCOLOR SKINCOLOR_SHADO
NAME = SHADO
RAMP = 12,14,16,18,20,22,25,26,27,27,28,29,29,30,31,31
INVCOLOR = SKINCOLOR_CRIMSON
INVSHADE = 6
CHATCOLOR = V_INVERTMAP
ACCESSIBLE = TRUE

SKINCOLOR SKINCOLOR_TEIRUSU
NAME = TEIRUSU
RAMP = 83,83,50,51,52,52,53,53,55,57,58,59,60,61,63,71
INVCOLOR = SKINCOLOR_BLUE
INVSHADE = 6
CHATCOLOR = V_ORANGEMAP
ACCESSIBLE = TRUE

SKINCOLOR SKINCOLOR_NAKKURUSU
NAME = NAKKURUSU
RAMP = 52,52,32,32,33,33,34,34,214,215,215,215,61,61,63,71
INVCOLOR = SKINCOLOR_AQUA
INVSHADE = 6
CHATCOLOR = V_REDMAP
ACCESSIBLE = TRUE

SKINCOLOR SKINCOLOR_EMI-ROZU
NAME = EMI-ROZU
RAMP = 208,208,48,209,209,201,201,201,202,202,202,202,203,203,205,207
INVCOLOR = SKINCOLOR_CYAN
INVSHADE =2
CHATCOLOR = V_ROSYMAP
ACCESSIBLE = TRUE

SKINCOLOR SKINCOLOR_SUPASONIKKU
NAME = SUPASONIKKU
RAMP = 0,80,81,82,83,72,73,73,74,74,75,76,77,191,78,79
INVCOLOR = SKINCOLOR_SUNSET
INVSHADE = 6
CHATCOLOR = V_YELLOWMAP
ACCESSIBLE = TRUE

SKINCOLOR SKINCOLOR_DAKUSONIKKU
NAME = DAKUSONIKKU
RAMP = 172,173,173,174,174,174,175,175,199,199,199,199,29,30,30,31
INVCOLOR = SKINCOLOR_ICY
INVSHADE = 6
CHATCOLOR = V_BLUEMAP
ACCESSIBLE = FALSE

SKINCOLOR SKINCOLOR_XSBLUETRAIL
NAME = XSBLUETRAIL
RAMP = 150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150
INVCOLOR = SKINCOLOR_JET
INVSHADE = 8
CHATCOLOR = V_BLUEMAP
ACCESSIBLE = FALSE

SKINCOLOR SKINCOLOR_XSSUPERAURA
NAME = XSSUPERAURA
RAMP = 0,80,81,82,83,73,84,85,86,87,79,191,79,239,111,31
INVCOLOR = SKINCOLOR_COBALT
INVSHADE = 8
CHATCOLOR = V_ORANGEMAP
ACCESSIBLE = FALSE

SKINCOLOR SKINCOLOR_XSSUPERBLUR
NAME = XSSUPERBLUR
RAMP = 0,80,81,82,83,72,73,84,85,86,77,78,79,79,79,31
INVCOLOR = SKINCOLOR_COBALT
INVSHADE = 8
CHATCOLOR = V_ORANGEMAP
ACCESSIBLE = FALSE

SKINCOLOR SKINCOLOR_XSDARKNESS
NAME = XSDARKNESS
RAMP = 144,170,172,173,174,174,167,167,168,169,169,253,253,253,254,254
INVCOLOR = SKINCOLOR_ICY
INVSHADE = 8
CHATCOLOR = V_BLUEMAP
ACCESSIBLE = FALSE

SKINCOLOR SKINCOLOR_PUREBLACK
NAME = PUREBLACK
RAMP = 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31
INVCOLOR = SKINCOLOR_MIDNIGHT
INVSHADE = 8
CHATCOLOR = V_BLUEMAP
ACCESSIBLE = FALSE

#Experimental 4th ramp:
#RAMP = 0,80,81,82,83,72,73,84,85,86,87,79,71,111,239,31
#Experimental 3rd ramp:
#RAMP = 0,80,81,82,83,72,73,84,78,79,239,111,31,31,31,31
#Blur's Aura ramp. Relied on destroying the original aura sprite color detail, however.
#RAMP = 0,1,80,80,81,82,82,83,64,66,79,237,239,110,111,31
#First Superaura ramp.
#RAMP = 0,80,81,82,83,72,73,84,85,86,77,78,79,70,71,31
#========================================================#
#Start of Custom Things and States
#========================================================#

#Super Sonic Transformation state. Animated with Lua

FRAME S_PLAY_S_XTRANSFORM
SPRITENAME = SPR_PLAY
SPRITEFRAME = SPR2_TRNS
DURATION = 77
NEXT = S_PLAY_STND

#Zip Dash Slide/Leap states for X Sonic.

FRAME S_PLAY_XZIPPREPSUPER
SPRITENAME = SPR_PLAY
SPRITEFRAME = SPR2_MLEL|A
DURATION = 6
NEXT = S_PLAY_FALL

FRAME S_PLAY_XZIPBRAKESUPER
SPRITENAME = SPR_PLAY
SPRITEFRAME = SPR2_TAL2|B
DURATION = 24
NEXT = S_PLAY_FALL

FRAME S_PLAY_XZIPSLIDE
SPRITENAME = SPR_PLAY
SPRITEFRAME = SPR2_SKID|A
DURATION = 1
NEXT = S_PLAY_XZIPSLIDE2

FRAME S_PLAY_XZIPSLIDE2
SPRITENAME = SPR_PLAY
SPRITEFRAME = SPR2_SKID|B
DURATION = 1
NEXT = S_PLAY_XZIPSLIDE

FRAME S_PLAY_XZIPLEAP
SPRITENAME = SPR_PLAY
SPRITEFRAME = SPR2_GLID|A
DURATION = 90
NEXT = S_PLAY_FALL

#Snap Dive sidewards roll. Basically a spring state without the baggage of the spring state.

FRAME S_PLAY_XSNAPDIVE
SPRITENAME = SPR_PLAY
SPRITEFRAME = SPR2_SPNG|A
DURATION = 13
NEXT = S_PLAY_SPRING

#Snap Dive Flip. Classic method with 4 seperate states for each frame to give me a bit of finer control

FRAME S_PLAY_XDIVEFLIP1
SPRITENAME = SPR_PLAY
SPRITEFRAME = SPR2_MLEE|FF_ANIMATE
DURATION = 2
NEXT = S_PLAY_XDIVEFLIP2

FRAME S_PLAY_XDIVEFLIP2
SPRITENAME = SPR_PLAY
SPRITEFRAME = SPR2_MLEE|FF_ANIMATE
DURATION = 2
NEXT = S_PLAY_XDIVEFLIP3

FRAME S_PLAY_XDIVEFLIP3
SPRITENAME = SPR_PLAY
SPRITEFRAME = SPR2_MLEE|FF_ANIMATE
DURATION = 2
NEXT = S_PLAY_XDIVEFLIP4

FRAME S_PLAY_XDIVEFLIP4
SPRITENAME = SPR_PLAY
SPRITEFRAME = SPR2_MLEE|FF_ANIMATE
DURATION = 3
NEXT = S_PLAY_FALL

#Snap Dive Kick. Minor AoE kick that can perfectly reflect projectiles and shove pushables, but you lose your hop.

FRAME S_PLAY_XKICK1
SPRITENAME = SPR_PLAY
SPRITEFRAME = SPR2_TAL2|FF_ANIMATE
DURATION = 5
NEXT = S_PLAY_XKICK2

FRAME S_PLAY_XKICK2
SPRITENAME = SPR_PLAY
SPRITEFRAME = SPR2_TAL2|FF_ANIMATE
DURATION = 2
NEXT = S_PLAY_XKICK3

FRAME S_PLAY_XKICK3
SPRITENAME = SPR_PLAY
SPRITEFRAME = SPR2_TAL2|FF_ANIMATE
DURATION = 1
NEXT = S_PLAY_XKICK4

FRAME S_PLAY_XKICK4
SPRITENAME = SPR_PLAY
SPRITEFRAME = SPR2_TAL2|FF_ANIMATE
DURATION = 6
NEXT = S_PLAY_XDIVEFLIP2

#Wallrunning up walls, a highly requested feature not originally planned for inclusion!

FRAME S_PLAY_XWALLRUN
SPRITENAME = SPR_PLAY
SPRITEFRAME = SPR2_WLRN|FF_ANIMATE
DURATION = -1
NEXT = S_PLAY_XWALLRUN

#Frame to avoid mods messing with our thok sprites.

FRAME S_XSTHOK
SPRITENAME = SPR_XTK7
SPRITEFRAME = A
DURATION = 8
NEXT = S_NULL

#Invisible Object that stops Sonic from flinging off edges.

Thing MT_XSEDGESTOP
SPAWNSTATE = S_XSUNDERGLOW
RADIUS = 1
HEIGHT = FRACUNIT
HEIGHT = 48*FRACUNIT
FLAGS = MF_NOCLIPTHING|MF_NOBLOCKMAP

#X Sonic overglow. Usually used for a static blurry glow effect.

Thing MT_XSOVERGLOW
SPAWNSTATE = S_XSUNDERGLOW
RADIUS = FRACUNIT
HEIGHT = FRACUNIT
DispOffset = 5
FLAGS = MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_NOCLIP|MF_NOCLIPTHING|MF_NOBLOCKMAP

#X Sonic underglow. The animated aura for Super Sonic and the Ring Burst, rendered below his sprite.

Thing MT_XSUNDERGLOW
SPAWNSTATE = S_XSUNDERGLOW
RADIUS = FRACUNIT
HEIGHT = FRACUNIT
DispOffset = -40
FLAGS = MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_NOCLIP|MF_NOCLIPTHING|MF_NOBLOCKMAP

FRAME S_XSUNDERGLOW
SPRITENAME = SPR_XSAA
SPRITEFRAME = A|FF_TRANS30
DURATION = 16
NEXT = S_NULL

#Easy frame advancer so I don't have to make new objects and states for every single basic effect.

Thing MT_XSAUTOFRAME
SPAWNSTATE = S_XSAUTOFRAME
SPEED = 0
RADIUS = FRACUNIT
HEIGHT = FRACUNIT
DISPOFFSET = 1
FLAGS = MF_NOCLIPHEIGHT|MF_NOCLIP|MF_NOCLIPTHING|MF_NOBLOCKMAP|MF_NOGRAVITY

FRAME S_XSAUTOFRAME
SPRITENAME = SPR_THOK
SPRITEFRAME = A
DURATION = -1
NEXT = S_NULL

#Tracker for various things.

Thing MT_XSTRACKER
SPAWNSTATE = S_XSUNDERGLOW
RADIUS = FRACUNIT
HEIGHT = FRACUNIT
FLAGS = MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_NOCLIP|MF_NOCLIPTHING|MF_NOBLOCKMAP|MF_NOSECTOR

#Second one for performance and sanity.

Thing MT_XSTRACKER2
SPAWNSTATE = S_XSUNDERGLOW
RADIUS = FRACUNIT
HEIGHT = FRACUNIT
FLAGS = MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_NOCLIP|MF_NOCLIPTHING|MF_NOBLOCKMAP|MF_NOSECTOR

#Specific scenery-destruction tracker.

Thing MT_XTREETRACKER
SPAWNSTATE = S_XSUNDERGLOW
RADIUS = 32*FRACUNIT
HEIGHT = 48*FRACUNIT
SPEED = 8
MASS = 16
DISPOFFSET = 7
FLAGS = MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOCLIPTHING|MF_NOGRAVITY|MF_SCENERY

#Ring Burst ball! Shows up when either ring bursting or sprinting with speed shoes!
#The Ring Burst is the CGI spinball from Sonic X everytime whenever he grabs a power ring!
#Made of various parts to be layered with DispOffset, since that can't be changed live in Lua correctly apparently.

Thing MT_XSRINGBURSTBALL
SPAWNSTATE = S_XSUNDERGLOW
RADIUS = 32*FRACUNIT
HEIGHT = 16*FRACUNIT
DispOffset = 1
FLAGS = MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_NOCLIP|MF_NOCLIPTHING|MF_NOBLOCKMAP

#The Dive Snap move's collission item, to detect nearby enemies/springs/projectiles.

Thing MT_XSSNAPDIVE
SPAWNSTATE = S_XSUNDERGLOW
RADIUS = 105*FRACUNIT
HEIGHT = 140*FRACUNIT
FLAGS = MF_NOGRAVITY|MF_SOLID|MF_NOCLIPHEIGHT|MF_NOSECTOR

#Seperate HB object for performance reasons.

Thing MT_XSLAMBENTHB
SPAWNSTATE = S_XSUNDERGLOW
RADIUS = 105*FRACUNIT
HEIGHT = 140*FRACUNIT
FLAGS = MF_NOGRAVITY|MF_SOLID|MF_NOCLIPHEIGHT|MF_NOSECTOR

#Alt hitbox for punching shit.
Thing MT_XSASSAULTHB
SPAWNSTATE = S_XSUNDERGLOW
RADIUS = 105*FRACUNIT
HEIGHT = 140*FRACUNIT
FLAGS = MF_NOGRAVITY|MF_SOLID|MF_NOCLIPHEIGHT|MF_NOSECTOR

#Choosing to not let this stuff bounce off objects to save performance....
#ACTIVESOUND = sfx_bnce2

Thing MT_XSFLUNG
SPAWNSTATE = S_XSUNDERGLOW
DEATHSTATE = S_NULL
RADIUS = 5*FRACUNIT
HEIGHT = 5*FRACUNIT
FLAGS = MF_BOUNCE|MF_GRENADEBOUNCE|MF_NOBLOCKMAP|MF_NOCLIPTHING

Thing MT_XSSANDBAG
SPAWNSTATE = S_XSUNDERGLOW
DEATHSTATE = S_NULL
RADIUS = 64*FRACUNIT
HEIGHT = 64*FRACUNIT
FLAGS = MF_BOUNCE|MF_GRENADEBOUNCE

#Dummy Tracker. Only necessary because some objects aren't given proper collission in SRB2, but we need them to have it anyway.

Thing MT_XSDUMMYTRACKER
SPAWNSTATE = S_XSUNDERGLOW
RADIUS = 8*FRACUNIT
HEIGHT = 8*FRACUNIT
MASS = 100
SPEED = 0
FLAGS = MF_NOGRAVITY|MF_NOSECTOR|MF_SOLID

#The long sky blue smear whenever X Sonic uses the zipdash, similar to SA-Sonic's spindash trail.
#It's specifically optimized to be a trail.
Thing MT_XSZIPDASHTRAIL
SPAWNSTATE = S_XSTHOK
RADIUS = FRACUNIT
HEIGHT = FRACUNIT
FLAGS = MF_NOGRAVITY|MF_NOBLOCKMAP|MF_NOCLIPHEIGHT|MF_NOCLIP|MF_NOCLIPTHING|MF_SCENERY

#Wind Lines! Stolen from SA-Sonic, who stole it from SMSreborn, who stole the idea from SA2!

Thing MT_XSWINDLINE
SPAWNSTATE = S_XSWINDLINE1S
RADIUS = 8*FRACUNIT
HEIGHT = 8*FRACUNIT
FLAGS = MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOCLIPTHING|MF_SCENERY

FRAME S_XSWINDLINE1S
SPRITENAME = SPR_XSWL
SPRITEFRAME = A|FF_PAPERSPRITE|FF_TRANS60
DURATION = 1
NEXT = S_XSWINDLINE2S

FRAME S_XSWINDLINE2S
SPRITENAME = SPR_XSWL
SPRITEFRAME = B|FF_PAPERSPRITE|FF_TRANS70
DURATION = 2
NEXT = S_XSWINDLINE3S

FRAME S_XSWINDLINE3S
SPRITENAME = SPR_XSWL
SPRITEFRAME = C|FF_PAPERSPRITE|FF_TRANS80
DURATION = 3
NEXT = S_XSWINDLINE4S

FRAME S_XSWINDLINE4S
SPRITENAME = SPR_XSWL
SPRITEFRAME = D|FF_PAPERSPRITE|FF_TRANS90
DURATION = 2
NEXT = S_NULL

#One of the Mythical Planet Eggs...

Thing MT_XSPLANETEGG
SPAWNSTATE = S_XSTHOK
RADIUS = 64*FRACUNIT
HEIGHT = 320*FRACUNIT
FLAGS = MF_NOGRAVITY|MF_NOCLIPHEIGHT

#The iconic Power Ring! NOW you're covering some distance!

Thing MT_XSPOWERRING
SPAWNSTATE = S_RING
RADIUS = 16*FRACUNIT
HEIGHT = 25*FRACUNIT
DEATHSTATE = S_SPRK1
DEATHSOUND = SFX_ITEMUP
REACTIONTIME = 250
SPEED = 38*FRACUNIT
ACTIVESOUND = sfx_kc35
MASS = 100
DAMAGE = 0
FLAGS = MF_NOGRAVITY|MF_SOLID|MF_NOCLIPHEIGHT