Extraction provenance
The original Sunjack project was read-only throughout this effort. Its relevant source was copied into this project and adapted here. No runtime module imports the original project.
The extraction manifest is verification/harvest.json. It records the original file hashes and destination files. verification/source-snapshot.json records 174 original project files, excluding the new engine folder, .DS_Store, Git metadata and dependency-install directories. The boundary verifier compares those original files read-only; it does not repair or rewrite them.
Direct extraction and adaptation
| Original | Engine destination | Treatment |
|---|---|---|
| vendor/three.module.js and three.core.min.js | vendor | Three.js r184 preserved, with the full existing MIT notice also embedded in distributable headers. |
| js/geometry.js | src/content/geometry.js | Primitive batching, rounded geometry and consolidation retained. |
| js/surfaces.js | src/content/surfaces.js | Procedural maps/materials retained; global cache removed; explicit library cleanup added. |
| js/characters.js | src/content/characters.js | Skeletal construction and animation retained; fabric texture ownership made per actor. |
| js/bird-models.js | src/content/birds.js | Articulated model retained; city ambience dependency replaced by bounded model-scale defaults. |
| js/flags.js | src/content/flags.js | Visible and depth-pass deformation retained. |
| js/plasma-sun.js | src/modules/plasma.js | Shaders and coronal geometry retained; resource sets made per instance and fully disposed. |
| js/water.js | src/modules/water.js | Source reflection/shading retained; size, level and segment count generalized; neutral wake inputs and cleanup added; reflected camera up vector accounts for orientation. |
| js/postfx.js | src/modules/postfx.js | Source HDR, contact shading and bloom pipeline retained; lifecycle disposal added. |
| js/occlusion-fade.js | src/modules/occlusion.js | Bounded generic box-reveal helper retained. |
| js/vehicles.js | src/content/craft.js | Detailed craft variants retained; ferry, terminal and boss factories omitted from this module. |
| js/ship-turret.js | src/content/craft-rig.js | Articulation geometry retained; dependency on gameplay motion replaced by local model dimensions. |
| js/world.js | src/content/architecture.js | Construction helpers retained; authored world generation, Citizens integration and campaign logic removed. |
| js/facades.js | src/content/facades.js | Detailed facade construction retained. |
| js/ambience-data.js | src/content/ambience.js | Deterministic appearance helpers retained; global appearance caches removed. City behavior is not instantiated. |
| js/rooms.js | src/content/rooms.js | Room shader retained; lighting groups replace district-power terminology and group levels are validated. |
Derived mechanisms and new implementation
- The seeded random function comes from source math.js. Game-plane movement helpers were not brought into core math.
- Quality budgets derive from source quality.js, with city population and residency policies removed.
- FixedClock retains the source timing approach; MotionBody adds generic three-dimensional position and quaternion interpolation.
- Daylight adapts the source procedural sky/noise approach and provides a new sun/moon lighting interface and lifecycle.
- ParticleField uses the source's bounded geometry-presentation approach with new neutral 3D particle state; it does not include weapon semantics.
- Engine lifecycle, ResourceScope, SpatialWorld, Heightfield, landscape generation, sloping river, population placement, generic controls, survey aircraft and shell integration are new/generalized implementation.
Source features intentionally not incorporated as engine requirements
| Feature | Disposition |
|---|---|
| Sunjack missions, campaign, boss and combat rules | Excluded: application-specific. |
| Save migration and campaign persistence | Excluded: application-specific; shell does not read/write those keys. |
| City coordinates, district geography and detailed-section residency | Excluded as authored world policy. New finite terrain uses bounded tiles and frustum culling. |
| Source fixed-altitude ship movement and planar navigation | Replaced for general use by 3D motion and collision services. |
| Resident schedules, bench reservations, feeding and bird routes | Excluded behavior; reusable articulated content retained. |
| Laundry resident/garment interactions | Excluded authored behavior. Reusable fabric deformation is demonstrated by flags. |
| Ferry, terminal and boss model factories | Not included in the public content library; original source is available in the isolated baseline fixture during development. They can be extracted separately if requested. |
| Source weapon ribbon trails and transient combat-light pools | Deferred as standalone APIs; generic particles and ordinary Three.js lights are available, while weapon-specific state is excluded. |
| Source camera's combat heuristics and city-specific obstruction rules | Excluded. Generic orbit/follow controls and spatial queries are provided. |
| Audio/music and game UI | Excluded: not established engine requirements. |
Baseline evidence
The source suite was executed from tests/.work/source-baseline, entirely inside the engine boundary, and passed 99/99 checks. See verification/source-tests.txt. This is a source baseline, not evidence that the new engine passes those exact gameplay tests.
New engine tests and actual Chrome rendering/lifecycle checks are recorded separately in VERIFICATION.md. Whole-scene pixel identity with Sunjack is not claimed: the shell has different scenes, lighting arrangements and cameras. Source-derived objects and effects were visually inspected and are exercised by browser fixtures.
The one-time tools/harvest.py script documents extraction. Do not rerun it as setup; the completed engine does not need access to its original parent.