addHook("PlayerThink", function(player)
	if player.mo and player.valid and player.playerstate == PST_LIVE and not (player.powers[pw_carry] == CR_NIGHTSMODE)
	and player.mo.skin == "graniferv2"
		player.powers[pw_underwater] = 9999
		player.powers[pw_spacetime] = 9999
	end
end)

addHook("PlayerThink", function(player)
    if not (player.mo and player.mo.skin == "graniferv2") then return end

    if player.mo.eflags & MFE_JUSTHITFLOOR and not (player.mo.eflags & MFE_GOOWATER) and not (player.playerstate == PST_DEAD) and not
	P_PlayerInPain(player) then
		if not player.landchecked then
		 P_NukeEnemies(player.mo, player.mo, 500*FRACUNIT)
         S_StartSound(player.mo, sfx_spsmsh)
		player.landchecked = true
        end
    elseif player.mo.state == player.mo.info.painstate then
        player.landchecked = true
    else
        player.landchecked = false
     end
end)

addHook("ThinkFrame", do
	for player in players.iterate
		if player.mo and player.mo.skin == "graniferv2"
			if not player.exiting
				if not (P_PlayerInPain(player) or (player.playerstate == PST_DEAD))
					if ((player.cmd.buttons & BT_TOSSFLAG) and player.granigo == true)
					player.pflags = $|PF_SPINNING
					player.mo.state = S_PLAY_ROLL
					S_StartSound(player.mo, sfx_zoom)
					P_InstaThrust(player.mo, player.mo.angle, 50*FRACUNIT)
					player.granigo = false
					end
				end
			end
		end
	end
end)

addHook("ThinkFrame", do
	for player in players.iterate
	if not (player.mo and player.mo.skin == "graniferv2") then continue end
		player.charability2 = CA2_NONE
		 
	if (player.speed > 4*FRACUNIT) then
	    player.charability2 = CA2_SPINDASH
	else
	    player.charability2 = CA2_NONE
	end
    end
end)

local function CheckAndCrumble2(mo, sec)
  for fof in sec.ffloors()
    if not (fof.flags & FF_EXISTS) continue end -- Does it exist?
    if not (fof.flags & FF_BUSTUP) continue end -- Is it bustable?
    
    if mo.z + mo.momz + mo.height < fof.bottomheight continue end -- Are we too low?
    if mo.z + mo.momz > fof.topheight continue end -- Are we too high?

    -- Check for whatever else you may want to    

    EV_CrumbleChain(fof) -- Crumble
  end
end

addHook("PlayerThink", function(p)
  if not p.mo return end
  if p.mo.skin != "graniferv2" return end
  if PF_SPINNING == false return end
	CheckAndCrumble2(p.mo, p.mo.subsector.sector)
end)

addHook("ThinkFrame", do
	for player in players.iterate
	    if not (player.mo and player.mo.skin == "graniferv2") then continue end
		 
		 if player.mo.state ~= S_PLAY_ROLL       //You holding C1 bro?
		     player.granigo = true   //Your true running speed, restored as long as you're holding C1.
		end
    end
end)

addHook ("MobjMoveCollide", function (player, spike)
	if player.player ~= nil and player.skin == "graniferv2"
		if (spike.type == MT_SPIKE
		or spike.type == MT_WALLSPIKE)
			if (player.z + player.height < spike.z) 
			or (player.z > spike.z + spike.height)
				return false
			else
				P_KillMobj(spike,player,player)
			end
		end
	end
end)