COM_AddCommand("lookteleport", function(player) if not player.look player.look = true CONS_Printf(player,"Jump, Look, Teleport.") else player.look = false CONS_Printf(player,"The old way.") 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("AbilitySpecial", function(player) if player.mo.skin == "sonic" and player.playerstate == PST_LIVE and player.valid and player.look == true local gotoz = player.mo.z+FixedMul(250*FRACUNIT, sin(player.aiming)) local gotox = player.mo.x+FixedMul(250*FRACUNIT, cos(player.mo.angle)) local gotoy = player.mo.y+FixedMul(250*FRACUNIT, sin(player.mo.angle)) if not (player.pflags & PF_THOKKED) P_TeleportMove(player.mo, gotox, gotoy, gotoz) 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 if player.mo.flags2 & MF2_TWOD player.charability = CA_JUMPTHOK else player.chatability = CA_NONE end 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) and player.look == true if player.pflags & PF_JUMPED and not (player.mo.flags2 & MF2_TWOD) local ghost = P_SpawnGhostMobj(player.mo) ghost.color = SKINCOLOR_RED ghost.colorized = true ghost.fuse = 4 local gotoz = player.mo.z+FixedMul(250*FRACUNIT, sin(player.aiming)) local gotox = player.mo.x+FixedMul(250*FRACUNIT, cos(player.mo.angle)) local gotoy = player.mo.y+FixedMul(250*FRACUNIT, sin(player.mo.angle)) P_TeleportMove(ghost, gotox, gotoy, gotoz) end if P_IsObjectOnGround(player.mo) and player.pflags & PF_THOKKED player.pflags = $1 & ~PF_THOKKED end end end) addHook("AbilitySpecial", function(player) if player.mo.skin == "sonic" and player.playerstate == PST_LIVE and player.valid and (player.look == false or player.look == nil) 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)) local flipped = player.mo.flags2 & MF2_OBJECTFLIP if not (player.pflags & PF_THOKKED) if (player.cmd.forwardmove != 0) or (player.cmd.sidemove != 0) and not (player.mo.flags2 & MF2_TWOD) P_TeleportMove(player.mo, gotox, gotoy, player.mo.z) player.mo.momz = 0 P_InstaThrust(player.mo, player.camangle, player.speed + 25*FRACUNIT) if player.cmd.buttons & BT_SPIN player.mo.momx = 0 player.mo.momy = 0 end elseif player.cmd.buttons & BT_SPIN then if not (flipped) P_TeleportMove(player.mo, player.mo.x, player.mo.y, player.mo.z - 150*FRACUNIT) else P_TeleportMove(player.mo, player.mo.x, player.mo.y, player.mo.z + 150*FRACUNIT) end 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 if not (flipped) P_TeleportMove(player.mo, player.mo.x, player.mo.y, player.mo.z + 150*FRACUNIT) else P_TeleportMove(player.mo, player.mo.x, player.mo.y, player.mo.z - 150*FRACUNIT) end 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 if player.mo.flags2 & MF2_TWOD player.charability = CA_JUMPTHOK else player.chatability = CA_NONE end 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) and (player.look == false or player.look == 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 and not (player.mo.flags2 & MF2_TWOD) 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)