//Mach Speed animations
//Original peelout animation by SuperPhanto

addHook("PlayerThink", function(player)
if player.hrfastrun == nil then player.hrfastrun = 0 return end
if player.mo
and player.mo.valid

player.hrfastrun = FixedMul(60*FRACUNIT, player.mo.scale)
end
end)

addHook("PlayerThink", function(player)
if player.mo
and player.mo.valid
and player.speed >= player.hrfastrun
and player.mo.state == S_PLAY_RUN
and player.mo.skin != "msonic" //neo sonic was tweaking
and player.mo.skin != "adventuresonic" //for older versions of him since now his LSD sprites are named "FRUN"
and player.mo.skin != "kris" //his dash sprites are made for the air, like an attack

player.mo.state = S_PLAY_DASH
end
end)

addHook("PlayerThink", function(player)
if player.mo
and player.mo.valid
and player.speed < player.hrfastrun
and player.mo.state == S_PLAY_DASH

player.mo.state = S_PLAY_RUN
end
end)

--Sonic

freeslot("SPR_PEEL")

addHook("ThinkFrame", do
	for player in players.iterate
		if (player and player.mo and player.mo.valid) and (player.mo.skin == "sonic") and player.hrfastrun >= FixedMul(60*FRACUNIT, player.mo.scale)
			if player.mo.state == S_PLAY_DASH
			and not player.powers[pw_super]
				for i = -40, 40
					
					local force = i*FRACUNIT/3
					local angle = ANGLE_90

					local shiftx = FixedMul(cos(player.drawangle + angle), force)
					local shifty = FixedMul(sin(player.drawangle + angle), force)
					
					local shiftx2 = FixedMul(cos(player.drawangle), FRACUNIT)
					local shifty2 = FixedMul(sin(player.drawangle), FRACUNIT)
					
					if i > 20
					or i < -20
						local peelout = P_SpawnMobjFromMobj(player.mo, shiftx2 + shiftx, shifty2 + shifty, 0, MT_OVERLAY)
						peelout.target = player.mo
						peelout.fuse = 1
						peelout.sprite = SPR_PEEL
						if i < 0
							if player.mo.frame == A
								peelout.frame = A
							elseif player.mo.frame == B
								peelout.frame = B
							elseif player.mo.frame == C
								peelout.frame = C
							elseif player.mo.frame == D
								peelout.frame = D
							end
							peelout.angle = player.drawangle + ANGLE_90/6
						else
							if player.mo.frame == A
								peelout.frame = C
							elseif player.mo.frame == B
								peelout.frame = D
							elseif player.mo.frame == C
								peelout.frame = A
							elseif player.mo.frame == D
								peelout.frame = B
							end
							peelout.angle = player.drawangle - ANGLE_90/6
						end
						peelout.renderflags = RF_PAPERSPRITE
						peelout.scale = player.mo.scale/2
						if player.mo.eflags & MFE_VERTICALFLIP
							peelout.eflags = $ | MFE_VERTICALFLIP
							peelout.z = player.mo.z + player.mo.height - peelout.height
						end
					end
				end
			end
		end
	end
end)

--Amy

freeslot("SPR_APEL")

addHook("ThinkFrame", do
	for player in players.iterate
		if (player and player.mo and player.mo.valid) and (player.mo.skin == "amy") and player.speed >= 50*FRACUNIT 
			if player.mo.state == S_PLAY_DASH
			and not player.powers[pw_super]
				for i = -40, 40
					
					local force = i*FRACUNIT/3
					local angle = ANGLE_90

					local shiftx = FixedMul(cos(player.drawangle + angle), force)
					local shifty = FixedMul(sin(player.drawangle + angle), force)
					
					local shiftx2 = FixedMul(cos(player.drawangle), FRACUNIT)
					local shifty2 = FixedMul(sin(player.drawangle), FRACUNIT)
					
					if i > 20
					or i < -20
						local peelout = P_SpawnMobjFromMobj(player.mo, shiftx2 + shiftx, shifty2 + shifty, 0, MT_OVERLAY)
						peelout.target = player.mo
						peelout.fuse = 1
						peelout.sprite = SPR_APEL
						if i < 0
							if player.mo.frame == A
								peelout.frame = A
							elseif player.mo.frame == B
								peelout.frame = B
							elseif player.mo.frame == C
								peelout.frame = C
							elseif player.mo.frame == D
								peelout.frame = D
							end
							peelout.angle = player.drawangle + ANGLE_90/6
						else
							if player.mo.frame == A
								peelout.frame = C
							elseif player.mo.frame == B
								peelout.frame = D
							elseif player.mo.frame == C
								peelout.frame = A
							elseif player.mo.frame == D
								peelout.frame = B
							end
							peelout.angle = player.drawangle - ANGLE_90/6
						end
						peelout.renderflags = RF_PAPERSPRITE
						peelout.scale = player.mo.scale/2
						if player.mo.eflags & MFE_VERTICALFLIP
							peelout.eflags = $ | MFE_VERTICALFLIP
							peelout.z = player.mo.z + player.mo.height - peelout.height
						end
					end
				end
			end
		end
	end
end)
