No description
Find a file
Игорь Федосеев f42679fe62 fix: stabilize gameplay and IDE source writes
Trace shots against current map geometry instead of stale render depth. Preserve outline counters across volatile pixel calls and freeze gameplay on cinematic, transition and death ticks.

Clamp packed HP before narrowing and match legacy archetype rules. Publish IDE saves atomically; failed saves block file switches and builds. Drain compiler output while hidden.

Verify runtime/editor builds, 112 editor checks, 148 ASM checks and live preview parity. Record remaining stages in docs/STABILIZATION.md.
2026-10-31 21:56:54 +03:00
assets feat: complete engine and editor subsystems (Stages 1-5 from TODO_ARTEM) 2026-10-22 16:24:22 +03:00
docs fix: stabilize gameplay and IDE source writes 2026-10-31 21:56:54 +03:00
editor fix: stabilize gameplay and IDE source writes 2026-10-31 21:56:54 +03:00
examples/cutscene_demo feat: complete engine and editor subsystems (Stages 1-5 from TODO_ARTEM) 2026-10-22 16:24:22 +03:00
graphify-out feat: initial commit of EBLAN ENGINE 3D, EblanStudio editor, documentation and tooling 2026-10-20 23:46:36 +03:00
include fix: stabilize gameplay and IDE source writes 2026-10-31 21:56:54 +03:00
tests fix: stabilize gameplay and IDE source writes 2026-10-31 21:56:54 +03:00
tools fix: stabilize gameplay and IDE source writes 2026-10-31 21:56:54 +03:00
.gitignore feat: initial commit of EBLAN ENGINE 3D, EblanStudio editor, documentation and tooling 2026-10-20 23:46:36 +03:00
AGENTS.md feat: complete Game Studio IDE, entity archetypes, combat system, and standalone exporter 2026-10-22 19:44:39 +03:00
build.bat feat: complete engine and editor subsystems (Stages 1-5 from TODO_ARTEM) 2026-10-22 16:24:22 +03:00
engine.exe fix: stabilize gameplay and IDE source writes 2026-10-31 21:56:54 +03:00
main.asm feat: complete Game Studio IDE, entity archetypes, combat system, and standalone exporter 2026-10-22 19:44:39 +03:00
main.obj fix: stabilize gameplay and IDE source writes 2026-10-31 21:56:54 +03:00
README.md feat: complete engine and editor subsystems (Stages 1-5 from TODO_ARTEM) 2026-10-22 16:24:22 +03:00
run_editor.bat feat: initial commit of EBLAN ENGINE 3D, EblanStudio editor, documentation and tooling 2026-10-20 23:46:36 +03:00
TODO_ARTEM.md feat: complete engine and editor subsystems (Stages 1-5 from TODO_ARTEM) 2026-10-22 16:24:22 +03:00

EBLAN ENGINE 3D

Выделенный независимый модульный игровой 2.5D движок на чистом x86 Ассемблере (MASM32)
Разработан для удобного создания ретро-игр (Wolfenstein 3D / Doom style) и комфортной совместной разработки с AI-агентами.


⚡ Особенности

  • 100% чистый ассемблер (x86 MASM32): без сторонних зависимостей, DirectX, OpenGL или C-рантаймов.
  • Программный рендеринг (Software DIBits Raycaster):
    • 320x240 внутренний буфер кадра, масштабируемый до 1280x960 через StretchDIBits.
    • DDA-трассировка лучей (320 лучей на кадр, угол обзора ~67.5°).
    • Текстурирование стен (128x128 32-bit BGRA).
    • Коррекция эффекта рыбьего глаза (fish-eye correction).
    • Глубинное затенение (дистанционный туман) и раздельное затенение граней стен для объема.
    • Поддержка трехмерных билборд-спрайтов: текстурирование, сортировка far-to-near, z-буферизация (depthBuffer), хромакей-прозрачность, масштаб.
  • Процедурные текстуры из коробки: генерируются на лету при старте (кирпич, дерево, камень, металл, двери, колонны, стекло, мрамор) — движок работает автономно без внешних файлов.
  • Внешний пак текстур (опционально): assets/textures/texturepack.bin (16 слотов 128×128 BGRA + заголовок EBTX) перекрывает процедурные. Генерация из атласа KAZIK: python tools\make_texturepack.py.
  • Интерактивная карта и физика:
    • Сетка 32x32, гладкое скольжение вдоль стен при столкновениях.
    • Интерактивные двери (открытие/закрытие по клавише E).
    • Перемещение на W/A/S/D (включая стрейф в стороны) + спринт на Shift.
    • Поворот камеры на Стрелочки влево/вправо.
  • 2D UI Оверлей и Радар:
    • Встроенный растровый шрифт 8x8 (вывод строк, чисел с тенью).
    • Топ-даун радар/миникарта с отображением игрока, конуса взгляда и стен (переключение на M).
    • Счетчик FPS со стабильным 60 FPS локером (timeBeginPeriod).

🚀 Быстрый старт и сборка

Сборка одной командой

Запустите файл build.bat:

build.bat

Скрипт автоматически найдет установленный MASM32 (в D:\MASM32, C:\masm32, F:\MASM32) или MSVC BuildTools (ml.exe и link.exe) и соберет исполняемый файл engine.exe.

Запуск

engine.exe

🎮 Управление в демо-уровне

Клавиша Действие
W / S Движение вперед / назад
A / D Стрейф (шаг) влево / вправо
Стрелочки влево / вправо Поворот камеры
Shift Спринт (ускорение)
E / Пробел Взаимодействие (открыть/закрыть дверь перед собой)
M Включить/выключить миникарту (радар)
C Запустить или повторить кат-сцену текущей карты
Tab Пропустить кат-сцену
Escape Выход из игры


🎨 Визуальный редактор уровней (EblanStudio)

Движок оснащен нативным высокопроизводительным визуальным редактором уровней в стиле Unity / Godot 4:

  • Написан на C++17 + Dear ImGui + DirectX 11.
  • Запуск в 1 клик через run_editor.bat или editor/editor.exe.
  • Мгновенный плейтест (F5): редактор создаёт временную копию связанных карт и ресурсов и запускает engine.exe с выбранной стартовой картой. Несохранённые изменения попадают в копию; исходные карты и путь текущего файла не меняются.
  • Undo/Redo (Ctrl+Z / Ctrl+Y) — история до 64 действий (сетка, спавн, цвета, спрайты).
  • Кат-сцены (F6) — таймлайн камеры, поворотов, субтитров, WAV, затемнений и переходов. Правки сцены также поддерживают Undo/Redo.
  • Игровой вид в редакторе — режимы «Рядом», «Игровой вид» и «Карта». Изображение рисует тот же ASM-рендерер, что и игра; изменения стен, спрайтов, цветов и импортированных текстур видны без F5. Кликните по игровому виду для осмотра: WASD, стрелки, Shift; правая кнопка мыши поворачивает камеру. Обзор не меняет спавн или ключи кат-сцены.
  • Файловые диалоги Windows: Ctrl+O (открыть), Ctrl+S (сохранить), Ctrl+Shift+S (сохранить как).
  • Инструменты:
    • Кисть [B]: рисование стен выбранного типа (Кирпич, Дерево, Камень, Металл, Дверь, Колонна, Стекло, Мрамор).
    • Ластик [E]: очистка ячеек карты (или ПКМ на холсте).
    • Заливка [F]: Flood Fill замкнутых областей карты.
    • Точка спавна игрока [P]: клик для перемещения спавна игрока и ползунок угла обзора.
    • Спрайты [S]: расстановка трехмерных объектов/билбордов (фонари, бочки, статуи), перетаскивание мышью по холсту.
    • Инспектор спрайтов: позиция (суб-тайл), слот текстуры (1..15), масштаб (0.25x-4x), удаление.
    • Инспектор свойств: настройка цветов потолка и пола в реальном времени, угла старта.
    • Навигация: масштабирование колесиком мыши (Zoom), панорамирование зажатием средней кнопки мыши (MMB Pan).

Сборка редактора:

cd editor
build_editor.bat

📁 Структура проекта

  • main.asm — точка входа, цикл сообщений Win32, таймер 60 FPS, оркестрация кадра.
  • run_editor.bat — запуск визуального редактора EblanStudio.
  • editor/ — исходники и билд-скрипт визуального C++ Dear ImGui редактора.
    • editor/src/level_format.h — бинарный протокол карты (EBLN).
    • editor/src/editor_app.h / editor_app.cpp — логика UI, холста, палитры, спавнов и запуска плейтеста.
    • editor/src/main.cpp — DirectX 11 окно и интеграция Dear ImGui.
    • editor/build_editor.bat — компиляция редактора через MSVC BuildTools.
  • include/engine_defs.inc — размеры экрана, константы углов, цвета, коды клавиш, структуры.
  • include/engine_data.inc — видеобуфер screenBuffer, z-буфер, координаты игрока, сетка карты, текстуры.
  • include/engine_math.inc — генератор таблиц синусов/косинусов через FPU, RNG, 16.16 math.
  • include/engine_map.inc — хранилище карты, загрузчик assets/map.dat, коллизии, двери.
  • include/engine_textures.inc — встроенный процедурный генератор текстур стен.
  • include/engine_input.inc — опрос клавиатуры через GetAsyncKeyState.
  • include/engine_physics.inc — физика игрока, стрейф, скольжение по стенам.
  • include/engine_raycaster.inc — ядро лучевого 2.5D рендера и отрисовка спрайтов.
  • include/engine_render2d.inc — примитивы (DrawPixel, Rect, Outline), шрифт 8x8, миникарта.
  • include/font8x8.inc — битовые маски ASCII-символов.
  • AGENTS.md — подробное руководство для AI-агентов по написанию новых игр на этом движке.

Переходы и проверка первых трёх этапов

Карты новых сохранений используют EBLN v4; существующие v1/v2/v3 продолжают читаться. Связанные .dat лежат в одной папке. В портале задаётся ASCII-имя файла до 31 символа, целевой спавн, угол и затемнение. На карту доступно до 16 переходов. Заливка учитывает этот лимит целиком; удаление клетки удаляет её триггер. Чёрный пол и потолок поддерживаются.

Порталы имеют отдельную текстуру и не занимают слот фонаря. Первый импорт изображения создаёт недостающие папки и пакет со стандартными текстурами в остальных слотах. Повреждённый пакет не перезаписывается импортом; ошибка показывается в строке состояния. Неудачный переход сохраняет текущую комнату и показывает сообщение в игре.

Проверки без изменения карт проекта:

python tools\test_regressions.py

Для сохранения тестовых кадров добавьте --keep. Нужны MASM32, MSVC BuildTools и Windows SDK.

Кат-сцены: этапы 4 и 5

В EblanStudio нажмите F6 и добавьте команды кнопками таймлайна. Для движения камеры укажите точку на карте и длительность в кадрах (60 кадров = секунда). Поворот, движение, субтитры и затемнение можно запускать одновременно. Ромбы перетаскиваются по времени; список «Команда» позволяет выбрать события с одинаковым временем. Параметры выбранной команды редактируются справа. Конец сцены добавляется автоматически.

«При входе» включает автозапуск после загрузки комнаты. Кнопка «Предпросмотр» и ползунок кадра показывают пролёт в игровом виде редактора, включая субтитры, чёрные полосы и затемнение. На карте одновременно видна траектория. Выбор «Камера сцены» возвращает вид к таймлайну после свободного осмотра. F5 запускает полную игру с временной копией карт и звуков. Для команды перехода сначала создайте портал, затем выберите его в инспекторе. WAV можно импортировать через меню ассетов; имя файла должно быть ASCII.

Камера движется линейно между точками, поворачивается по кратчайшей дуге и во время пролёта проходит сквозь стены. Конечные точки должны лежать в свободных клетках. Доступна одна сцена на карту, до 128 команд и 32 строк по 95 символов CP1251. На экране помещаются 3 строки субтитров по 38 символов. Звуки используют один канал: новый WAV заменяет предыдущий, завершение или пропуск сцены останавливает его. Tab возвращает управление в текущей точке камеры.

Готовый пример: examples/cutscene_demo/README.md. После сборки запустите examples\cutscene_demo\run_demo.bat: вступление с русскими субтитрами, WAV и затемнением переводит камеру во вторую комнату. Пример хранится отдельно от основных карт проекта.

Предпросмотр останавливается на команде перехода в другую комнату; цепочка комнат и игровой ввод проверяются через F5. F5/F6 работают при фокусе интерфейса и текстовых полей. Ошибка запуска показывается отдельным сообщением. При старте редактор открывает карту проекта относительно своего файла, поэтому запуск из другой рабочей папки не ломает пути.

Формат v4 и параметры команд описаны в AGENTS.md и архитектуре движка. Сценарии регрессии также проверяют сохранение/загрузку трека, повреждённые команды, Undo/Redo, упаковку WAV для F5, горячие клавиши при фокусе в интерфейсе, покадровое совпадение состояния C++ с ASM, передачу кадров в DX11 и точное совпадение пикселей игрового вида с движком. Перед запуском проверок соберите engine.exe через build.bat.