──────────────────────────────────────────────────────────────
【技术说明(如果你想汉化简体版的话可能有所帮助)】
──────────────────────────────────────────────────────────────
数据容器:KCEJYUGI 归档格式
· 魔数 8 字节 + uint32 条目数 + N × 0x10C 字节条目表
· 条目 = 256 字节文件名(每字节循环左移 4 位加密)
+ uint32 偏移 + uint32 原始大小 + uint32 压缩大小
压缩算法:yaneurao Game SDK 的 CLZSS(Okumura LZSS 变体)
· 4096 字节环形缓冲,写指针从 4078 开始,F = 18
· 标志位含义与常见 LZSS 相反:1 = 字面量,0 = 匹配
· 偏移是环形缓冲的绝对位置(12 位),不是相对距离
文字编码:Shift-JIS
· 卡牌数据与界面文本均为此编码
· 汉化流程:中文(GBK) → 繁体 → cp932 字节
· 「阱」「擊」等字不在 cp932,需替换为日文新字体「罠」「撃」
音频处理:
· Voice.dat 同样是未压缩的 KCEJYUGI 容器
· 语音裁短:截断 WAV 数据并对齐采样帧,修正 RIFF/data 长度
· BGM 减速:重采样(数据变长、采样率不变),音调同步降低
数据结构必须与原版尺寸完全一致,否则游戏会静默退出(无任何提示)。
这是踩过的最大坑。