addHook("AbilitySpecial", function(player) if player.mo.skin == "sonic" and player.playerstate == PST_LIVE and player.valid player.camangle = player.cmd.angleturn<<16 + R_PointToAngle2(0, 0, player.cmd.forwardmove*FRACUNIT, -player.cmd.sidemove<<16) local gotox = player.mo.x+FixedMul(260*FRACUNIT, cos(player.camangle)) local gotoy = player.mo.y+FixedMul(260*FRACUNIT, sin(player.camangle)) if not (player.pflags & PF_THOKKED) if (player.cmd.forwardmove != 0) or (player.cmd.sidemove != 0) P_TeleportMove(player.mo, gotox, gotoy, player.mo.z) player.mo.momz = 0 P_InstaThrust(player.mo, player.camangle, player.speed + 15*FRACUNIT) if player.cmd.buttons & BT_SPIN player.mo.momx = 0 player.mo.momy = 0 end elseif player.cmd.buttons & BT_SPIN then P_TeleportMove(player.mo, player.mo.x, player.mo.y, player.mo.z - 150*FRACUNIT) if not (player.mo.eflags & MFE_UNDERWATER) P_SetObjectMomZ(player.mo, -10*FRACUNIT, false) else P_SetObjectMomZ(player.mo, -5*FRACUNIT, false) end player.mo.momx = 0 player.mo.momy = 0 else P_TeleportMove(player.mo, player.mo.x, player.mo.y, player.mo.z + 150*FRACUNIT) if not (player.mo.eflags & MFE_UNDERWATER) P_SetObjectMomZ(player.mo, 10*FRACUNIT, false) else P_SetObjectMomZ(player.mo, 5*FRACUNIT, false) end player.mo.momx = 0 player.mo.momy = 0 end player.pflags = $|PF_NOJUMPDAMAGE player.mo.state = S_PLAY_FALL S_StartSound(player.mo, sfx_appear) player.pflags = $1 & ~PF_JUMPED player.pflags = $1 & ~PF_SPINNING player.pflags = $1 & ~PF_STARTDASH player.pflags = $|PF_THOKKED local ghost = P_SpawnGhostMobj(player.mo) ghost.color = SKINCOLOR_PURPLE ghost.colorized = true ghost.fuse = 15 end if P_IsObjectOnGround(player.mo) and player.pflags & PF_NOJUMPDAMAGE player.pflags = $1 & ~PF_NOJUMPDAMAGE end end end) COM_AddCommand("showghosts", function(player) if not player.showghosts player.showghosts = true CONS_Printf(player,"Now it will show ghosts before you teleport.") else player.showghosts = false CONS_Printf(player,"Well it`s distracting maybe, so no ghosts ._ .") end end) addHook("PlayerThink", function(player) if player.mo.skin == "sonic" and player.playerstate == PST_LIVE and player.valid and (player.showghosts == true or player.showghosts == nil) local ghost local gotoy local gotox player.camangle = player.cmd.angleturn<<16 + R_PointToAngle2(0, 0, player.cmd.forwardmove*FRACUNIT, -player.cmd.sidemove<<16) if player.pflags & PF_JUMPED ghost = P_SpawnGhostMobj(player.mo) ghost.color = SKINCOLOR_RED ghost.colorized = true ghost.fuse = 5 if player.cmd.buttons & BT_JUMP P_TeleportMove(ghost, player.mo.x, player.mo.y, player.mo.z + 150*FRACUNIT) ghost.flags2 = $1 & ~MF2_DONTDRAW else ghost.flags2 = $|MF2_DONTDRAW end if player.cmd.buttons & BT_SPIN P_TeleportMove(ghost, player.mo.x, player.mo.y, player.mo.z - 150*FRACUNIT) ghost.flags2 = $1 & ~MF2_DONTDRAW end gotox = player.mo.x+FixedMul(260*FRACUNIT, cos(player.camangle)) gotoy = player.mo.y+FixedMul(260*FRACUNIT, sin(player.camangle)) if (player.cmd.forwardmove != 0) or (player.cmd.sidemove != 0) P_TeleportMove(ghost, gotox, gotoy, player.mo.z) ghost.flags2 = $1 & ~MF2_DONTDRAW end end if P_IsObjectOnGround(player.mo) and player.pflags & PF_THOKKED player.pflags = $1 & ~PF_THOKKED end end end) addHook("PlayerThink", function(player) if player.mo.skin == "sonic" player.charability = CA_NONE end end) addHook("PlayerThink", function(player) if player.mo.skin == "sonic" if player.showghost == nil player.showghosts = true end end end)