//Pedro Extra Stuff

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

freeslot("S_PLAY_PEDXTRA", "MT_PEDRXTRA")

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)

addHook("PlayerThink", function(player)
  if (player.mo.skin ~= "pedro")
  or not (cv_extra.value)
    return
  end
	if not player.pedxtra
	return
  end
	local enemy = P_LookForEnemies(player)
	if not (enemy) return end
	if (enemy.valid)
	and (enemy.flags & MF_ENEMY)
		P_KillMobj(enemy)
		local explosion = P_SpawnMobj(enemy.x, enemy.y, enemy.z, MT_RING)
		explosion.scale = enemy.scale/3
		explosion.state = S_RING
		explosion.target = player.mo
		explosion.nodmg = true
   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
		
		//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
		
		//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