Skip to content

LAST SERVICE — игра на Kvas ​

Полная короткая игра в жанре психологического хоррора от первого лица, сделанная целиком на движке и его SDK: главное меню, настройки, сюжет с головоломками, преследование, сохранения, финал и титры. Папка — games/last_service.

Как запустить ​

  1. Скопировать ассеты (сторонние наборы со своими лицензиями в репозиторий не входят):
bash
python tools/import_last_service.py
  1. Открыть проект в редакторе и нажать Play — или собрать игру:
bash
cargo run -p kvas_editor --release -- --build games/last_service

Готовая игра — games/last_service/build/LastService.exe и game.pak.

Сцену можно пересоздать из кода: cargo run -p kvas_engine --example make_last_service.

Управление ​

Клавиша
WASDходьба, Shift — бег, C / Ctrl — присесть
Мышьобзор
Eвзять, использовать, удерживать — долгие действия
Fфонарь
J / Tabжурнал: задача, имена, прочитанные записки
Escпауза: сохранить, настройки, выход в меню

Сюжет (без спойлеров финала) ​

14 ноября 1998 года. Лида приезжает в закрытую придорожную столовую «Перевал», где работала её мать. Свет горит, а мать отвечает из-за стойки голосом двадцативосьмилетней давности. Нужно накрыть стол для трёх пассажиров рейса 17, восстановить питание конторки, прочитать журнал и узнать имена тех, кого «не было».

Как устроена игра ​

  • Скрипты на своих объектах (см. Архитектура скриптов): PlayerController, Interactor, Inventory, RoomAcoustics на игроке; MouseLook, CameraFx на его камере; Flashlight; Door на каждой двери; FlickerLight на лампах; Spinner на вентиляторе кухни; MonsterAi на Счётчике (маршруты по графу проходов, зрение по конусу и лучу, слух при беге, поиск, открывает незапертые двери); GameDirector на объекте «Game» (сюжет, замки дверей, сохранения, музыка, финал на рассвете); GameUI на «UI» (меню, настройки, журнал, щиток, HUD, субтитры, титры).
  • Мир — сцена из отдельных объектов, которые tools/split_world_glb.py вырезает из модели продакшена: объект на зону и материал, мебель поштучно (стулья развёрнуты к столам и толкаются). Каждая часть сталкивается по своим треугольникам (ShapeKind::Mesh), стулья — по выпуклой оболочке. Двери — модели на петлях, щели под потолком и в стенах закрыты, предметы I_* с зонами взаимодействия, свет с мерцанием, дождь и туман, лужи-декали, пространственные звуки; иконки инвентаря отрендерены из моделей предметов (make_item_icons).
  • Камера игрока с шейдерами: VHS, пульс страха (зависит от расстояния до Счётчика), «кровь» при поимке, PS1-дизеринг и туман воспоминаний.
  • Звук: реверберация внутри здания и снаружи разная, раздельные громкости музыки и эффектов, шаги Счётчика — пространственные.
  • Доступность: режим «без преследования», «меньше движения», выбор языка.

Автотест прохождения ​

cargo test -p kvas_engine --test last_service запускает игру без окна: скрипт сам проходит всю историю от меню до титров (scripts/src/autotest.rs) — встаёт у каждого предмета, поворачивается к нему, и тот же луч, что у игрока, должен найти предмет и предложить действие. Так ловятся перекрытые и недоступные предметы.

Kvas Engine