AXGATE: THE LAST GATE — STAGE 4 VALIDATION BUILD 2026-09-30 PLAY Serve web_ui/public or the built Pancat frontend, then open: /games/axgate-the-last-gate/ /games/axgate-the-last-gate/?level=1 Select the original practice room, any original level 1–14, or a labelled event checkpoint. Checkpoints alter only validation start conditions; selecting a normal level restores its original starting state. Exit completion stays in the validation menu, without campaign/cutscene transitions. Arrow keys: move, jump, climb, crouch. Shift: walk carefully, hold ledges, pick up/use modules, attack in combat. Up: parry. Down: sheathe. P/Escape: pause. R: restart. Small screens have touch controls. Practice-room access alone stays latched after its pad is pressed; original levels keep original gate events. ASSETS AND DESIGN The existing concepts-v1 gallery is preserved. Its approved 24 designs are the reference; the corrected digital double and cyan employee blade are authoritative. Seven HD atlases contain 508 entries (including explicit empty frames and aliases): employee 231, guard 32, heavy 32, skeleton 26, double 154, commander 30, helper 3. All existing 145 employee poses and ten climb masks are retained. Added artwork covers combat, item use, transitions and stairs. Original dimensions and anchors stay unchanged; art resolution is 4x. Body, weapon, logo banner and effects are separate. The five enemy types retain original AI/health/trap rules. Dungeons and upper control areas use separate material/background sets. Sixteen transparent device/prop assets accompany original-state-driven doors, floors, modules, mirrors and hazards. No new hazard grace period or floor regeneration. Nine story backgrounds, sixteen transparent character/robot poses, reusable props and the existing official title are available in preview.html. Backgrounds, characters and props can be toggled separately; scenes have no campaign triggers. CODE prototype.js: selective asset loading, section lifecycle, input, HUD and completion. validation.js: section/checkpoint definitions and scoped original delayed callbacks. renderer.js: presentation only; room-relative tiles, world-to-camera actors, original sword coordinates, folded/unfolded banner, lights and impact effects. assets/manifest.json: family/frame/tile-state catalog and original-source hashes. assets/story/scenes.json: layered cinematic composition records. Vendor engine and source maps are unchanged. Simulation remains 80 milliseconds. Missing assets fail the static release check or display an identified load error. There is no automatic low-resolution substitution in normal gameplay. PRODUCTION Image API model: gpt-image-2.5-sunburst, high quality, bundled imagegen CLI. Original pose grids plus approved concepts were supplied as references. Chroma keying uses the skill's remove_chroma_key.py; Canvas packing preserves 4x bounds. Prompts, inputs and production inventory: design/axgate-the-last-gate/production-v1/ Final gameplay files are under assets/. Raw API outputs and rejected versions stay in ignored output/imagegen/prince-of-axgate/stage4/. No image API is used at runtime. No credentials, new server API or database changes are included. SOURCE / ATTRIBUTION Engine: https://github.com/oklemenz/PrinceJS Copied from commit ea1a97a (2026-05-22), local reference tmp/PrinceJS. PrinceJS software license: vendor/princejs/LICENSE (Unlicense). Phaser 2.6.2: vendor/phaser.min.js, bundled with PrinceJS, source header retained. MIT license: vendor/phaser-LICENSE.txt. Original atlases, font, animation data and all 14 original maps are retained for engine geometry and reference checks. Normal gameplay uses the new renderer. Upstream describes this project as a Prince of Persia (MS-DOS) reimplementation. Brand reference: https://www.axgate.com/main/ Official SVG: https://www.axgate.com/main/theme/basic/img/logo.svg The banner renderer crops the slogan from the official vector, keeping its wordmark. Generated backgrounds/material: gpt-image-2.5-sunburst, high quality, Image API, imagegen CLI; armor 1024 x 1024, background 1536 x 1024. Generated once during creation; gameplay never calls an image/model API. No credentials are bundled. VERIFICATION From the repository root: uv run python tools/verify_prince_of_axgate.py uv run python tools/verify_axgate_stage4.py uv run python -m unittest discover -s tests -v From web_ui: npm run build Reports and screenshots: output/prince-of-axgate/ (ignored). NEXT STAGE Continuous campaign progression, dialogue, timed cutscene playback and campaign story triggers. Pancat menu/account integration and production deployment remain outside this stage. CAMPAIGN INTEGRATION (2026-09-30) Default URL now opens the title menu; explicit ?level=0..14 retains validation. Local level-entry saving, unlimited time, continuous progression and nine reused Korean story scenes are implemented in campaign.js, story.js and the adapter. Story compositions are shared with preview.html via story-art.js. Dialogue remains editable in assets/story/dialogue.ko.json. Lifecycle checks: uv run python tools/verify_axgate_campaign.py Lifecycle boundary injection is not evidence of full normal-input playthroughs. Production records: design/axgate-the-last-gate/campaign-v1/README.txt AUDIO (2026-10-01) audio.js restores 14 original PrinceJS footsteps, landing, loose-floor and trap effects. Door sounds remain procedural electronic tones in prototype.js. The supplied tmp/music/axgate_the_last_gate_main_teme.mp3 is used only on the title screen at volume 0.30, without looping. Press the title music button to play/pause; this supports browsers that block automatic playback. Entering a campaign or leaving the tab stops playback. Gameplay has no exploration/combat BGM. search.mp3 and fight.mp3 are intentionally not bundled. Original audio bytes are preserved; volume is adjusted at playback only. File sources and SHA-256 hashes: assets/audio/sources.json. Audio load failures are reported without blocking play; title playback and effect loading can be retried. Pause/restart stops active restored effects.