local colors = {SKINCOLOR_EMERALD, SKINCOLOR_PURPLE, SKINCOLOR_BLUE, SKINCOLOR_CYAN, SKINCOLOR_ORANGE, SKINCOLOR_RED, SKINCOLOR_GREY}

local function superSpark(mo, amount, fuse, speed1, speed2)
	if not (mo and mo.valid and amount ~= nil and fuse ~= nil and speed1 ~= nil and speed2 ~= nil) then
		return
	end

	for i = 0, amount, 1 do
		local ha = P_RandomRange(0, 360)*ANG1
		local va = P_RandomRange(0, 360)*ANG1
		local speed = P_RandomRange(speed1/FRACUNIT, speed2/FRACUNIT)*FRACUNIT

		local sprk = P_SpawnMobj(mo.x + FixedMul(FixedMul(mo.radius, FixedMul(cos(ha), cos(va))), mo.scale),
								 mo.y + FixedMul(FixedMul(mo.radius, FixedMul(sin(ha), cos(va))), mo.scale),
								 mo.z + FixedMul(FixedMul(mo.radius, sin(va)), mo.scale) + FixedMul(mo.scale, mo.height/2),
								 MT_SUPERSPARKLES)

		sprk.scale = mo.scale
		sprk.fuse = fuse
		--sprk.color = colors[P_RandomRange(1, #colors)]
		sprk.color = mo.color

		sprk.momx = FixedMul(FixedMul(speed, FixedMul(cos(ha), cos(va))), mo.scale)
		sprk.momy = FixedMul(FixedMul(speed, FixedMul(sin(ha), cos(va))), mo.scale)
		sprk.momz = FixedMul(FixedMul(speed, sin(va)), mo.scale)
	end
end

addHook("PlayerThink", function(p)
	if p and p.valid and p.mo and p.mo.valid
		and p.powers[pw_super]
		and p.mo.skin == "ntails"
		and not (p.mo.state >= S_PLAY_SUPER_TRANS1 and p.mo.state <= S_PLAY_SUPER_TRANS5) then
		superSpark(p.mo, 1, 16, 1, 6*FRACUNIT)
	end
end)






	freeslot("SPR_SFSP", "MT_SUPERFORMSPARKLE", "S_SUPERFORMSPARKLE")
	
	mobjinfo[MT_SUPERFORMSPARKLE] = {
	doomednum = -1,
	spawnstate = S_SUPERFORMSPARKLE,
	deathstate = S_NULL,
	spawnhealth = 999,
	deathsound = sfx_none,
	seesound = sfx_none,
	attacksound = sfx_none,
	painsound = sfx_none,
	activesound = sfx_none,
	painstate = S_NULL,
	speed = 10*FRACUNIT,
	radius = 48*FRACUNIT,
	height = 48*FRACUNIT,
	flags = MF_SCENERY|MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_NOCLIP
	}
	
	states[S_SUPERFORMSPARKLE] = {
	sprite = SPR_SFSP,
	frame = FF_ANIMATE|FF_SEMIBRIGHT|A,
	tics = 33,
	var1 = 10,
	var2 = 1,
	action = A_None,
	nextstate = S_NULL
	}
	
	//states[S_SUPERFORMSPARKLE] = {
	//sprite = SPR_IVSP,
	//frame = FF_ANIMATE|FF_SEMIBRIGHT|A,
	//tics = -1,
	//var1 = 5,
	//var2 = 1,
	//nextstate = S_NULL
	//}
	
	addHook("PlayerThink", function(player)
		if (player.spectator)
		return end
			if player.mo and player.mo.skin == "ntails"
				if (player.mo.state >= S_PLAY_SUPER_TRANS1 and player.mo.state <= S_PLAY_SUPER_TRANS6)
				return end
					if (player.powers[pw_super]) or (player.hypermysticsonic or player.mysticsuper)
					and (leveltime % TICRATE == 2 or leveltime % TICRATE == 6 or leveltime % TICRATE == 10 or leveltime % TICRATE == 14 or leveltime % TICRATE == 18 or leveltime % TICRATE == 22 or leveltime % TICRATE == 26 or leveltime % TICRATE == 30 or leveltime % TICRATE == 34)
					player.sparkle = P_SpawnMobjFromMobj(player.mo, P_RandomRange(-10, 10)<<FRACBITS, P_RandomRange(-10, 10)<<FRACBITS, P_RandomRange(0, player.mo.height/FRACUNIT)<<FRACBITS, MT_SUPERFORMSPARKLE)
					player.sparkle.scale = player.mo.scale
					player.sparkle.color = player.mo.color
					player.sparkle.isthereabetterwaytogetthesourcemo = player.mo
					end
			end
	end)
	
	addHook("MobjThinker", function(sparkle)
		sparkle.color = sparkle.isthereabetterwaytogetthesourcemo.color
	end, MT_SUPERFORMSPARKLE)