- Rust 71.2%
- Go 11.1%
- Python 9.3%
- GDScript 6.9%
- PowerShell 1%
- Other 0.5%
Реализует §C4 плана: у оружия появляются поля crit_chance [0..1] и crit_mult (>=1.0) в weapons.json/weapons.ron. Крит роллится детерминированно от общего rng состояния, поэтому клиент и сервер из одного сида видят одинаковые криты (docs/MULTIPLAYER.md §5). При крите урон умножается на crit_mult, событие damage несёт extra.crit=true — клиент подсвечивает хит, переиспользуя существующий crit-фидбек слабых мест. - По умолчанию криты выключены (crit_chance=0), старые пресеты не меняются. - core-пресет: точное одиночное оружие критует чаще, дробовик/пила реже, ракетница редко но на x2.5. - Тесты: множитель крита, флаг события, детерминизм роллов по сиду. - Обновлён пиннутый хеш core-пресета (JSON+RON) под Go-реализацию. - CHANGELOG + OPEN_QUESTIONS помечают C4 как реализованный. |
||
|---|---|---|
| .cargo | ||
| .github/workflows | ||
| .idea | ||
| client | ||
| core | ||
| docs | ||
| game | ||
| protocol | ||
| scripts | ||
| server | ||
| tools | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| README.md | ||
💗 OpenHeart
2.5D Action-RPG в духе DOOM / Forgive Me Father: полноценный 3D-мир от первого лица, вся графика — пиксельные спрайты-биллборды. Тёмный неон, процедурные данжи, дерево перков и собственный редактор игры внутри Godot.
Хаб «Неоновый квартал» — карта собрана из JSON, неоновый канал светится glow-эмиссией
Что это
- Движок — Godot 4.7 (совместим с Redot), рендерер Forward Mobile (Vulkan).
- Вся игровая логика — на Rust через gdext / godot-rust (GDExtension). GDScript используется только в editor-плагине.
- Весь контент — в JSON (
game/presets/<пресет>/): оружие, классы, перки, враги, предметы, NPC, квесты, карты. Добавление контента не требует ни строчки Rust. - Пресеты = разные игры: папка пресета — самодостаточный набор данных. В главном меню выбирается активный; в комплекте кампания «Неоновое Сердце» и режим «Кровавая арена».
Возможности
| 🔫 8 стволов | FP-спрайты с анимацией: клинок, пила, пистолет, дробовик, автомат, гвоздемёт, плазма, ракетница. Hitscan / мили / снаряды со сплэшем |
| 🎭 3 класса × 3 спека | Берсерк (мили), Штурмовик (клоус-рэнж), Оператор (мид-рэнж) |
| 🌳 Перки и синергии | 18 перков в 3 ветках + 8 комбо-синергий; очки за уровни; экран прокачки на P |
| ⚔️ RPG-боёвка | 4 типа урона (физ/огонь/энергия/пустота), резисты и уязвимости у 14 типов врагов |
| 🕳️ Процедурные данжи | Комнаты на разных высотах, переменные потолки, платформы, темы по глубине, босс-«страж», миникарта |
| 🗺️ Карты из JSON | Боксы, рампы, лестницы, цилиндры, здания с неон-вывесками, glow-каналы — многоярусные карты без кода |
| 🧑🤝🧑 NPC и квесты | Диалоги с выборами и статами; квест-гиверы с цепочками (kill/collect/clear) |
| 🎛️ Редактор игры | Вкладка «OpenHeart» в Godot-редакторе: панели для всего контента, создание пресетов, защита ядра |
| ✨ Неон-визуал | Glow/bloom, ACES-тонмаппинг, постобработка (виньетка, хроматика, сканлайны) |
Дерево перков с гейтингом требований · второй пресет «Кровавая арена»
Быстрый старт
Нужны: Rust и Godot 4.7+ (обычная сборка, не .NET/Mono).
git clone <repo> open-heart && cd open-heart
./scripts/run.ps1 # соберёт Rust-DLL и откроет редактор → жми F5
Играть с сервером: в главном меню — «Подключиться», адрес вида
ws://127.0.0.1:7777/ws (как поднять сервер — server/README.md).
Вручную:
cargo build -p openheart # → target/debug/openheart.dll
cp target/debug/openheart.dll ../game/bin/ # движок ищет DLL внутри проекта
godot -e --path ../game # редактор (F5 — играть) | без -e — сразу игра
Подробный гайд с траблшутингом: docs/BUILDING.md.
Управление
| Клавиша | Действие | Клавиша | Действие |
|---|---|---|---|
T |
switch tracked quest objective | ||
J |
open bilingual quest journal | 1–5 |
track an active journal entry |
WASD |
движение | E |
взаимодействие / порталы |
Shift |
спринт | Q |
быстрое лечение |
Space |
прыжок | I |
инвентарь |
ЛКМ / ПКМ |
основной / альтернативный огонь | P |
дерево перков |
1–8 / колесо |
смена оружия | Esc |
отпустить мышь |
Побеждённые стражи дают ядра оружия. В инвентаре (I) клавиши 1/2 выбирают одну из двух
взаимоисключающих ветвей модификаций текущего оружия.
Игровой цикл
- Новая игра → выбор класса и спека (
1–3). - Хаб: NPC, квесты, лут; на севере — терраса с вратами данжа.
- Данж: зачистка, лут, платформы; убей стража — откроется портал глубже.
- Каждый вход — новая генерация; глубже = злее враги и жирнее лут.
- Смерть — возврат в хаб с потерей 25 % золота (сейв не стирается).
Документация
| Документ | Что внутри |
|---|---|
| docs/INDEX.md | 📇 Полный индекс проекта: каждый модуль, файл данных, папка ассетов — для быстрого анализа |
| docs/ARCHITECTURE.md | Как всё устроено: слои, жизненный цикл, системы, рендер, сейвы |
| docs/BUILDING.md | Сборка, запуск, цикл разработки, частые проблемы |
| docs/EDITOR.md | Редактор игры (вкладка OpenHeart) и создание своих пресетов |
| docs/DATA_FORMATS.md | Справочник всех JSON-форматов с примерами |
| docs/PROJECT_STRUCTURE.md | Карта репозитория: где что лежит |
| docs/DESIGN_PLAN.md | Дорожная карта M0–M9 и прогресс |
| docs/OPEN_QUESTIONS.md | Открытые геймдизайн-решения |
| tools/ASSET_GUIDE.md | Генерация и нарезка спрайтов из атласов |
Как добавить контент (без кода)
Открой проект в Godot → вкладка OpenHeart сверху → выбери категорию → «+ Добавить» → «💾 Сохранить пресет» → F5. Подробнее: docs/EDITOR.md.
Либо правь JSON руками — форматы в docs/DATA_FORMATS.md:
// game/presets/core/enemies.json — новый враг за 30 секунд
{ "id": "neon_wraith", "name": "Неоновый призрак", "sprite": "cultist",
"hp": 90, "speed": 3.4, "attack_damage": 18, "scale": 1.1,
"resist": { "energy": 0.5, "physical": -0.2 }, "xp": 40, ... }
Контрибуция
PR и issue приветствуются — см. CONTRIBUTING.md (принципы: логика в Rust, контент в JSON, каждый PR собирается и проходит смоук-чеклист). История изменений — в CHANGELOG.md.
Лицензия
MIT. Делай свои игры на этом каркасе — для того и пресеты.
English summary
OpenHeart is a 2.5D first-person action-RPG (DOOM / Forgive Me Father style) built on
Godot 4.7 with all game logic in Rust (gdext/GDExtension) and all content in JSON.
Features: 8 weapons with FP sprite animations, 3 classes × 3 specs, a perk tree with
synergies, damage types, enemy resistances & data-driven weak points, persistent boss trophies and hub memorials, procedural multi-height dungeons with a
minimap, JSON-defined multi-tier maps (boxes/ramps/stairs/cylinders/neon), data-driven
NPCs & quests, an in-Godot game content editor plugin, and a preset system where
each preset folder is effectively a separate game selectable from the main menu.
Build: cargo build -p openheart, then open game/ in Godot 4.7+ and press F5.
Docs live in docs/; start with docs/INDEX.md.