freeslot(
"MT_HONEY_SUPERUNDERLAY",
"SPR2_HTRN",
"SPR2_TRAN"
)

mobjinfo[MT_HONEY_SUPERUNDERLAY] = {
	spawnstate = S_INVISIBLE,
	dispoffset = 3,
	flags = MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY
}


local function HoneyHairColor(player)
	if player.mo and player.mo.valid and player.superobj and player.superobj.valid
		if ((player.mo.flags2 & MF2_DONTDRAW))
			player.superobj.flags2 = $ | MF2_DONTDRAW
		else
			player.superobj.flags2 = $ & ~ MF2_DONTDRAW
		end
	end
	//if player.mo and player.mo.valid and player.superobj and player.superobj.valid
		//player.superobj.colorized = player.mo.colorized
	//end
	if player.powers[pw_super] and player.mo and player.mo.valid and player.superobj and player.superobj.valid then
		if not (player.mo.sprite2 != SPR2_TRNS
		or states[player.mo.state].action == A_FadeOverlay)
			if multiplayer
				player.mo.color = player.skincolor
			elseif player.candy == 1
				--if player.mo.color == SKINCOLOR_RED or player.powers[pw_super]
					player.mo.color = SKINCOLOR_SKY
				--end
			else
				--if player.mo.color == SKINCOLOR_SKY or player.powers[pw_super]
					player.mo.color = SKINCOLOR_RED
				--end
			end
			//if player.superobj and player.superobj.valid and player.superobj.colorized
				//player.superobj.color = player.mo.color
			//end
			
			return
		elseif player.powers[pw_super] == 1
			if player.mo and player.mo.valid
				player.superobj.color = SKINCOLOR_SUPERRED5
			end
		elseif player.mo and player.mo.valid
				player.superobj.color = player.mo.color
		end
		if multiplayer
			player.mo.color = player.skincolor
		elseif player.candy == 1
			--if player.mo.color == SKINCOLOR_RED or player.powers[pw_super]
				player.mo.color = SKINCOLOR_SKY
			--end
		else
			--if player.mo.color == SKINCOLOR_SKY or player.powers[pw_super]
				player.mo.color = SKINCOLOR_RED
			--end
		end
		if player.candy == 1 and player.mo and player.mo.valid and player.superobj and player.superobj.valid and not (gametyperules & GTR_TEAMS)
			if player.superobj.color == SKINCOLOR_SUPERRED1
				player.superobj.color = SKINCOLOR_SUPER_CANDY_1
			end
			if player.superobj.color == SKINCOLOR_SUPERRED2
				player.superobj.color = SKINCOLOR_SUPER_CANDY_2
			end
			if player.superobj.color == SKINCOLOR_SUPERRED3
				player.superobj.color = SKINCOLOR_SUPER_CANDY_3
			end
			if player.superobj.color == SKINCOLOR_SUPERRED4
				player.superobj.color = SKINCOLOR_SUPER_CANDY_4
			end
			if player.superobj.color == SKINCOLOR_SUPERRED5
				player.superobj.color = SKINCOLOR_SUPER_CANDY_5
			end
			/*if player.superobj.color == SKINCOLOR_SUPER_CANDY_1
				player.superobj.color = SKINCOLOR_SUPERRED1
			end
			if player.superobj.color == SKINCOLOR_SUPER_CANDY_2
				player.superobj.color = SKINCOLOR_SUPERRED2
			end
			if player.superobj.color == SKINCOLOR_SUPER_CANDY_3
				player.superobj.color = SKINCOLOR_SUPERRED3
			end
			if player.superobj.color == SKINCOLOR_SUPER_CANDY_4
				player.superobj.color = SKINCOLOR_SUPERRED4
			end
			if player.superobj.color == SKINCOLOR_SUPER_CANDY_5
				player.superobj.color = SKINCOLOR_SUPERRED5
			end*/
		end
	else
		if player.haircolor
		and R_GetColorByName(player.haircolor) 
		and (R_GetColorByName(player.haircolor) != SKINCOLOR_NONE)--and R_GetColorByName(player.haircolor) != SKINCOLOR_BLACK
		and not player.nohairdye and not (gametyperules & GTR_TEAMS)
			if player.mo and player.mo.valid and player.superobj and player.superobj.valid
				player.superobj.color = R_GetColorByName(player.haircolor)
			end
		else
			if player.mo and player.mo.valid and player.superobj and player.superobj.valid
				if player.candy == 1 and not (gametyperules & GTR_TEAMS)
					player.superobj.color = SKINCOLOR_CANDY
				else
					player.superobj.color = SKINCOLOR_HHONEY
				end
			end
		end
		if (gametyperules & GTR_TEAMS)
			if player.mo and player.mo.valid and player.superobj and player.superobj.valid
				if player.skincolor == SKINCOLOR_BLUE
					player.superobj.color = SKINCOLOR_CANDY
					if not (player.mo.flags2 & MF2_DONTDRAW)
						player.superobj.flags2 = $ & ~ MF2_DONTDRAW
					end
				elseif player.skincolor == SKINCOLOR_RED
					player.superobj.color = SKINCOLOR_HHONEY
					if not (player.mo.flags2 & MF2_DONTDRAW)
						player.superobj.flags2 = $ & ~ MF2_DONTDRAW
					end
				else
					player.superobj.flags2 = $ | MF2_DONTDRAW
				end
			end
		end
	end
end





local function SuperColor(player)
	
	//remove hair for others or when not super
	if not (player.mo and player.mo.valid and player.mo.skin == "honey") then
		if (player.mo)
		and (player.superobj)
		and (player.superobj.valid) then
			P_RemoveMobj(player.superobj)
		end
		return
	end
	
	//remove hair for others or when not super
	if (player.superobj)
		--if not (player.powers[pw_super])
		if not (player.mo.skin == "honey") then
			if (player.superobj.valid)
				P_RemoveMobj(player.superobj)
			end
			player.superobj = nil
			return
		end
	end
	
	if player.mo and player.mo.valid and not (player.superobj and player.superobj.valid) then
		player.superobj = P_SpawnMobj(player.mo.x, player.mo.y, player.mo.z, MT_HONEY_SUPERUNDERLAY)
		player.superobj.tracer = player.mo
		player.superobj.skin = player.mo.skin
	end
	
	if not (player.superobj and player.superobj.valid) then
		player.superobj = nil
		return
	end
	
	//Set the state!
	if player.mo and player.mo.valid and player.superobj and player.superobj.valid
		if player.superobj.state != player.mo.state
		and states[player.mo.state].action != A_FadeOverlay then //Don't be doing A_FadeOverlay
			player.superobj.state = player.mo.state
		end
	end
	
	//super transformation override
	if player.mo and player.mo.valid
		if player.mo.state >= S_PLAY_SUPER_TRANS1
		and player.mo.state <= S_PLAY_SUPER_TRANS6
			player.mo.sprite2 = $&~FF_SPR2SUPER
			player.mo.frame = (player.mo.state-S_PLAY_SUPER_TRANS1)+1
		end
	end
	
	//sync with player object's visuals
	if player.mo and player.mo.valid and player.superobj and player.superobj.valid
		player.superobj.sprite2 = player.mo.sprite2|FF_SPR2SUPER
		player.superobj.frame = player.mo.frame
		player.superobj.tics = player.mo.tics
		player.superobj.angle = player.drawangle
		player.superobj.rollangle = player.mo.rollangle
		player.superobj.scale = player.mo.scale
	end
	
	//Let's fix this dumb transformation bug
	if player.mo and player.mo.valid
		if states[player.mo.state].action == A_FadeOverlay
		and player.mo.tracer and player.mo.tracer.valid
		and player.mo.tracer.type == MT_GHOST
			P_RemoveMobj(player.mo.tracer)
			local ghost = P_SpawnGhostMobj(player.mo)
				ghost.fuse = $*2
			if player.powers[pw_super]
				ghost.color = player.mo.color
			end
			local ghost = P_SpawnGhostMobj(player.superobj)
			P_TeleportMove(ghost, ghost.x-cos(player.cmd.angleturn<<16),
			ghost.y-sin(player.cmd.angleturn<<16), ghost.z)
			ghost.fuse = $*2
			if player.powers[pw_super]
				ghost.color = player.mo.color
			end
		end
	end
	
	HoneyHairColor(player) //Colorin'
	//gravity flipping stuff!!
	if player.mo and player.mo.valid and player.superobj and player.superobj.valid
		if (player.mo.eflags & MFE_VERTICALFLIP) then
			hairZ = player.mo.z + player.mo.height
			player.superobj.eflags = $1|MFE_VERTICALFLIP
		else
			player.superobj.eflags = $1 & ~MFE_VERTICALFLIP
		end
	end
	
	if player.mo and player.mo.valid and player.superobj and player.superobj.valid
		local hairZ = player.mo.z
		P_TeleportMove(player.superobj, player.mo.x, player.mo.y, hairZ)
	end
	
	//super trail
	//taken from https://git.do.srb2.org/STJr/SRB2/blob/next/src/p_user.c#L12035
	if (player.powers[pw_super] > 1) then
		local gmobj = P_SpawnGhostMobj(player.superobj)
		gmobj.fuse = 2
		gmobj.type = MT_HONEY_SUPERUNDERLAY
		gmobj.rollangle = player.mo.rollangle
		if (leveltime & 1)
		and false

			gmobj.frame = $1 & ~FF_TRANSMASK
			gmobj.frame = $1|TR_TRANS90<<FF_TRANSSHIFT
			
		end
		local hairEx = P_SpawnGhostMobj(player.mo)
		hairEx.frame = $1 & ~FF_TRANSMASK
		hairEx.frame = $1|TR_TRANS90<<FF_TRANSSHIFT
		hairEx.fuse = 2
		hairEx.color = player.mo.color
		hairEx.rollangle = player.mo.rollangle
	end
	
	if player.isxmomentum and player.hyper.capable and player.powers[pw_super]
		if (player.speed > 1*p.mo.scale or player.mo.momz > 1*p.mo.scale) 
			local afterImage = P_SpawnGhostMobj(player.superobj)
			afterImage.color = player.mo.color
			afterImage.colorized = true
			afterImage.rollangle = player.mo.rollangle
		end
	end
	/*generic afterimages
	   if player.mo.state == S_PLAY_HONEYDIVE or player.mo.state == S_PLAY_HONEYDIVEEND or player.mo.state == S_PLAY_ROLL
		player.ability2 = CA2_SPINDASH
		if leveltime % 2 == 0 
		local AfterImageSpawn = P_SpawnGhostMobj(player.superobj)
			AfterImageSpawn.color = player.mo.color
			AfterImageSpawn.colorized = true
		end
	end
	if player.mo.state == S_PLAY_HONEYKICK1 or player.mo.state == S_PLAY_HONEYKICK2 or player.mo.state == S_PLAY_HONEYKICKROLL
		if leveltime % 3 == 0
		local AfterImageSpawn = P_SpawnGhostMobj(player.superobj)
			AfterImageSpawn.color = player.mo.color
			AfterImageSpawn.colorized = true
		end
	end
	if player.honey.stomptime > 33
		local AfterImageSpawn = P_SpawnGhostMobj(player.superobj)
		AfterImageSpawn.color = player.mo.color
		AfterImageSpawn.colorized = true
	end*/
end

local function SuperColorThink()
	for player in players.iterate do
		SuperColor(player)
	end
end

addHook("ThinkFrame", SuperColorThink)

addHook("MobjThinker", function(mobj)
	if 	(mobj and mobj.valid and mobj.tracer and mobj.tracer.valid
	and not (mobj.tracer.player and mobj.tracer.skin == "honey"
		)
		)
		P_RemoveMobj(mobj)
	end
end, MT_HONEY_SUPERUNDERLAY)

/*addHook("PreThinkFrame", function(fuckshitfuckassfuckfuckfuck)
	for p in players.iterate
		if player.candy == 1
			if player.mo.color == SKINCOLOR_SUPERRED1
				player.mo.color = SKINCOLOR_SUPER_CANDY_1
			end
			if player.mo.color == SKINCOLOR_SUPERRED2
				player.mo.color = SKINCOLOR_SUPER_CANDY_2
			end
			if player.mo.color == SKINCOLOR_SUPERRED3
				player.mo.color = SKINCOLOR_SUPER_CANDY_3
			end
			if player.mo.color == SKINCOLOR_SUPERRED4
				player.mo.color = SKINCOLOR_SUPER_CANDY_4
			end
			if player.mo.color == SKINCOLOR_SUPERRED5
				player.mo.color = SKINCOLOR_SUPER_CANDY_5
			end
		end
	end
end)*/



