freeslot("S_PLAY_FLOT", "SPR_FLOT")

states[S_PLAY_FLOT] = {
	sprite = SPR_FLOT,
	frame = A,
	tics = 1,
	nextstate = S_PLAY_FLOT
}

local Float = false
local FloatTimer = 50
local Floatdb = 0

local bounce = false
local bouncedb = 0

--JumpThok

addHook("AbilitySpecial", function(p)
	if p.mo.skin == "flames"
		if p.pflags & PF_JUMPED
		and not(p.pflags & PF_THOKKED)
		and p.charability == CA_NONE
			P_SetObjectMomZ(p.mo, 10*FRACUNIT)
			p.mo.state = S_PLAY_SPRING
			S_StartSound(p.mo, sfx_thok)
			p.pflags = $ | PF_THOKKED
			p.pflags = $1&~PF_JUMPED
			for i = 1, 6
				local dust = P_SpawnMobj(p.mo.x, p.mo.y, p.mo.z, MT_SPINDUST)
				dust.angle = ANG60*i
				P_InstaThrust(dust, dust.angle, 15*FRACUNIT)
			end
			if p.powers[pw_super]
				P_NukeEnemies(p.mo, p.mo, 800*FRACUNIT)
			end
		end
	end
end)

--Homing Thok

addHook ("PlayerThink",function(p)
	if p.mo.skin == "flames"
	and p.cmd.buttons & BT_CUSTOM1
	and P_LookForEnemies(p)
		p.actionspd = 100*FRACUNIT
		p.charability = CA_HOMINGTHOK
	end
end)

addHook ("PlayerThink",function(p)
	if p.mo.skin == "flames"
	and p.cmd.buttons & BT_CUSTOM1
	and not (P_LookForEnemies(p))
		p.actionspd = 60*FRACUNIT
		p.charability = CA_THOK
	end
end)

addHook ("PlayerThink",function(p)
	if p.mo.skin == "flames"
	and not (p.cmd.buttons & BT_CUSTOM1)
		p.actionspd = 100*FRACUNIT
		p.charability = CA_NONE
	end
end)

--Flame Fly 

addHook("PlayerThink", function(p)
	if p.mo.skin == "flames"	
		if p.cmd.buttons & BT_TOSSFLAG
		and not (p.pflags & PF_FINISHED)
		and not (P_PlayerInPain(p) or (p.playerstate == PST_DEAD))
		and not (p.pflags & PF_SPINNING)
		and Floatdb == 0
		and bounce == false
		and p.powers[pw_carry] == CR_NONE
			P_SetObjectMomZ(p.mo, 10*FRACUNIT)
			P_InstaThrust(p.mo, p.mo.angle, p.normalspeed)
			S_StartSound(p.mo, sfx_fire, p)
			p.mo.state = S_PLAY_FLOT
			FloatTimer = $ - 1
			Float = true
			if p.mo.state == S_PLAY_FLOT
				local trail = P_SpawnMobjFromMobj(p.mo, x+P_RandomRange(-20,20)*FRACUNIT, y+P_RandomRange(-20,20)*FRACUNIT, z+P_RandomRange(-20,20)*FRACUNIT, MT_THOK)
				trail.sprite = SPR_FLME
			end
		end
		if FloatTimer < 1
			FloatTimer = 50
			Floatdb = 50
		end
		if not (p.cmd.buttons & BT_TOSSFLAG)
		and Float == true
		and not (FloatTimer == 0)
			Float = false
			Floatdb = 50
			FloatTimer = 50
			if p.powers[pw_super]
				P_NukeEnemies(p.mo, p.mo, 800*FRACUNIT)
				S_StartSound(p.mo, sfx_kc4d, p)
			end
		end
		if Floatdb != 0
			Floatdb = $ - 1
		end
	end
end)

--Bounce

addHook("PlayerThink", function(p)
	if p.mo.skin == "flames"
		if p.cmd.buttons & BT_CUSTOM2
		and bounce== false
		and P_IsObjectOnGround(p.mo) == false
		and not (p.pflags & PF_THOKKED)
		and bouncedb == 0
		and Float == false
		and p.powers[pw_carry] == CR_NONE
			bounce= true
		end
		if bounce== true
			if P_IsObjectOnGround(p.mo)
				bounce= false
				bouncedb = 15
				S_StartSound(p.mo, sfx_s3k44)
				P_SetObjectMomZ(p.mo, 10*FRACUNIT)
				p.mo.state = S_PLAY_ROLL
				p.pflags = $1 | PF_JUMPED
				for i = 1, 6
					local dust = P_SpawnMobj(p.mo.x, p.mo.y, p.mo.z, MT_SPINDUST)
					dust.angle = ANG60*i
					P_InstaThrust(dust, dust.angle, 15*FRACUNIT)
				end
			end
			if p.powers[pw_justsprung]
				bounce= false
				bouncedb = 15
			end
		end
		if bounce== true
			P_SetObjectMomZ(p.mo, -30*FRACUNIT)
			p.mo.state = S_PLAY_ROLL
			local ghost = P_SpawnGhostMobj(p.mo)
			ghost.fuse = 4
			ghost.color = p.mo.color
		end
		if bouncedb != 0
			bouncedb = $ - 1
		end
	end
end)

--Music 

addHook("PlayerThink", function(p)
	if p.mo.skin == "flames"	
		if p.powers[pw_super]
			S_ChangeMusic("FSUPER", true, p)
			return true
		end	
	end
end)

--Falling

addHook("PlayerThink", function(p)
    if p.mo.skin == "flames"
		if not P_IsObjectOnGround(p.mo)
			if (p.mo.state == S_PLAY_WALK)
			or (p.mo.state == S_PLAY_RUN)
			or (p.mo.state == S_PLAY_DASH)
			and not (p.xmomentum)
			and p.powers[pw_carry] == CR_NONE
				p.mo.state = S_PLAY_FALL
			end
		end   
	end
end)

--Walk Dust

addHook("PlayerThink", function(p)	
	if p.mo.skin == "flames"
	and P_IsObjectOnGround(p.mo)
	and not p.powers[pw_super]
	and p.powers[pw_carry] == CR_NONE
		if p.mo.state == S_PLAY_RUN 
		or p.mo.state == S_PLAY_DASH
			P_SpawnSkidDust(p, 13*FRACUNIT, sfx_none)
		end
	end
end)

--Super Float

addHook("PlayerThink", function(p)
    if p.mo.skin == "flames"
        if p.powers[pw_super]
		and p.cmd.buttons & BT_USE
		and not(P_IsObjectOnGround(p.mo))
		and p.pflags & PF_JUMPED
            p.charability = CA_THOK
        end
    end
end)

--Jump 

addHook("PlayerThink", function(p)
    if p.mo.skin == "flames"
		if p.pflags & PF_JUMPED
			if p.mo.state == S_PLAY_JUMP
			and p.mo.momz < 0
				p.mo.state = S_PLAY_FALL
			elseif p.mo.state == S_PLAY_FALL
			and p.mo.momz > 0
				p.mo.state = S_PLAY_JUMP
			end
			if p.pflags & PF_THOKKED
			and p.charability == CA_THOK 
			and not (p.cmd.buttons & BT_USE)
				p.mo.state = S_PLAY_ROLL
			end
		end
	end
end)