
freeslot("sfx_ckbost", "sfx_lcbost")
sfxinfo[sfx_ckbost].caption = "Dash"
sfxinfo[sfx_lcbost].caption = "Laser Dash"

addHook("PlayerSpawn", function(player)// for dashing and stomping
local chuckdash
player.chuckdash = 1
local stomptime
player.stomptime = 0
local storedspeed
player.storedspeed = 0
local prerevspeed
player.prerevspeed = 0
local speedmashcap
player.speedmashcap = 0
end)

addHook("PlayerThink", function(player) //welcome to code nightmare!
if player.mo
if (player.mo.skin == "chuck")//is a speedy cannary
//print(player.storedspeed)
player.chuckdash = $ or 0
player.stomptime = $ or 0
player.storedspeed = $ or 0
player.speedmashcap = $ or 0

if player.storedspeed > 2*FRACUNIT and (player.cmd.buttons & BT_SPIN)
local aim = P_SpawnMobjFromMobj(player.mo,
FixedMul(cos(leveltime%36 * ANG10), player.storedspeed/3),
FixedMul(sin(leveltime%36 * ANG10), player.storedspeed/3),
player.mo.height/2, MT_BOXSPARKLE)
aim.tics = 1
if player.speed > FRACUNIT //slow down
player.speed = $ / 5
player.dashmode = 0
if player.storedspeed > 30*FRACUNIT //I SAID SLOW DOWN
player.mo.momx = $ * 3 / 4
player.mo.momy = $ * 3 / 4
end
end
player.normalspeed = FRACUNIT/4 //rev it up..
else
player.normalspeed = skins["chuck"].normalspeed //normal
end

if player.stomptime >= 1// "mash to stomp" particles
if not P_IsObjectOnGround(player.mo)
for i = 0, 5 do
local trail = P_SpawnMobjFromMobj(player.mo, P_RandomRange(-10, 10)*FRACUNIT,
P_RandomRange(-10, 10)*FRACUNIT,
P_RandomRange(-10, 10)*FRACUNIT, MT_NIGHTSPARKLE)
trail.frame = $|FF_FULLBRIGHT
trail.tics = 10
end
end
player.stomptime = $ - 1
end
if player.dashmode >= 3*TICRATE //dashmode trail
P_Thrust(player.mo, player.drawangle, FRACUNIT/2)//give em a bit of a boost.
if player.powers[pw_super]
local trail = P_SpawnMobjFromMobj(player.mo, 0, 0, 0, MT_THOK)
trail.color = player.mo.color
trail.frame = $|FF_FULLBRIGHT
elseif P_IsObjectOnGround(player.mo)
local trail = P_SpawnMobjFromMobj(player.mo, 0, 0, 0, MT_DUST)
trail.momx = P_RandomRange(-2,2)*FRACUNIT
trail.momy = P_RandomRange(-2,2)*FRACUNIT
trail.momz = P_RandomRange(-2,2)*FRACUNIT
end
end

if player.stomptime == -1 and not (player.cmd.buttons & BT_SPIN) //prepare to stomp
player.stomptime = 3
end

if (player.chuckdash == 0)// PF_THOKKED but just for chuck for some fking reason
if P_IsObjectOnGround(player.mo) 
player.chuckdash = 1
end
local trail = P_SpawnGhostMobj(player.mo)
trail.tics = 2
end

if player.speedmashcap > -1
player.speedmashcap = $ - 1
end

if P_IsObjectOnGround(player.mo) and not (player.cmd.buttons & BT_SPIN)
and player.storedspeed > 2*FRACUNIT
and player.speedmashcap <= -1 //kick forward
player.speedmashcap = 10
//player.pflags = $|PF_SPINNING
S_StartSound(player.mo, sfx_kc5b, player)
P_Thrust(player.mo, player.drawangle, player.storedspeed + player.prerevspeed) //GO!
player.storedspeed = 0
player.prerevspeed = 0
end

end
end
end)

addHook("AbilitySpecial", function(player)//speed +/- momz = pain
local speedheight = (player.speed/FRACUNIT)
if player.mo
and (player.mo.skin == "chuck") and (player.speed/FRACUNIT != 0)
and not (player.pflags & PF_JUMPSTASIS or player.pflags & PF_STASIS or player.pflags & PF_FULLSTASIS) 
if (player.chuckdash == 1)
for t = 1,10 do // puff
P_SpawnMobjFromMobj(player.mo, P_RandomRange(-10, 10)*FRACUNIT,
P_RandomRange(-10, 10)*FRACUNIT,
P_RandomRange(-10, 10)*FRACUNIT, MT_DUST)
end
if (player.mo.momz > (2*P_MobjFlip(player.mo))*FRACUNIT) //up
P_SetObjectMomZ(player.mo, ((speedheight/3)*FRACUNIT)*P_MobjFlip(player.mo), true)
P_Thrust(player.mo, player.drawangle, player.speed/5)
elseif (player.mo.momz < (-2*P_MobjFlip(player.mo))*FRACUNIT) // or down
P_SetObjectMomZ(player.mo, (((speedheight/3)*-1)*FRACUNIT)*P_MobjFlip(player.mo), true)
P_Thrust(player.mo, player.drawangle, player.speed/5)
elseif (player.speed > FRACUNIT) //or forward.
P_Thrust(player.mo, player.drawangle, player.speed/2)
end
if player.powers[pw_super]
S_StartSound(player.mo, sfx_lcbost, player)
else
S_StartSound(player.mo, sfx_ckbost, player)
end
player.mo.state = S_PLAY_ROLL
player.chuckdash = 0
else
end
end
end)

addHook("SpinSpecial", function(player) //FASTFALL or Kickdash
if player.mo
and (player.mo.skin == "chuck") and player.powers[pw_nocontrol] == 0
and not (player.pflags & PF_JUMPSTASIS or player.pflags & PF_STASIS or player.pflags & PF_FULLSTASIS) 
if not P_IsObjectOnGround(player.mo)
if player.stomptime > 0 //STOMP
S_StartSound(player.mo, sfx_3db16, player)
P_SetObjectMomZ(player.mo, -25*FRACUNIT, true)
end
player.stomptime = -1
elseif player.speedmashcap == -1
and not(player.pflags & PF_SPINNING)
if player.prerevspeed == 0
player.prerevspeed = player.speed
end
if player.storedspeed < 70*FRACUNIT //kick
if (leveltime % 5) <= 2
P_SpawnSkidDust(player, 10*FRACUNIT)
S_StartSound(player.mo, sfx_s3k6d, player)
end
player.storedspeed = $ + 2*FRACUNIT
else
end
end
end
end)
