- Каждый слот может иметь точную позицию (перекрывает авто-распределение) - Дойка слот раба 1 = (1100, 918) - Фикс-позиция ставит НОГИ персонажа в координату (совпадает с DEBUG при drag), авто-слоты по-прежнему центрируются Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.
Запуск
- Открыть проект обычным Godot 4.6.1 mono.
- Нажать ▶ (F5). Главная сцена —
scenes/MainMenu.tscn(меню).
Меню и сцены
Главное меню (scenes/MainMenu.tscn) ведёт на три сцены (назад в меню — Esc):
- Подземелье (
scenes/Dungeon.tscn) — разрез убежища à la Fallout Shelter: сетка 6×5 комнат + объекты (фонари/свет). Карта стартует пустой; персонажи создаются спавнером (панель внизу: кнопки типов+ Раб/Монстр/Ребёнок/Игрокдля случайного, или выпадающий список конкретного персонажа + «Заспавнить») и стоят в idle, пока их не перетащат.- Типы персонажей (Игрок/Раб/Монстр/Ребёнок) + генерация имён.
- Тематические комнаты со слотами по типу: Дойка = 2 раба + 4 ребёнка, Логово = 1 раб + 1 монстр. Перетаскивание в подходящий слот меняет скелет на состояние комнаты и играет одиночную/групповую анимацию. Над комнатами — окна с именами.
- ЛКМ — выбрать/тащить (в комнату или на пол — там персонаж просто стоит). ПКМ — убрать персонажа в инвентарь (панель справа; клик — вернуть).
WASD/ЛКМ-фон — панорама, колесо — зум,R— сброс,Esc— меню.
- Просмотр спрайтов (
scenes/SpriteViewer.tscn) — галерея вытащенных изображений (UI, фоны, эффекты, нарезанные спрайты).A/D— картинка,W/S— категория, колесо — зум. - Нативные анимации (
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-сборка):
tools/spineconv/(черезspine-csharp) — выгружает геометрию рига каждого скелета вtools/rig/geom/*.json(кости + меши с вершинами/UV/треугольниками/весами). Batch:spineconv --batch <characters> tools/rig/geom.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+.