LAST SERVICE — a game made with Kvas
A short but complete first-person psychological horror game built entirely with the engine and its SDK: main menu, options, a story with puzzles, a chase, saves, an ending and credits. Folder: games/last_service.
Running it
- Import the assets (third-party packs keep their own licences and are not in the repository):
python tools/import_last_service.py- Open the project in the editor and press Play, or build the game:
cargo run -p kvas_editor --release -- --build games/last_serviceThe game is games/last_service/build/LastService.exe with game.pak. The scene is generated by cargo run -p kvas_engine --example make_last_service.
Controls
WASD walk, Shift run, C/Ctrl crouch, mouse look, E use (hold for long actions), F flashlight, J/Tab journal, Esc pause.
How it is built
- Scripts on their own objects (see Script architecture):
PlayerController,Interactor,Inventory,RoomAcousticson the player;MouseLook,CameraFxon its camera;Flashlight;Dooron every door;FlickerLighton lamps;Spinneron the kitchen fan;MonsterAion the Counter (routes through a graph of passages, sight cone and ray, hearing when you run, searching, opening unlocked doors);GameDirectoron "Game" (story state, door locks, checkpoints, music, the dawn ending);GameUIon "UI" (menus, options, journal, the power panel, HUD, subtitles, credits). - The world is a generated scene built from separate objects that
tools/split_world_glb.pycuts out of the production mesh: one object per zone and material, furniture piece by piece (chairs face their tables and can be pushed). Every part collides with its own triangles (ShapeKind::Mesh), chairs with their convex hull. Doors are hinged models, the diner's ceiling and wall gaps are closed,I_*usable things, flickering lights, rain and mist, puddle decals, positional sounds; inventory icons are rendered from the item models (make_item_icons). - The player's camera carries shaders: VHS, a fear pulse that follows the Counter's distance, blood when caught, PS1 dither, a memory haze.
- Sound: different room echo inside and outside, separate music and effects volumes, positional footsteps of the Counter.
- Accessibility: a no-chase mode, reduced motion, language choice.
Automated playthrough
cargo test -p kvas_engine --test last_service runs the game without a window; the script plays the whole story from the menu to the credits (scripts/src/autotest.rs). At each step it stands next to the thing, turns to it, and the same ray the player uses must find it and offer an action.