106 lines
8.3 KiB
Markdown
106 lines
8.3 KiB
Markdown
# 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`:
|
||
```cmd
|
||
build.bat
|
||
```
|
||
Скрипт автоматически найдет установленный MASM32 (в `D:\MASM32`, `C:\masm32`, `F:\MASM32`) или MSVC BuildTools (`ml.exe` и `link.exe`) и соберет исполняемый файл `engine.exe`.
|
||
|
||
### Запуск
|
||
```cmd
|
||
engine.exe
|
||
```
|
||
|
||
---
|
||
|
||
## 🎮 Управление в демо-уровне
|
||
| Клавиша | Действие |
|
||
|---|---|
|
||
| **W / S** | Движение вперед / назад |
|
||
| **A / D** | Стрейф (шаг) влево / вправо |
|
||
| **Стрелочки влево / вправо** | Поворот камеры |
|
||
| **Shift** | Спринт (ускорение) |
|
||
| **E / Пробел** | Взаимодействие (открыть/закрыть дверь перед собой) |
|
||
| **M** | Включить/выключить миникарту (радар) |
|
||
| **Escape** | Выход из игры |
|
||
|
||
---
|
||
|
||
---
|
||
|
||
## 🎨 Визуальный редактор уровней (EblanStudio)
|
||
|
||
Движок оснащен нативным высокопроизводительным визуальным редактором уровней в стиле Unity / Godot 4:
|
||
- Написан на **C++17 + Dear ImGui + DirectX 11**.
|
||
- Запуск в 1 клик через `run_editor.bat` или `editor/editor.exe`.
|
||
- **Мгновенный плейтест (F5)**: редактор автоматически сериализует уровень в бинарный формат `assets/map.dat` и запускает ассемблерный движок `engine.exe`.
|
||
- **Undo/Redo (Ctrl+Z / Ctrl+Y)** — история до 64 действий (сетка, спавн, цвета, спрайты).
|
||
- **Файловые диалоги Windows**: Ctrl+O (открыть), Ctrl+S (сохранить), Ctrl+Shift+S (сохранить как).
|
||
- Инструменты:
|
||
- **Кисть [B]**: рисование стен выбранного типа (Кирпич, Дерево, Камень, Металл, Дверь, Колонна, Стекло, Мрамор).
|
||
- **Ластик [E]**: очистка ячеек карты (или ПКМ на холсте).
|
||
- **Заливка [F]**: Flood Fill замкнутых областей карты.
|
||
- **Точка спавна игрока [P]**: клик для перемещения спавна игрока и ползунок угла обзора.
|
||
- **Спрайты [S]**: расстановка трехмерных объектов/билбордов (фонари, бочки, статуи), перетаскивание мышью по холсту.
|
||
- **Инспектор спрайтов**: позиция (суб-тайл), слот текстуры (1..15), масштаб (0.25x-4x), удаление.
|
||
- **Инспектор свойств**: настройка цветов потолка и пола в реальном времени, угла старта.
|
||
- **Навигация**: масштабирование колесиком мыши (Zoom), панорамирование зажатием средней кнопки мыши (MMB Pan).
|
||
|
||
Сборка редактора:
|
||
```cmd
|
||
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-агентов по написанию новых игр на этом движке.
|