// 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 "opsonic" spaces.




freeslot ("S_PLAY_ROLLFALL","S_PLAY_ROLLFALL2","S_PLAY_BOUNCECTM","S_SUPERANIM","S_SUPERANIM2","S_SUPERANIM3","SPR_SUPER","S_PLAY_DRIP","SPR2_DRIP","sfx_sus","SPR_LOCK", 
"S_LOCK","SPR2_BONG","S_PLAY_BONCE","S_PLAY_DROPDASH")

states[S_PLAY_DROPDASH] = {SPR_PLAY,SPR2_TIRE|FF_ANIMATE,-1,nil,0,1,S_PLAY_DROPDASH}
sfxinfo[sfx_sus] = { caption = "U GOT THE SECRET!"
}
states[S_PLAY_DRIP] = {SPR_PLAY,SPR2_DRIP,10,nil,0,0,S_PLAY_DRIP}
states[S_PLAY_BONCE] = {SPR_PLAY,SPR2_BONG|FF_ANIMATE,-1,nil,0,1,S_PLAY_BONCE}
states[S_LOCK] = {SPR_LOCK, FF_FULLBRIGHT|FF_ANIMATE, 5, nil, 1, 0, S_NULL}
states [S_SUPERANIM] = {SPR_SUPE,FF_FULLBRIGHT|FF_ANIMATE,3,nil,0,3,S_SUPERANIM}
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 == "opsonic" 
  and not (player.pflags & PF_THOKKED) 
  
  P_InstaThrust(player.mo,player.mo.angle,40*FRACUNIT)

  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,dumb)
if player.mo.skin == "opsonic"
player.target = P_LookForEnemies(player, true, true)
if not P_IsObjectOnGround(player.mo)
if player.target 
P_SpawnLockOn(player,player.target,S_LOCK)
if player.cmd.buttons & BT_CUSTOM2
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
end)
 
 // Spin Down B)
 
addHook("PlayerThink",function(player)

if player.mo.skin == "kuysting"
		and not P_IsObjectOnGround(player.mo)
		and player.cmd.buttons & BT_SPIN
		and not player.spindown == true
		and not player.powers[pw_super]
		and player.cd <= 0
			player.cd = 20
			player.mo.state = S_PLAY_JUMP
			P_SetObjectMomZ(player.mo,-40*FRACUNIT,true)
			P_SpawnSpinMobj(player,MT_THOK)
			player.ghost = true
			player.bouncing = true		
			player.spindown = true
		
		end
if player.cd == nil
  player.cd = 0
end
if player.cd > 0
  player.cd = $ - 1
end
end)

addHook("PlayerThink",function(player)
if player.ghost == true
	P_SpawnGhostMobj(player.mo)
	end
if player.mo.skin == "kuysting"
	and player.powers[pw_super]
	player.ghost = true
	player.powers[pw_shield] = SH_ATTRACT
	end
end)

addHook("PlayerThink",function(player)
if player.mo.skin == "kuysting"
	and P_IsObjectOnGround(player.mo)
	and	player.bouncing == true
	and not player.powers[pw_super]
		P_StartQuake(10*FRACUNIT,10,{0,0,0},player.mo.radius)
		S_StartSound(player.mo,sfx_bnce2)
		P_SpawnSpinMobj(player,MT_THOK)
		P_SetObjectMomZ(player.mo,15*FRACUNIT,true)
		player.mo.state = S_PLAY_SPRING
		player.bouncing = false
		player.ghost = false
	    player.spindown = false
	end
end)
	
addHook("PlayerCanDamage",function(player)
if player.mo.skin == "kuysting"
	and player.bouncing == true
	then return true
	end
end)
//DashMode Attacks Enemies
addHook("PlayerCanDamage",function(player,sourmo) --THE FUNCTION
 if player.dashmode > 3*TICRATE -- idk
  and player.mo.skin == "opsonic" --sanic
  then return true
   end
 end)
//Explotion B)
addHook("PlayerThink",function(player)-- THE PLAYER (AGAIN)
if player.mo.skin == "opsonic" -- 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 AND MOMENTUM XXXXXXDDDDDDDD
addHook("PlayerThink",function(player)
if player.mo.skin == "opsonic"
	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)
if player.mo.skin == "opsonic"
	if player.speed >300*FRACUNIT
	and (player.mo.state == S_PLAY_RUN) 
	or (player.mo.state == S_PLAY_DASH)
	    P_ElementalFire(player)
if player.mo.skin == "opsonic"
	if (P_IsObjectOnGround(player.mo)) 
	and (player.mo.state == S_PLAY_DASH)
	or (player.mo.state == S_PLAY_ROLL)
 P_SpawnGhostMobj(player.mo)
end
end
end
end
end
end
end)

//THE SUPER SECRET
addHook("PlayerThink",function(player)
if player.mo.skin == 'opsonic'
and player.cmd.buttons & BT_TOSSFLAG
and P_IsObjectOnGround(player.mo)
player.pflags = $|PF_STASIS
player.mo.state = S_PLAY_DRIP
S_StartSound(player.mo,sfx_sus)
if not (player.cmd.buttons & BT_TOSSFLAG)
and S_SoundPlaying(player.mo,sfx_sus)
and player.mo.state == S_PLAY_DRIP
S_StopSoundByID(player.mo,sfx_sus)
player.mo.state = S_PLAY_STND

end
end
end)

//SuperAnim
addHook("PlayerThink",function(player,trans)
if player.mo.skin == "opsonic"
if player.mo.state == S_PLAY_SUPER_TRANS2
and player.powers[pw_super]
and All7Emeralds(emeralds)

P_NukeEnemies (player.mo,player.mo,3000*FRACUNIT)
P_FlashPal(player,PAL_WHITE,10)
P_StartQuake(50*FRACUNIT,10,{0,0,0},player.mo.radius)

end 
end
end)

//If U Spawn U GIVES RINGS!
addHook("PlayerSpawn",function(player)
if player.mo.skin == "opsonic"
P_SpawnMobj(player.mo.x + 40*FRACUNIT,player.mo.y,player.mo.z,MT_RING_BOX)
P_FlashPal(player,PAL_WHITE,10)
S_StartSound(player.mo,sfx_chchng)

end
end)

//Run EFFECT XDDDDDDD
addHook ("PlayerThink",function(player)
if player.mo.skin == "kuysting"
	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)
