freeslot("sfx_nsup")

addHook("PlayerThink", function(player)
	if player.mo.skin == "oldnotsoap"
		if player.dashmode >= 3*TICRATE and player.speed >= 45*FRACUNIT
			player.mach4 = 1
			player.powers[pw_strong] = STR_DASH|STR_ANIM|STR_PUNCH|STR_STOMP|STR_WALL|STR_SPIKE
		else
			player.mach4 = 0
		end
	end
end)

addHook("PlayerThink", function(player)
	if player.mo.skin == "oldnotsoap" then
		if player.mach4 == 1 and P_IsObjectOnGround(player.mo) and not (player.pflags & PF_SPINNING)
			player.mo.state = S_PLAY_OLDNOTSOAP_MACH4
		end
	end
end)

addHook("PlayerThink", function(player)
	if player.mo.skin == "oldnotsoap" then
		if player.mach4 == 1 and player.mo.state == S_PLAY_DASH and not (player.pflags & PF_SPINNING)
			player.mo.state = S_PLAY_OLDNOTSOAP_MACH4
		end
	end
end)

//workaround for weird buggy buggy buggy buggy bugyg buggy buggy buggy bugyg ubygu bugyg ubgyg buggy buggy buggy
addHook("PlayerThink", function(player)
	if player.mo.skin == "oldnotsoap" then
		if player.mach4 == 1 and (player.pflags & PF_SPINNING)
			player.mo.state = S_PLAY_ROLL
		end
	end
end)

addHook("PlayerThink", function(player)
	if player.mach4 == 0 and player.mo.state == S_PLAY_OLDNOTSOAP_MACH4 and not (player.pflags & PF_SPINNING)
		player.mo.state = S_PLAY_DASH
	end
end)

addHook("PlayerThink", function(player)
    if player.mo.skin == "oldnotsoap"
		if (player.powers[pw_justsprung] or player.mo.eflags & MFE_SPRUNG) and player.mo.state != S_PLAY_SPRING then 
			player.dashmode = DASHMODE_MAX
		end
    end
end)

addHook("PlayerThink", function(player)
	if player.mach4 == 1 then
		if not S_SoundPlaying(player.mo, sfx_nspd)
			S_StartSound(player.mo, sfx_nspd)
		end
	else
		S_StopSoundByID(player.mo, sfx_nspd)
	end
end)

addHook("ThinkFrame", do
	for player in players.iterate
	    if player.holdingc1 == nil or player.playerstate == PST_DEAD or (player.pflags & PF_SPINNING)
			player.holdingc1 = 0
		end
	end
end)

addHook("ThinkFrame", do
	for player in players.iterate
	    if player.uppercutted == nil or player.playerstate == PST_DEAD or (player.pflags & PF_SPINNING)
			player.uppercutted = 0
		end
	end
end)

addHook("PlayerThink", function(player)
	if player.mo.skin == "oldnotsoap" then
		if (player.cmd.buttons & BT_CUSTOM1) and player.holdingc1 == 0 and player.uppercutted == 0 and player.uppercutcancel == 0 and not (player.pflags & PF_SPINNING) and player.playerstate ~= PST_DEAD
			player.mo.state = S_OLDNOTSOAP_UPPERCUT
			P_SetObjectMomZ(player.mo, 15*FRACUNIT, false)
			S_StartSound(player.mo, sfx_nsup)
			player.holdingc1 = 1
			player.uppercutted = 1
		end
	end
end)

addHook("PlayerThink", function(player)
	if player.mo.skin == "oldnotsoap" then
		if player.mo.state == S_OLDNOTSOAP_UPPERCUT and not P_IsObjectOnGround(player.mo) and not (player.pflags & PF_SPINNING) and player.playerstate ~= PST_DEAD
			player.drawangle = leveltime*ANG1*16
		end
	end
end)

addHook("PlayerThink", function(player)
	if player.mo.skin == "oldnotsoap" then
		if player.mo.state == S_OLDNOTSOAP_UPPERCUT then
			player.uppercutted = 1
		else
			player.uppercutted = 0
		end
	end
end)

addHook("PlayerThink", function(player)
	if player.mo.skin == "oldnotsoap" then
		if player.mo.state == S_PLAY_OLDNOTSOAP_UPPERCUTCANCEL then
			player.uppercutcancel = 1
		else
			player.uppercutcancel = 0
		end
	end
end)

addHook("PlayerThink", function(player)
	if player.mo.skin == "oldnotsoap" then
		if player.mo.state == S_OLDNOTSOAP_UPPERCUT and (player.cmd.buttons & BT_SPIN)
			P_InstaThrust(player.mo, player.mo.angle, 50*FRACUNIT)
			player.pflags = $|PF_THOKKED
			player.dashmode = DASHMODE_MAX
			P_SetObjectMomZ(player.mo, 3*FRACUNIT, false)
			player.mo.state = S_PLAY_OLDNOTSOAP_UPPERCUTCANCEL
		end
	end
end)

addHook("PlayerThink", function(player)
	if player.mo.skin == "oldnotsoap" then
		if not (player.cmd.buttons & BT_CUSTOM1) and player.holdingc1 == 1
			player.holdingc1 = 0
		end
	end
end)