freeslot("MT_TRICKEFFECT", "S_TRICKEFFECT", "SPR_TRCK")

states[S_TRICKEFFECT] = {SPR_TRCK,A|FF_ANIMATE,-1,nil,7,1,S_NULL}
mobjinfo[MT_TRICKEFFECT] = {
	doomednum = -1,
	spawnstate = S_TRICKEFFECT,
	flags = MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPHEIGHT,
}

freeslot("SKINCOLOR_TRICKERY")
skincolors[SKINCOLOR_TRICKERY] = {
	name = "Trickery",
	ramp = {128,128,130,130,132,132,133,134,134,135,135,136,136,137,138,139},
	invcolor = SKINCOLOR_GOLDENROD,
	invshade = 6, 
	chatcolor = V_CYANMAP,
	accessible = true
}

COM_AddCommand("ast_effectcolor", function(player, color)
	if not (color)
		CONS_Printf(player, "Choose any valid color to override your trick effect color.")
	elseif (color == "topaz") or (color == "default") or (color == "normal")
		player.ast_color = SKINCOLOR_TOPAZ
		CONS_Printf(player, "Your trick effect color is now set to its default color (topaz)")
	elseif (R_GetColorByName(color) == SKINCOLOR_NONE)
		CONS_Printf(player, "The color "..color.." do not exist.")
	else
		player.ast_color = R_GetColorByName(color)
	end
end)

addHook("PlayerThink", function(player)
	if player.ast_color == nil
		player.ast_color = SKINCOLOR_TOPAZ
	end
end)

addHook("MobjThinker", function(mo)
	local player = mo.player
	if mo.state == S_PLAY_TRICK
	and player.ast_trick == false
		player.ast_trick = true
		local effect = P_SpawnMobj(mo.x, mo.y, mo.z, MT_TRICKEFFECT)
		effect.scale = mo.scale*15/10
		effect.destscale = mo.scale*15/10
		effect.color = player.ast_color
		effect.target = mo
	end
end, MT_PLAYER)

addHook("MobjThinker", function(mo)
	local player = mo.target
	if player == nil or player.state != S_PLAY_TRICK P_RemoveMobj(mo) return end
	P_SetOrigin(mo, player.x, player.y, player.z)
	mo.spritexscale = player.spritexscale
	mo.spriteyscale = player.spriteyscale
		if player.eflags & MFE_VERTICALFLIP
			mo.eflags = $ | MFE_VERTICALFLIP
			mo.spriteyoffset = -30*FRACUNIT
		else
			mo.eflags = $ & ~MFE_VERTICALFLIP
			mo.spriteyoffset = 0
	end
end, MT_TRICKEFFECT)