(В ближайшее время будет ознакомительная версия для открытия карт, без исходников)
Консольный инструмент на C# (.NET 8) для карт RF Online: чтение геометрии, материалов,
текстур и анимаций объектов из игровых форматов и экспорт в .glb (glTF 2.0),
а также задел на обратное направление (GLB → BSP, репак карт).
- Скачай и распакуй
RFMapToolSharp-portable.zip— self-contained пакет, .NET устанавливать не нужно (рантайм внутри, Windows 10/11 x64). - Закинь папки карт клиента в
Map/внутри пакета (рядом лежит подсказка_сюда_папки_карт.txt). Альтернатива: ничего не копировать, а вписать полный путь к клиенту вrf_path.txt(напримерD:\Games\RF_Online). - Запусти
RFMapToolSharp.cmd— откроется меню выбора карты. Из командной строки:RFMapToolSharp.cmd --all(все карты) /RFMapToolSharp.cmd --map Sette(одна).
Готовые .glb появятся в ReadyMaps/<карта>/ внутри пакета. Файл .glb
открывается без установки программ: перетащи его в браузер на
gltf-viewer.donmccurdy.com, либо открой в Blender / Windows 3D Viewer.
Структура пакета:
RFMapToolSharp/
RFMapToolSharp.cmd — запуск (двойной клик)
Map/ — сюда кладёшь папки карт
ReadyMaps/ — здесь появятся готовые карты
rf_path.txt — или впиши путь к клиенту сюда
app/ — программа и рантайм (не трогай)
ПРОЧТИ_МЕНЯ.txt — короткая инструкция
| Папка | Назначение |
|---|---|
Maps/Map/ |
Входные карты клиента RF Online (.bsp, .r3m, .r3t, .spt и пр.). Не коммитится. |
ReadyMaps/ |
Готовые результаты экспорта. |
Parsing/ |
Парсеры форматов: BSP/EBP, R3M (материалы), R3T (текстуры), SPT, RPK и др. |
Export/ |
Экспорт в GLB (SharpGLTF), диагностика, мост SPT-моделей. |
Editor/ |
Задел редактора карт (шаблоны, dry-run). |
tools/ |
Вспомогательные утилиты (инвентарь ресурсов, guard-скрипты). |
_runs/ |
Логи пакетных прогонов. Не коммитится. |
ReadyMaps/
<map>/<map>.glb — готовая карта (только GLB, без мусора)
_diagnostics/<map>/*.json — отладочные дампы (ноды, матрицы объектов, UV-аномалии…)
_reports/texture_report_<map>.json — сводка по текстурам
_logs/<map>_export_<ts>.log — tee-лог консоли прогона
--cleanup-diagnostics удаляет legacy-диагностику из <map>/ (интерактивно спрашивает
подтверждение; в батче — no-op).
- Геометрия BSP (
.bsp): вершины, грани, матгруппы; фильтры вытянутых/аномальных треугольников (по умолчанию только логируются, не вырезаются). - Материалы (
.r3m): привязка текстур, эвристики прозрачности (по имени и alpha type). - Текстуры (
.r3t): DDS → PNG в памяти (DXT1/3/5, ATI, BC7), встраивание в GLB. - Анимации BSP-объектов (все карты, все анимированные объекты):
- mesh-ноды вложены в иерархию объектных нод
BSP_obj{id}по parent-chain; - каналы — world-дельты от запечённой позы, статичная поза не меняется (на baked-кадре цепочка = identity);
- объекты с анизотропным scale, где дельта содержит shear и не раскладывается в TRS,
факторизуются в точную цепочку из трёх TRS-нод
_inv/_rot/_scl(пример: Sette obj1/2, scale ~0.007 по одной оси); - статичные объекты каналов не получают, пустых
animationsв GLB нет.
- mesh-ноды вложены в иерархию объектных нод
- SPT-объекты: это helper-объёмы движка (музыкальные зоны, точки телепортов
dpgoto/dpfrom, стартыdsstart, модули данжейdmm*) — видимых моделей у них в данных нет. Экспортируются как полупрозрачные маркер-боксы реального размера (bbox из SPT) с полнымnode_tm(позиция + поворот + масштаб), цвет по классу: жёлтый helper / зелёный music / оранжевый portal / голубой spawn. Режимreal-if-supportedподхватывает.msh/.mod/.objрядом с картой, если такие файлы появятся (см.SptModelBridge). - FX/SND-эмиттеры (
.ebp): фонтаны, лава, листопад, ambient-звуки карты. Экспортируются как полупрозрачные маркер-нодыFX_<i>_<имя>(magenta) иSND_<i>_<имя>(blue-violet) с метаданными вextras(путь эффекта, fade, shader, wave-файл и т.д.). Диагностика:_diagnostics/<map>/ebp_fx.json. - RVP-летающие объекты (
.rvp+ реверснутый.cam): корабли, бабочки и прочие ambient/cutscene-объекты. НодыRVP_<объект>с реальным мешем (.mshчерезSptModelBridge, резолв.\Chef\...от корня данных клиента) и анимацией полёта (pos/rot-каналы из треков.cam, кадр/30 = секунды). Привязка объект→якорь — по биндингам[PrepareTrack](*b_01 *Dummy01). Формат.camописан вPOINT_ELEMENTS_ANALYSIS.md. Если меш не читается — ставится fallback-маркерRVP_<объект>_box. Диагностика:_diagnostics/<map>/rvp_objects.json.
- Windows, .NET SDK 8 (запинен в
global.json: 8.0.424) - Зависимости: SharpGLTF, Pfim, SixLabors.ImageSharp
Без аргументов — интерактивное меню. Папка карт ищется автоматически:
rf_path.txt (построчно, # = комментарий; ищется в рабочей папке, рядом с exe
и на уровень выше exe) → Map|map в рабочей папке → обход вверх от cwd и exe →
C:\Games\RF_Online\Map.
| Флаг | Описание |
|---|---|
--all |
Экспорт всех карт без меню |
--map Sette |
Экспорт по части имени карты |
--filter=Vol* |
Экспорт по маске (*, ?, без учёта регистра) |
--resume |
Пропускать карты, у которых GLB новее всех исходников |
--validate |
Round-trip проверка каждого GLB через SharpGLTF; exit code 0/1/2 = OK/warnings/errors |
--cleanup-diagnostics |
Чистка legacy-диагностики (с подтверждением) |
--glb-to-bsp-, --glb-insert-, --glb-to-rf-, --repack-map, --repack-bsp, --bsp-dump, --bsp-patch, --bsp-apply, --entity-report, --rf-inventory-. См. Program.cs` — эти режимы в активной разработке.
- Батч-экспорт всех 41 BSP-карты проходит;
--validateдаёт code=1 (warnings) на всех, кромеDungeon00(code=2 — известное ограничение: сжатые вершины формата 2004 года парсером пока не поддерживаются). - Анимации BSP-объектов работают на всех картах (раньше — только Sette):
24 карты с объектами получили иерархию
BSP_obj*и TRS-каналы (напр. Elan — 35 объектов/601 кадр, lobby — 13/2001, Transport01 — 34/301). Для этого снят глобальный skip трансформа для группattr=8192(все object-группы на всех картах имеют этот attr; skip оставлял объекты в raw local space — «в центре карты / за картой» — и глушил анимации). - Sette: все 8 анимированных BSP-объектов экспортируются с точными каналами (включая shear-факторизацию obj1/2).
- SPT helper'ы экспортируются с полным
node_tm(поворот теперь применяется) и маркер-боксами реального размера из bbox записи, полупрозрачными, с цветовой маркировкой по классу. - FX/SND-эмиттеры из
.ebpэкспортируются (маркер-ноды с extras): напр. Elan — 2321 FX + 60 SND, Platform01 — 5703 FX + 38 SND. - RVP-объекты экспортируются: 10 карт с летающими объектами, всего 219 нод
RVP_*, все с анимациями полёта из.cam(Platform01 — 26 объектов, neutralA/B/C и S1/S2-варианты). Карты accretia/bellato/cora/Dungeon04 имеют.rvpбез объектов (чистые камера-катсцены) — экспортировать нечего. - Исправлен парсинг граничного кадра BSP-треков (
GetFrameAlphaCore: кадр 0 при первом ключе в кадре 0 ошибочно отдавал последний ключ — «снап» муверов на старте; также из.camотбрасываются хвостовые ключи-терминаторы с frame=0, дававшие телепорт объекта в конечную позу на t=0).
RF Online, RFOnline, Rising Force Online, RF map tool, RF Online map export, RF Online BSP, RF Online R3M, RF Online R3T, RF Online SPT, RF Online GLB, RF Online GLTF, RF Online modding, RF Online tools.