Files
project-rr/README.md
T
Leonid PershinandClaude Opus 4.8 b048a83966 Подземелье: лестницы, объекты и гуляющие персонажи
- Процедурные лестницы-шахты между этажами
- Объекты в комнатах (фонари Lantern, свечение Light)
- 5 нативных персонажей патрулируют этажи (walk_0/idle_0, разворот, простое блуждание)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-03 17:05:37 +03:00

134 lines
8.9 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.
# ProjectRR — нативный просмотрщик персонажей
Тестовый проект: персонажи и анимации, извлечённые из игры **ProjectR** и
**полностью переведённые в нативный Godot** (`Skeleton2D` + взвешенные `Polygon2D` +
`AnimationPlayer`). **Spine в рантайме не используется** — проект работает на обычном Godot.
## Требования к движку
Запуск/редактирование проекта — **обычный Godot 4.7.1 mono** (модуль Spine не нужен):
```
D:\Godot_v4.7.1\Godot_v4.7.1-stable_mono_win64.exe
```
Все персонажи уже нативные, поэтому Spine-сборка для игры не нужна. Офлайн-инструменты
пересборки (`tools/bake_anim.gd`, `tools/build_tscn.gd`, `tools/convert_all.gd`) требуют
отдельную **spine-godot 4.2**-сборку — но только если понадобится перегенерировать `.tscn`.
## Запуск
1. Открыть проект обычным Godot 4.6.1 mono.
2. Нажать ▶ (F5). Главная сцена — `scenes/MainMenu.tscn` (меню).
## Меню и сцены
Главное меню (`scenes/MainMenu.tscn`) ведёт на три сцены (назад в меню — `Esc`):
1. **Подземелье** (`scenes/Dungeon.tscn`) — разрез убежища à la Fallout Shelter: сетка 6×5
комнат, **лестницы** между этажами, **объекты** (фонари/свет) и **несколько персонажей**,
которые ходят по этажам (нативные сцены с анимацией `walk_0`/`idle_0`).
ЛКМ/WASD — панорама, колесо — зум, `R` — сброс.
2. **Просмотр спрайтов** (`scenes/SpriteViewer.tscn`) — галерея вытащенных изображений
(UI, фоны, эффекты, нарезанные спрайты). `A/D` — картинка, `W/S` — категория, колесо — зум.
3. **Нативные анимации** (`scenes/NativeViewer.tscn`) — браузер всех 38 персонажей нативно:
`Q/E` — персонаж, `W/S` — состояние (скелет), `A/D` — анимация. Внизу — **кастомизация
цвета** (Кожа / Волосы / Глаза + Сброс): части красятся шейдером `assets/recolor.gdshader`
(замена оттенка с сохранением светотени) по имени слота.
Все **189 скелетов** (38 персонажей × их состояния) сконвертированы в нативные
`characters/<char>/<state>_native.tscn`.
## Управление
**Персонажи:**
| Клавиша | Действие |
|---|---|
| `Q` / `E` | предыдущий / следующий персонаж |
| `W` / `S` (↑ / ↓) | предыдущее / следующее состояние |
| `A` / `D` (← / →) | предыдущая / следующая анимация |
| колесо мыши | зум |
| `Пробел` | перезапустить анимацию |
| `R` | сбросить вид |
**Текстуры (галерея):**
| Клавиша | Действие |
|---|---|
| `A` / `D` (← / →) | предыдущая / следующая картинка |
| `W` / `S` (↑ / ↓) | предыдущая / следующая категория (папка) |
| колесо мыши | зум · `R` — сброс |
## Структура
```
characters/ — персонажи
<name>/*_native.tscn — НАТИВНЫЕ сцены (Skeleton2D + Polygon2D + AnimationPlayer) — то, что играется
<name>/spine/ — исходники Spine (.skel.bytes/.atlas.txt/.png). PNG нужны нативным сценам
как текстуры; .skel/.atlas — только для пересборки (можно удалить)
assets/ — прочее 2D-искусство (из AssetRipper-экспорта)
fonts/ — шрифты игры (.ttf/.otf)
ui/ — UI-скин: button/toggle/slider/window/textfield/scrollbar, Maininterface_*, Button_*
backgrounds/ — фоны, дороги, лес, замок, небо
fx/ — текстуры эффектов (Cartoon FX / cfxr)
cursors/ icons/ misc/ — курсоры, иконки, логотип
atlas/ — большие упакованные листы SpriteAtlas (UI/Room, 4096²) — сырые
ui_sliced/ — 286 отдельных UI-спрайтов, нарезанных из атласа по Unity-разметке
room_sliced/ — 15 спрайтов комнат из атласа
scenes/MainMenu.tscn — главное меню (главная сцена)
scenes/Dungeon.tscn / SpriteViewer.tscn / NativeViewer.tscn — три сцены из меню
src/MainMenu.cs — меню (кнопки, тема из игрового арта)
src/NativeBrowser.cs — браузер всех нативных персонажей (сканирует *_native.tscn)
src/TextureGallery.cs — галерея текстур
src/RoomMap.cs — карта убежища (сетка комнат, панорама/зум)
tools/convert_all.gd — ПАКЕТНАЯ конвертация всех скелетов в *_native.tscn
tools/bake_anim.gd — запекатель анимаций одного скелета (Spine → кости, JSON)
tools/build_tscn.gd — сборка одной .tscn из геометрии + запечённых анимаций
tools/spineconv/ — офлайн-экспортёр геометрии Spine → JSON (см. его README)
tools/rig/geom/*.json — выгруженная геометрия всех скелетов (для пересборки)
tools/slice_atlas.gd — нарезчик спрайтов из атласа (по tools/sprite_layout.json)
tools/sprite_layout.json — разметка спрайтов (имя, атлас, rect, 9-slice border)
```
## Как всё переведено в натив (Вариант B)
Все 189 скелетов конвертированы в нативный Godot. Пайплайн (нужна spine-godot 4.2-сборка):
1. **`tools/spineconv/`** (через `spine-csharp`) — выгружает геометрию рига каждого скелета
в `tools/rig/geom/*.json` (кости + меши с вершинами/UV/треугольниками/весами).
Batch: `spineconv --batch <characters> tools/rig/geom`.
2. **`tools/convert_all.gd`** — один прогон: по каждой геометрии запекает анимации из
Spine-рантайма (локальные трансформы костей + draw order покадрово) и **сохраняет**
`characters/<char>/<state>_native.tscn` (`Skeleton2D` + взвешенные `Polygon2D` +
`AnimationPlayer`).
Готовые `.tscn` + атлас-PNG работают в **обычном Godot без модуля Spine** и редактируются
в редакторе (кости, веса, ключи, draw order через `z_index`).
Пересобрать всё: `godot-4.2-... --headless --path . --script res://tools/convert_all.gd`.
## Перенарезать спрайты из атласа
Разметка `tools/sprite_layout.json` получена из AssetRipper `Sprite/*.json`
(PathID→атлас: 129=UI, 49/128=Room; координаты Unity снизу-вверх → нарезка делает flip по Y).
Повторная нарезка:
```
godot-4.2-4.6.1-stable-mono.exe --headless --path . --script res://tools/slice_atlas.gd
```
Не переносилось (движковый/Unity-мусор): водяные знаки и сплэши Unity, lookup-текстуры
пост-обработки (BayerMatrix, AreaTex, SearchTex, Falloff*, LDR_LLL1_* дизеринг),
TMP-атласы шрифтов, редакторные UI-иконки, White1px/none.
## Примечания
- В игре **каждое состояние персонажа — отдельный скелет**, поэтому смена состояния
инстанцирует другую `.tscn`.
- Среди анимаций встречаются рабочие огрызки аниматора (`dd`, `dfdfa`, `test` и т.п.) —
показываются все как есть.
- Анимации с **деформацией мешей** конвертер не переносит (только кости); у elf1 их нет,
у некоторых персонажей отдельные части могут быть чуть «жёстче» оригинала.
- Контент игры 18+.