Skip to content

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 ​

  1. Import the assets (third-party packs keep their own licences and are not in the repository):
bash
python tools/import_last_service.py
  1. Open the project in the editor and press Play, or build the game:
bash
cargo run -p kvas_editor --release -- --build games/last_service

The 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, RoomAcoustics on the player; MouseLook, CameraFx on its camera; Flashlight; Door on every door; FlickerLight on lamps; Spinner on the kitchen fan; MonsterAi on the Counter (routes through a graph of passages, sight cone and ray, hearing when you run, searching, opening unlocked doors); GameDirector on "Game" (story state, door locks, checkpoints, music, the dawn ending); GameUI on "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.py cuts 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.

Kvas Engine