// Hi! lookin here? U can Copy paste anymore :D
// OP Sonic Abilities By Minero 
// And The SRB2 Discord guys
//Please Credit :D
//Mini tutorial,rename all the "sonic" spaces.




freeslot ("S_PLAY_ROLLFALL","S_PLAY_ROLLFALL2","S_PLAY_BOUNCECTM")
states [S_PLAY_ROLLFALL] = {SPR_PLAY,SPR2_ROLL|FF_ANIMATE,10,nil,6,0,S_PLAY_ROLLFALL2}
states [S_PLAY_ROLLFALL2] = {SPR_PLAY,SPR2_FALL|FF_ANIMATE,20,A_Look,2,0,S_PLAY_ROLLFALL2}
//Super Thok
addHook ("AbilitySpecial",function(player,target)

  if player.mo.skin == "sonic" -- OMG SNUC
  and not (player.pflags & PF_THOKKED) -- if u no thokked
  
   P_InstaThrust(player.mo,player.mo.angle,40*FRACUNIT)--XD

  P_SetObjectMomZ(player.mo, 20*FRACUNIT,true)--UP,UUUUUUUUUUUUUP!
    
 P_SpawnThokMobj(player) -- the thok effect

  S_StartSound (player.mo , sfx_spin)--SPINDA
 
 player.pflags = $|PF_THOKKED|PF_CANCARRY-- NO SPAM LOOOOOOOOOOOOOOOOOOOOOL
  
 end
 
 end)
// Mini Homing Thok
addHook("PlayerThink",function(player,target)
if player.mo.skin == "sonic"
and player.cmd.buttons & BT_CUSTOM2
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,10*FRACUNIT)
S_StartSound(player.mo, sfx_thok)
player.mo.state = S_PLAY_ROLL
player.pflags = $|PF_JUMPED
player.pflags = $|PF_THOKKED
end
end
end
end)
 
 // Spin Down B)
 
addHook("PlayerThink",function(player)

    if player.mo and player.mo.skin == "sonic" -- sunky
	and not P_IsObjectOnGround(player.mo) -- if not in ground
	and not player.powers[pw_super] -- if u not are super
	and not (player.pflags & PF_SPINNING) 
	and player.pflags & PF_SPINDOWN
	   
	   P_SpawnSkidDust(player,-10*FRACUNIT,sfx_none) --the effect
        P_SetObjectMomZ(player.mo, -50*FRACUNIT,true) -- the bounce xD
		S_StartSound(player.mo, sfx_spin) -- the sounD
		  player.pflags = $|PF_THOKKED
		  player.mo.state = S_PLAY_BOUNCE
		 if P_IsObjectOnGround(player.mo)
		 player.mo.state = S_PLAY_ROLL
		 player.pflags = $|PF_SPINNING
		 
		    end
   	end
end)
	
//DashMode Attacks Enemies
addHook("PlayerCanDamage",function(player,sourmo) --THE FUNCTION
 if player.dashmode > 3*TICRATE -- idk
  and player.mo.skin == "sonic" --sanic
  then return true
   end
 end)
//Explotion B)
addHook("PlayerThink",function(player)-- THE PLAYER (AGAIN)
if player.mo.skin == "sonic" -- HEY DONT ROB MY CODE!
if player.cmd.buttons & BT_CUSTOM1 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 >= 10 -- IF U HAVE RINGS!


P_NukeEnemies (player.mo,player.mo,3000*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,-10) -- RAINS RINGS
S_StartSound(player.mo,	sfx_zoom) -- THE SOUND
player.mo.state = S_PLAY_SUPER_TRANS1 -- THE ANIMATION
end
end
end)

//Run EFFECT XDDDDDDD
addHook("PlayerThink",function(player)
if player.mo.skin == "sonic"
	if (P_IsObjectOnGround(player.mo)) 
	and (player.mo.state == S_PLAY_RUN) 
	or (player.mo.state == S_PLAY_DASH)
	and not player.powers[pw_super]
		P_SpawnSkidDust(player, 15*FRACUNIT, sfx_none)

end
end
end)
// ROLL FALL ANIMATION
addHook("ThinkFrame",function()
for player in players.iterate

if player.mo.skin == "sonic"
and not P_IsObjectOnGround(player.mo)
and player.mo.state == S_PLAY_FALL
and not (player.mo.state == S_PLAY_JUMP)
player.mo.state = S_PLAY_ROLLFALL

end
end
end)


