freeslot("sfx_sarb", "sfx_spld", "MT_RADIALBOOST", "MT_SMSSPEEDSPARKLE", "MT_SMSSPARKLESPAWN", "MT_HMSWAVEAURA", "MT_SMSSILVERRING", "MT_SSXA", "MT_SMSECHECK", "MT_SMSSOUNDOBJ", "MT_SMSRGORE", "MT_SMSRGORESPAWN", "sfx_gentrg", "sfx_harrg1", "sfx_harrg2", "sfx_harrg3")
freeslot("sfx_stst", "MT_SMSSTOMPLINE", "MT_HMSSTOMPEXPLODE", "MT_BURSTLIGHT", "MT_BURSTWAVE", "MT_SMMK", "sfx_bljp", "sfx_bljpw", "MT_SMSTSPARK", "MT_SMSSPINFIRE", "MT_SMSSTEAM", "MT_RVGMISSILE", "MT_THEMYSTICEMERALD")
freeslot("sfx_smex", "sfx_bkhl", "sfx_smach", "MT_SMSFIREBLAST", "MT_HMSFIREBLAST", "MT_HMSFLAMEREST", "MT_HMS_NAPALM_FLAMES", "MT_HMSNOVABLAST", "MT_HMSNOVABLASTHB",  "MT_HMSNOVAWAVE", "MT_HMSBLACKHOLE", "sfx_cmph", "sfx_hypemt", "sfx_machw", "sfx_machwb", "sfx_machwh", "sfx_smsdr")
freeslot("SPR_SMSG", "MT_SMSAURATRAIL", "MT_SMSSPDTHOK", "MT_SMSBLINDDASHCHARGE", "MT_SMSAIRBOOST", "MT_SMSGROUNDBOOST", "MT_SMSWALLJUMP", "MT_SMSSPRINTLINE", "MT_SMSBOOSTAURA", "MT_HMSRISEAURA", "MT_HMSSTOMPAURA", "MT_SMSSWAVE", "MT_HMSGAX", "MT_HMSGAXA", "MT_HMSGAXHB", "MT_HMSGAXT")
freeslot("sfx_hmsfly", "MT_HMSWARPPOINT", "MT_HMSWARPPOINT2", "MT_HMSWARPPOINTRETURN", "MT_HMSLIPILLAR", "MT_POWERSHARE", "MT_SMSPOWERAURA", "MT_SMSHOMINGTAURA", "MT_SMSBLINDDASH", "MT_SMSHOMING", "MT_HMSLIGHTNING1", "MT_HMSLIGHTNING2", "MT_GOLDENSHINE", "MT_SMSROVERGLOW")
freeslot("sfx_sdodge", "sfx_sswip", "sfx_nuexp", "sfx_pwbmb", "sfx_nerf", "MT_CMPHRADIUS", "MT_SMSDIVEBOMB", "MT_ATOMDIVETARGET", "MT_SMSPOWERBOMB", "MT_HMSPOWERBOMB", "MT_HMSPBC", "MT_CMPHTRACKER", "MT_SMSTHROWTRACKER",  "MT_SMSDUMMYTRACKER", "MT_ATOMDIVEPOP")
freeslot("sfx_smsmmi", "sfx_smsmmp", "sfx_smsmmf", "sfx_smsmms", "sfx_hmsnob", "sfx_hmsnof", "sfx_smsrbt", "sfx_hmsgax", "sfx_smscrt", "sfx_smscr2")
freeslot("sfx_smsha1", "sfx_smsha2", "sfx_smsha3", "sfx_smsha4", "sfx_smsha5")

--SMS version of ghost spawning stuff.

rawset(_G, "SMSRSpawnGhost", function(s, fuse, noflicker)
	local ghs = P_SpawnGhostMobj(s)
	ghs.blendmode = AST_ADD
	ghs.scalespeed = $/2
	ghs.destscale = ghs.scalespeed+1
	ghs.rollangle = s.rollangle	
	
	if fuse	
		ghs.fuse = fuse
		ghs.tics = fuse+8	
	end
	if not noflicker
		if (leveltime % 2 == 0)
			ghs.momx = s.momx/2 
			ghs.momy = s.momy/2
			ghs.momz = s.momz/2
		elseif (leveltime % 3 == 0) 
			ghs.momx = s.momx/5 
			ghs.momy = s.momy/5
			ghs.momz = s.momz/5		
		end
	end
	return ghs
end)

--Calculate Hyper Mystic Sonic's timeshatter trajectory
/*
rawset(_G, "SMSRTimeShatter", function(s)
	for d = 1,9999
		if s
		return
		end
	end
end) */

--The glowing effect I've wanted all the way back in 2006.

rawset(_G, "SMSRglow", function(s)
if (s.flags2 & MF2_DONTDRAW)
return
end
		 --Stationary frame gfx.
		local ghs = P_SpawnMobjFromMobj(s, 0, 0, 0, MT_SMSROVERGLOW)

		ghs.target = s
		ghs.tracer = s
		ghs.mirrored = s.mirrored
		ghs.frame = A
		if s.skin
		ghs.skin = s.skin
		end
		ghs.rollangle = s.rollangle
		ghs.colorized = s.colorized
		ghs.sprite = s.sprite
		ghs.sprite2 = s.sprite2
		ghs.anim_duration = s.anim_duration
		
		if s.player
		ghs.angle = s.player.drawangle
		else
		ghs.angle = s.angle
		end
		
		ghs.frame = s.frame  & ~FF_TRANSMASK
		ghs.color = SKINCOLOR_SMSROVERGLOW
		ghs.colorized = true
		
		if leveltime % 2 == 0
		ghs.spriteyscale = FRACUNIT+900
		ghs.spritexscale = FRACUNIT+7000
		elseif leveltime % 3 == 0
		ghs.spriteyscale = FRACUNIT+450
		ghs.spritexscale = FRACUNIT+5200	
		elseif leveltime % 5 == 0
		ghs.spriteyscale = FRACUNIT+700
		ghs.spritexscale = FRACUNIT+4000		
		end
		
		ghs.fuse = 3
		ghs.tics = 3
		ghs.frame = $|TR_TRANS80
		ghs.rollangle = s.rollangle
		ghs.blendmode = AST_ADD
		
		return ghs
end)