// Mini Homing Thok
addHook("PlayerThink",function(player,target)
	if not player then return end
	if not player.mo then return end
	if player.mo.skin == "kaysonic"
	and player.cmd.buttons & BT_CUSTOM1
		player.target = P_LookForEnemies(player, true, true)
		if not P_IsObjectOnGround(player.mo)
			if player.target
				P_HomingAttack(player.mo, player.target)
				P_SpawnThokMobj(player)
				P_Thrust(player.mo, player.mo.angle,18*FRACUNIT)
				S_StartSound(player.mo, sfx_thok)
				player.mo.state = S_PLAY_ROLL
				player.pflags = $|PF_JUMPED|PF_THOKKED
			end
		end
	end
end)
//Explotion B)
addHook("PlayerThink",function(player)-- THE PLAYER (AGAIN)
	if not player then return end
	if not player.mo then return end
	if player.mo.skin == "kaysonic" -- HEY DONT ROB MY CODE!
		if player.cmd.buttons & BT_CUSTOM3 and -- IF U PRESS C1
		not P_IsObjectOnGround(player.mo) and -- IF U ARE IN GROUND
		not (player.pflags & PF_THOKKED) and --IF U NOT USE YOUR ABILITI
			player.rings >= 20 -- IF U HAVE RINGS!


			P_NukeEnemies (player.mo,player.mo,3020*FRACUNIT) -- THE ESPLOTION
			P_FlashPal(player, PAL_WHITE, 10) -- THE EFFECT
			player.pflags = $|PF_THOKKED -- IF U USE THE ABILITY, NO SPAM
			player.mo.momz = 2 -- U UP
			P_GivePlayerRings(player,-20) -- RAINS RINGS
			S_StartSound(player.mo,	sfx_zoom) -- THE SOUND
			player.mo.state = S_PLAY_SUPER_TRANS1 -- THE ANIMATION
		end
	end
end)
//Dash Fall
addHook("PlayerThink", function(player)
	if not player then return end
	if not player.mo then return end
	if player.mo.skin == "kaysonic"
	    if (player.mo.state == S_PLAY_JUMP)
		and (player.cmd.buttons & BT_FIRENORMAL)
           P_SpawnGhostMobj(player.mo)
		   player.mo.state = S_PLAY_FALL
		   S_StartSound(player.mo, sfx_thok)
		   S_StartSound(player.mo, sfx_zoom)
		   P_Thrust(player.mo, player.mo.angle, 17*FRACUNIT)
		end
	end
end)
-- Ring Bomb
addHook("ThinkFrame", do
	for player in players.iterate
		if player and player.mo and player.mo.skin == "kaysonic"
			if not (player.mo.fire)
				player.mo.fire = 0
			end
			if not (player.powers[pw_carry] == CR_NIGHTSMODE) 
			and not (player.powers[pw_carry]) 
			and not (player.pflags & PF_STASIS) 
			and not (player.mo.tracer and player.mo.tracer.type == MT_TUBEWAYPOINT) 
			and not (player.mo.state == S_PLAY_SUPER_TRANS1)
			and not (player.mo.state == S_PLAY_SUPER_TRANS2)
			and not (player.mo.state == S_PLAY_SUPER_TRANS3)
			and not (player.mo.state == S_PLAY_SUPER_TRANS4)
			and not (player.mo.state == S_PLAY_SUPER_TRANS5)
			and not (player.mo.state == S_PLAY_SUPER_TRANS6)
			and not (player.pflags & PF_FINISHED)
			and P_PlayerInPain(player) == false
		    and player.playerstate == PST_LIVE
			and (player.cmd.buttons & BT_CUSTOM2)
			and player.mo.fire == 0
				player.mo.fire = 1
				P_SpawnPlayerMissile(player.mo,  MT_THROWNEXPLOSION)
			end
			if not (player.cmd.buttons & BT_CUSTOM2)
				player.mo.fire = 0
			end
		end
	end
end)
-- Drop Dash
addHook('PlayerSpawn', function(p)
	if p then
		if (p.isSpinning == nil) then
			p.isSpinning = false
		end
		if (p.dropdashing == nil) then
			p.dropdashing = false
		end
		if (p.dropdash == nil) then
			p.dropdash = false
		end
		if (p.pressed == nil) then
			p.pressed = false
		end
		if (p.dropDashSpeed == nil) then
			p.dropDashSpeed = 0
		end
		if (p.dropDashSpeed2 == nil) then
			p.dropDashSpeed2 = 0
		end
	end
end)

addHook('PlayerThink', function(p)
	if not p then return end
	if not p.mo then return end
	if (p.mo.skin ~= 'kaysonic') then
		return
	end

	if (p.cmd.buttons & BT_TOSSFLAG) and not P_PlayerInPain(p) and p.playerstate ~= PST_DEAD then
		p.pressed = true
    if not (P_IsObjectOnGround(p.mo)) then
    	if p.dropdash == false then
  			S_StartSound(p.mo, sfx_spndsh)
    	end
			if p.bouncing == true then
				p.bouncing = false
			end
  		p.dropdash = true
  		p.mo.state = S_PLAY_SPINDASH
  		p.dropDashSpeed = (p.mo.momz / FRACUNIT) - ((p.mo.momz / FRACUNIT) * 2) * 2
	  elseif (P_IsObjectOnGround(p.mo)) and (p.dropdash == true) then
	  	p.dropdash = false
	  	if p.dropDashSpeed < 45 then
	  		p.dropDashSpeed = 45
	  	end
	  	if p.dropDashSpeed > 65 then
	  		p.dropDashSpeed = 65
	  	end
	  	p.dropDashSpeed2 = p.speed
	  	if p.dropDashSpeed2 > p.normalspeed then
	  		p.dropDashSpeed2 = p.normalspeed
	  	end
	    S_StartSound(p.mo, sfx_zoom)
	    P_InstaThrust(p.mo, p.mo.angle, p.dropDashSpeed2+p.dropDashSpeed*FRACUNIT)
	    if (p.pflags & ~PF_SPINNING) then
				p.pflags = $|PF_SPINNING
	    end
  		p.mo.state = S_PLAY_ROLL
	    p.dropdashing = true
	    p.dropDashSpeed = 0
	  end
	elseif not (p.cmd.buttons & BT_TOSSFLAG) then
		p.pressed = false
		if p.dropdash == true then
			p.dropdash = false
			p.dropDashSpeed = 0
		end
		if not (P_IsObjectOnGround(p.mo)) and (p.mo.state == S_PLAY_SPINDASH) then
			p.mo.state = S_PLAY_JUMP
		end
	end
	

	if (p.mo.state ~= S_PLAY_ROLL) and p.dropdashing then
		p.dropdashing = false
	end
end)