# Prop, Magneto, and Movement ConVars

Quick reference for tuning prop interaction, magneto manipulation, held-prop collision, player movement physics, and related damage/debug behavior.

Defaults below are the current code defaults. Static ConVar default changes may require a full restart before the new default is visible.

## Key Collision Tags

| Tag | Owner | Purpose |
| --- | --- | --- |
| `idle_prop` | `TerrorTownProp` | Applied to loose/resting props. `movement` ignores this tag through physics collision rules so ordinary props do not constantly fight player helper bodies. |
| `held_prop` | `TerrorTownProp` | Applied while a prop is actively held by the magneto. Held props are removed from `idle_prop` so they can physically collide with players while held. |
| `movement` | player helper bodies | Applied to player physics helper/shadow objects and used by collision rules/traces. |

## Player Movement / Collision

| ConVar | Default | What it does |
| --- | ---: | --- |
| `t.player_movement_held_props_not_stuck` | `true` | If enabled, a held prop that starts inside the movement hull does not count as `stuck` for custom unstuck logic. Current testing may prefer `0` if velocity inheritance feels correct. |
| `t.player_physics_shove_clamp` | `false` | Enables clamping of helper-body velocity before it is inherited into player movement. Disable for raw velocity inheritance. |
| `t.player_physics_shove_grounded_only` | `false` | If shove clamp is enabled, applies it only while grounded. |
| `t.player_physics_shove_max_planar_speed` | `90` | Max planar helper-body velocity accepted when shove clamp is enabled. |
| `t.player_physics_shove_max_vertical_speed` | `90` | Max vertical helper-body velocity accepted when shove clamp is enabled. |
| `t.player_physics_prop_stuck_handoff_clamp` | `true` | Enables clamping of the stuck helper-body position handoff when the blocker is a prop. |
| `t.player_physics_prop_stuck_handoff_held_only` | `true` | Limits the prop stuck handoff clamp to held props only. |
| `t.player_physics_prop_stuck_handoff_max_planar_speed` | `90` | Max planar speed-equivalent accepted from prop stuck handoff. |
| `t.player_physics_prop_stuck_handoff_max_vertical_speed` | `90` | Max vertical speed-equivalent accepted from prop stuck handoff. |
| `t.move.unstuck_push_max` | `160` | Max velocity added by generic unstuck nudges. |
| `t.move.unstuck_push_up_max` | `90` | Max upward velocity added by generic unstuck nudges. |
| `debug_playermovement_unstick` | `false` | Draws/debugs custom unstuck attempts. |
| `debug_playermovement` | `false` | Draws/debugs player physics helper/shadow bodies. |

## Magneto Hold / Pickup

| ConVar | Default | What it does |
| --- | ---: | --- |
| `t.magneto_pickup_owner_grace` | `0.35` | Short grace window for ownership after requesting pickup. |
| `t.magneto_hold_break_distance` | `190` | Drops the held prop if it strays this far from the holder's view origin for long enough. |
| `t.magneto_hold_break_grace` | `0.15` | Grace period before breaking hold due to distance. |
| `t.magneto_corpse_hang_limit` | `3` | Max corpses the magneto hang/rope behavior allows. |
| `t.magneto_debug_release_launch_speed` | `0` | Debug-only forced release launch speed. `0` disables. |
| `ttt_magneto_debug` | `false` | Legacy/general magneto debug toggle. |
| `t.db.magneto` | `false` | Magneto debug logging toggle. |

## Magneto Blocked-Hold Damping

These govern the softened hold-drive behavior when the held prop is blocked while trying to reach the crosshair target.

| ConVar | Default | What it does |
| --- | ---: | --- |
| `t.magneto_blocked_hold` | `true` | Enables blocked-hold softening/damping. |
| `t.magneto_blocked_hold_error` | `40` | Minimum prop-to-target distance before normal obstruction can count as blocked. Player obstruction bypasses this. |
| `t.magneto_blocked_hold_closing_speed` | `20` | If the prop is already moving toward the target faster than this, it is not considered blocked. Player obstruction bypasses this. |
| `t.magneto_blocked_hold_grace` | `0.12` | How long obstruction must persist before full blocked behavior applies. |
| `t.magneto_blocked_hold_recovery` | `0.25` | Time to blend back from blocked behavior to normal hold behavior after obstruction clears. |
| `t.magneto_blocked_hold_trace_size` | `2` | Radius/size of the hold obstruction trace from held prop to wanted position. |
| `t.magneto_blocked_hold_detect_players` | `true` | Lets the obstruction trace treat other players as blockers. |
| `t.magneto_blocked_hold_detect_movement` | `false` | Lets the obstruction trace include `movement` helper bodies. Usually off. |
| `t.magneto_blocked_hold_smooth_time` | `0.42` | SmoothDamp time while blocked; higher feels softer/slower. |
| `t.magneto_blocked_hold_max_speed` | `120` | Global planar speed cap while blocked. |
| `t.magneto_blocked_hold_speed_scale` | `0.50` | Multiplier applied to the prop profile push/pull speed while blocked. |
| `t.magneto_blocked_hold_vertical_cap` | `50` | Vertical velocity cap while blocked. |
| `t.magneto_blocked_hold_angular_damping` | `0.55` | Angular velocity damping while blocked. Lower damps spin harder. |

## Prop Carry / Launch Tuning

| ConVar | Default | What it does |
| --- | ---: | --- |
| `t.prop.pickup_limit` | `3` | Highest pickup scale that can be fully held by the magneto. |
| `t.prop.push_pull_limit` | `4` | Highest pickup scale that can still be manipulated by magneto push/pull. |
| `t.prop.lethality_level` | `4` | Global intentional-launch lethality scale. Ambient loose physics still uses derived prop scale. |
| `t.prop.launch_impact_window` | `1.2` | Time after intentional launch where prop impact can count for propkill damage. |
| `t.prop.launch_owner_grace` | `0.2` | Self-protection window after launch so the thrower does not instantly hit themselves. |
| `t.prop.launch_peak_carryover` | `1` | Keeps peak source speed around briefly so one bad physics frame does not erase a throw. |
| `t.prop.launch_live_speed_forgiveness` | `1.25` | Allows stored launch speed to exceed current live speed during the launch window. |
| `t.prop.debug_profile` | `false` | Shows derived profile/carry policy/bounds over props. |
| `t.prop.debug_manipulation` | `false` | Logs held/launch manipulation debug snapshots. |
| `t.prop.debug_manipulation_interval` | `0.20` | Console sample interval for manipulation debug. |

## Prop Impact / Ownership

| ConVar | Default | What it does |
| --- | ---: | --- |
| `t.prop.impact_player_max_damage` | `140` | Hard cap for prop impact damage against players after per-prop scaling. |
| `t.prop.impact_player_cooldown` | `0.2` | Per-player cooldown so the same contact cannot deal damage every physics tick. |
| `t.prop.impact_player_spawn_grace` | `0.75` | Spawn grace where prop impact damage against a player is blocked. |
| `t.prop.impact_player_standing_speed` | `900` | Extra threshold when the target is standing on the prop, to avoid stomp/standing noise. |
| `t.prop.push_carry_min_speed` | `70` | Minimum prop speed before push-carry responsibility is recorded on player contact. |
| `t.prop.owner_return_release_delay` | `0.2` | Delay after release before host considers reclaiming prop ownership. |
| `t.prop.owner_return_timeout` | `5` | Failsafe maximum time before stale owned props can return to host. |
| `t.prop.owner_return_linear_speed` | `12` | Linear speed threshold for considering released prop settled enough for host ownership return. |
| `t.prop.owner_return_angular_speed` | `25` | Angular speed threshold for ownership return. |

## Player-Vs-Loose-Prop Nudge System

`PlayerPropInteractionSystem` is the host-side policy for ordinary player body contact nudging loose props.

| ConVar | Default | What it does |
| --- | ---: | --- |
| `t.prop.player_push_min_speed` | `35` | Minimum player planar movement before body contact nudges a loose prop. |
| `t.prop.player_push_speed_scale` | `0.16` | Converts player movement speed into loose-prop shove speed before profile caps. |
| `t.prop.player_push_max_speed` | `120` | Global cap for player-body shove speed. Per-profile caps can be stricter. |
| `t.prop.player_push_vertical_cap` | `35` | Caps vertical velocity injected into props by walking/body shoves. |
| `t.prop.player_push_angular_damping` | `0.75` | Damps spin from player-body shoves. |
| `t.prop.player_push_trace_distance` | `20` | Distance ahead of the player used to find a loose prop to nudge. |
| `t.prop.player_push_mass_reference` | `30` | Legacy compatibility knob from old mass-based shove behavior. |
| `t.prop.player_push_min_mass_scale` | `0.08` | Legacy compatibility knob from old mass-based shove behavior. |

## Explosive Barrel / Prop Debug

| ConVar | Default | What it does |
| --- | ---: | --- |
| `t.barrel.reset_damage_grace` | `0.5` | Grace after reset before barrel damage is accepted. |
| `t.barrel.renderer_cleanup_client_window` | `2` | Client-side window for renderer cleanup after barrel transitions. |
| `t.barrel.renderer_cleanup_client_interval` | `0.25` | Client-side interval for barrel renderer cleanup checks. |
| `t.barrel.spawn_registry.match_radius` | `0.25` | Position tolerance for matching barrels to spawn registry records. |
| `t.db.barrel` | `false` | Barrel debug logging. |
| `t.db.barrel.max_rows` | `24` | Max rows for barrel debug output. |
| `t.db.barrel.client_autostart` | `false` | Enables client autostart barrel probe/debug behavior. |
| `t.db.barrel.client_autostart.max_rows` | `24` | Max rows for client autostart barrel probe output. |
| `t.db.barrel.spawn_registry` | `false` | Barrel spawn registry debug logging. |

## Related Fall / Void Safeguards

These are not prop controls directly, but they often matter while testing prop shove, stuck, teleport, and fall-damage edge cases.

| ConVar | Default | What it does |
| --- | ---: | --- |
| `t.fall.min_airborne_time` | `0.08` | Minimum airborne time before fall damage can apply. |
| `t.fall.respawn_grace` | `0.6` | Grace after respawn before fall damage applies. |
| `t.fall.min_drop_distance` | `16` | Minimum drop distance before fall damage applies. |
| `t.fall.teleport_grace` | `1.0` | Grace after teleport before fall damage applies. |
| `t.fall.unstuck_grace` | `0.1` | Grace after unstuck nudge before fall damage applies, with exploit mitigation checks. |
| `t.fall.ladder_grace` | `0.45` | Grace around ladder transitions before fall damage applies. |
| `t.fall.max_self_damage` | `100` | Max fall damage applied to the falling player. |
| `t.fall.max_stomp_damage` | `100` | Max stomp/fall impact damage applied to another player. |
| `t.void_kill_z` | `-16384` | Z position below which void kill behavior applies. |

