
//Don't like the changes? Oh well...

local luastuffrelatingtothis = 0

COM_AddCommand("HRabilityedits", function(player, arg1)	

	if arg1=="off" or arg1=="1" then
	CONS_Printf(player, "\x83"+"Abilities reverted to base srb2... Good luck\x82 ")
	luastuffrelatingtothis = 1
	end
	
	if arg1=="on" or arg1=="0" then
	CONS_Printf(player, "\x83"+"Abilities reverted to History Reimagined.\x82 ")
	luastuffrelatingtothis = 0
	end

	if arg1=="21" then
	CONS_Printf(player, "\x83"+"legacy mode activated.")
	luastuffrelatingtothis = 2
	G_SetUsedCheats = true
	end
	
	if arg1=="21+" or arg1=="21+HR" or arg1=="0+" then
	CONS_Printf(player, "\x83"+"legacy PLUS History Reimagined mode activated.")
	luastuffrelatingtothis = 3
	G_SetUsedCheats = true
	end
	
	if arg1==nil then
	CONS_Printf(player, "\x83"+"This affects every new/altered character based sbility in History Reimagined.")
	CONS_Printf(player, " ")
	CONS_Printf(player, "\x83"+"NOT RECOMMENDED TO CHANGE TO BASE SRB2, HR RELIES ON THESE NEW ABILITIES.\x82 ")
	end
end)

//Momentum Thok

addHook("PlayerThink", function(player)
if player.mo and player.mo.valid and luastuffrelatingtothis == 0
and player.mo.skin == "sonic" 
or player.mo.skin == "supersonic"
or player.mo.skin == "ass"

player.actionspd = 45*FRACUNIT+(FixedDiv(player.speed/2, player.mo.scale))
player.charflags = $ & ~SF_MULTIABILITY
end

if player.mo and player.mo.valid
and player.mo.skin == "sonic" 
and P_IsObjectOnGround(player.mo)
and (player.pflags & PF_THOKKED)
and (player.cmd.buttons & BT_SPIN)
and luastuffrelatingtothis == 0 then
 
player.mo.state = S_PLAY_ROLL
player.pflags = $|PF_SPINNING
end

if player.mo and player.mo.valid and luastuffrelatingtothis == 1
and (player.pflags & PF_THOKKED)
and player.mo.skin == "sonic" 
or player.mo.skin == "supersonic"
or player.mo.skin == "ass"

player.actionspd = 60*FRACUNIT
player.charflags = $ & ~SF_MULTIABILITY
end

if player.mo and player.mo.valid and luastuffrelatingtothis == 2
and player.mo.skin == "sonic" 
or player.mo.skin == "supersonic"
or player.mo.skin == "ass"

player.charflags = $|SF_MULTIABILITY //multi thok
player.actionspd = 60*FRACUNIT
end

if player.mo and player.mo.valid and luastuffrelatingtothis == 3
and player.mo.skin == "sonic" 
or player.mo.skin == "supersonic"
or player.mo.skin == "ass"

player.charflags = $|SF_MULTIABILITY //multi thok but faster
player.actionspd = 45*FRACUNIT+(FixedDiv(player.speed/2, player.mo.scale))
end
end)

//Hammer Dash

addHook("PlayerThink", function(player)
if player.mo and player.mo.valid
and player.mo.skin == "amy"
and player.cmd.buttons & BT_CUSTOM1
and player.mo.state == S_PLAY_MELEE_LANDING
and luastuffrelatingtothis == 0

player.mo.state = S_PLAY_ROLL
player.pflags = $|PF_SPINNING
P_Thrust(player.mo, player.mo.angle, 45*FRACUNIT)
S_StartSound(player.mo, sfx_zoom)
end
end)

//Cork Jump

addHook("PlayerThink", function(player)
if player.mo and player.mo.valid
and player.mo.skin == "fang"
and player.pflags & PF_JUMPED
and not (player.pflags & PF_THOKKED)
and not (player.pflags & PF_BOUNCING)
and player.cmd.buttons & BT_SPIN
and luastuffrelatingtothis == 0

player.mo.state = S_PLAY_FALL
player.pflags = $|PF_THOKKED
player.pflags = $|PF_NOJUMPDAMAGE //added here by Endless
local cork = P_SpawnMobj(player.mo.x, player.mo.y, player.mo.z, MT_CORK)
cork.target = player.mo
cork.rollangle = ANGLE_90
P_SetObjectMomZ(cork, -20*FRACUNIT, false)
P_SetObjectMomZ(player.mo, player.jumpfactor*10, false)
S_StartSound(player.mo, sfx_corkp)
end
end)

//Cork Dash

addHook("PlayerThink", function(player)
if player.mo and player.mo.valid
and player.mo.skin == "fang"
and player.mo.state == S_PLAY_RUN
and player.cmd.buttons & BT_SPIN
and luastuffrelatingtothis == 0

player.mo.state = S_PLAY_ROLL
player.pflags = $|PF_SPINNING
P_Thrust(player.mo, player.mo.angle, 5*FRACUNIT)
local cork = P_SpawnMobj(player.mo.x, player.mo.y, player.mo.z, MT_CORK)
cork.target = player.mo
P_Thrust(cork, player.mo.angle, -25*FRACUNIT)
S_StartSound(player.mo, sfx_corkp)
S_StartSound(player.mo, sfx_zoom)
end
end)

//Super Bounce

addHook("PlayerThink", function(player)
if player.mo and player.mo.valid
and player.mo.skin == "fang"
and player.mo.state == S_PLAY_BOUNCE_LANDING
and player.cmd.buttons & BT_SPIN
and luastuffrelatingtothis == 0

P_SetObjectMomZ(player.mo, 2*FRACUNIT, true)
end
end)

//Flight Cancel
addHook("PlayerThink", function(player)
if player.mo and player.mo.valid
and player.mo.skin == "tails"
and player.cmd.buttons & BT_SPIN
and player.mo.state == S_PLAY_FLY
and not player.bot
and luastuffrelatingtothis == 0
or player.mo.state == S_PLAY_SWIM
and player.mo.skin == "tails"
and player.cmd.buttons & BT_SPIN
and not player.bot
and luastuffrelatingtothis == 0

player.mo.state = S_PLAY_ROLL
player.pflags = $|PF_JUMPED
S_StartSound(player.mo, sfx_cdfm75)
S_StartSound(player.mo, sfx_zoom)
S_StartSound(player.mo, sfx_3db16)
end

if player.mo.skin == "tails"
and player.mo.state & S_PLAY_FLY
and player.mo.state == S_PLAY_ROLL
and player.cmd.buttons & BT_JUMP
and not (player.pflags & PF_SPINNING)
and not player.bot
and luastuffrelatingtothis == 0
or player.mo.state == S_PLAY_SWIM
and player.mo.state == S_PLAY_ROLL
and player.cmd.buttons & BT_JUMP
and not (player.pflags & PF_SPINNING)
and not player.bot
and luastuffrelatingtothis == 0

player.pflags = $|PF_NOJUMPDAMAGE
S_StartSound(player.mo, sfx_cdfm77)
player.mo.color, player.mo.colorized = SKINCOLOR_RED, true
P_SetObjectMomZ(player.mo, 6*FRACUNIT/5, true)
P_Thrust(player.mo, player.mo.angle, -player.speed/5)
if (leveltime%3==0)
player.mo.color, player.mo.colorized = player.skincolor, false
player.mo.state = S_PLAY_FALL
end
end

if player.mo.skin == "tails" 
and player.powers[pw_shield] & SH_NOSTACK == SH_WHIRLWIND
and player.pflags & PF_THOKKED
and player.mo.state == S_PLAY_FLY
and player.cmd.buttons == BT_JUMP
and not player.bot
and luastuffrelatingtothis == 0
or player.mo.state == S_PLAY_SWIM
and player.mo.skin == "tails" 
and player.powers[pw_shield] & SH_NOSTACK == SH_WHIRLWIND
and player.pflags & PF_THOKKED
and player.cmd.buttons == BT_JUMP
and not player.bot
and luastuffrelatingtothis == 0

P_SetObjectMomZ(player.mo, -2*FRACUNIT/5, true)
end
end)
