/*

Patapon VFX Lua - by Angular

They're just for looks - don't release accel!

*/

local noponnofun = CV_RegisterVar({ --the "no fun" switch
	name = "ponvfx",
	defaultvalue = "On",
	flags = CV_NETVAR,
	possiblevalue = CV_OnOff
})

freeslot("MT_PATAVFX", "SPR_PTPN", "S_PATAPON")
local pataSeq = --genome it ain't
{
	[1] = {A, B, B, B},
	[2] = {A, B, A, A}
}

mobjinfo[MT_PATAVFX] = 
{
	spawnstate = S_PATAPON,
	radius = 16*FRACUNIT,    
	height = 16*FRACUNIT,    
	flags = MF_NOCLIP|MF_DONTENCOREMAP|MF_FLOAT|MF_NOGRAVITY
}
states[S_PATAPON] = 
{
	sprite = SPR_PTPN, 
	frame = TR_TRANS40|A, 
	tics = -1
}

local function fadePata(p)
	--let's just make a ghost lol
	local pataFade = P_SpawnGhostMobj(p)
	pataFade.colorized = false
	pataFade.fuse = 20
	pataFade.destscale = p.scale*2
end
addHook("MobjFuse", fadePata, MT_PATAVFX)

addHook("MapLoad", do 
													   
	for p in players.iterate do	
		p.hatatimer = 0
		p.hata_prevItem = 0
		p.hatacount = 0 
		p.hatastyle = 0
		p.hata_prevAmnt = 0
	end

end)

addHook("ThinkFrame", function()
	if not noponnofun.value then return end
	for p in players.iterate do
		if (not p.mo or not p.mo.valid or p.spectator) then continue end 
		if not(p.mo.skin == "hatapon") then continue end
		
		p.hatatimer = $ or 0
		p.hata_prevItem = $ or 0
		p.hatacount = $ or 0 
		p.hatastyle = $ or 0
		p.hata_prevAmnt = $ or 0
		
		--Check for previously used items and boosts
		if p.hatatimer == 0
			if (p.kartstuff[k_itemtype] == 0 and p.hata_prevItem) or (p.kartstuff[k_itemamount] < p.hata_prevAmnt)
				p.hatatimer = 48
				p.hatacount = 4
				if p.hata_prevItem > 2 --fuck the enums lol
					--print("PATA ITEM")
					p.hatastyle = 2
				else
					--print("PATA BOOSTO")
					p.hatastyle = 1
				end
			end
		else --we're not letting these incidents overlap because of potential vfx spam
			if p.hatatimer%12 == 1
				local pataFr = pataSeq[p.hatastyle][p.hatacount]
				local pataRot = pataFr == A and -1 or 1
				local pataX = p.mo.x + P_ReturnThrustX(p.mo, p.mo.angle+(ANGLE_90*pataRot), FixedMul(P_RandomRange(40, 60)*FRACUNIT, p.mo.scale))  --ugly but whatever
				local pataY = p.mo.y + P_ReturnThrustY(p.mo, p.mo.angle+(ANGLE_90*pataRot), FixedMul(P_RandomRange(40, 60)*FRACUNIT, p.mo.scale))
				local pataCur = P_SpawnMobj(pataX, pataY, p.mo.z+p.mo.height+(P_RandomRange(-15, 15)*FRACUNIT), MT_PATAVFX)
				local pataAng = R_PointToAngle2(p.mo.x, p.mo.y, p.mo.x+p.mo.momx, p.mo.y+p.mo.momy)
				pataCur.frame = pataFr
				pataCur.scale = p.mo.scale*3
				P_InstaThrust(pataCur, pataAng, p.speed)
				pataCur.fuse = 10
				p.hatacount = $ - 1
			end
		end
		
		p.hatatimer = max($-1, 0)
		p.hata_prevItem = p.kartstuff[k_itemtype]
		p.hata_prevAmnt = p.kartstuff[k_itemamount] 
	end
end)



