freeslot("S_PLAY_CROUCH") states[S_PLAY_CROUCH] = { sprite = SPR_PLAY, frame = A|SPR2_LAND, var1 = 0, var2 = 0, tics = 2, nextstate = S_PLAY_CROUCH } rawset(_G,"CA2_CROUCH",22) addHook("PlayerThink", function(player) if player.valid and player.mo.valid and player.charability2 == CA2_CROUCH and player.speed == 0*FRACUNIT and P_IsObjectOnGround(player.mo) and player.pflags & PF_SPINDOWN and not (player.mo.state == S_PLAY_PAIN or player.mo.state == S_PLAY_GASP or player.mo.state == S_PLAY_GLIDE or player.mo.state == S_PLAY_GLIDE_LANDING) player.pflags = $|PF_STASIS player.mo.state = S_PLAY_CROUCH player.height = skins[player.mo.skin].spinheight end if player.charability2 == CA2_CROUCH and player.speed >= 4*FRACUNIT and P_IsObjectOnGround(player.mo) and player.pflags & PF_SPINDOWN and not (player.pflags & PF_SPINNING or player.pflags & PF_FINISHED or player.mo.state == S_PLAY_PAIN or player.mo.state == S_PLAY_GASP or player.mo.state == S_PLAY_GLIDE or player.mo.state == S_PLAY_GLIDE_LANDING) player.pflags = $|PF_SPINNING player.mo.state = S_PLAY_ROLL S_StartSound(player.mo, sfx_spin) end end) addHook("PlayerThink", function(player) if player.valid and player.mo.valid and player.mo.state == S_PLAY_CROUCH and not (player.pflags & PF_SPINDOWN) player.pflags = $ & ~PF_STASIS player.mo.state = S_PLAY_STND player.height = skins[player.mo.skin].height end if player.height == skins[player.mo.skin].spinheight and player.charability2 == CA2_CROUCH and not (player.mo.state == S_PLAY_CROUCH or player.mo.state == S_PLAY_GLIDE or player.mo.state == S_PLAY_GLIDE_LANDING or player.pflags & PF_SPINNING) player.height = skins[player.mo.skin].height end end) addHook("JumpSpecial", function(player) if player.valid and player.mo.valid and player.mo.state == S_PLAY_CROUCH and P_IsObjectOnGround(player.mo) and not (player.pflags & PF_JUMPDOWN) player.pflags = $|PF_SPINNING|PF_STARTDASH|PF_SPINDOWN|PF_JUMPDOWN player.charability2 = CA2_SPINDASH player.mo.state = S_PLAY_SPINDASH player.pflags = $ & ~PF_STASIS S_StartSound(player.mo, sfx_spndsh) end end) addHook("PlayerThink", function(player) if player.charability2 == CA2_SPINDASH and not (player.pflags & PF_STARTDASH) player.charability2 = CA2_CROUCH end if player.pflags & PF_SPINNING and P_IsObjectOnGround(player.mo) and not (player.pflags & PF_STARTDASH) player.thrustfactor = (skins[player.mo.skin].thrustfactor)*5 else player.thrustfactor = skins[player.mo.skin].thrustfactor end if player.pflags & PF_SPINNING and player.pflags & PF_JUMPED and player.mo.state == S_PLAY_JUMP player.pflags = $ & ~PF_SPINNING end if player.pflags & PF_SPINNING and not (P_IsObjectOnGround(player.mo)) and not (player.pflags & PF_JUMPED or player.pflags & PF_STARTDASH) player.pflags = ($|PF_JUMPED|PF_THOKKED) & ~(PF_SPINNING) end end)