//Pedro Extra Stuff

local cv_extra = CV_RegisterVar({"play_pedxtra", "On", CV_NETVAR, CV_OnOff})

freeslot("S_PLAY_PEDXTRA", "MT_PEDRXTRA", "SPR2_FELL", "SPR2_WIN", "SPR2_GRND")

states[S_PLAY_PEDXTRA] = {SPR_PLAY, SPR2_CLMB, 5, nil, 0, 0, S_PLAY_PEDXTRA}

addHook("MobjThinker", function(mobj)
	if (mobj.valid) and (mobj.health)
		P_SpawnGhostMobj(mobj)
		P_KillMobj(mobj)
	end
end, MT_PEDRXTRA)

addHook("ShouldDamage", function(target, inflictor, source)
	if target and (target.valid) and (target.player) and (target.player.pedxtra) and (target.skin == "pedro")
		if inflictor and (inflictor.valid) and (inflictor.flags & MF_MISSILE)
			local oldmomz = inflictor.momz
			P_SpawnMobj(target.x, target.y, target.z, MT_PEDRXTRA)
			P_InstaThrust(inflictor, R_PointToAngle2(0,0,inflictor.momx,inflictor.momz), -FixedHypot(inflictor.momx, inflictor.momy))
			inflictor.momz = -oldmomz
			return false
		elseif inflictor and (inflictor.valid) and (inflictor.nodmg)
			return false
		end
	end
end)

//Main Thinker	
addHook("PlayerThink", function(player)
	if player.mo and player.mo.valid and player.mo.skin == "pedro"
		//Detect when we press Toss Flag
		if not (player.cmd.buttons & BT_TOSSFLAG)
			player.pedrotosstapready = true
			player.pedrotosstapping = false
		elseif player.pedrotosstapready 
		and not (player.hugging) then
			player.pedrotosstapping = true
			player.pedrotosstapready = false
		else
			player.pedrotosstapping = false
		end
		
		//CP Dance
        if player.powers[pw_carry] == CA_NONE
            if player.pedxtra
            and not (player.hugging)
                player.panim = PA_DASH
                if player.pedrotosstapping
                    if player.mo.state == S_PLAY_PEDXTRA
                        player.mo.state = S_PLAY_STND
                    end
                    player.pedxtra = false
                    P_RestoreMusic(player)
                else
                    if player.mo.state != S_PLAY_PEDXTRA
                        player.mo.state = S_PLAY_PEDXTRA
                    end
                    player.pflags = $|PF_FULLSTASIS
                end
            elseif player.pedrotosstapping
                player.pedxtra = true
                P_PlayJingleMusic(player, "PXTRA", nil, true, JT_OTHER)
            end
        end
	end
end)

addHook("ShouldJingleContinue", function(player, musname)
	if true return end
	if musname != "PEDXTRA" return end
	if player and player.mo and player.mo.skin == "pedro" and player.pedxtra
		return true
	else
		return false
	end
end)

addHook("PlayerSpawn", function(player)
    if player.mo and player.mo.valid and player.mo.skin == "pedro"
        if player.powers[pw_carry] != CR_NIGHTSMODE then player.mo.state = S_PLAY_STND end
        player.pedxtra = false
    end
end)

//Kirby Support

if not(kirbyabilitytable)
	rawset(_G, "kirbyabilitytable", {})
end

kirbyabilitytable["pedro"] = -5
kirbyabilitytable["l.pedro"] = -9

local BattleFuncSet = false

addHook("ThinkFrame",function()
	if (BattleFuncSet) or not(CBW_Battle and CBW_Battle.SkinVars) then return end
	BattleFuncSet = true

	CBW_Battle.SkinVars["pedro"] = {
		flags = SKINVARS_GUARD,
		weight = 108,
		shields = 1,
		special = Literallynothing,
		guard_frame = 2
	}
end)