//
//IMPORTANT MENSSAGE:
//ALL EFFECTS ARE FROM PROPER PEPPINO MOD
//original creator: TGTLS
//

//mach 4 effects (and kungfu)
rawset(_G, "P_CreateRing", function(p)
    
	local ring = P_SpawnMobj(p.mo.x,p.mo.y,p.mo.z,MT_THOK)
	ring.state = S_MACH4RING
	ring.fuse = 999
	ring.tics = 20
	ring.angle = p.drawangle+ANGLE_90
	ring.scale = p.mo.scale-FRACUNIT/2
	ring.destscale = p.mo.scale*2
	ring.colorized = true
	ring.color = SKINCOLOR_WHITE
	if (p.mo.eflags & MFE_VERTICALFLIP)
		ring.flags2 = $|MF2_OBJECTFLIP
		ring.eflags = $|MFE_VERTICALFLIP
	end
end)

addHook("ThinkFrame", do
	for player in players.iterate
		local mo = player.mo
		if player.pizzanoreal
		and P_IsObjectOnGround(mo)
		and ((mo.state == S_PLAY_MACH4PZNO) or (mo.state == S_PLAY_MACH5PZNO))
		and leveltime%10 == 0
			for i = -1, 1, 2
				local ang = i * ANG10
				local factor = FixedMul(4*mo.scale, cos(ang))
				local x = P_ReturnThrustX(mo, player.drawangle + ANGLE_180 + ang, 24*mo.scale)
				local y = P_ReturnThrustY(mo, player.drawangle + ANGLE_180 + ang, 24*mo.scale)
				local dust = P_SpawnMobjFromMobj(mo, x, y, 0, MT_THOK)
				dust.scale = mo.scale
				dust.angle = R_PointToAngle2(dust.x, dust.y, mo.x, mo.y)
				dust.state = S_MACH4_FIRE
				dust.momx = FixedMul(factor, cos(dust.angle - i*ANGLE_90))
				dust.momy = FixedMul(factor, sin(dust.angle - i*ANGLE_90))
			end
		end
	end
end)

addHook("ThinkFrame", do
	for p in players.iterate
		if p.pizzanoreal
		and ((p.mo.state == S_PLAY_MACH4PZNO))
		and leveltime%10 == 0
			P_CreateRing(p)
		end
	end
end) 

freeslot("S_DASHCLOUD","SPR_DSHC","S_SMALLDASHCLOUD","SPR_SDSC")

states[S_DASHCLOUD] = {
	sprite = SPR_DSHC,
	frame = A|FF_PAPERSPRITE|FF_ANIMATE,
	tics = 16,
	var1 = 8,
	var2 = 2,
	nextstate = S_DEATHSTATE
}

states[S_SMALLDASHCLOUD] = {
	sprite = SPR_SDSC,
	frame = A|FF_PAPERSPRITE|FF_ANIMATE,
	tics = 10,
	var1 = 5,
	var2 = 2,
	nextstate = S_DEATHSTATE
}

addHook("ThinkFrame", do
	for player in players.iterate
		local mo = player.mo
		if P_IsObjectOnGround(mo)
		and player.pizzanoreal
		and (mo.state == S_PLAY_MACH4PZNO or mo.state == S_PLAY_DASH or mo.state == S_PLAY_MACH5PZNO or mo.state == S_PLAY_MACH3_PAD)
		and leveltime%10 == 0
			for i = -1, 1, 2
				local ang = i * ANG10
				local factor = FixedMul(4*mo.scale, cos(ang))
				local x = P_ReturnThrustX(mo, player.drawangle + ANGLE_180 + ang, 24*mo.scale)
				local y = P_ReturnThrustY(mo, player.drawangle + ANGLE_180 + ang, 24*mo.scale)
				local dust = P_SpawnMobjFromMobj(mo, x, y, 0, MT_THOK)
				dust.scale = mo.scale
				dust.angle = R_PointToAngle2(dust.x, dust.y, mo.x, mo.y)
				dust.state = S_DASHCLOUD
				dust.momx = FixedMul(factor, cos(dust.angle - i*ANGLE_90))
				dust.momy = FixedMul(factor, sin(dust.angle - i*ANGLE_90))
			end
		end
	end
end)

addHook("ThinkFrame", do
	for player in players.iterate
		local mo = player.mo
		if P_IsObjectOnGround(mo)
		and (mo.state == S_PLAY_MACHC1 or mo.state == S_PLAY_SLIDE or mo.state == S_PLAY_PZNO_REDIRECT or mo.state == S_PLAY_SKID or mo.state == S_PLAY_SKID_STOP or mo.state == S_PLAY_RUN)
		and player.pizzanoreal
		and leveltime%10 == 0
			for i = -1, 1, 2
				local ang = i * ANG10
				local factor = FixedMul(4*mo.scale, cos(ang))
				local x = P_ReturnThrustX(mo, player.drawangle + ANGLE_180 + ang, 24*mo.scale)
				local y = P_ReturnThrustY(mo, player.drawangle + ANGLE_180 + ang, 24*mo.scale)
				local dust = P_SpawnMobjFromMobj(mo, x, y, 0, MT_THOK)
				dust.scale = mo.scale
				dust.angle = R_PointToAngle2(dust.x, dust.y, mo.x, mo.y)
				dust.state = S_SMALLDASHCLOUD
				dust.momx = FixedMul(factor, cos(dust.angle - i*ANGLE_90))
				dust.momy = FixedMul(factor, sin(dust.angle - i*ANGLE_90))
			end
		end
	end
end)

freeslot("S_CLOUDEFFECT","SPR_CLEF","sfx_pstep")

states[S_CLOUDEFFECT] = {
	sprite = SPR_CLEF,
	frame = A|FF_ANIMATE,
	tics = 28,
	var1 = 14,
	var2 = 2,
	nextstate = S_DEATHSTATE
}

local function stepframes(p)
	if (p.mo.frame == D or p.mo.frame == I)
		return true
	else
		return false
	end
end

local function cloudeffect(p)
	local ryx = P_RandomRange(-13, 13)
	local cloud = P_SpawnMobj(p.mo.x+ryx*FRACUNIT,p.mo.y+ryx*FRACUNIT,p.mo.z,MT_THOK)
	cloud.state = S_CLOUDEFFECT
end

addHook("ThinkFrame", do
	for p in players.iterate
		if p.pepfootstep == nil
			p.pepfootstep = false
		end
		if ((p.mo.state == S_PLAY_WALK)
		or (p.mo.state == S_PLAY_CROUNCH_MOVE))
		and stepframes(p)
		and P_IsObjectOnGround(p.mo)
		and p.pizzanoreal
		and not p.pepfootstep
			p.pepfootstep = true
			local step = P_SpawnMobj(p.mo.x,p.mo.y,p.mo.z,MT_THOK)
			step.state = S_CLOUDEFFECT
		end
		if p.pepfootstep
		and not stepframes(p)
			p.pepfootstep = false
		end
	end
end)