Skip to content

rft: project update - #5

Draft
SherkeyXD wants to merge 7 commits into
mainfrom
rft
Draft

SherkeyXD wants to merge 7 commits into
mainfrom
rft

Conversation

@SherkeyXD

@SherkeyXD SherkeyXD commented Oct 8, 2026 •

Copy link
Copy Markdown
Owner

标准版还要做的

对照原计划与 rft 上已推送的提交。P6(三平台 CI、tag 发布、vgmstream 构建脚本、把 DLL 移出 git)不在本文。合成样本测试 24 个已通过。日期:2026-10-08。

还没关上的验收

真实 VFS 快照

仓库里没有游戏目录。BLC、AKPK、BNK、SparkBuffer、USM 已有合成样本,整包导出的相对路径、大小和 SHA-256 还没生成,后面的差异也没法登记。
用当前版本导出 Table、Lua、Video、InitAudio、一个语言音频和 BundleManifest,记下每个输出文件的相对路径、大小和 SHA-256。之后每次改动重跑比对:差异要么是 bug,要么写进下面的预期变更。

在 Windows 上验证 WEM 转码

内存流的 read、size、open、close 回调有单测。libvgmstream 是 Windows DLL,这台 Mac 上没有跑过真实解码。
在 Windows 上用随附 DLL 把 WEM 转成 WAV,确认主版本检查通过、解码结束后没有残留临时文件,并记下主音频块的峰值内存,以及各编码器输出的文件哈希。

格式化工具与 CI 格式检查

已有 .editorconfig 和 Directory.Build.props。还没有把 CSharpier 的版本钉进 .config/dotnet-tools.json,CI 也只跑了 dotnet test。

把 AOT / 裁剪警告当失败

发布步骤已经打开 EnableAotAnalyzer 和 EnableTrimAnalyzer,这次本地构建是 0 警告。CI 没有 -warnaserror,以后出现警告时流水线仍会通过。

标准版不含

list 子命令和 --filter 不在标准版里,现在也没做。DryRunSink 因此没做。现有输出会拒绝写出输出目录的路径。

和计划原稿不同,已按现状落地

这些不是待办。除非要严格按原稿改实现,否则保持现在的做法。

位置 现在的做法
SparkBuffer 类型表按次创建,读取用 SpanReader,对齐是 (pos + 3) & ~3。输出仍走 JsonObject.ToJsonString,缩进和转义与旧解码器一致;重复 map key 仍是后写覆盖。没有改成 Utf8JsonWriter。
音频内存 一次只解密一个 PCK,WEM 任务引用这块缓冲区的切片,转完再读下一个。没有有界 Channel,内存里也不会同时放多个 PCK。
README 选项定义同时驱动解析和 --help。README 按这个输出抄过,不是从程序输出原样生成。
vgmstream 关闭 DLL 路径改为托管内存流,解码结束由自己的 close 回调释放。stdio 临时文件和按偏移调用 libstreamfile_close 已去掉。版本检查仍要求主版本为 1。

做快照时要登记的输出变化

真实数据比对时,这些差异记进预期清单。

位置 和旧版本的差别
未映射音频 独立 WEM 和 BNK 里的 WEM 都落到块的默认语言,不再出现 Unknown
USM 再次导出覆盖 name.ext、name_1.ext,不会再长出 _2、_3
PLUG raw 模式写成 .plg,wav 模式跳过
Lua 校验 只靠宽松字节范围通过的文件会保留密文,不再当成源码
退出码 成功 0,参数错误 2,运行失败 1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant