--custom swimming code here xd
--if not swimmiesphysics.value then return end
local swimmies = CV_RegisterVar({
	name = "exp_swimthrust",
	defaultvalue = 1,
	PossibleValue = CV_Unsigned,
	flags = CV_NETVAR,
})

addHook("PlayerThink", function(player)
	if player.mo.eflags & MFE_UNDERWATER and player.panim ~= PA_PAIN then
		if player.pflags & PF_STASIS then return end
		if player.cmd.buttons & BT_JUMP and player.mo.momz <= 6 * FRACUNIT
			player.mo.momz = swimmies.value * FRACUNIT/2 * P_MobjFlip(player.mo) + $
			if not P_IsObjectOnGround(player.mo) then
				player.pflags = $ & ~PF_SPINNING
			end
		elseif player.cmd.buttons & BT_SPIN and player.mo.momz >= -6 * FRACUNIT
			player.mo.momz = -swimmies.value * FRACUNIT/2 * P_MobjFlip(player.mo) + $
			if not P_IsObjectOnGround(player.mo) then
				player.pflags = $ & ~PF_SPINNING
			end
		end
		if player.panim == PA_JUMP or player.panim == PA_FALL or player.panim == PA_WALK then
			player.mo.state = S_PLAY_SWIM
		end
		if player.mo.state == S_PLAY_SWIM
		and P_IsObjectOnGround(player.mo)
		and player.speed < FRACUNIT/2 then
			player.mo.state = S_PLAY_STND
		end
		if player.mo.state == S_PLAY_SWIM
		and not (player.mo.eflags & MFE_UNDERWATER) then
			player.mo.state = S_PLAY_STND
		end
	end
end)