---- Abilities ----

--Mod by SuperOfSrb2
rawset(_G,"Bark",{})

Bark.PlayerCheck = function(player)
	if player and player.mo and player.valid
		return true
	else
		return false
	end
end

Bark.BarkCheck = function(player)
	if Bark.PlayerCheck(player) and player.mo.skin == "bark"
		return true
	else
		return false
	end
end

Bark.GroundCheck = function(player)
	if Bark.PlayerCheck(player)
		if P_IsObjectOnGround(player.mo)
		or player.mo.eflags & MFE_JUSTHITFLOOR
			return true
		else
			return false
		end
	else
		return false
	end
end

freeslot("S_PLAY_WHEELPUNCH")
freeslot("S_PLAY_WHEELFALL")
freeslot("MT_WHEELPUNCHHITBOX")
freeslot("S_WHEELPUNCHHITBOX")
freeslot("sfx_wlpnch")
sfxinfo[sfx_wlpnch].caption = "Wheel Punch"

Bark.AbilityActionable = function(player)
	if player.mo.state == (S_PLAY_JUMP)
	or player.mo.state == (S_PLAY_SPRING)
	or player.mo.state == (S_PLAY_FALL)
	or player.mo.state == (S_PLAY_ROLL)
		if not (player.pflags & PF_THOKKED)
			return true
		else
			return false
		end
	else
		return false
	end
end

addHook("AbilitySpecial", function(player)
	if Bark.BarkCheck(player)	
		if Bark.AbilityActionable(player)
			player.mo.state = S_PLAY_WHEELPUNCH
		end		
	end
end)

addHook("PlayerThink", function(player)
	if Bark.BarkCheck(player)
		
		if player.mo.state == S_PLAY_WHEELPUNCH
		
			if player.barkangle == nil
				player.barkangle = player.drawangle
			end
			player.barkangle = $ - ANG30
			player.drawangle = player.barkangle
			player.mo.momz = FRACUNIT*5
			local speedlimit = FRACUNIT*39
			if (player.powers[pw_sneakers] != 0)
			or (player.powers[pw_super] != 0)
				speedlimit = $*2
			end
			if player.speed > speedlimit then
				P_Thrust(player.mo, player.mo.angle + ANGLE_180, FRACUNIT)
			end
			if player.mo.tics == TICRATE
				P_Thrust(player.mo, player.mo.angle, FRACUNIT*20 - player.speed/4)
				player.pflags = $ & ~PF_NOJUMPDAMAGE
				S_StartSound(player.mo, sfx_wlpnch)
			elseif not (player.cmd.buttons & BT_JUMP)
				player.mo.state = S_PLAY_WHEELFALL
			elseif player.mo.tics == TICRATE/2
				S_StartSound(player.mo, sfx_wlpnch)
			end
		
		end
		if player.mo.state == S_PLAY_WHEELFALL
		
			player.barkangle = nil
			player.drawangle = player.mo.angle
			player.pflags = $|PF_THOKKED
			player.pflags = $|PF_NOJUMPDAMAGE
			
		end
		
	end
end)

