Movement Detection Modules

5 Modules

Server-authoritative physics, velocity, displacement, collision, and jump trajectory detectors.

# Overview

Because Roblox grants client physics authority over character models, movement exploits are the most common cheat vector. RAC counters this using a suite of 5 dedicated server-side movement validators:

  1. SpeedDetector: Horizontal displacement monitor (XZ plane).
  2. FlyDetector: Airtime thresholding and downward floor raycasting.
  3. TeleportDetector: Sudden large-distance positional delta tracker.
  4. NoclipDetector: Continuous spatial raycasting against collidable geometry.
  5. JumpDetector: Vertical velocity spikes and multi-jump counting.

# 1. SpeedDetector

Monitors horizontal displacement between consecutive server ticks.

# Detection Logic

  • Isolates movement to the horizontal plane ($\text{XZ}$) to avoid penalizing players for gravity-assisted falls.
  • Computes measured speed: $$v_{\text{measured}} = \frac{\sqrt{\Delta X^2 + \Delta Z^2}}{\Delta t}$$
  • Dynamically calculates the threshold: $$v_{\text{max}} = \max(\text{Humanoid.WalkSpeed}, \text{MaxWalkSpeedTolerance}) + \text{PingBuffer}$$
  • If $v_{\text{measured}} > v_{\text{max}}$, a violation is reported.

# Anti-False-Positive Protections

  • Seat Exemption: Automatically skipped if humanoid.Sit is true or if the player is attached to a VehicleSeat.
  • Ping Buffering: Dynamically grants up to $10.0$ studs/s buffer based on the player's round-trip latency (playerState.ping * 12.0).

# 2. FlyDetector

Detects unauthorized levitation, CFrame hovering, and upward velocity injection.

# Detection Logic

  • On each tick, checks if the player is in the Freefall state or airborne.
  • Casts a downward raycast from HumanoidRootPart.Position ($8.0$ studs length) using Workspace:Raycast to detect solid terrain or parts beneath the player.
  • If no floor is hit, increments playerState.continuousAirTime.
  • If airtime exceeds Config.Detectors.Fly.MaxAirTimeSeconds (default $2.8\text{s}$), a Flight anomaly is flagged.

# 3. TeleportDetector

Catches instantaneous jumps across maps, stage skipping, and exploit-driven CFrame overwrites.

# Detection Logic

  • Calculates total 3D displacement: $$\Delta d = |\mathbf{p}t - \mathbf{p}{t-1}|$$
  • If $\Delta d > (\text{MaxDistancePerSecond} \cdot \Delta t)$, the move is flagged as a teleport.
  • Server Teleport Exemption: When the server legitimately teleports a player via Engine:TeleportPlayer(player, targetCFrame), a TeleportGracePeriod tag is granted, preventing false flags.

# 4. NoclipDetector

Prevents players from passing through walls, security doors, or terrain boundaries.

# Detection Logic

  • Performs a line raycast between the player's previous verified position ($\mathbf{p}_{t-1}$) and their current position ($\mathbf{p}_t$).
  • Filters out non-collidable parts (CanCollide == false), character accessories, and parts with transparency $> 0.9$ (cosmetic glass or water).
  • If a solid barrier was crossed without collision, the detector flags Noclip and immediately triggers a position rollback to $\mathbf{p}_{t-1}$.

# 5. JumpDetector

Prevents infinite jumping, high-jumping, and moon-gravity exploits.

# Detection Logic

  • Monitors vertical velocity spikes: $$v_Y = \frac{\Delta Y}{\Delta t}$$
  • Tracks jump count within a 2-second sliding window (MaxJumpsPerTwoSeconds = 3).
  • If a player initiates an upward jump impulse while already in mid-air (without touching a ladder or truss), Infinite Jump is flagged.

# Next Steps