EBLAN_ENGINE/README.md

106 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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-агентов по написанию новых игр на этом движке.