Skip to content

Releases: CCB-TEAM/Prism

Prism v1.2.3

Choose a tag to compare

@Xuewu-awa Xuewu-awa released this 18 Oct 03:22

Prism v1.2.3

一张「未压缩」贴图修好了,顺手把贴图替换的两份代码合成了一份。

修好:未压缩贴图替换失败

现象:某些贴图(例如 KARDS 的 T_standard_ammo,看着就是一张普通插图)在桌面端点「替换」
会报 Could not detect a supported pixel format from the asset.,而原始预览完全正常。

原因有两层:

  • 这类贴图是 PF_B8G8R8A8(未压缩 32 位彩色),尺寸还不是 2 的幂(2090×2311),
    数据全部内联在 .uexp 里,没有 .ubulk;
  • 桌面端的替换其实是交给 UAssetCLI 子进程完成的,而 CLI 为了保持精简,自带了一份
    纹理解析代码 —— 那份副本里没有未压缩格式,也还留着「尺寸必须是 2 的幂」的老判断。
    于是主程序看得懂、能预览,CLI 一进去就抛异常。

现在 CLI 和主程序共用同一份解析代码:未压缩贴图直接按像素打包,PF_DXT1 用内置 BC1 编码,
两者都不再需要 astcenc / texconv。同类资产(非 2 的幂、没有 ubulk)也一并受益。

顺带

  • 替换失败时界面只显示一行原因,完整的 CLI 输出写进日志(之前整段堆栈会铺在替换项上);
  • 没有外部编码器时,不再拦掉本来就能内部编码的格式;
  • 纹理解析 / mip 回写只剩一份实现(UAssetTexture.Core),以后不会再出现
    「主程序能预览、CLI 替换不了」这种分叉;
  • 261 项自动化断言全绿,发布包冒烟测试通过。

安装

  • Windows:解压 zip,双击 Prism.Desktop.Desktop.exe
    (UAssetCLI/ 与 tools/ 要和它放在同一目录)
  • Android:直接覆盖安装 apk(versionCode 10 / versionName 1.2.3)

Prism v1.2.2

Choose a tag to compare

@Xuewu-awa Xuewu-awa released this 17 Oct 18:02

Prism v1.2.2

手机端这次真的能改音频了,另外修了两个用起来很难受的地方。

手机端支持音频替换

以前只有 Windows 能改音频,因为编码器是个外部 exe,手机上跑不起来。现在 BINKA 编码器
直接编进 App 里(桌面 prism_binka.dll、Android libprism_codecs.so,同一份源码):
手机上选中 SoundWave → 选素材 → 构建 Pak,整条链路都能跑。

桌面端也跟着受益:不再强制需要 tools/binka_encode.exe,内置编码器优先,
exe 只作后备。

手机端选素材不再挑格式

  • 没有扩展名的文件(很多下载缓存就是一串哈希名)现在按文件头识别,
    不再误报「需要 ffmpeg」——桌面的同一个坑也一起修了;
  • m4a / aac / flac / opus 交给系统解码器,不用先转格式;
  • 认不出来的格式会明说是什么(例如「M4A / MP4 容器」),提示也分桌面/手机两套。

本地化替换页修好了

之前 .locres 加到替换列表只会显示「直接替换字节,不改资产」,翻译编辑器其实一直在,
只是被一个分支顺序挡住了(.locres 是裸文件,不是 .uasset 包)。

现在:搜索词条(连译文一起搜)、直接改译文、回车写回、导出 JSON,
改完列表里会显示「已编辑」而不是一直「待替换」。

cooked 的 locres key 是 CityHash64 哈希,左列看到的是哈希串;按中文内容搜就能定位。

其它

  • 252 项自动化断言全绿,发布包自带冒烟测试通过
  • Android versionCode 9 / versionName 1.2.2

安装

  • Windows:解压 zip,双击 Prism.Desktop.Desktop.exe
  • Android:直接安装 apk(覆盖安装即可)

Prism v1.2.1

Choose a tag to compare

@Xuewu-awa Xuewu-awa released this 17 Oct 15:31

Prism v1.2.1 更新

界面整体重做了一遍,同时加了音频替换、视频替换和音频 / 视频预览。

新增功能

音频替换
选中一个 SoundWave,给它一段 WAV / MP3 / OGG,自动编成游戏用的 BINKA 写回 —— 声道、采样率、时长会一起更新。
音质 0–9 可调;长音频自动分块(跟游戏自己的切块方式一样),整首 BGM 也能换。

视频替换
选中 .mp4 / .bk2 给个新文件即可,按字节替换;选中媒体源资产会自动定位到它引用的那个视频。
手机端也能用。

音频预览
内置播放器:播放 / 暂停 / 进度条拖动。BINKA 音频在桌面端也能直接听(自带解码库)。

视频预览
预览栏里直接播放(静音),带封面帧、时长 / 分辨率、进度条;
没有 ffmpeg 时给「用系统播放器打开」的入口。

界面

  • 侧栏可折叠(带拉伸动画),窄窗自动收起
  • 欢迎页桌面改成排版版,手机 / 窄窗仍是入口卡片
  • 四个工作区逐页重排:小节标签、空状态、控件层级统一
  • 设置页改成单列阅读宽度;替换页重排为左右双栏、各自带头部
  • 页面切换、悬停、卡片描边都补了过渡动画,不再"瞬切"

修复

  • 文件列表的空状态会压在已经打开的 Pak 上
  • 选中视频时状态栏只报一句 Object reference not set
  • 进度条在触摸板 / 触摸屏上拖不动
  • 返回上一级后列表停在原来的滚动位置 —— 现在会选中并滚到刚离开的那个目录
  • 音频替换原先只能换 1 分钟以内的素材(现在自动分块)

使用说明

  • 音频替换仅 Windows 桌面版(编码器是外部 exe);视频替换两端都能用
  • 音频替换需要先在设置页选好映射文件(.usmap / .jmap)
  • 发行包已自带 tools/binka_encode.exe、tools/ffmpeg.exe 与 UAssetCLI/,解压即用,别拆开目录

v1.1.2 — Windows 端补上 Oodle 运行时

Choose a tag to compare

@Xuewu-awa Xuewu-awa released this 05 Oct 14:26

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

下载

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

解压后请保持目录完整 —— UAssetCLI/、tools/ 与 Oodle 运行时必须和主程序放在一起。

本版:Windows 端补上 Oodle 运行时

背景:Android 一直自带 Oodle(liboodle-data-shared.so 通过 AndroidNativeLibrary 打进 APK),但 Windows 端从来没有接过这条路 —— 仓库里没有任何构建机制产出 oo2core_9_win64.dll,它只在少数开发目录里被手工拷过,发布包一直缺它。

后果很严重:设置里勾选「替换时使用 Oodle 压缩」后,打包用的 Rust 库 repak_bind 按名字加载 Oodle 失败 → panic → abort 整个进程(Windows 上 0xC0000409)。这种终止发生在原生层,.NET 的 try/catch、AppDomain.UnhandledException 全都拦不住 —— 用户看到的就是"点一下闪退"。

本版做了两件事:

  1. Windows 端按 Android 同样的方式接上 Oodle:third_party/lib/win-x64/oo2core_9_win64.dll,构建与发布都自动复制到主程序旁边。两个平台的 Oodle 压缩现在都是开箱可用。
  2. 调用前探测 + 自动降级(v1.1.1 引入,本版保留):万一 Oodle 运行时不在,打包会自动改用不压缩并如实报告,而不是崩溃。探测按平台使用正确的库名(Windows oo2core_9_win64.dll / Android liboodle-data-shared.so)。

Oodle 属于 RAD Game Tools / Epic Games,受虚幻引擎 EULA 约束;相关说明见仓库内 third_party/README.md。

上一版(v1.1.1)的内容

  • 修复开启「Oodle 压缩」时闪退(探测 + 降级)
  • 设置页「信息」新增 Oodle 状态行

v1.1.0 的内容

  • 主题切换:跟随系统 / 浅色 / 深色。浅色主题在大屏上是一整片亮面,深色主题正文为纯白(15.1:1)
  • 只放大文字,不再整体缩放控件与间距
  • 宽屏两列布局 —— 设置页从"比窗口还高"变成"一屏看全"
  • 对比度修复 —— 卡片标题 2.5:1 → 5.4:1
  • 说明文字收进各页共用的「使用说明」浮层
  • app.manifest 补上 DPI 感知声明(高分屏不再位图拉伸)

安装

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);缺映射的贴图会被跳过并在明细里说明。
  • 本地化三路合并只在提供基准文件时生效。
  • 浏览页左侧列表宽度固定,还不能拖动调整。
  • 解包不需要 Oodle:只有解压 Oodle 压缩的条目时才用到,而多数 mod / 补丁 Pak 并非 Oodle 压缩。实测在不含 Oodle 运行时的环境里读取 Pak 完全正常。

校验

见 SHA256SUMS.txt。

许可

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

v1.1.1 — 修复开启 Oodle 压缩时闪退

Choose a tag to compare

@Xuewu-awa Xuewu-awa released this 05 Oct 14:12

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

下载

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

解压后请保持目录完整 —— UAssetCLI/ 与 tools/ 必须和主程序放在一起。

本版修复:开启「Oodle 压缩」会直接闪退

现象:设置里勾上「替换时使用 Oodle 压缩」后,执行 Pak 合并(或转换、构建补丁)时程序瞬间消失,没有任何报错。

原因:打包用的是 Rust 写的 repak_bind,它在做 Oodle 压缩时会去加载 oo2core_9_win64.dll。发行包按授权约定不包含这个库,于是加载失败 → Rust panic → abort 整个进程。Windows 上表现为 0xC0000409,进程直接消失。

关键在于:这种 abort 在 .NET 侧完全拦不住 —— try/catch、AppDomain.UnhandledException、TaskScheduler.UnobservedTaskException 都无效,因为进程是被原生代码终止的。所以不能靠"捕获异常再提示",只能在调用前判断。

修复:打包前先探测 Oodle 原生库是否可加载(NativeLibrary.TryLoad)。

  • 可用 → 照常按 Oodle 压缩;
  • 不可用 → 自动退回不压缩,打包继续完成,并在日志与页面上说明原因;
  • 设置页「信息」新增一行 Oodle 状态,一眼能看出为什么没有压缩。

这样即使勾着 Oodle 压缩,也不会再闪退 —— 只是输出包大一些(不压缩)。

想真正用上 Oodle 压缩:把 oo2core_9_win64.dll 放到 Prism.Desktop.Desktop.exe 旁边即可(可从虚幻引擎安装目录取得,例如 Engine\Binaries\DotNET\UnrealBuildTool\)。发行包不含它是因为其再分发受 RAD/Epic 授权约束。

顺带说明:解包不需要 Oodle

有用户问"没有 Oodle 怎么解包" —— 实测(在一份不含 oo2core 的包里)读取 Pak 完全正常:98 个文件、搜索、贴图预览全部成功。Oodle 只在需要解压 Oodle 压缩的条目时才用到,而多数 mod / 补丁 Pak 并不是 Oodle 压缩的。只有写入时勾选 Oodle 压缩才会触发上面这个崩溃。

上一版(v1.1.0)的内容

  • 主题切换:跟随系统 / 浅色 / 深色。浅色主题在大屏上是一整片亮面,深色主题正文为纯白(15.1:1)
  • 只放大文字,不再整体缩放控件与间距
  • 宽屏两列布局 —— 设置页从"比窗口还高"变成"一屏看全"
  • 对比度修复 —— 卡片标题 2.5:1 → 5.4:1(原先 142 处 Opacity 压暗把对比度乘没了)
  • 说明文字收进各页共用的「使用说明」浮层
  • app.manifest 补上 DPI 感知声明(高分屏不再位图拉伸)

安装

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);缺映射的贴图会被跳过并在明细里说明。
  • 本地化三路合并只在提供基准文件时生效。
  • 浏览页左侧列表宽度固定,还不能拖动调整。

校验

见 SHA256SUMS.txt。

许可

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

v1.1.0 — 界面重做:主题切换 / 可读性 / 宽屏布局

Choose a tag to compare

@Xuewu-awa Xuewu-awa released this 05 Oct 11:19

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 读不出任何文件(会直接报错,不会产出废包)。

本版重点:界面重做(可读性 + 主题)

上一版的界面是按手机尺寸设计的,在 1920 宽的桌面上字小、内容挤在中间一列、说明文字又多。这一版把界面重新做了一遍,每一步都基于实测数据。

1. 新增主题切换:跟随系统 / 浅色 / 深色

浅色主题在 1920 屏幕上就是一整片亮面,长时间看眼睛累。深色主题其实早就写好了,只是跟着系统走,系统是浅色就一直用不上。

现在「设置 → 通用 → 主题」可以直接切换,会持久化,下次启动自动套用。深色主题下的正文是纯白(对卡片 15.1:1)—— 深底白字不会刺眼,与浅色主题的处理方向正好相反。

2. 只放大文字,不再整体缩放

最初试过把整个界面等比放大 1.2 倍,结果是内边距、控件、行高一起变大 —— 读起来像"把手机界面拉大",而且页面更高、一屏能看到的东西反而更少。

现在字号走应用级资源:宽屏时只替换这一组字号的值,内边距与控件尺寸完全不变。

3. 宽屏用宽度换高度

设置页有 8 张卡片,竖排时比窗口还高,一屏只能看到三张半、必须滚动。宽屏改为两列:一屏能看到六张。合并页同样两列(待合并列表与输出并排),整页缩到屏幕上方三分之一。

窗口宽度低于 1200px 自动回到紧凑单列 —— 手机端布局完全不变。

4. 修掉被 Opacity 压没的对比度

界面发灰发糊的根因不是字号,是对比度。全项目有 142 处用 Opacity 压暗文字,而 Opacity 是乘性压暗:

文字用途 修复前 修复后 标准(正文 ≥4.5)
正文 17.4:1 17.4:1 ✅
卡片标题 2.5:1 5.4:1 ✅
字段标签 1.87:1 5.4:1 ✅
提示文字 1.76:1 5.4:1 ✅

142 处 Opacity 全部去掉,层次改由字号与字重表达。

5. 两套主题的配色都按"看着不累"调过

浅色主题原本是纯黑正文 + 纯白卡片 = 21:1,过曝刺眼。现在:

浅色主题 深色主题
正文 #33322e(11.6:1) #ffffff(15.1:1)
次要文字 #67665f(5.2:1) #b6b6ba(7.5:1)
卡片 #f4f3f0 #262629
页面底色 #e4e3e0 #1b1b1d

6. 说明文字收进共用的「使用说明」浮层

各主要页面顶栏都有「使用说明」按钮,点开是各页共用的页内浮层,按主题切换内容(含操作步骤与截图)。页面正文只留状态与必须看到的提示。

7. 修复:缺少 DPI 感知声明

app.manifest 原先完全没有 DPI 感知声明。在 125% / 150% 缩放的屏幕上,Windows 会把整个窗口当成位图拉伸 —— 那才是真正的"字发虚"。现已声明 per-monitor v2。

上一版(v1.0.2)的内容

  • 修复 Pak 转换在桌面端几乎全部失败(39 张贴图原先只成功 1 张)
  • 新增「并入模组的其他文件」开关,免去再单独合并一次
  • 转换挂载到 0 个文件时直接报错,不再产出废包
  • Pak 合并去掉钉死的主 Pak,优先级改为越靠上越高
  • 新增「基准本地化」三路合并 —— 两份各改不同文本的模组现在能真正合并

安装

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 旁边即可(可从虚幻引擎安装目录取得)。

校验

见 SHA256SUMS.txt。

许可

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

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

Choose a tag to compare

@Xuewu-awa Xuewu-awa released this 05 Oct 08:09

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。

v1.0.1 — 双端发行版(修复贴图替换)

Choose a tag to compare

@Xuewu-awa Xuewu-awa released this 27 Sep 03:17

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

下载

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

解压后请保持目录完整 —— UAssetCLI/ 与 tools/ 必须和主程序放在一起,贴图替换与 Pak 转换依赖它们。单独把 exe 拷走会导致这两个功能不可用(应用启动时会在日志里提示"未找到 UAssetCLI")。

本版重点:修复贴图替换完全不可用

此前在部分资产上,替换贴图会静默失败——日志停在最后一级 mip 之后,没有任何错误提示。

根因是纹理尺寸被写死在导出数据的固定偏移(exportData[4] / exportData[8])。对部分资产该偏移恰好正确,但 KARDS 这类资产在导出数据前还有一段内联元数据,尺寸三元组落在 offset 80,于是读到 15x0 被当作真实尺寸:

  • mip 链整条错位,11 级 mip 只解析出 1 级;
  • 编码阶段因此只处理了最后一级;
  • 写回时 Buffer.BlockCopy 越界 → 进程带着异常结束。

现已改为扫描所有 (宽, 高, 深度=1) 三元组、过滤非 2 的幂与超范围值,按面积从大到小逐个尝试,取第一个能解析出完整 mip 布局的候选。

同类缺陷在 UAssetTexture.Core(Android 端替换与双端 Pak 转换所用)中一并修复:

  • 资产没有 .ubulk 时,载荷之后的 FByteBulkData 头会被误认成"外部 mip",抢先返回一个只有一级 mip 的残缺布局;
  • 内联 mip 的载荷偏移公式隐含"每级元数据长度恒定",而实测长度逐级不同,从第二级起会静默产出损坏贴图(不报错)。

另外补上 FString 长度的负向校验:原先只校验上界,负数长度会经未检查的溢出喂给 stackalloc,而栈溢出在 .NET 中无法捕获,会直接杀进程。

实测(真实资产 T_stz_5_katyusha,1024×1024 DXT1、无 .ubulk、mip 全内联):

修复前 修复后
解析出的 mip 1 级(4×4) 11 级(1024×1024 → 1×1)
替换结果 崩溃 成功,输出结构不变
各级载荷 未处理 11 级全部正确改写,颜色与源图吻合

功能

  • 浏览与预览:挂载 .pak,预览贴图 / 音频 / 三维网格 / 本地化 / 蓝图伪代码,导出与分享
  • 贴图替换:选图即生成补丁 pak
  • Pak 合并:多选 + 长按拖动调整覆盖优先级
  • Pak 转换:把另一平台 pak 中的同路径贴图移植过来,按主 pak 格式重编码;默认只输出改动资产(7 GB 主 pak + 1 贴图 → 685 KB)
  • 本地化:编辑 .locres、导出为 JSON,四种格式版本往返安全
  • 映射:.usmap 与 .jmap(含 .gz)按扩展名自动识别

安装

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,请在设置页填入。

校验

见 SHA256SUMS.txt。

许可

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

v1.0

Choose a tag to compare

@kardswalker kardswalker released this 23 May 04:21
Switch Prism license to MIT