Skip to content

Next Engine

Открытый AI-first движок и набор инструментов для системных одиночных RPG.

Next Engine создаётся для игр, в которых движение, бой, диалоги, квесты, персонажи и изменения мира работают как части одной системы. Игровые решения должны оставлять устойчивые последствия, мир — корректно сохраняться и воспроизводиться, а AI — обогащать игру, не становясь условием её работоспособности.

Статус: ранний bootstrap. В репозитории уже работает детерминированный headless-срез с вводом, командами, RPG-состоянием, эталонной физикой, сохранением и replay, а neutral fixture проходит deterministic validate/cook/publish/activation и снабжает gameplay root authored dialogue/quest/relationship definitions. Portable game root извлекает immutable presentation snapshot с exact mesh/material revisions и проходит B0 reference renderer. Minimal render-content implementation уже включает neutral mesh/material/texture/profile records, deterministic cook/activation, checked-in offline SPIR-V, CPU visible list, Vulkan indexed-indirect draw и declared fallback material. Локальный Windows increment player action/camera завершён со статусом DONE_LOCAL_WINDOWS; реализация добавляет общий для live game и headless scenario ActionMapManifestV1/InputContextStackV1 resolver, authoritative ClosestPoint targeting по exact physics snapshot и ReplayManifestV5 provenance. Typed integer/fixed-point third-person camera использует millidegree/micrometre state и deterministic integer CORDIC. Interactive loop создаёт complete in-memory PresentationSnapshotV2 на каждой 30 Hz fixed-step boundary с bounded catch-up; renderer при любой cadence повторяет последний complete snapshot. Durable same-session checkpoint создаётся на tick 0, затем каждые 30 ticks и forced atomically на suspend/close. Crash может вернуть не более 29 последних in-memory ticks; resume не выполняет wall-time catch-up. Lifecycle retry exact, publication fault откатывает in-memory/durable state, а session store удерживает current+previous generations. Приватный Vulkan B0 преобразует camera state в float view-projection/depth, не делая его gameplay authority. SDL3/ash adapter остаётся Proposed. Windows checkpoint подтверждён локальными host-check, play, persistence-replay, content-package, platform, performance, v1-closure и fresh-output v1-package; v1-closure честно оставляет Linux target в NOT_RUN, поэтому это не R2, shipping или cross-target completion. Следующий Windows package — Semantic UI (NEXT), а накопленные Linux-действия выполняются позже асинхронно. Первый data-only combat package уже проходит общий capability/effect/RPG transaction path. Двухчанковый deterministic streaming с отдельным save owner segment и первый deterministic NPC planner/procedural avatar fallback работают в cooked slice; deterministic Luau package host уже проходит sandbox/budget/state checks. Wasm Component host на pinned Wasmtime проходит N/N−1 negotiation, fuel/memory/capability/state checks и сохраняет обязательный headless fallback. Локальная v1 closure matrix связывает exact project/content/ mechanics/extension roots. Native gate harness уже сохраняет target reports и сравнивает их roots, но same-commit Windows/Linux pair ещё не получена, поэтому native_gate_ready пока не выставлен. Текущая разработка идёт Windows-first; отложенные native Linux действия накапливаются в Linux validation backlog. Название Next Engine временное.

Next Engine — самостоятельный проект. Это не порт OpenGothic и не универсальный движок для любых жанров.

Для каких игр создаётся Next Engine

Продукт сфокусирован на системных одиночных RPG: играх, где персонажи, предметы, фракции, диалоги, квесты, интерактивные объекты и население мира подчиняются согласованным правилам, а не существуют как набор изолированных скриптов.

В основе продукта лежат пять идей:

  • Играбельность важнее инфраструктурной церемонии. Короткий путь от изменения к работающему игровому циклу — главный приоритет разработки.
  • Мир помнит действия игрока. Изменения состояния атомарны, сохранения версионируются, а replay позволяет воспроизвести внешние команды и найти первую причину расхождения.
  • AI усиливает игру, но не владеет ею. Агентный AI, модели движения, LLM, ASR и TTS подключаются через ограниченные контракты. Без сети, модели или отдельного ai-host обязательный игровой цикл продолжает работать через детерминированный fallback.
  • Модификации — часть продукта, а не надстройка. Собственные механики движка и пакеты сообщества должны использовать один публичный SDK, одни проверки полномочий и один путь изменения мира.
  • Физическое воплощение персонажа отделено от его RPG-роли. Архитектура связывает generic Character, физический архетип, навыки движения и AI, не превращая конкретную модель, physics backend или ECS в публичный контракт.

Целевая планка v1

V1 должна дать разработчику возможность:

  1. запустить один подготовленный проект на Windows x86_64 и Linux x86_64;
  2. пройти связанный цикл движения, взаимодействия, боя, диалога и квеста;
  3. сохранять мир, продолжать игру после загрузки и воспроизводить записанный поток команд;
  4. запускать тот же authoritative runtime интерактивно и без renderer через deterministic headless;
  5. добавлять контент и механики пакетами на data-only, Luau и Wasm уровнях;
  6. использовать физических персонажей и опциональные learned motor policies с процедурным fallback;
  7. разрабатывать, проверять и инспектировать neutral content локальными инструментами;
  8. запускать обязательный игровой цикл offline — без LLM, сети и внешнего AI-процесса.

Полноценный редактор, мультиплеер, консоли, мобильные платформы, runtime-обучение моделей и обязательная поставка Gothic importer не входят в v1.

Что уже работает

Текущий bootstrap реализует фундамент, на котором можно наращивать игровой цикл:

  • Rust workspace с закреплённым toolchain 1.93.0 и unsafe_code = "forbid";
  • engine-owned идентификаторы, канонические команды и события, command ledger, immutable snapshots и versioned manifests;
  • production-путь от normalized keyboard/mouse controls через общий ActionMapManifestV1/InputContextStackV1 resolver и device-independent PlayerActionFrameV1 до persisted current/next ingress assignment, проверенной команды и фиксированного simulation tick; live game и headless scenario используют один resolver;
  • транзакционный RPG-срез для диалога и квеста, отношений, передачи предметов, изучения навыков и состояния интерактивных объектов;
  • целочисленный reference-контроллер grounded capsule, статические Box colliders и непрерывность контактов Begin/Persist/End;
  • optional экспериментальный PhysX 5.9.0 backend для того же grounded-capsule сценария за safe engine-owned boundary; reference остаётся default и oracle;
  • authoritative interaction targeting: assigned semantic action реконструирует B0 ClosestPoint query из persisted ingress assignment, профиля и exact authoritative physics snapshot, а выбранный affordance меняет RPG-состояние только через Outcome WorldCommand; camera/render данные не участвуют в выборе;
  • authoritative-query pickup и equipment: pickup выбирает предмет exact B0 query, после чего отдельные Inventory и Equipment aggregates атомарно принимают его, переводят proxy в collected state и назначают main-hand slot;
  • bounded NPC interaction: тот же semantic interact выбирает authored quest-giver через exact B0 query, атомарно переводит dialogue и quest и обновляет отношение NPC→player через Outcome WorldCommand;
  • canonical project/schema/content/world manifests, deterministic exact resolver и CC0 neutral fixture из scene, collider и RPG definition records; cooker публикует content-addressed generation атомарно, а production loader повторно проверяет lock, hashes, schema/reference closure и blobs;
  • content-authored dialogue, quest, relationship и interaction definitions, собранные в обычный data-only package с exact mechanics lock и capability grants; headless --project <store> --lock <hash> запускает тот же authoritative сценарий из production activation path без ai-host;
  • content-authored melee ability в ordinary package org.nextengine.core.combat: equipped training item публикует planner-visible affordance, immutable contact-bound EffectRequestV1 компилируется в AdjustCharacterResource, а health commit проходит через тот же RpgCommandV1 и capability grants, что доступны community packages;
  • общий game/headless activation path с exact project lock и совпадающими authoritative state/ledger roots; game публикует immutable PresentationSnapshotV2, где floor, capsule, switch, item и NPC ссылаются на exact mesh/material revisions и presentation bounds;
  • engine-owned neutral mesh/material/texture records и один B0 profile собираются в canonical render-content catalog; cooker публикует проверяемые catalog и derived meshlet payloads, а activation отклоняет missing, corrupt или extra render artifacts до запуска;
  • engine-owned platform/input lifecycle contracts, детерминированное presentation extraction и reference B0 frame plan с CPU visible list, indexed-indirect draws, declared material fallback и изоляцией device loss; typed integer/fixed-point third-person camera входит в PresentationSnapshotV2 и B0 frame plan; live application создаёт только complete in-memory 30 Hz fixed-step snapshots, desktop renderer может повторять последний snapshot при любой cadence, а приватный Vulkan path преобразует camera state в float view-projection и depth attachment; offline vertex/fragment SPIR-V, source и provenance хранятся вместе в repository, а SDL3 0.18.4 и ash 0.38.0 остаются только в приватном experimental adapter crate и не протекают в публичные contracts;
  • bounded active-run durability: same-session checkpoint на tick 0, каждые 30 ticks и forced atomically на suspend/close; crash rollback ограничен 29 ticks, resume не догоняет wall time, exact lifecycle retry и publication rollback сохраняют prior generation, а session store удерживает только current+previous session generations;
  • атомарные поколения сохранений, восстановление, replay и проверка совпадения authoritative state roots;
  • deterministic two-chunk admission: immutable worker results сходятся к canonical staging group, validated group публикуется атомарно, прежний chunk проходит Quiescing → Unloaded, а pending transition сохраняется отдельным nextengine.world-services owner segment и реконструируется после load;
  • deterministic NPC planner читает immutable revision/hash-bound RPG, mechanics и contact projections, выбирает planner-visible affordance в canonical order и предлагает обычный WorldCommand; при отсутствии ai-host/model route публикуется procedural idle/locomotion/melee animation projection, не имеющая обратной записи в simulation;
  • private Luau 728 adapter через pinned mlua 0.12.0 выполняет package callbacks в read-only sandbox: scripts получают только capability-scoped immutable queries и typed proposals, а instruction/allocation/live-memory/ host-call/command budgets, atomic proposal discard, persisted package state и three-strike circuit проверяются локальными product checks;
  • private Wasmtime 45.0.0 adapter исполняет engine-owned WIT v3/v2 Component worlds без ambient WASI: exact component hash, N/N−1 compatibility selection, fuel per call/tick, linear-memory/table/instance limits, opaque resource handles, required/optional startup и canonical plugin state проверяются до общего mechanics/RPG command path;
  • переносимый headless composition root и локальные product checks;
  • изолированный экспериментальный путь train → ONNX → inference для проверки локального ML toolchain.

Это ещё не законченная игра: текущий play проверяет ограниченный neutral сценарий движения, столкновения, pickup/equip, melee damage, активации switch, один authored NPC dialogue/quest transition и переход во второй chunk с возвратом. Reference physics profile пока ограничен upright capsule, статическими Box colliders и exact B0 ClosestPoint query. Minimal B0 mesh/material/texture path и Windows-local third-person camera increment реализованы, но оба пока обслуживают небольшой engine-owned fixture; Semantic UI (NEXT), controller profile, skeleton, animation, audio и достаточный lawful representative slice ещё отсутствуют. SDL3/ash остаётся Proposed; локальная Windows-готовность increments не закрывает paired same-commit compare или representative Linux hardware-GPU evidence.

Быстрый старт

Нужен Rust 1.93.0; версия закреплена в rust-toolchain.toml.

Запустить текущий headless-срез:

cargo run -p next_headless

# Запустить production live-session path и закрыть его сразу после tick-0 checkpoint
cargo run -p next_headless -- --live-ticks 0

# Либо активировать exact ранее приготовленный content store
cargo run -p next_headless -- --project <cooked-store> --lock <composition-lock-sha256>

Запустить тот же cooked slice через game composition root и reference presentation path:

cargo run -p next_game
cargo run -p next_game -- --project <cooked-store> --lock <composition-lock-sha256>

# Experimental SDL3/ash Vulkan B0 window; shipped status требует Windows/Linux checks
cargo run -p next_game --features desktop-sdl-ash -- --interactive

Desktop B0 adapter нормализует keyboard и relative mouse controls в engine-owned PlatformEventV1. Общий ActionMap/context resolver преобразует их в те же semantic actions, которые использует headless scenario:

Control Действие
W / S движение по продольной оси
A / D движение по поперечной оси
Q pickup
R equip/use
E interact
F melee
relative mouse orbit third-person camera
F11 или Alt+Enter fullscreen

Текущий B0 movement profile принимает одну canonical WASD-ось на action frame; resolver квантует её детерминированно. Adapter также обрабатывает focus/minimize/restore/resize. Surface/device loss использует bounded recreation без записи в authoritative state. Отсутствующий SDL runtime, Vulkan loader, B0 GPU capability или исчерпанный recovery budget возвращают стабильный diagnostic code.

Platform admission проверяет непрерывную source_sequence отдельно для каждого bounded source: exact duplicates схлопываются, identity collision отклоняется, а gap возвращает PLATFORM_EVENT_SEQUENCE_GAP. Весь lifecycle batch проходит preflight до изменения source cursors, simulation tick или session state; stale close request отклоняется до forced checkpoint и не публикует durable поколение.

Для каждого frame adapter строит детерминированный CPU visible list из exact snapshot/catalog revisions, загружает neutral geometry и RGBA8 textures в private Vulkan resources и исполняет conventional indexed-indirect B0 draws. Pipeline создаётся из проверяемых checked-in SPIR-V modules; отсутствующий material revision выбирает exact fallback из активного B0 profile. Этот путь локально проходит Windows content-package, platform, performance и clean v1-package; Linux validation остаётся отдельной асинхронной задачей.

Запустить основные локальные проверки:

# Ввод → pickup/equip → player/NPC melee → dialogue/quest → chunk round-trip
cargo run -p xtask -- play

# Гравитация, столкновения с полом/стеной и жизненный цикл контактов
cargo run -p xtask -- physics-collision

# Сохранение → восстановление → replay и fallback повреждённого поколения
cargo run -p xtask -- persistence-replay

# Neutral fixture + render catalog → deterministic cook → publish → activation
cargo run -p xtask -- content-package

# game/headless parity, SDL event/lifecycle probe и Vulkan device-loss recovery
cargo run -p xtask --features desktop-sdl-ash -- platform

# Deterministic frame-plan stability и bounded render-planning hot path
cargo run -p xtask -- performance

# Форматирование, clippy, тесты workspace и архитектурные границы
cargo run -p xtask -- host-check

# Та же проверка с desktop feature graph для xtask, verification и game
cargo run -p xtask --features desktop-sdl-ash -- host-check

# Полная локальная closure matrix с exact hashes и честными target NOT_RUN
cargo run -p xtask -- v1-closure

Команды выводят компактный машиночитаемый результат. host-check — канонический широкий локальный fast check перед передачей изменения. Если сам xtask собран с desktop-sdl-ash, его дочерние clippy/test запускаются с явными package-qualified features xtask/desktop-sdl-ash, next_verification/desktop-sdl-ash и next_game/desktop-sdl-ash; несвязанные экспериментальные features через --all-features не включаются.

Opt-in Thin LTO/PGO не включены в default release. Воспроизводимый report-only workflow, обязательные R2–R5 prerequisites и fallback описаны в docs/development/performance-codegen.md. Там же отдельно описан one-shot allocator-counter admission: pinned Windows source/IR/ASM/backend proof и candidate-7 не являются Thin LTO/PGO promotion; неполный proof или failed overhead оставляет metric NOT_RUN.

На native Windows/Linux target после зелёной matrix собирается атомарный distribution directory с game, headless, exact cooked project, PackageManifestV3 в package.manifest.jcs и обязательными LICENSE, NOTICE, THIRD_PARTY_NOTICES.md, MIGRATION_PROVENANCE.md. Manifest хранит sorted полный inventory payload-файлов с SHA-256 (сам canonical manifest проверяется отдельно по hash из target report), target ABI, direct runtime libraries, maximum required GLIBC и внешние prerequisites.

R1 runtime baseline фиксирован следующим образом:

  • Windows x86_64 MSVC использует dynamic system VC++ x64 runtime, системный Vulkan loader vulkan-1.dll и установленный пользователем Vulkan ICD/GPU driver;
  • Linux x86_64 GNU использует Ubuntu 22.04 / glibc 2.35 baseline, системный loader libvulkan.so.1, установленный пользователем ICD/GPU driver и активную X11 либо Wayland desktop session;
  • SDL3 входит статически; Vulkan loader и GPU driver в package не включаются.

Перед публикацией команда запускает именно скопированные release binaries из package/bin с очищенным environment и изолированными state/home/temp directories: headless --live-ticks 0 проходит production live-session tick-0/checkpoint/close path, затем game выполняет один bounded interactive Vulkan frame. Валидатор сверяет exact game/headless authoritative state и ledger roots, ожидаемый snapshot/host-object count и неизменность package inventory; disposable sibling smoke state удаляется до атомарной публикации. Каждый smoke ограничен 30 секундами. Ошибки runtime profile, отсутствующая dependency, неподдерживаемый ABI и timeout возвращают соответственно NATIVE_GATE_PACKAGE_RUNTIME_PROFILE_INVALID, NATIVE_GATE_PACKAGE_RUNTIME_DEPENDENCY_MISSING, NATIVE_GATE_PACKAGE_RUNTIME_ABI_UNSUPPORTED и NATIVE_GATE_PACKAGE_SMOKE_TIMEOUT:

cargo run --locked -p xtask -- v1-package --output dist/nextengine-v1

Старые локальные package directories не мигрируются и не перезаписываются: удалите или выберите новый output и пересоберите их как PackageManifestV3.

На macOS команда fail-closed возвращает TARGET_PACKAGE_REQUIRES_NATIVE_WINDOWS_OR_LINUX_X86_64.

Полный R1 native gate запускается вручную на двух native x86_64 hosts с Vulkan-capable driver. Оба checkout должны указывать на один и тот же clean commit, использовать закреплённый Rust 1.93.0 и неизменённый Cargo.lock. Cross-compilation, WSL-only run или перенос отчёта с dirty worktree не заменяют native target evidence.

Основной developer host — Windows. Ожидание Linux-машины не блокирует несвязанные Windows work packages: требующие native Linux host проверки добавляются в Linux validation backlog и выполняются позже пакетами на зафиксированных checkpoints. До фактического run соответствующий Linux result остаётся NotRun(reason), а target/stage claim не объявляется.

Полный target checkpoint запускается одной командой:

cargo run --locked -p xtask --features desktop-sdl-ash -- native-gate-run --output artifacts/native-gate/<commit>

Актуальная накопительная очередь, Linux preflight, полный состав переносимого bundle, failure policy и команда compare находятся только в Linux validation backlog. Успешный compare двух same-commit target reports выставляет native_gate_ready = true, но не закрывает автоматически весь R1.

Экспериментальный PhysX backend не входит в default features и не нужен этим командам. На Windows x86_64 или Linux x86_64 локальный SDK 5.9.0 задаётся через NEXTENGINE_PHYSX_SDK_DIR; сборка ничего не скачивает:

cargo run -p xtask --features physx -- physics-collision --backend compare
cargo run -p xtask --features physx -- persistence-replay --backend physx
cargo run -p xtask --features physx -- physics-backend-parity

Для portable проверки safe wrapper без SDK используется --features physx-mock. PhysX остаётся Proposed, не поддерживается как product backend на macOS и не переключается автоматически после activation.

Опциональный ML smoke требует Python 3.12 и uv:

uv run --project lab python -m next_lab doctor
uv run --project lab python -m next_lab smoke --device auto

Он проверяет только локальную цепочку обучения, экспорта и inference. Это не проверка качества игровой policy и не замена продуктовым checks. Подробнее: локальная проверка ML toolchain.

Как устроен продукт

Любой источник действия — игрок, NPC, скрипт, плагин, инструмент или AI — предлагает команду, но не получает прямой доступ к изменяемому миру:

input / AI / package
  → command proposal
  → schema + capability + precondition validation
  → atomic WorldCommand transaction
  → committed DomainEvent
  → immutable gameplay and presentation projections

Такой путь нужен не ради абстракции как таковой. Он позволяет:

  • одинаково выполнять игру в game и headless;
  • не связывать корректность симуляции с FPS, wall clock, сетью или порядком завершения фоновых задач;
  • сохранять только engine-owned authoritative state;
  • безопасно отклонять повреждённые saves, packages и model output до частичного изменения мира;
  • заменять renderer, physics backend, AI provider и другие adapters без смены продуктовых контрактов.

Публичные контракты живут в crates/contracts. ECS storage, OS/window objects, vendor types, importer structures, database connections и model sessions остаются деталями реализации.

Структура репозитория

Путь Роль сегодня
crates/contracts Публичные ID, commands/events, input, manifests, snapshots, neutral render content, persistence и physics/RPG contracts
crates/runtime Admission, command ledger, fixed-stage execution и атомарные tick transactions
crates/application Production coordinator, 30 Hz live loop, bounded durable checkpoint/restart и exact lifecycle publication
crates/rpg Generic RPG state и валидируемые доменные переходы
crates/mechanics Public-package host: immutable affordances/effect requests → typed RPG commands
crates/script-luau Private deterministic Luau sandbox и package-state adapter
crates/plugin-host Engine-owned WIT v3/v2 и private bounded Wasmtime Component adapter
crates/agent Canonical NPC planner и procedural avatar fallback projection
crates/world Deterministic two-chunk staging/admission и world-service save segment
crates/physics-api Детерминированный reference physics world и grounded capsule
crates/physics-physx Safe optional PhysX adapter за engine-owned physics API
crates/physics-physx-ffi Единственная ADR-033 allowlisted native FFI-граница
crates/assets Copy-on-write save/content generations, atomic publication, bounded load и current+previous session-generation retention
crates/project Exact resolver, neutral cooker/catalog publication и production project activation
crates/platform Backend-free platform capabilities, lifecycle normalization и headless target
crates/player Device-independent ActionMap/InputContext resolution для live game и headless scenario
crates/presentation Immutable revision-bound extraction в PresentationSnapshotV2
crates/render Backend-neutral B0 boundary, exact catalog resolution и deterministic indexed frame plan
crates/desktop-sdl-ash Приватный Proposed SDL3/ash Vulkan adapter за ADR-003 boundary
crates/verification Neutral fixtures, state roots, headless replay и product scenarios
apps/headless Текущий переносимый composition root без окна и renderer
apps/game Portable game composition root; optional experimental desktop adapter
tools/xtask Локальные product checks и проверка архитектурных границ
lab Изолированные ML-эксперименты; не часть игрового runtime

Целевая архитектура также предусматривает обязательные roots game, headless и tools, а ai-host и displayless capture оставляет опциональными.

Платформы

  • Windows x86_64 и Linux x86_64 — целевые shipping-платформы v1.
  • Apple Silicon macOS — поддерживаемый developer host для portable Rust, tooling и ограниченных ML smoke tests, но не обещание поставки игры.

Корректность обязательного gameplay не должна зависеть от конкретной shipping-платформы, GPU или доступности внешнего сервиса.

Архитектурные документы

Архитектура — источник продуктовых контрактов, но статус Accepted у документа не означает, что соответствующая возможность уже реализована.

Начать чтение стоит с:

  1. продуктового контракта;
  2. системной архитектуры;
  3. индекса архитектуры и статусов решений;
  4. глоссария;
  5. playable slice и product checks.

Порядок дальнейшей реализации, этапы, exit criteria и текущие blockers собраны в долгосрочном roadmap. Roadmap является planning document и не заменяет нормативные SPEC/ADR.

Семантическое изменение принятого решения оформляется коротким ADR и обновляет затронутые спецификации. Процесс разработки остаётся product-first: см. ADR-030.

Контент, importer и лицензирование

Код нового движка распространяется по Apache-2.0. Происхождение перенесённых архитектурных документов и их MIT notice описаны в истории переноса и уведомлениях о сторонних материалах.

Gothic importer может разрабатываться локально в игнорируемом incubator/gothic-importer/, но остаётся отдельным репозиторием и процессом. Он не является Cargo dependency и взаимодействует с движком только через versioned neutral artifacts.

Игровые установки, импортированные или защищённые assets, datasets, checkpoints, сгенерированные модели, captures, caches и secrets не должны попадать в этот репозиторий.

About

An AI-first open-source engine and toolchain for systemic single-player RPGs.

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages