Ashes Beyond — Web Edition
A complete, self-contained first-person browser horror game built with React 19, Vite 8, Three.js, CSS, and the Web Audio API. It is packaged as a static Wasmer Edge app.
Play locally
Requirements: Node.js 22+ and npm.
npm install
npm run dev
Open the URL Vite prints, choose a difficulty, and click Enter the House. For the production build:
npm run build
npm run preview
Controls
W A S D— move- Mouse — look
Shift— sprintCorCtrl— crouch quietlyE— interact, read, take, unlock- Left click — attempt a knife backstab (only works from behind)
Esc— pause and release the mouse
The game is designed for a desktop browser and headphones.
Objective and endings
Restore the downstairs fuse box, locate the blue-moon lens upstairs, align the moon dial, recover the main-door key from Arvind's casket, and escape. Collect all four victim echoes and burn the grimoire before leaving for the true ending. Running out of days produces the sacrifice ending.
Difficulty controls Vrinca's speed and sight range and how many days remain. Every mode except Blue Moon can earn one bonus day by releasing all four victim echoes.
Architecture
src/game/world.js— two-floor house, locks, items, notes, puzzles, patrol pointssrc/game/logic.js— collision, line-of-sight, BFS pathfinding, interaction selectionsrc/game/AshesEngine.js— Three.js renderer, first-person controller, Vrinca AI, game loopsrc/game/audio.js— procedural eerie music, wind, heartbeat, and effectssrc/game/story.js— story, difficulties, objectives, and endingssrc/game/GameView.jsx— HUD, pause flow, narrative cards, ending screens
All visuals and audio are generated at runtime. No third-party art, music, models, or texture files are required.
Test
npm test
npm run build
Deploy to Wasmer
The repository includes app.yaml and wasmer.toml. After building and signing into Wasmer:
wasmer deploy --non-interactive
The intended production app is aadityarajvarshney4/ashesbeyond at https://ashesbeyond.wasmer.app.