//Made by Larztard and verbal support by MonsterIestyn
//Larztard Productions (c) 2014-2017
//Modifications by TrickyTex with graphics by SEGA
//Sonic Runners (c) 2015 SEGA

freeslot(
"MT_GOLDRINGSPAWNER",
"MT_REDRINGSPAWNER",
"MT_BLUERINGSPAWNER",
"MT_SUPERRINGRING",
"SPR_TEND",
"SPR_SING",
"SPR_BING",
"SPR_DING",
"SFX_SRING",
"S_SING1",
"S_SING2",
"S_SING3",
"S_SING4",
"S_SING5",
"S_SING6",
"S_SING7",
"S_SING8",
"S_SING9",
"S_SING10",
"S_SING11",
"S_SING12",
"S_SING13",
"S_SING14",
"S_SING15",
"S_SING16",
"MT_BLUSUPERRINGRING",
"SPR_BING",
"S_DING1",
"S_DING2",
"S_DING3",
"S_DING4",
"S_DING5",
"S_DING6",
"S_DING7",
"S_DING8",
"S_DING9",
"S_DING10",
"S_DING11",
"S_DING12",
"S_DING13",
"S_DING14",
"S_DING15",
"S_DING16",
"MT_REDSUPERRINGRING",
"SPR_DING",
"S_BING1",
"S_BING2",
"S_BING3",
"S_BING4",
"S_BING5",
"S_BING6",
"S_BING7",
"S_BING8",
"S_BING9",
"S_BING10",
"S_BING11",
"S_BING12",
"S_BING13",
"S_BING14",
"S_BING15",
"S_BING16",
"S_TENDEATH1",
"S_TENDEATH2",
"S_TENDEATH3",
"S_TENDEATH4",
"S_TENDEATH5",
"S_TENDEATH6",
"S_TENDEATH7",
"S_TENDEATH8",
"S_TENDEATH9",
"S_TENDEATH10",
"S_TENDEATH11",
"S_TENDEATH12",
"S_TENDEATH13",
"S_TENDEATH14",
"S_TENDEATH15",
"S_TENDEATH16",
"S_TENDEATH17",
"SPR_LPRK",
"S_LWSPARK1",
"S_LWSPARK2",
"S_LWSPARK3",
"S_LWSPARK4",
"S_LWSPARK5",
"S_LWSPARK6",
"S_LWSPARK7",
"S_LWSPARK8",
"S_LWSPARK9",
"S_LWSPARK10",
"S_LWSPARK11",
"S_LWSPARK12",
"MT_LWSPARK",
"S_LWSPARK",
"S_TEND",
"MT_TEN",
"S_LWSPRK0",
"S_LWSPRK1",
"S_LWBIRB",
"S_LWRBIRB",
"S_LWCOW",
"S_LWCOCK",
"S_LWRAT",
"S_LWRABB",
"S_LWRAIL",
"S_LWBOMB",
"S_LWSCATT",
"S_LWAUTO",
"S_LWBOUNCE",
"S_LWMINE",
"S_LWINFINI",
"S_LWREDTE",
"S_LWBLUTE",
"S_TEND2",
"S_TENB",
"S_TENB2",
"S_TENR",
"S_TENR2"
)

local cv_respawntime = CV_RegisterVar({
    name = "respawnsupertime",
    defaultvalue = "30",
    flags = 0,
    PossibleValue = {MIN = 1, MAX = 60},
    func = nil,
})

local cv_boxestorings = CV_RegisterVar({
    name = "boxestorings",
    defaultvalue = "1",
    flags = 0,
    PossibleValue = CV_OnOff,
    func = nil
})

addHook("MobjThinker", function(mo)
    if mo and mo.valid
	 if mo.check == nil then mo.check = cv_boxestorings.value end
		if mo.check == 1
			if mo and P_IsObjectOnGround(mo) then           
			if (mo.eflags & MFE_VERTICALFLIP)
                local newring =  P_SpawnMobj(mo.x, mo.y, mo.z - 8*FRACUNIT, MT_GOLDRINGSPAWNER)
            else
                local newring =  P_SpawnMobj(mo.x, mo.y, mo.z + 8*FRACUNIT, MT_GOLDRINGSPAWNER)
            end
			        P_RemoveMobj(mo)
        return
    end
	end
end
end, MT_RING_BOX)

addHook("MobjThinker", function(mo)
    if mo and mo.valid
	 if mo.check == nil then mo.check = cv_boxestorings.value end
		if mo.check == 1
			if mo and P_IsObjectOnGround(mo) then           
			if (mo.eflags & MFE_VERTICALFLIP)
                local newring =  P_SpawnMobj(mo.x, mo.y, mo.z - 8*FRACUNIT, MT_REDRINGSPAWNER)
            else
                local newring =  P_SpawnMobj(mo.x, mo.y, mo.z + 8*FRACUNIT, MT_REDRINGSPAWNER)
            end
			        P_RemoveMobj(mo)
        return
    end
	end
end
end, MT_RING_REDBOX)

addHook("MobjThinker", function(mo)
    if mo and mo.valid
	 if mo.check == nil then mo.check = cv_boxestorings.value end
		if mo.check == 1
			if mo and P_IsObjectOnGround(mo) then           
			if (mo.eflags & MFE_VERTICALFLIP)
                local newring =  P_SpawnMobj(mo.x, mo.y, mo.z - 8*FRACUNIT, MT_BLUERINGSPAWNER)
            else
                local newring =  P_SpawnMobj(mo.x, mo.y, mo.z + 8*FRACUNIT, MT_BLUERINGSPAWNER)
            end
			        P_RemoveMobj(mo)
        return
    end
	end
end
end, MT_RING_BLUEBOX)

addHook("MobjThinker", function(m)
if m and m.valid then
if gametype == GT_COOP then
        P_SpawnMobj(m.x, m.y, m.z, MT_SUPERRINGRING)
        P_RemoveMobj(m)
        return
end
    if m.timer == nil then m.timer = cv_respawntime.value*TICRATE end
    
    if not m.tiedobj or not m.tiedobj.valid then
        if m.timer >= cv_respawntime.value*TICRATE then
            m.tiedobj = P_SpawnMobj(m.x, m.y, m.z, MT_SUPERRINGRING)
            m.timer = 0
        else 
            m.timer = $ + 1
        end
    end
end
end, MT_GOLDRINGSPAWNER)
addHook("MobjThinker", function(m)
if m and m.valid then
if gametype == GT_COOP then
        P_SpawnMobj(m.x, m.y, m.z, MT_REDSUPERRINGRING)
        P_RemoveMobj(m)
        return
end
    if m.timer == nil then m.timer = cv_respawntime.value*TICRATE end
    
    if not m.tiedobj or not m.tiedobj.valid then
        if m.timer >= cv_respawntime.value*TICRATE then
            m.tiedobj = P_SpawnMobj(m.x, m.y, m.z, MT_REDSUPERRINGRING)
            m.timer = 0
        else 
            m.timer = $ + 1
        end
    end
end
end, MT_REDRINGSPAWNER)
addHook("MobjThinker", function(m)
if m and m.valid then
if gametype == GT_COOP then
        P_SpawnMobj(m.x, m.y, m.z, MT_BLUSUPERRINGRING)
        P_RemoveMobj(m)
        return
end
    if m.timer == nil then m.timer = cv_respawntime.value*TICRATE end
    
    if not m.tiedobj or not m.tiedobj.valid then
        if m.timer >= cv_respawntime.value*TICRATE then
            m.tiedobj = P_SpawnMobj(m.x, m.y, m.z, MT_BLUSUPERRINGRING)
            m.timer = 0
        else 
            m.timer = $ + 1
        end
    end
end
end, MT_BLUERINGSPAWNER)

local function Give10Rings(item, touchie)
	if touchie.player.bot == 1 //if bot is not P2
		return true // no rings for them
	end

	P_GivePlayerRings(touchie.player, 10)	
end

local function Give10RingsBlue(item, touchie)
	if touchie.player.ctfteam != 2 // is the player not in our team?
		return true // don't let the other team grab us!
	end
	
	P_GivePlayerRings(touchie.player, 10) // give the player (touchie.player here) 10 rings
end

local function Give10RingsRed(item, touchie)
	if touchie.player.ctfteam != 1 // is the player not in our team?
		return true // don't let the other team grab us!
	end

	P_GivePlayerRings(touchie.player, 10) // give the player (touchie.player here) 10 rings
end

local function AddSomeRings(mobj)
	for i = 0,9
		local ring = P_SpawnMobj(mobj.x, mobj.y, mobj.z, MT_RING)
		ring.flags2 = $1|MF2_DONTRESPAWN
		P_RemoveMobj(ring)
	end
end

addHook("TouchSpecial", Give10Rings, MT_SUPERRINGRING)
addHook("TouchSpecial", Give10RingsBlue, MT_BLUSUPERRINGRING)
addHook("TouchSpecial", Give10RingsRed, MT_REDSUPERRINGRING)
addHook("MobjSpawn", AddSomeRings, MT_SUPERRINGRING)

mobjinfo[MT_RING].deathstate = S_LWSPARK
mobjinfo[MT_FLINGRING].deathstate = S_LWSPARK
mobjinfo[MT_REDRING].deathstate = S_LWRAIL
mobjinfo[MT_REDTEAMRING].deathstate = S_LWREDTE
mobjinfo[MT_BLUETEAMRING].deathstate = S_LWBLUTE
mobjinfo[MT_AUTOMATICRING].deathstate = S_LWAUTO
mobjinfo[MT_EXPLOSIONRING].deathstate = S_LWBOMB
mobjinfo[MT_SCATTERRING].deathstate = S_LWSCATT
mobjinfo[MT_GRENADERING].deathstate = S_LWMINE
mobjinfo[MT_BOUNCERING].deathstate = S_LWBOUNCE
mobjinfo[MT_INFINITYRING].deathstate = S_LWINFINI
mobjinfo[MT_RAILRING].deathstate = S_LWRAIL
mobjinfo[MT_THROWNBOUNCE].deathstate = S_LWBOUNCE
mobjinfo[MT_THROWNINFINITY].deathstate = S_LWINFINI
mobjinfo[MT_THROWNAUTOMATIC].deathstate = S_LWAUTO
mobjinfo[MT_THROWNSCATTER].deathstate = S_LWSCATT
mobjinfo[MT_EMERALD1].deathstate = S_LWRAIL
mobjinfo[MT_EMERALD2].deathstate = S_LWRAIL
mobjinfo[MT_EMERALD3].deathstate = S_LWRAIL
mobjinfo[MT_EMERALD4].deathstate = S_LWRAIL
mobjinfo[MT_EMERALD5].deathstate = S_LWRAIL
mobjinfo[MT_EMERALD6].deathstate = S_LWRAIL
mobjinfo[MT_EMERALD7].deathstate = S_LWRAIL

states[S_LWSPARK] = {
tics = 0,
action = A_SpawnObjectRelative,
var2 = MT_LWSPARK,
nextstate = 0,
}

states[S_LWSPRK0] = {
tics = 1,
nextstate = S_LWSPRK1,
}

states[S_LWBIRB] = {
tics = 1,
action = A_ChangeColorAbsolute,
var2 = 8,
nextstate = S_LWSPARK1,
}

states[S_LWRBIRB] = {
tics = 1,
action = A_ChangeColorAbsolute,
var2 = 18,
nextstate = S_LWSPARK1,
}

states[S_LWCOW] = {
tics = 1,
action = A_ChangeColorAbsolute,
var2 = 22,
nextstate = S_LWSPARK1,
}

states[S_LWCOCK] = {
tics = 1,
action = A_ChangeColorAbsolute,
var2 = 14,
nextstate = S_LWSPARK1,
}

states[S_LWRAT] = {
tics = 1,
action = A_ChangeColorAbsolute,
var2 = 3,
nextstate = S_LWSPARK1,
}

states[S_LWRABB] = {
tics = 1,
action = A_ChangeColorAbsolute,
var2 = 1,
nextstate = S_LWSPARK1,
}

states[S_LWREDTE] = {
tics = 1,
action = A_ChangeColorAbsolute,
var2 = SKINCOLOR_RED,
nextstate = S_LWSPARK1,
}

states[S_LWBLUTE] = {
tics = 1,
action = A_ChangeColorAbsolute,
var2 = SKINCOLOR_BLUE,
nextstate = S_LWSPARK1,
}

states[S_LWBOMB] = {
tics = 1,
action = A_ChangeColorAbsolute,
var2 = SKINCOLOR_JET,
nextstate = S_LWSPARK1,
}

states[S_LWRAIL] = {
tics = 1,
action = A_ChangeColorAbsolute,
var2 = SKINCOLOR_ICY,
nextstate = S_LWSPARK1,
}

states[S_LWAUTO] = {
tics = 1,
action = A_ChangeColorAbsolute,
var2 = SKINCOLOR_EMERALD,
nextstate = S_LWSPARK1,
}

states[S_LWSCATT] = {
tics = 1,
action = A_ChangeColorAbsolute,
var2 = SKINCOLOR_VIOLET,
nextstate = S_LWSPARK1,
}

states[S_LWMINE] = {
tics = 1,
action = A_ChangeColorAbsolute,
var2 = SKINCOLOR_SILVER,
nextstate = S_LWSPARK1,
}

states[S_LWINFINI] = {
tics = 1,
action = A_ChangeColorAbsolute,
var2 = SKINCOLOR_ROSY,
nextstate = S_LWSPARK1,
}

states[S_LWBOUNCE] = {
tics = 1,
action = A_ChangeColorAbsolute,
var2 = SKINCOLOR_YELLOW,
nextstate = S_LWSPARK1,
}

states[S_LWSPRK1] = {
tics = 1,
action = A_ChangeColorAbsolute,
var2 = SKINCOLOR_GOLD,
nextstate = S_LWSPARK1,
}


states[S_TEND] = {
tics = 0,
nextstate = S_TEND2,
action = A_ChangeColorAbsolute,
var2 = SKINCOLOR_GOLD,
}

states[S_TENR] = {
tics = 0,
nextstate = S_TENR2,
action = A_ChangeColorAbsolute,
var2 = 21,
}

states[S_TENB] = {
tics = 0,
nextstate = S_TENB2,
action = A_ChangeColorAbsolute,
var2 = 50,
}

states[S_TEND2] = {
tics = 0,
nextstate = S_TENDEATH1,
action = A_ForceStop,
}

states[S_TENR2] = {
tics = 0,
nextstate = S_TENDEATH1,
action = A_ForceStop,
}

states[S_TENB2] = {
tics = 0,
nextstate = S_TENDEATH1,
action = A_ForceStop,
}

states[S_LWSPARK1] = {
sprite = SPR_LPRK,
frame = FF_FULLBRIGHT|A,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_LWSPARK2,
}
states[S_LWSPARK2] = {
sprite = SPR_LPRK,
frame = FF_FULLBRIGHT|B,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_LWSPARK3,
}
states[S_LWSPARK3] = {
sprite = SPR_LPRK,
frame = FF_FULLBRIGHT|C,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_LWSPARK4,
}
states[S_LWSPARK4] = {
sprite = SPR_LPRK,
frame = FF_FULLBRIGHT|D,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_LWSPARK5,
}
states[S_LWSPARK5] = {
sprite = SPR_LPRK,
frame = E,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_LWSPARK6,
}
states[S_LWSPARK6] = {
sprite = SPR_LPRK,
frame = FF_FULLBRIGHT|F,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_LWSPARK7,
}
states[S_LWSPARK7] = {
sprite = SPR_LPRK,
frame = FF_FULLBRIGHT|G,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_LWSPARK8,
}
states[S_LWSPARK8] = {
sprite = SPR_LPRK,
frame = FF_FULLBRIGHT|H,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_LWSPARK9,
}
states[S_LWSPARK9] = {
sprite = SPR_LPRK,
frame = FF_FULLBRIGHT|I,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_LWSPARK10,
}
states[S_LWSPARK10] = {
sprite = SPR_LPRK,
frame = FF_FULLBRIGHT|J,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_NULL,
}

mobjinfo[MT_LWSPARK] = {
doomednum = -1,
spawnstate = S_LWSPRK0,
spawnhealth = 1000,
radius = 8,
height = 8,
flags = MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIPHEIGHT,
startcolor = 160,
}

mobjinfo[MT_TEN] = {
doomednum = -1,
spawnstate = S_TENDEATH1,
spawnhealth = 1000,
radius = 8,
height = 8,
flags = MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIPHEIGHT,
}

mobjinfo[MT_GOLDRINGSPAWNER] = {
        //$Name Standalone Super Ring Spawner
doomednum = 324,
spawnstate = S_INVISIBLE,
spawnhealth = 1000,
radius = 8,
height = 8,
flags = MF_NOBLOCKMAP|MF_NOGRAVITY,
}
mobjinfo[MT_SUPERRINGRING] = {
doomednum = -1,
spawnstate = S_SING1,
spawnhealth = 1000,
deathstate =  S_TEND,
deathsound = sfx_sring,
reactiontime = MT_FLINGRING,
speed = 3932160,
radius = 28*FRACUNIT,
height = 64*FRACUNIT,
mass = 100,
flags = MF_SPECIAL|MF_NOGRAVITY|MF_SLIDEME,
}
states[S_SING1] = {
sprite = SPR_SING,
frame = A,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_SING2,
}
states[S_SING2] = {
sprite = SPR_SING,
frame = B,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_SING3
}
states[S_SING3] = {
sprite = SPR_SING,
frame = C,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_SING4
}
states[S_SING4] = {
sprite = SPR_SING,
frame = D,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_SING6
}
states[S_SING5] = {
sprite = SPR_SING,
frame = E,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_SING6
}
states[S_SING6] = {
sprite = SPR_SING,
frame = F,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_SING7
}
states[S_SING7] = {
sprite = SPR_SING,
frame = G,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_SING8
}
states[S_SING8] = {
sprite = SPR_SING,
frame = H,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_SING9
}
states[S_SING9] = {
sprite = SPR_SING,
frame = I,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_SING10
}
states[S_SING10] = {
sprite = SPR_SING,
frame = J,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_SING11
}
states[S_SING11] = {
sprite = SPR_SING,
frame = K,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_SING12
}
states[S_SING12] = {
sprite = SPR_SING,
frame = L,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_SING13
}
states[S_SING13] = {
sprite = SPR_SING,
frame = M,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_SING14
}
states[S_SING14] = {
sprite = SPR_SING,
frame = N,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_SING15
}
states[S_SING15] = {
sprite = SPR_SING,
frame = O,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_SING16
}
states[S_SING16] = {
sprite = SPR_SING,
frame = P,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_SING1
}
mobjinfo[MT_REDRINGSPAWNER] = {
        //$Name Standalone Red Super Ring Spawner
doomednum = 420,
spawnstate = S_INVISIBLE,
spawnhealth = 1000,
radius = 8,
height = 8,
flags = MF_NOBLOCKMAP|MF_NOGRAVITY,
}
mobjinfo[MT_BLUSUPERRINGRING] = {
doomednum = -1,
spawnstate = S_BING1,
spawnhealth = 1000,
deathstate =  S_TENB,
deathsound = sfx_sring,
reactiontime = MT_FLINGRING,
speed = 3932160,
radius = 28*FRACUNIT,
height = 64*FRACUNIT,
mass = 100,
flags = MF_SPECIAL|MF_NOGRAVITY|MF_SLIDEME,
}
states[S_BING1] = {
sprite = SPR_BING,
frame = A,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_BING2,
}
states[S_BING2] = {
sprite = SPR_BING,
frame = B,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_BING3
}
states[S_BING3] = {
sprite = SPR_BING,
frame = C,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_BING4
}
states[S_BING4] = {
sprite = SPR_BING,
frame = D,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_BING6
}
states[S_BING5] = {
sprite = SPR_BING,
frame = E,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_BING6
}
states[S_BING6] = {
sprite = SPR_BING,
frame = F,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_BING7
}
states[S_BING7] = {
sprite = SPR_BING,
frame = G,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_BING8
}
states[S_BING8] = {
sprite = SPR_BING,
frame = H,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_BING9
}
states[S_BING9] = {
sprite = SPR_BING,
frame = I,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_BING10
}
states[S_BING10] = {
sprite = SPR_BING,
frame = J,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_BING11
}
states[S_BING11] = {
sprite = SPR_BING,
frame = K,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_BING12
}
states[S_BING12] = {
sprite = SPR_BING,
frame = L,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_BING13
}
states[S_BING13] = {
sprite = SPR_BING,
frame = M,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_BING14
}
states[S_BING14] = {
sprite = SPR_BING,
frame = N,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_BING15
}
states[S_BING15] = {
sprite = SPR_BING,
frame = O,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_BING16
}
states[S_BING16] = {
sprite = SPR_BING,
frame = P,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_BING1
}
mobjinfo[MT_REDRINGSPAWNER] = {
        //$Name Standalone Red Super Ring Spawner
doomednum = 421,
spawnstate = S_INVISIBLE,
spawnhealth = 1000,
radius = 8,
height = 8,
flags = MF_NOBLOCKMAP|MF_NOGRAVITY,
}
mobjinfo[MT_REDSUPERRINGRING] = {
doomednum = -1,
spawnstate = S_DING1,
spawnhealth = 1000,
deathstate =  S_TENR,
deathsound = sfx_sring,
reactiontime = MT_FLINGRING,
speed = 3932160,
radius = 28*FRACUNIT,
height = 64*FRACUNIT,
mass = 100,
flags = MF_SPECIAL|MF_NOGRAVITY|MF_SLIDEME,
}
states[S_DING1] = {
sprite = SPR_DING,
frame = A,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_DING2,
}
states[S_DING2] = {
sprite = SPR_DING,
frame = B,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_DING3
}
states[S_DING3] = {
sprite = SPR_DING,
frame = C,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_DING4
}
states[S_DING4] = {
sprite = SPR_DING,
frame = D,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_DING6
}
states[S_DING5] = {
sprite = SPR_DING,
frame = E,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_DING6
}
states[S_DING6] = {
sprite = SPR_DING,
frame = F,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_DING7
}
states[S_DING7] = {
sprite = SPR_DING,
frame = G,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_DING8
}
states[S_DING8] = {
sprite = SPR_DING,
frame = H,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_DING9
}
states[S_DING9] = {
sprite = SPR_DING,
frame = I,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_DING10
}
states[S_DING10] = {
sprite = SPR_DING,
frame = J,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_DING11
}
states[S_DING11] = {
sprite = SPR_DING,
frame = K,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_DING12
}
states[S_DING12] = {
sprite = SPR_DING,
frame = L,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_DING13
}
states[S_DING13] = {
sprite = SPR_DING,
frame = M,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_DING14
}
states[S_DING14] = {
sprite = SPR_DING,
frame = N,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_DING15
}
states[S_DING15] = {
sprite = SPR_DING,
frame = O,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_DING16
}
states[S_DING16] = {
sprite = SPR_DING,
frame = P,
tics = 2,
action = A_AttractChase,
var1 = 0,
var2 = 0,
nextstate = S_DING1
}
states[S_TENDEATH1] = {
sprite = SPR_TEND,
frame = A,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_TENDEATH2
}
states[S_TENDEATH2] = {
sprite = SPR_TEND,
frame = B,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_TENDEATH3
}
states[S_TENDEATH3] = {
sprite = SPR_TEND,
frame = C,
tics = 1,
var1 = 0,
var2 = 0,
nextstate = S_TENDEATH4
}
states[S_TENDEATH4] = {
sprite = SPR_TEND,
frame = D,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_TENDEATH5
}
states[S_TENDEATH5] = {
sprite = SPR_TEND,
frame = E,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_TENDEATH6
}
states[S_TENDEATH6] = {
sprite = SPR_TEND,
frame = F,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_TENDEATH7
}
states[S_TENDEATH7] = {
sprite = SPR_TEND,
frame = G,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_TENDEATH8
}
states[S_TENDEATH8] = {
sprite = SPR_TEND,
frame = H,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_TENDEATH9
}
states[S_TENDEATH9] = {
sprite = SPR_TEND,
frame = I,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_TENDEATH10
}
states[S_TENDEATH10] = {
sprite = SPR_TEND,
frame = J,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_TENDEATH11
}
states[S_TENDEATH11] = {
sprite = SPR_TEND,
frame = K,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_TENDEATH12
}
states[S_TENDEATH12] = {
sprite = SPR_TEND,
frame = L,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_TENDEATH13
}
states[S_TENDEATH13] = {
sprite = SPR_TEND,
frame = M,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_TENDEATH14
}
states[S_TENDEATH14] = {
sprite = SPR_TEND,
frame = N,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_TENDEATH15
}
states[S_TENDEATH15] = {
sprite = SPR_TEND,
frame = O,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_TENDEATH16
}
states[S_TENDEATH16] = {
sprite = SPR_TEND,
frame = P,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_TENDEATH17
}
states[S_TENDEATH17] = {
sprite = SPR_TEND,
frame = Q,
tics = 2,
var1 = 0,
var2 = 0,
nextstate = S_NULL
}