# Five additional CSS classics

Local implementation and review, 6 October 2026. This adds **surf_beginner**, **surf_year3000**, **surf_ace**, **surf_legends** and **surf_eclipse** to the existing ten-map catalog. These are converted original Counter-Strike: Source maps, not recreated layouts or CS:GO/CS2 ports. This document does not announce a production deployment or registration of the new live leaderboard boards.

## What was imported

| Map | Author | Selected KSF classification | Main route |
| --- | --- | --- | --- |
| surf_beginner | Kiiru | Tier 1 | 7 stages, momentum-preserving portals |
| surf_year3000 | ArchAngel | Tier 1 | 2 KSF stages, symmetric first-stage exits |
| surf_ace | Juxtapo | Tier 1 | 8 physically connected stages |
| surf_legends | SintaxError | Tier 1 | Linear, 4 checkpoints, landmark-relative portal |
| surf_eclipse | Paper-Cut | Tier 2 | 3 stages with delayed stage handoffs |

The source SHA-1 and size are checked before conversion. Render and collision imports read the same BSPs. Original texture blocks/pixels, model transforms and skins are audited; the importer does not substitute generated artwork. All five carry actual rendered menu previews, credits, lazy loading and packed texture delivery. Legends' source BSP has no LDR or HDR lightmap data; its unlit appearance is not a dropped lightmap import.

The visual importer now excludes brush entities whose class begins `trigger_`: Source makes these invisible at initialization even when the material/face flags alone do not say NODRAW. This fixes debug trigger surfaces in Year3000 and Legends. Only the five new visual bundles were regenerated; the ten existing bundles remain unchanged.

Ace and Legends contain compiled brushes with contradictory bevel planes. An opt-in import path uses their six compiled axial planes only to obtain conservative broadphase bounds, while retaining every original plane for player-hull collision. It does not replace their collision with a box or silently omit the brushes.

## Course behavior

Source units, float32 0.015-second simulation ticks, hulls, air acceleration, gravity and movement collision are unchanged. Added stage bookkeeping lets Beginner preserve its authored portal momentum while advancing stage identity. Ace's checkpoint gates update stage identity without imposing the separate-stage 350-unit exit cap. The initial ranked start cap remains in place.

Year3000 uses the two-stage KSF course observed in the independent recording, including its final stage arrival, instead of treating all original combat/lobby destinations as main stages. Eclipse retains the authored main-course push volumes and the observed delayed stage arrivals. Legends uses the authored landmark-relative translation, retaining offset, view and momentum.

Eclipse's `trigger_hurt *53` is specifically **not** treated as an unconditional restart: three independent native samples lie inside it and continue normally. Source's damage entity does not itself prescribe a teleport or timer reset. Its original entity and convexes remain in import metadata; only the importer's invented reset classification is removed. The historical server damage policy/revision is unknown, so this is not a claim to reproduce health or invulnerability. All authored stage failure portals remain active. Exact independent evidence is in `fixtures/eclipse-hurt53-independent-review.json`.

Start/finish markings and ordered checkpoints use original trigger convexes where applicable. Other timing boxes are local gates aligned with physical decks/corridors and native event samples. The private KSF timer-zone database and full plugin behavior are unavailable; these boxes are not claimed to be exact KSF zones. Bonus, combat and jail game modes are not added as playable modes.

Practice remains explicitly unranked. Beginner's seventh practice destination uses a settled floor pose so a stationary player does not hit an exact-plane landing issue; the actual stage portal keeps its original airborne destination. The optional practice-stage field affects only explicit practice travel.

## Evidence and reproduction

Final local release checks passed on 6 October 2026:

- 399 automated TypeScript tests, TypeScript checking and the production build.
- Complete canonical-spawn routes for all five maps, accepted by the compressed replay-upload verifier. Every tick matches across 30, 60, 144 and 240 FPS schedules.
- Actual production-browser completion of all five routes, with identical final state, splits and time to the headless simulation, plus keyboard restart, Pointer Lock, stage practice, map switching, persistent selection and the 15-map menu at three screen widths. No browser or console errors.
- All 21 advertised practice destinations settle safely; separate integration tests cover 150 idle ticks at each destination.
- Existing-map compatibility: 59,695 differential ticks across 16 complete runs match exactly, and all ten existing board identities remain intact.
- Final shipped-file audit checks current physics, geometry, replay and served-script hashes. Evidence: `fixtures/classic-five-release-validation.json` and `fixtures/browser-new-map-results-beginner-year3000-ace-legends-eclipse.json`.

These are automated local checks, not human playtesting or validation of a new cloud deployment. The five maps are ready for local review; online records remain disabled in this preview.

- [Reference and source provenance](CLASSIC-FIVE-REFERENCE.md): pinned BSPs, native CSS recordings, authors, original licence panels, stage events and unknown settings.
- [Visual audit](CLASSIC-FIVE-VISUALS.md): texture/prop/lightmap evidence, stage screenshots, packed/fallback delivery and measured resource use.
- [Movement and full-route validation](CLASSIC-FIVE-PLAYABILITY.md): external expectations, strict tolerances, ordinary-command witnesses, timing and rendering-schedule checks.
- [Existing-map compatibility](CLASSIC-FIVE-COMPATIBILITY.md): 16 complete trajectories across all ten old maps, 59,695 exactly matching ticks, preserved board identities and the actual new source fingerprint.

```sh
npm test
npm run build
npm run preview -- --host 127.0.0.1 --port 4199 --strictPort
npx tsx scripts/validate-new-maps.ts beginner year3000 ace legends eclipse
```

For browser flow checks in PowerShell:

```powershell
$env:UI_BASE_URL='http://127.0.0.1:4199'
npx tsx scripts/browser-new-map-qa.ts beginner year3000 ace legends eclipse
npx tsx scripts/validate-classic-five-release.ts
```

The final release audit rejects incomplete browser reports and stale evidence. It checks the served production script hashes, shipped compressed collision packs, source/replay fingerprints and the server's bounded compressed-upload decoder/verifier. The local API exposes all fifteen catalog entries with online records disabled; no live account or database is used by these checks.

Source regeneration uses `scripts/import_new_maps.py` and `scripts/classic_five_profiles.py`, with the pinned source registry and locally installed CSS stock assets. See [MAP-IMPORT.md](MAP-IMPORT.md) for the shared pipeline. The built game needs neither Python nor BSP files at runtime.

## Fidelity boundary

These imports do not establish universal CSS/KSF parity. V2 recordings for Legends and Eclipse omit analog input magnitudes and ground flags. Native reset/push behavior, private start-zone rules and exact fractional timer boundaries can differ from the visible compiled entities. Independent comparison failures and command adaptations must remain visible in the validation report; passing a legal local route is evidence of playability, not evidence that all native telemetry matches.

Source shader/water/animation behavior remains subject to the renderer limitations documented in the visual audit. Original asset licences and author credits remain in [THIRD_PARTY_NOTICES.md](../THIRD_PARTY_NOTICES.md); local import does not relicense the assets.
