michidk/redguard-preservation

GitHub: michidk/redguard-preservation

一款 Rust 编写的 CLI 工具,用于解析和转换 1998 年经典游戏《红卫》的专有资产格式,助力数字保存与资产再利用。

Stars: 0 | Forks: 0

# redguard-preservation *The Elder Scrolls Adventures: Redguard* (1998) 资产保存项目 —— 包含逆向工程的文件格式规范、引擎文档,以及一个用于解析和转换游戏资产的 Rust CLI 工具。 ## 转换矩阵 | 输入类型 | 输入扩展名 | 输出文件 | |---|---|---| | 模型 | `.3d`, `.3dc` | `.glb` | | ROB 档案 | `.rob` | `.glb` | | RGM 场景 | `.rgm` | 目录:`.glb` + 场景/角色/导航 `.json` + 每个角色的 `.soup`/`.json` 脚本 | | WLD 世界 | `.wld` | `.glb` + 角色元数据 `.json` (场景模式),或地图 `.png` 集合 | | 字体 | `.fnt` | 位图 `.png` + BMFont `.fnt` + 字形元数据 `.json`,或 `.ttf` | | 可见性八叉树 | `.pvo` | `.json` | | 调色板 | `.col` | 色块 `.png` + 调色板元数据 `.json` | | 音效库 | `.sfx` | 提取的 `.wav` 文件 + `index.json` 元数据 (目录输出) | | 对话音频 | `.rtx` | 提取的 `.wav` 文件 + `index.json` 元数据 (目录输出) | | 纹理库 | `TEXBSI.###` | 动画 `.gif` + 静态 `.png` 文件 + `index.json` (目录输出) | | GXA 位图档案 | `.gxa` | 动画 `.gif` + `index.json` (目录输出) | | 作弊状态 | `.cht` | `.json` | `scan` 命令可在目录树中递归检测已知的 Redguard 文件。 ## 转换子命令 每种格式都有其带有专属标志的子命令。`convert ` 会自动检测格式并使用默认设置。 | 子命令 | 输入 | 输出 | 特定格式标志 | |---|---|---|---| | `convert texbsi` | `TEXBSI.###` | `.gif` / `.png` | `--format gif\|png\|frames`, `--palette`, `--compress-textures` | | `convert gxa` | `.gxa` | `.gif` / `.png` | `--format gif\|png`, `--compress-textures` | | `convert fnt` | `.fnt` | `.png` + `.fnt` + `.json`, 或 `.ttf` | `--format bitmap\|ttf`, `--compress-textures` | | `convert col` | `.col` | `.png` + `.json` | `--format png\|json` (默认: 两者均有), `--compress-textures` | | `convert wld` | `.wld` | `.glb` + `.json`, 或地图 `.png` 集合 | `--assets`, `--palette`, `--terrain-only`, `--terrain-textures`, `--compress-textures` | | `convert model` | `.3d`, `.3dc`, `.rob` | `.glb` | `--assets`, `--palette`, `--compress-textures` | | `convert rgm` | `.rgm` | 输出目录 | `--assets`, `--palette`, `--compress-textures` | | `convert rtx` | `.rtx` | `.wav` + `index.json` | `--resolve-names` | | `convert sfx` | `.sfx` | `.wav` + `index.json` | (无) | | `convert cht` | `.cht` | `.json` | (无) | | `convert pvo` | `.pvo` | `.json` | (无) | ¹ 导出的 TTF 字体是经过位图追踪的矢量轮廓,不带微调。它们可以安装在 Windows 上、在游戏引擎(Unity、Godot 等)中使用,以及在 [fontdrop.info](https://fontdrop.info) 上预览。 ## 文档 [`docs/`](docs/README.md) 目录分为三个部分: - [**文件格式**](docs/formats/README.md) — 模型、纹理、音频、地图、调色板和其他游戏资产的二进制格式规范 - [**引擎详情**](docs/engine/README.md) — 逆向工程的引擎内部结构:作弊系统、物品附加和 SOUP 脚本 - [**配置**](docs/config/README.md) — 游戏附带的基于文本的 INI 文件(表面类型、战斗、按键等) ## 仓库结构 - `src/` - Rust 源码 - `src/import/` - 格式导入器/解析器 - `src/gltf/` - GLTF/GLB 转换(构建器、图元、地形、纹理缓存) - `src/ffi/` - 用于原生插件(Unity 等)的 C 兼容 FFI 层 - `src/cli/` - CLI 命令处理器(`cli/convert/` 包含各格式的转换器) - `src/error.rs` - 共享错误类型 - `docs/` - 格式规范和引擎说明 - `tests/` - 集成测试 ## 快速开始 要求: - Rust 稳定版工具链 - Cargo 构建: ``` cargo build ``` 显示 CLI 帮助: ``` rgpre --help ``` ## CLI 命令 - `read` (`r`) — 解析输入文件并打印解码后的结构 - `convert` (`c`) — 将支持的输入导出为输出格式 - `convert ` — 自动检测格式,使用默认设置 - `convert ` — 带专属标志的特定格式子命令 - `scan` (`s`) — 递归扫描目录以查找已知的 Redguard 文件 ## 资产目录 Redguard 附带了两套并行的 3D 资产,分别用于不同的渲染器: | 目录 | 渲染器 | 模型版本 | 调色板文件 | 包含在 GOG 中 | |---|---|---|---|---| | `3dart/` | 软件 | v2.6, v2.7 | 仅 `art_pal.col` | 仅限原版 CD | | `fxart/` | Glide (3dfx) | v4.0, v5.0 | 27 个 `.COL` 调色板 (按场景) | ✓ | 两个目录均受支持。推荐使用 `fxart/` 的 Glide 资产 —— 它们包含在 GOG 发布版中,并使用更新的模型格式。每个场景使用自己的调色板(例如,主世界使用 `ISLAND.COL`,死灵城使用 `NECRO.COL`)。通过 `--palette` 传递匹配的调色板 —— 没有它,3D 导出将没有纹理。 ## 用法示例 自动检测格式(使用默认值): ``` rgpre convert 3dart/LHBM4.3DC -o output/LHBM4.glb rgpre convert fxart/TEXBSI.302 -o output/TEXBSI_302/ ``` 使用调色板和资产根目录转换模型: ``` rgpre convert model fxart/BELLTOWR.ROB --palette fxart/ISLAND.COL --assets . -o output/BELLTOWR.glb ``` 使用调色板和资产根目录转换 RGM 场景: ``` rgpre convert rgm maps/BELLTOWR.RGM --palette fxart/ISLAND.COL --assets . -o output/BELLTOWR_scene.glb ``` 将 WLD 世界转换为 GLB 地形 + 附带的 RGM 放置: ``` rgpre convert wld maps/ISLAND.WLD --palette fxart/ISLAND.COL --assets . -o output/ISLAND_world.glb ``` 仅转换 WLD 地形: ``` rgpre convert wld maps/ISLAND.WLD --palette fxart/ISLAND.COL --assets . --terrain-only -o output/ISLAND_terrain.glb ``` 使用调色板转换 TEXBSI 纹理库: ``` rgpre convert texbsi fxart/TEXBSI.302 --palette fxart/ISLAND.COL -o output/TEXBSI_302/ ``` 将所有动画帧导出为单独的 PNG 文件: ``` rgpre convert texbsi fxart/TEXBSI.302 --palette fxart/ISLAND.COL --format frames -o output/TEXBSI_302/ ``` 将字体转换为 TrueType: ``` rgpre convert fnt input/FONT01.FNT --format ttf -o output/FONT01.ttf ``` 仅将 COL 调色板导出为 JSON: ``` rgpre convert col fxart/ISLAND.COL --format json -o output/ISLAND.json ``` 提取带有已解析文件名的 RTX 对话: ``` rgpre convert rtx input/DIALOG.RTX --resolve-names -o output/dialog/ ``` 扫描目录: ``` rgpre scan 3dart ``` ## 原生插件 (FFI) 该库与 CLI 二进制文件一起构建为 C 兼容的共享库 (`cdylib`)。这允许 Unity 等游戏引擎将其作为原生插件加载,并在运行时直接调用转换函数。 完整 API 参考请参见 [`src/ffi/README.md`](src/ffi/README.md) —— 包含架构、C 结构体定义、函数签名、内存管理和错误处理。
标签:3D模型转换, CLI, DNS解析, GIF, glb, GLTF, JSON, PNG, Redguard, Rust, WAV, WiFi技术, 上古卷轴, 云资产清单, 可视化界面, 开源项目, 数字遗产保护, 文件格式解析, 文件解析器, 文档结构分析, 游戏保存, 游戏开发, 游戏引擎文档, 游戏资产转换, 红卫, 经典游戏, 网络流量审计, 资源提取, 逆向工程, 通知系统, 音频提取