# Native CSS teleport probe — 5 October 2026

Installed Counter-Strike: Source build **11003710**, protocol 24, directly confirmed that ordinary Kitsune and Lux teleports retain velocity and use the same destination feet height for standing and crouched players. The zero-speed stage arrivals observed in KSF public records are a separate behavior; this probe does not identify which server or replay component produces them. See the [multi-record Kitsune review](KITSUNE-TELEPORT-EVIDENCE.md).

## Isolation and method

The server used the already-established `node_modules/.native-css-probe/cstrike` mod directory, mounted installed assets read-only, and ran hidden with `-insecure -ip 127.0.0.1 -port 27025`. There were no human clients or movement/timer plugins. All new scripts, map copies and writable configuration stayed inside the ignored probe directory. The installed executable and files were unchanged. `quit` stopped the server, and a process check confirmed that no `srcds_win64` process remained.

The four map SHA-1 values and entity classifications are recorded in [NEW-MAP-ENTITY-REVIEW.md](NEW-MAP-ENTITY-REVIEW.md). Kitsune and Lux used the exact reviewed BSPs. Lux's BSP has TF2 player spawns but no CSS spawn classes, so the probe-only `mapspawn.nut` added one T and one CT spawn point; it did not change any geometry or teleport entity. A reused navigation file allowed inert test bots to spawn without generating a new mesh; navigation was not used to exercise the portals.

The controlled cases used gravity, air acceleration, ground acceleration and friction set to zero; `bot_stop 0`, `bot_freeze 1`, `bot_zombie 1`; and `bot_crouch` 0 or 1. Every accepted portal result has a nearby free-space control in the transcript. A script placed one bot with velocity `(123,456,78)` and eye angles `(7,13,0)`, then printed its immediate state. A separate RCON command read the state at the next 0.015-second server-time step. Zero gravity isolates velocity changes and is not the game's surf physics profile.

## Accepted results

| Portal | Input feet origin | Measured destination origin | Standing/crouched velocity |
| --- | --- | --- | --- |
| Kitsune `*1` → Orange | `(-15360,-11545,448)` | `(-13312,-15216,-455)` | `(123,456,78)` / `(123,456,78)` |
| Lux `*38` → `s2_left` | `(-192,15520,-8384)` | `(6784,-15168,-1856)` | `(123,456,78)` / `(123,456,78)` |
| Lux `*39` → `s2_right` | `(192,15520,-8384)` | `(7168,-15168,-1856)` | `(123,456,78)` / `(123,456,78)` |

The measured standing bounds were `(-16,-16,0)` to `(16,16,62)`; crouched bounds were `(-16,-16,0)` to `(16,16,45)`. All six portal cases returned the exact authored feet origin at the following read. There is no additional 8.5-, 17-, 22.5- or 31-unit teleport destination offset for crouching. Ordinary duck/unduck transitions on later ticks remain separate movement behavior.

Kitsune controls from `(-15360,-11650,448)` moved to approximately `(-15358.155273,-11643.160156,449.170013)` in one tick and retained the injected velocity. Lux controls from `(0,1900,1900)` moved to `(1.845000,1906.839966,1901.170044)` and retained it. These are the expected one-tick displacements at the test velocity, subject to float precision.

Input eye yaw 13 changed to approximately 87–89 degrees after each teleport, consistent with destination yaw 90. The test bots continued adjusting their eyes, including during the free-space controls, so the read does **not** prove exact equality to pitch 0/yaw 90 at the instant of transfer. The authored destination angles and installed Valve FGD supply the transform reference; this native check supports the direction change while retaining that precision limit.

The complete RCON transcript, including rejected exploratory cases, is [native-css-teleport-probe.txt](../fixtures/native-css-teleport-probe.txt). The final accepted Kitsune standing case is at server time `138.660 → 138.675`; crouched is `101.745 → 101.760` after the last Kitsune load. Accepted Lux standing cases are `18.855 → 18.870` and `18.885 → 18.900`; crouched cases are `52.185 → 52.200` and `52.215 → 52.230`.

## Rejected exploratory cases and output timing

The first Kitsune probe used the portal's AABB center `(-15360,-11520,448)`. The player hull there penetrates backing world brush `bsp-0-1122` by six units. Those samples often returned zero velocity because the placement was contaminated by collision/stuck handling; they are not evidence that the teleport resets velocity. The initial distant control `(-15360,-14500,1100)` also failed to demonstrate clean free movement and was replaced. Changing bot controls alone did not consistently remove the contamination. The corrected source point overlaps the trigger without overlapping solid geometry and gives repeatable preserved velocity in both hull states.

OnStartTouch handlers connected through VScript were logged into a script array and read later. They ran several server ticks after the transfer in these tests. For example, Lux's left-portal callback ran at `18.930`, after a right-portal test had already occurred, and therefore reported a position near the **right** destination. These output callbacks cannot be treated as exact pre-contact or immediate post-contact state. This also explains why post-teleport OnStartTouch callback positions in older probe logs do not locate the original contact.

The observation applies to these connected VScript handlers. It does not establish a universal 0.06-second delay for all authored Source entity outputs. Exact authored I/O queue phase, duplicate output order and normal movement-trigger overlap ordering remain unmeasured.

## Demise model load check

The same stock server subsequently loaded the pinned Demise BSP. VScript enumerated all 101 version-49 tree entities as live `prop_dynamic` entities with real model indices: 82 `models/que/game_tree2.mdl` (index 225), 16 `hallo_tree_2.mdl` (226), two `game_tree12.mdl` (231), and one `game_tree67.mdl` (227). The reported bounds reflect the authored model scales; no substitution to `error.mdl` appeared in the inventory. The raw inventory is [native-css-demise-model-probe.txt](../fixtures/native-css-demise-model-probe.txt).

This demonstrates acceptance by the installed server's model loader. It does not verify a native client's rendered appearance or missing-PHY collision behavior.

## Limits

These are controlled placement/contact tests, not a normal-command replay through the native course. They do not prove residual-tick movement after swept entry, native ordering between simultaneous portals, exact client view-angle prediction, or KSF's current plugin configuration. They provide direct stock CSS evidence for the three tested teleports' destination and velocity behavior. Separately observed KSF stage teleports may relocate and clear velocity through server plugins even when the authored BSP teleport preserves it.
