-- Declaring freeslots and stuff

freeslot("MT_EXTRA_ORB","S_EXTRA_ORB","SPR_ORB_",
"MT_GRAVITORB_BOX","MT_GRAVITORB_GOLDBOX","MT_GRAVITORB_ICON","MT_GRAVITORB_PART_B","MT_GRAVITORB_PART_O",
"S_GRAVITORB_BOX","S_GRAVITORB_GOLDBOX","S_GRAVITORB_ICON1","S_GRAVITORB_ICON2",
"S_GRAVITORB_PB1","S_GRAVITORB_PB2","S_GRAVITORB_PO1","S_GRAVITORB_PO2",
"SPR_VMGS","SPR_PTGS",
"MT_GUM_BOX","MT_GUM_GOLDBOX","MT_GUM_ICON","MT_GUM_BUBBLE",
"S_GUM_BOX","S_GUM_GOLDBOX","S_GUM_ICON1","S_GUM_ICON2",
"S_GUM_BUBBLE",
"SPR_VMBS","SPR_PTBS",
"MT_CLOCK_BOX","MT_CLOCK_GOLDBOX","MT_CLOCK_ICON","MT_CLOCK_REWIND",
"S_CLOCK_BOX","S_CLOCK_GOLDBOX","S_CLOCK_ICON1","S_CLOCK_ICON2",
"S_CLOCK_OVERLAY","S_CLOCK_OVERLAY_HR","S_CLOCK_OVERLAY_MIN",
"SPR_VMCS","SPR_PTCS",
"MT_COMBINE_BOX","MT_COMBINE_GOLDBOX","MT_COMBINE_ICON",
"S_COMBINE_BOX","S_COMBINE_GOLDBOX","S_COMBINE_ICON1","S_COMBINE_ICON2",
"SPR_VMCO",
"MT_GRUSH_BOX","MT_GRUSH_GOLDBOX","MT_GRUSH_ICON","MT_GRUSH_SPARK",
"S_GRUSH_BOX","S_GRUSH_GOLDBOX","S_GRUSH_ICON1","S_GRUSH_ICON2",
"S_GRUSH_SPARK",
"SPR_VMRU","SPR_PTRH",
"MT_SOCKS_BOX","MT_SOCKS_GOLDBOX","MT_SOCKS_ICON",
"S_SOCKS_BOX","S_SOCKS_GOLDBOX","S_SOCKS_ICON1","S_SOCKS_ICON2",
"SPR_VMSK")

sfxinfo[sfx_kc54].caption = "New Shield"
sfxinfo[sfx_kc31].caption = "Rewund time"
sfxinfo[sfx_cdfm63].caption = "Rings combined"

mobjinfo[MT_EXTRA_ORB] = {
	doomednum = -1,
	spawnstate = S_EXTRA_ORB,
	spawnhealth = 1000,
	reactiontime = 8,
	radius = 32*FRACUNIT,
	height = 64*FRACUNIT,
	mass = 16,
	dispoffset = 1,
	flags = MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_SCENERY
}

mobjinfo[MT_GRAVITORB_BOX] = {
	doomednum = 423,
	spawnstate = S_GRAVITORB_BOX,
	reactiontime = 8,
	painstate = S_GRAVITORB_BOX,
	deathstate = S_BOX_POP1,
	deathsound = sfx_pop,
	speed = 1,
	radius = 18*FRACUNIT,
	height = 40*FRACUNIT,
	mass = 100,
	damage = MT_GRAVITORB_ICON,
	flags = MF_SOLID|MF_SHOOTABLE|MF_MONITOR
}

mobjinfo[MT_GRAVITORB_GOLDBOX] = {
	doomednum = 453,
	spawnstate = S_GRAVITORB_GOLDBOX,
	reactiontime = 8,
	attacksound = sfx_monton,
	painstate = S_GRAVITORB_GOLDBOX,
	deathstate = S_GOLDBOX_OFF1,
	deathsound = sfx_pop,
	speed = 1,
	radius = 20*FRACUNIT,
	height = 44*FRACUNIT,
	mass = 100,
	damage = MT_GRAVITORB_ICON,
	flags = MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE
}

mobjinfo[MT_GRAVITORB_ICON] = {
	doomednum = -1,
	spawnstate = S_GRAVITORB_ICON1,
	seesound = sfx_kc54,
	reactiontime = 8,
	deathsound = sfx_pop,
	speed = 2*FRACUNIT,
	radius = 8*FRACUNIT,
	height = 14*FRACUNIT,
	mass = 100,
	damage = 62*FRACUNIT,
	flags = MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_BOXICON|MF_SCENERY
}

mobjinfo[MT_GRAVITORB_PART_B] = {
	doomednum = -1,
	spawnstate = S_GRAVITORB_PB1,
	flags = MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_SCENERY|MF_NOCLIPHEIGHT
}

mobjinfo[MT_GRAVITORB_PART_O] = {
	doomednum = -1,
	spawnstate = S_GRAVITORB_PO1,
	flags = MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_SCENERY|MF_NOCLIPHEIGHT
}

mobjinfo[MT_GUM_BOX] = {
	doomednum = 425,
	spawnstate = S_GUM_BOX,
	reactiontime = 8,
	painstate = S_GUM_BOX,
	deathstate = S_BOX_POP1,
	deathsound = sfx_pop,
	speed = 1,
	radius = 18*FRACUNIT,
	height = 40*FRACUNIT,
	mass = 100,
	damage = MT_GUM_ICON,
	flags = MF_SOLID|MF_SHOOTABLE|MF_MONITOR
}

mobjinfo[MT_GUM_GOLDBOX] = {
	doomednum = 455,
	spawnstate = S_GUM_GOLDBOX,
	reactiontime = 8,
	attacksound = sfx_monton,
	painstate = S_GUM_GOLDBOX,
	deathstate = S_GOLDBOX_OFF1,
	deathsound = sfx_pop,
	speed = 1,
	radius = 20*FRACUNIT,
	height = 44*FRACUNIT,
	mass = 100,
	damage = MT_GUM_ICON,
	flags = MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE
}

mobjinfo[MT_GUM_ICON] = {
	doomednum = -1,
	spawnstate = S_GUM_ICON1,
	seesound = sfx_kc54,
	reactiontime = 8,
	deathsound = sfx_pop,
	speed = 2*FRACUNIT,
	radius = 8*FRACUNIT,
	height = 14*FRACUNIT,
	mass = 100,
	damage = 62*FRACUNIT,
	flags = MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_BOXICON|MF_SCENERY
}

mobjinfo[MT_GUM_BUBBLE] = {
	doomednum = -1,
	spawnstate = S_INVISIBLE,
	flags = MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_SCENERY|MF_NOCLIPHEIGHT
}

mobjinfo[MT_CLOCK_BOX] = {
	doomednum = 426,
	spawnstate = S_CLOCK_BOX,
	reactiontime = 8,
	painstate = S_CLOCK_BOX,
	deathstate = S_BOX_POP1,
	deathsound = sfx_pop,
	speed = 1,
	radius = 18*FRACUNIT,
	height = 40*FRACUNIT,
	mass = 100,
	damage = MT_CLOCK_ICON,
	flags = MF_SOLID|MF_SHOOTABLE|MF_MONITOR
}

mobjinfo[MT_CLOCK_GOLDBOX] = {
	doomednum = 456,
	spawnstate = S_CLOCK_GOLDBOX,
	reactiontime = 8,
	attacksound = sfx_monton,
	painstate = S_CLOCK_GOLDBOX,
	deathstate = S_GOLDBOX_OFF1,
	deathsound = sfx_pop,
	speed = 1,
	radius = 20*FRACUNIT,
	height = 44*FRACUNIT,
	mass = 100,
	damage = MT_CLOCK_ICON,
	flags = MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE
}

mobjinfo[MT_CLOCK_ICON] = {
	doomednum = -1,
	spawnstate = S_CLOCK_ICON1,
	seesound = sfx_kc54,
	reactiontime = 8,
	deathsound = sfx_pop,
	speed = 2*FRACUNIT,
	radius = 8*FRACUNIT,
	height = 14*FRACUNIT,
	mass = 100,
	damage = 62*FRACUNIT,
	flags = MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_BOXICON|MF_SCENERY
}

mobjinfo[MT_CLOCK_REWIND] = {
	doomednum = -1,
	spawnstate = S_INVISIBLE,
	radius = 16*FRACUNIT,
	height = 48*FRACUNIT
}

mobjinfo[MT_COMBINE_BOX] = {
	doomednum = 427,
	spawnstate = S_COMBINE_BOX,
	reactiontime = 8,
	painstate = S_COMBINE_BOX,
	deathstate = S_BOX_POP1,
	deathsound = sfx_pop,
	speed = 1,
	radius = 18*FRACUNIT,
	height = 40*FRACUNIT,
	mass = 100,
	damage = MT_COMBINE_ICON,
	flags = MF_SOLID|MF_SHOOTABLE|MF_MONITOR
}

mobjinfo[MT_COMBINE_GOLDBOX] = {
	doomednum = 457,
	spawnstate = S_COMBINE_GOLDBOX,
	reactiontime = 8,
	attacksound = sfx_monton,
	painstate = S_COMBINE_GOLDBOX,
	deathstate = S_GOLDBOX_OFF1,
	deathsound = sfx_pop,
	speed = 1,
	radius = 20*FRACUNIT,
	height = 44*FRACUNIT,
	mass = 100,
	damage = MT_COMBINE_ICON,
	flags = MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE
}

mobjinfo[MT_COMBINE_ICON] = {
	doomednum = -1,
	spawnstate = S_COMBINE_ICON1,
	seesound = sfx_cdfm63,
	reactiontime = 8,
	speed = 2*FRACUNIT,
	radius = 8*FRACUNIT,
	height = 14*FRACUNIT,
	mass = 100,
	damage = 62*FRACUNIT,
	flags = MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_BOXICON|MF_SCENERY
}

mobjinfo[MT_GRUSH_BOX] = {
	doomednum = 428,
	spawnstate = S_GRUSH_BOX,
	reactiontime = 8,
	painstate = S_GRUSH_BOX,
	deathstate = S_BOX_POP1,
	deathsound = sfx_pop,
	speed = 1,
	radius = 18*FRACUNIT,
	height = 40*FRACUNIT,
	mass = 100,
	damage = MT_GRUSH_ICON,
	flags = MF_SOLID|MF_SHOOTABLE|MF_MONITOR
}

mobjinfo[MT_GRUSH_GOLDBOX] = {
	doomednum = 458,
	spawnstate = S_GRUSH_GOLDBOX,
	reactiontime = 8,
	attacksound = sfx_monton,
	painstate = S_GRUSH_GOLDBOX,
	deathstate = S_GOLDBOX_OFF1,
	deathsound = sfx_pop,
	speed = 1,
	radius = 20*FRACUNIT,
	height = 44*FRACUNIT,
	mass = 100,
	damage = MT_GRUSH_ICON,
	flags = MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE
}

mobjinfo[MT_GRUSH_ICON] = {
	doomednum = -1,
	spawnstate = S_GRUSH_ICON1,
	reactiontime = 8,
	speed = 2*FRACUNIT,
	radius = 8*FRACUNIT,
	height = 14*FRACUNIT,
	mass = 100,
	damage = 62*FRACUNIT,
	flags = MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_BOXICON|MF_SCENERY
}

mobjinfo[MT_GRUSH_SPARK] = {
	doomednum = -1,
	spawnstate = S_GRUSH_SPARK,
	flags = MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_SCENERY|MF_NOCLIPHEIGHT
}

mobjinfo[MT_SOCKS_BOX] = {
	doomednum = 429,
	spawnstate = S_SOCKS_BOX,
	reactiontime = 8,
	painstate = S_SOCKS_BOX,
	deathstate = S_BOX_POP1,
	deathsound = sfx_pop,
	speed = 1,
	radius = 18*FRACUNIT,
	height = 40*FRACUNIT,
	mass = 100,
	damage = MT_SOCKS_ICON,
	flags = MF_SOLID|MF_SHOOTABLE|MF_MONITOR
}

mobjinfo[MT_SOCKS_GOLDBOX] = {
	doomednum = 459,
	spawnstate = S_SOCKS_GOLDBOX,
	reactiontime = 8,
	attacksound = sfx_monton,
	painstate = S_SOCKS_GOLDBOX,
	deathstate = S_GOLDBOX_OFF1,
	deathsound = sfx_pop,
	speed = 1,
	radius = 20*FRACUNIT,
	height = 44*FRACUNIT,
	mass = 100,
	damage = MT_SOCKS_ICON,
	flags = MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE
}

mobjinfo[MT_SOCKS_ICON] = {
	doomednum = -1,
	spawnstate = S_SOCKS_ICON1,
	reactiontime = 8,
	speed = 2*FRACUNIT,
	radius = 8*FRACUNIT,
	height = 14*FRACUNIT,
	mass = 100,
	damage = 62*FRACUNIT,
	flags = MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_BOXICON|MF_SCENERY
}

function A_GiveExtraShield(actor,var1)
	if actor.target and actor.target.player
		if actor.target.eorb == 0
			local extraorb = P_SpawnMobj(actor.target.x,actor.target.y,actor.target.z,MT_EXTRA_ORB)
			extraorb.target = actor.target
		end
		if (var1 >= 1 and var1 <= 4) --grav, star, gum, clock
			actor.target.eorb = var1
		end
		P_SwitchShield(actor.target.player,SH_PINK)
		S_StartSound(actor.target,actor.info.seesound)
	end
end

function A_CombineRing(actor)
	if actor.target and actor.target.player
		actor.target.pw_combine = 1
		S_StartSound(actor.target,actor.info.seesound)
	end
end

function A_GoldRush(actor)
	if actor.target and actor.target.player
		local plyr = actor.target.player
		actor.target.pw_goldrush = invulntics + 1
		actor.target.pw_mus_ctrl = invulntics + 1

		if not plyr.powers[pw_super]
			P_PlayJingleMusic(plyr,"_GRUSH",16384,false,JT_INV)
			S_StartMusicCaption("Gold Rush",invulntics+1)
		end
	end
end

function A_SpringSocks(actor)
	if actor.target and actor.target.player
		local plyr = actor.target.player
		actor.target.pw_springsocks = sneakertics + 1
		actor.target.pw_mus_ctrl = sneakertics + 1

		if not plyr.powers[pw_super]
			P_PlayJingleMusic(plyr,"_SOCKS",16384,false,JT_SHOES)
			S_StartMusicCaption("Spring Socks",sneakertics+1)
		end
	end
end

function A_Sparkling(actor,var1)
-- P_RandomRange can suck my ass
	local rad = ((actor.radius/FRACUNIT)/2)*3
	local h8 = actor.height/FRACUNIT
-- Let's go. Action to replace A_BossScream since that can spawn stuff right in
-- front of your FPS viewpoint, which'll mess you up when RPing as Doomguy.
	local h1 = P_RandomRange(rad/8,rad)*FRACUNIT
	local h2 = P_RandomRange(rad/8,rad)*FRACUNIT
	local ang = actor.angle+FixedAngle(P_RandomRange(45,315)*FRACUNIT)
	local x = FixedMul(h1,cos(ang))
	local y = FixedMul(h2,sin(ang))
	local z = FixedDiv(actor.height/2,actor.scale)+(P_RandomRange(-h8/4,h8/4)*FRACUNIT)
	local spk = P_SpawnMobjFromMobj(actor,x,y,z,var1)
end

states[S_EXTRA_ORB] = {SPR_ORB_,A|TR_TRANS50|FF_ANIMATE,-1,nil,7,2,S_EXTRA_ORB}
states[S_GRAVITORB_BOX] = {SPR_VMGS,A,2,nil,0,0,S_BOX_FLICKER}
states[S_GRAVITORB_GOLDBOX] = {SPR_VMGS,B,2,A_GoldMonitorSparkle,0,0,S_GOLDBOX_FLICKER}
states[S_GRAVITORB_ICON1] = {SPR_VMGS,C|FF_ANIMATE,18,nil,3,4,S_GRAVITORB_ICON2}
states[S_GRAVITORB_ICON2] = {SPR_VMGS,C,18,A_GiveExtraShield,1}
states[S_GRAVITORB_PB1] = {SPR_PTGS,A,3,nil,0,0,S_GRAVITORB_PB2}
states[S_GRAVITORB_PB2] = {SPR_PTGS,A,1,A_GhostMe}
states[S_GRAVITORB_PO1] = {SPR_PTGS,B,3,nil,0,0,S_GRAVITORB_PO2}
states[S_GRAVITORB_PO2] = {SPR_PTGS,B,1,A_GhostMe}
states[S_GUM_BOX] = {SPR_VMBS,A,2,nil,0,0,S_BOX_FLICKER}
states[S_GUM_GOLDBOX] = {SPR_VMBS,B,2,A_GoldMonitorSparkle,0,0,S_GOLDBOX_FLICKER}
states[S_GUM_ICON1] = {SPR_VMBS,C|FF_ANIMATE,18,nil,3,4,S_GUM_ICON2}
states[S_GUM_ICON2] = {SPR_VMBS,C,18,A_GiveExtraShield,3}
states[S_GUM_BUBBLE] = {SPR_PTBS,A,-1}
states[S_CLOCK_BOX] = {SPR_VMCS,A,2,nil,0,0,S_BOX_FLICKER}
states[S_CLOCK_GOLDBOX] = {SPR_VMCS,B,2,A_GoldMonitorSparkle,0,0,S_GOLDBOX_FLICKER}
states[S_CLOCK_ICON1] = {SPR_VMCS,C|FF_ANIMATE,18,nil,3,4,S_CLOCK_ICON2}
states[S_CLOCK_ICON2] = {SPR_VMCS,C,18,A_GiveExtraShield,4}
states[S_CLOCK_OVERLAY] = {SPR_PTCS,A|TR_TRANS30}
states[S_CLOCK_OVERLAY_HR] = {SPR_PTCS,B|TR_TRANS30}
states[S_CLOCK_OVERLAY_MIN] = {SPR_PTCS,C|TR_TRANS30}
states[S_COMBINE_BOX] = {SPR_VMCO,A,2,nil,0,0,S_BOX_FLICKER}
states[S_COMBINE_GOLDBOX] = {SPR_VMCO,B,2,A_GoldMonitorSparkle,0,0,S_GOLDBOX_FLICKER}
states[S_COMBINE_ICON1] = {SPR_VMCO,C|FF_ANIMATE,18,nil,3,4,S_COMBINE_ICON2}
states[S_COMBINE_ICON2] = {SPR_VMCO,C,18,A_CombineRing}
states[S_GRUSH_BOX] = {SPR_VMRU,A,2,nil,0,0,S_BOX_FLICKER}
states[S_GRUSH_GOLDBOX] = {SPR_VMRU,B,2,A_GoldMonitorSparkle,0,0,S_GOLDBOX_FLICKER}
states[S_GRUSH_ICON1] = {SPR_VMRU,C|FF_ANIMATE,18,nil,3,4,S_GRUSH_ICON2}
states[S_GRUSH_ICON2] = {SPR_VMRU,C,18,A_GoldRush}
states[S_GRUSH_SPARK] = {SPR_PTRH,FF_ANIMATE,6,nil,2,2}
states[S_SOCKS_BOX] = {SPR_VMSK,A,2,nil,0,0,S_BOX_FLICKER}
states[S_SOCKS_GOLDBOX] = {SPR_VMSK,B,2,A_GoldMonitorSparkle,0,0,S_GOLDBOX_FLICKER}
states[S_SOCKS_ICON1] = {SPR_VMSK,C|FF_ANIMATE,18,nil,3,4,S_SOCKS_ICON2}
states[S_SOCKS_ICON2] = {SPR_VMSK,C,18,A_SpringSocks}