Skip to content

v1.0.2 — 转换修复 / 合并优先级 / 本地化三路合并

Choose a tag to compare

@Xuewu-awa Xuewu-awa released this 05 Oct 08:09
· 35 commits to main since this release

UE4/UE5 .pak 工具链,Windows 桌面端与 Android 双端。基于 CUE4Parse,扩展自 kardswalker/Prism。

下载

平台 文件 说明
Windows Prism-Windows-x64.zip 自包含单文件版,无需安装 .NET 运行时
Android Prism-Android.zip 内含已签名 APK,arm64-v8a

解压后请保持目录完整 —— UAssetCLI/ 与 tools/ 必须和主程序放在一起,贴图替换与 Pak 转换依赖它们。

换到新目录首次运行时,请在「设置」页确认 AES 密钥已填 —— 新目录没有旧设置文件,密钥为空时加密 Pak 读不出任何文件(本版已加了拦截,会直接报错而不是产出废包)。

本版内容

1. 修复 Pak 转换在桌面端几乎全部失败

现象:PC 模组 Pak → 手机 Pak 的转换,39 个候选纹理里 38 个失败,只有目标格式为 DXT1、走内置编码器的那一张成功。

根因:目标格式要等 CLI 打开主 Pak 的模板资产才知道,所以调用方传的格式是空字符串;而参数组装靠"格式是否以 PF_ASTC_ 开头"决定传 --astcenc 还是 --texconv,空字符串落到了 --texconv 分支。astcenc 不在 PATH 上(随应用放在 tools/),CLI 于是报 Could not find encoder tool,每个 ASTC 目标都以失败告终。

现已改为两个编码器路径都传,由 CLI 按目标格式自行选择。实测:39/39 全部成功,输出 14.3 MB,耗时约 50 秒。

2. 新增「并入模组的其他文件」开关

模组除了换贴图,往往还改了蓝图、.locres 本地化、数据表等。这些内容两个平台通用,不需要转换,直接原样放进输出 Pak 即可 —— 开了这个开关就不必再单独做一次 Pak 合并,输出体积仍≈改动量。

已成功转换的贴图不会被源文件覆盖(否则会把源平台的像素格式塞进目标 Pak);没能转换的贴图仍会带入并报出原因,不静默丢件。

实测(同一对 Pak):默认模式 40 条目 / 14.29 MB 且不含 Game.locres;开启后 41 条目 / 15.21 MB,Game.locres 已并入。

3. 转换挂载到 0 个文件时立刻中止(不再产出废包)

加密 Pak 在没有(或错误)AES 密钥时,挂载会"成功"但一个文件都读不出来,且不抛异常。此前这会一路走下去:主 Pak 索引为空 → 所有纹理都判成"主 Pak 中没有同路径" → 若开了「并入模组文件」,还会把源 Pak 全部文件原样打进去,产出一个没有任何贴图被转换的假包,并且报告"失败 0"。

现在会直接报错并说明原因(未挂载到归档 / 加密但未提供密钥 / 密钥不匹配)。转换页也把「密钥 / 映射」状态显示出来了。

4. Pak 合并:去掉固定的主 Pak,优先级方向修正

  • 列表每一项都能拖动排序、都能移除,「清空」真的清空 —— 不再有钉死的第一项。
  • 优先级改为越靠上越高(第 1 项最高)。此前是反的(越靠下越高),现在符合直觉。

5. 新增「基准本地化」三路合并:两份文本模组可以真正合并了

以前两份各改了不同文本的模组没法合并 —— 同名 .locres 只能整份覆盖,靠上的那份胜出,另一份的改动全部丢失。

原因是:两份模组对每一条词条都有值(改过的与没改的混在一起),只对比这两份文件无法判断某个词条是谁改的。必须有游戏原版当参照。

现在合并页多了一行「基准本地化(可选)」:

  • 把游戏原版的 .locres 选进去(可用「解包 & Mod」页从原版 Pak 里导出)→ 同名 .locres 逐条与基准对比,各模组的改动叠加,未被改动的词条保持原版。
  • 同一词条被多份模组改动时,按列表优先级取高者。
  • 不选基准则完全保持原来的整文件覆盖,行为可预期。
  • 其它资产仍按覆盖处理(二进制资产无法逐条合并)。
  • 完成后会报告:本地化逐条合并 N 个文件(生效改动 M 条,冲突 K)。

实测(真实文本包,13,476 条词条):

做法 A 改的词条 B 改的词条
整文件覆盖(旧) 保留 丢失
三路合并(新) 保留 保留

6. 界面精简

转换页正文原先堆了 9 段长说明,而实际要填的只有三行输入。现在正文只保留三行输入、两个开关和两条必要提示(正文文字从约 500 字压到 61 字),说明收进顶栏的 「使用说明」 按钮 —— 点开是页内浮层,含操作步骤与截图。设置页、合并页、工作区页里几处啰嗦说明也一并收紧。

安装

Windows:解压后运行 Prism.Desktop.Desktop.exe。

Android:安装 android/Prism-Android-Signed.apk。

签名说明:Android 包由 .NET Android 用调试证书签名(CN=Android Debug,SHA-1 76:DB:3A:E3:E2:5A:CB:6D:76:7B:22:34:E4:EA:98:53:B0:7D:E6:A3),与上一版一致,可直接覆盖安装并保留数据。调试证书仅适合自用与内部分发;若需公开分发或上架,请用正式密钥库重签(换签名后需先卸载旧版)。

已知限制

  • 只支持 .pak;未实现 .utoc / .ucas。
  • 不内置映射文件,需从游戏中自行导入。
  • 需要 AES 密钥的 pak,请在设置页填入。
  • 跨格式转换需要映射文件(.usmap / .jmap);缺映射的贴图会被跳过并在明细里说明。
  • 本地化三路合并只在提供基准文件时生效;没有基准时同名 .locres 仍是整份覆盖。
  • 本包不含 Oodle 原生库(oo2core_9_win64.dll):它的再分发受 RAD/Epic 授权约束,项目一贯不随包分发。默认「替换时使用 Oodle 压缩」是关闭的,所以打包不受影响;若你要在发行版里打开它,请把该 DLL 放到 Prism.Desktop.Desktop.exe 旁边即可(可从虚幻引擎安装目录取得,例如 Engine\Binaries\DotNET\UnrealBuildTool\)。

校验

见 SHA256SUMS.txt。

许可

GPL-3.0,继承自上游。见仓库内 LICENSE 与 NOTICE。