//"Borrowed" Pedro Extra Stuff

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

freeslot("S_PLAY_MIGXTRA", "MT_MIGXTRA", "sfx_bassd", "sfx_neato", "sfx_splot", "sfx_lvldu", "sfx_infor")

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

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

addHook("ShouldDamage", function(target, inflictor, source)
	if target and (target.valid) and (target.player) and (target.player.migxtra) and (target.skin == "miguel")
		if inflictor and (inflictor.valid) and (inflictor.flags & MF_MISSILE)
			local oldmomz = inflictor.momz
			P_SpawnMobj(target.x, target.y, target.z, MT_MIGXTRA)
			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 == "miguel"
		//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
		
		//Ya sprung? Ya get your jump ability back
		if player.mo.eflags & MFE_SPRUNG and not P_IsObjectOnGround(player.mo)
		and player.isxmomentum == nil
			player.pflags = $|PF_JUMPED&~PF_THOKKED
		end
		
		//Spin dance
        if player.powers[pw_carry] == CA_NONE
            if player.migxtra
            and not (player.hugging)
                player.panim = PA_DASH
                if player.pedrotosstapping
                    if player.mo.state == S_PLAY_MIGXTRA
                        player.mo.state = S_PLAY_STND
                    end
                    player.migxtra = false
                    P_RestoreMusic(player)
                else
                    if player.mo.state != S_PLAY_MIGXTRA
                        player.mo.state = S_PLAY_MIGXTRA
                    end
                    player.pflags = $|PF_FULLSTASIS
                end
            elseif player.pedrotosstapping
                player.migxtra = true
                P_PlayJingleMusic(player, "MXTRA", nil, true, JT_OTHER)
            end
        end
	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.migxtra = false
    end
end)

//Footsteps support
if not PlayerAnimInfo
	rawset(_G, "PlayerAnimInfo", {})
end

PlayerAnimInfo["miguel"] = {
		["runFrames"] = {0, 2},
		["dashFrames"] = {-1},
		["walkFrames"] = {3, 7},
		["waitFrames"] = {0},
		["milnekickFrames"] = {0, 4},
		["run"] = true,
		["dash"] = false,
		["walk"] = true,
		["idle"] = true,
		["wait"] = true,
		["milnekick"] = true,
		["superRun"] = false,
		["superDash"] = false,
		["superWalk"] = true,
		["superIdle"] = true,
		["superWait"] = false
}

//Cosmetics Support
addHook("PlayerThink", function(player)
	if Cosmetics
		Cosmetics.SkinOffsets["rafael"] = 4
	end
end)

//Kirby Support

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

kirbyabilitytable["miguel"] = -5

local BattleFuncSet = false

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

	CBW_Battle.SkinVars["miguel"] = {
	weight = 100,
	shields = 1, 
	special = CBW_Battle.Action.Shielder,
	guard_frame = 2
}
end)