--	EARTH TRANSFER	--

--Particles
local function RockSpawn(mo)
	P_SpawnMobjFromMobj(mo, 16*FRACUNIT, 16*FRACUNIT, -2*FRACUNIT, MT_ROCKCRUMBLE1)
	P_SpawnMobjFromMobj(mo, -16*FRACUNIT, 16*FRACUNIT, -2*FRACUNIT, MT_ROCKCRUMBLE1)
	P_SpawnMobjFromMobj(mo, -16*FRACUNIT, -16*FRACUNIT, -2*FRACUNIT, MT_ROCKCRUMBLE1)
	P_SpawnMobjFromMobj(mo, 16*FRACUNIT, -16*FRACUNIT, -2*FRACUNIT, MT_ROCKCRUMBLE1)
end
	
	

--Math for absolute momentum values
addHook("PreThinkFrame", function(player)
for player in players.iterate
		player.rckxmom = abs(player.mo.momx/100000)
		player.rckymom = abs(player.mo.momy/100000)
		player.rckzmom = abs(player.mo.momz/100000)
	end
end)	

--Cooldown timer so you cant spam mid-air abilities
addHook("PlayerThink", function(player)
if player.rckooldown == nil
	player.rckooldown = 3
	return end
if player.rckooldown < 3
	and P_IsObjectOnGround(player.mo) or player.mo.eflags & MFE_JUSTHITFLOOR or player.powers[pw_carry] == CR_GENERIC or player.powers[pw_carry] == CR_PLAYER or player.powers[pw_carry] == CR_ROPEHANG or player.powers[pw_carry] == CR_MACESPIN or player.powers[pw_carry] == CR_ROLLOUT
	player.rckooldown = 3
	return end
if player.rckooldown < 3
	end
end)

--Crawlabounce resets number of times you can thok
addHook("MobjDeath", function(enemy, player)
if (player and player.valid) and (player.type == MT_PLAYER) and (enemy.flags & (MF_ENEMY) or enemy.flags & (MF_MONITOR))
	player.player.rckooldown = 3
	end
end)


--Thok
addHook("AbilitySpecial", function(player)
if player.mo and player.mo.skin == "rocknux" and player.charability == CA_NONE and player.rckooldown > 0
	A_Thrust(player.mo, player.rckzmom*5 + 3, 1)
	player.mo.momz = 0
	A_ZThrust(player.mo, (player.rckxmom + player.rckymom)/2, 0)
	player.rckooldown = player.rckooldown - 1
	player.pflags = $|PF_THOKKED
	S_StartSound(player.mo, 610)
	--96 cannon sfx, 730 swish sound effect
	RockSpawn(player.mo)
	end
end)

--OLD Shield
//addHook("SpinSpecial", function(player)
//if (player.mo and player.mo.skin == "rocknux")
	//and player.charability == CA_NONE 
	//and (player.rckooldown > 0)
	//and not (player.pflags & PF_SPINDOWN) 
	//and (player.pflags & PF_THOKKED or player.pflags & PF_JUMPED)
	//and not P_IsObjectOnGround(player.mo)
	//player.mo.momz = -1*(player.mo.momz)
	//player.rckooldown = player.rckooldown - 1
	//player.pflags = $|PF_THOKKED
	//S_StartSound(player.mo, 610)
	--96 cannon sfx, 730 swish sound effect
	//RockSpawn(player.mo)
	//return true
	//end
//end)
//addHook("ShieldSpecial", function(player)
//if player.mo and player.mo.skin == "rocknux" and player.charability == CA_NONE and player.rckooldown > 0
	//return true
	//end
//end)

--Shield
addHook("SpinSpecial", function(player)
if (player.mo and player.mo.skin == "rocknux")
	and player.charability == CA_NONE 
	and (player.rckooldown > 0)
	and not (player.pflags & PF_SPINDOWN) 
	and (player.pflags & PF_THOKKED or player.pflags & PF_JUMPED)
	and not P_IsObjectOnGround(player.mo)	
	A_ZThrust(player.mo, (player.rckxmom + player.rckymom)*-1, 1)
	player.rckooldown = player.rckooldown - 1
	player.pflags = $|PF_THOKKED
	S_StartSound(player.mo, 610)
	RockSpawn(player.mo)
	end
end)
addHook("ShieldSpecial", function(player)
if player.mo and player.mo.skin == "rocknux" and player.charability == CA_NONE and player.rckooldown > 0
	and (player.flags & PF_JUMPED)
	return true
	end
end)

-- EMERALD KNUCKLES --

--Transparency
addHook("PlayerThink", function(player)
if player.mo and player.mo.skin == "rocknux"
	and player.powers[pw_super] > 1
	player.mo.blendmode = AST_ADD
	elseif player.mo and player.mo.skin == "rocknux"
	and player.powers[pw_super] < 1
	player.mo.blendmode = AST_COPY
	end
end)

--Cool thok trails!
addHook("PlayerThink", function(player)
if player.mo and player.mo.skin == "rocknux"
	if player.powers[pw_super] > 1
		if (player.pflags & PF_THOKKED)
			P_SpawnThokMobj(player)
			end
		end
	end
end)