
-- super jump from hit game Super Mario Brothers 2 for the Xbox 720

local jumptimer = 2*TICRATE

freeslot(
	"S_SMB2_CROUCH"
)

states[S_SMB2_CROUCH] = {SPR_PLAY, SPR2_FIRE, 2, nil, 100, 176, S_SMB2_CROUCH}

addHook("PlayerSpawn", function(player)
	player.smb2 = {
		sjtimer = 4*TICRATE,
		colortimer = TICRATE/4
	}
end)

addHook("ThinkFrame", function()
	for player in players.iterate do
		if player.mo.skin ~= "nario" then
			continue
		end

	if not (player.mo.valid and player.valid) then
		continue
	end

	if not player.smb2.sjtimer
		if player.speed ~= 0
			player.smb2.sjtimer = jumptimer
		end
		player.jumpfactor = skins[player.mo.skin].jumpfactor*(5/2)
		if player.smb2.colortimer
			player.smb2.colortimer = $-1
		else
			player.smb2.colortimer = TICRATE/2
			if player.mo.color == SKINCOLOR_WHITE
				if player.powers[pw_super]
					player.mo.color = skins[player.mo.skin].supercolor
				else
					player.mo.color = player.skincolor
				end
			else
				player.mo.color = SKINCOLOR_WHITE
			end
		end
	elseif player.jumpfactor == skins[player.mo.skin].jumpfactor*(5/2)
		player.jumpfactor = skins[player.mo.skin].jumpfactor
		if player.powers[pw_super]
			player.mo.color = skins[player.mo.skin].supercolor
		else
			player.mo.color = player.skincolor
		end
	end

	if (player.cmd.buttons & BT_CUSTOM1) and not (player.playerstate == PST_DEAD or player.mo.state == S_PLAY_PAIN or player.mo.state == S_PLAY_GASP)
		player.mo.state = S_SMB2_CROUCH
		player.height = P_GetPlayerSpinHeight(player)
		if P_IsObjectOnGround(player.mo)
			player.pflags = $1|PF_STASIS
			if player.smb2.sjtimer
				player.smb2.sjtimer = $-1
			end
		else
			player.smb2.sjtimer = jumptimer
		end
	elseif player.mo.state == S_SMB2_CROUCH
		if P_IsObjectOnGround(player.mo)
			player.mo.state = S_PLAY_STND
		else
			if (player.pflags & PF_JUMPED)
				player.mo.state = S_PLAY_JUMP
			else
				player.mo.state = S_PLAY_FALL
			end
		end
		player.height = skins[player.mo.skin].height
		player.smb2.sjtimer = jumptimer
	end
	
	end
end)