Leonid PershinandClaude Opus 4.8 7a754d618d Комнаты: ручные фикс-позиции слотов (Room.SlotPos), по ногам как в дебаге
- Каждый слот может иметь точную позицию (перекрывает авто-распределение)
- Дойка слот раба 1 = (1100, 918)
- Фикс-позиция ставит НОГИ персонажа в координату (совпадает с DEBUG при drag),
  авто-слоты по-прежнему центрируются

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

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 комнат + объекты (фонари/свет). Карта стартует пустой; персонажи создаются спавнером (панель внизу: кнопки типов + Раб/Монстр/Ребёнок/Игрок для случайного, или выпадающий список конкретного персонажа + «Заспавнить») и стоят в idle, пока их не перетащат.
    • Типы персонажей (Игрок/Раб/Монстр/Ребёнок) + генерация имён.
    • Тематические комнаты со слотами по типу: Дойка = 2 раба + 4 ребёнка, Логово = 1 раб + 1 монстр. Перетаскивание в подходящий слот меняет скелет на состояние комнаты и играет одиночную/групповую анимацию. Над комнатами — окна с именами.
    • ЛКМ — выбрать/тащить (в комнату или на пол — там персонаж просто стоит). ПКМ — убрать персонажа в инвентарь (панель справа; клик — вернуть).
    • WASD/ЛКМ-фон — панорама, колесо — зум, R — сброс, Esc — меню.
  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+.
S
Description
No description provided
Readme
81 MiB
Languages
C# 66.7%
GDScript 31.4%
GDShader 1.9%