--uncurl jump addHook("ThinkFrame", function() for player in players.iterate do if player.mo.skin ~= "sonic" then continue end if not (player.cmd.buttons & BT_CUSTOM1) then player.spintapready = true player.spintapping = false elseif player.spintapready then player.spintapping = true player.spintapready = false else player.spintapping = false end if player.spintapping and not (player.pflags & PF_THOKKED) and not P_IsObjectOnGround(player.mo) then P_SetObjectMomZ(player.mo, 9*FRACUNIT) P_Thrust(player.mo, player.mo.angle, 10*FRACUNIT) player.mo.state = S_PLAY_SPRING player.pflags = $1|PF_JUMPED|PF_THOKKED end end end) --flight jump addHook("ThinkFrame", function() for player in players.iterate do if player.mo.skin ~= "tails" then continue end if not (player.cmd.buttons & BT_CUSTOM1) then player.spintapready = true player.spintapping = false elseif player.spintapready then player.spintapping = true player.spintapready = false else player.spintapping = false end if player.spintapping and P_IsObjectOnGround(player.mo) then P_SetObjectMomZ(player.mo, 10*FRACUNIT) player.mo.state = S_PLAY_FLY end end end) --downward thrust addHook("ThinkFrame", function() for player in players.iterate do if player.mo.skin ~= "knuckles" then continue end if not (player.cmd.buttons & BT_CUSTOM1) then player.spintapready = true player.spintapping = false elseif player.spintapready then player.spintapping = true player.spintapready = false else player.spintapping = false end if player.spintapping and (player.pflags & PF_GLIDING) then P_SetObjectMomZ(player.mo, -20*FRACUNIT) end end end) --slamjump addHook("ThinkFrame", function() for player in players.iterate do if player.mo.skin ~= "amy" then continue end if not (player.cmd.buttons & BT_CUSTOM1) then player.spintapready = true player.spintapping = false elseif player.spintapready then player.spintapping = true player.spintapready = false else player.spintapping = false end if player.spintapping and player.mo.state == S_PLAY_MELEE_LANDING then P_SetObjectMomZ(player.mo, 13*FRACUNIT) player.mo.state = S_PLAY_ROLL player.pflags = $1|PF_JUMPED end end end) --bounce boost addHook("ThinkFrame", function() for player in players.iterate do if player.mo.skin ~= "fang" then continue end if not (player.cmd.buttons & BT_CUSTOM1) then player.spintapready = true player.spintapping = false elseif player.spintapready then player.spintapping = true player.spintapready = false else player.spintapping = false end if player.spintapping and player.mo.state == S_PLAY_BOUNCE_LANDING then player.mo.state = S_PLAY_BOUNCE P_SetObjectMomZ(player.mo, 20*FRACUNIT) end end end) --momentum thok sfxinfo[sfx_kc5b].caption = "Powerful Thok" addHook("AbilitySpecial", function(p) if (p.mo and p.mo.valid and p.mo.health and p.mo.skin=="metalsonic") and not (p.pflags & PF_THOKKED) P_InstaThrust(p.mo, p.mo.angle, p.thokforce) P_SetObjectMomZ(p.mo, p.thokupforce) S_StartSound(p.mo, sfx_thok) if p.thokforce > 69*FRACUNIT --nice-- local thokko = P_SpawnMobjFromMobj(p.mo, 0, 0, p.mo.scale * 20, MT_THOK) thokko.angle = p.mo.angle + ANGLE_90 thokko.fuse = 7 thokko.scale = 2*FRACUNIT/3 thokko.destscale = 10*FRACUNIT thokko.colorized = true thokko.color = p.mo.color S_StartSound(p.mo, sfx_kc5b) p.thokeffects = true else p.thokeffects = false P_SpawnThokMobj(p) end p.pflags = $ + PF_THOKKED end end) addHook("PlayerThink", function(p) if p.mo and p.mo.valid and p.mo.health and p.mo.skin == "metalsonic" if not p.thokforce p.thokforce = 0*FRACUNIT p.thokupforce = 0*FRACUNIT p.thokeffects = false end if not p.powers[pw_super] p.thokforce = p.speed + 25*FRACUNIT else p.thokforce = p.speed + 70*FRACUNIT end p.thokupforce = p.thokforce / 8 if p.pflags & PF_THOKKED and p.thokeffects == true local AfterImageSpawn = P_SpawnGhostMobj(p.mo) if p.powers[pw_super] AfterImageSpawn.color = 84 else AfterImageSpawn.color = 98 end AfterImageSpawn.colorized = true end end end)