addHook("PlayerThink", function(p) if p.mo and p.mo.skin == "sonic" p.charability = CA_HOMINGTHOK p.actionspd = 100*FRACUNIT end if p.sprung == nil p.sprung = false end end) addHook("PlayerThink", function(p) if p and p.mo and p.valid and p.mo.valid and p.mo.eflags & MFE_SPRUNG or p.powers[pw_justsprung] and not P_IsObjectOnGround(p.mo) == true and not p.bot then p.sprung = true end if p.mo.skin == "sonic" and p.charability == CA_HOMINGTHOK and p.mo.state == S_PLAY_SPRING and not p.sprung == true and not P_IsObjectOnGround(p.mo) == true and not p.homing then p.mo.state = S_PLAY_JUMP p.pflags = $|PF_JUMPED p.pflags = $ & ~PF_THOKKED p.pflags = $ & ~PF_NOJUMPDAMAGE P_SetObjectMomZ(p.mo, 11*FRACUNIT) P_InstaThrust(p.mo, p.drawangle, 33*FRACUNIT) end if p.mo.valid and p.sprung == true and P_IsObjectOnGround(p.mo) then p.sprung = false end end) addHook("AbilitySpecial", function(p) if p.valid and p.mo.skin == "sonic" and p.charability == CA_HOMINGTHOK and not p.homing and not p.sprung and not P_IsObjectOnGround(p.mo) and not P_LookForEnemies(p) and not (p.pflags & PF_THOKKED) then P_InstaThrust(p.mo, p.mo.angle, 57*FRACUNIT) P_SpawnThokMobj(p) p.mo.state = S_PLAY_ROLL S_StartSound(p.mo, sfx_thok) p.pflags = $|PF_THOKKED end end)