前几天刚在dlsite入正中文版,费一番功夫进行去码。记录这段经历留作回忆,也权供有需者参考。
b站up主可爱的黑丸(UID: 12146005) 在其视频BV1Zy411q7kg的置顶评论中,提供了该版本的补丁下载渠道:
百度网盘前缀加1Dk7sXdvHmAbrj39OhoVcxw
提取码:0721 解压密码为0721
自己捣鼓好才发现这补丁。
这一部分内容被多个教程采用,应该没有问题。
打开AssetStudio工具,点击界面左上角file-extract file,选中路径..\HolyKnightRicca_v137zh\Game\HolyKnightRicca_Data下的data.unity3d文件并确定,再选择解包所得文件的存储路径。程序自行解包。
删除data.unity3d文件,并将解包所得文件放到上述路径下。
打开UABEA工具,点击界面左上角file-open,选择解包所得文件中的globalgamemanagers.assets并确定。
下拉列表,选择Path ID为192的条目(特定ID对应特定游戏版本),点击Export Dump,选择导出文件的存储路径并确定,导出文件为txt格式。
用记事本打开该txt文件,使用替换功能,将“0 float val = 15”全部替换为“0 float val = 0”,保存退出。
UABEA工具中仍选中Path ID为192的条目,点击Import Dump,选择修改后的上述txt文件并确定。
确认完成globalgamemanagers.assets的修改,关闭所有工具,进入游戏验证去码效果。
这一部分内容为个人探索所得,可能存在问题。
上述方法有效去除了马赛克,但视觉效果上仍有古怪之处,尽管b站、贴吧好像没人对此提问过。本来的打码区域变为透明,不恰当地遮挡了人物模型。如下图:

下方展示的改进,似乎能解决这一古怪。
将上述方法的步骤5改为:
用记事本打开该txt文件,使用替换功能,将“0 float val = 15”全部替换为“0 float val = 0”。再使用查找功能,查找“zwrite”,定位到文本“0 SerializedShaderFloatValue zWrite”,将其下一行修改为“0 float val = 0”。遍历全部的zwrite所在处并修改后,保存退出。
方法改进后的视觉效果如下图:

个人没有学习过unity,以下纯属通俗且可能错误的理解。
原方法使得ColorMask 0,不写入颜色,达成去码效果。但unity默认开启深度写入,导致去码后码所在区域与其他模型重叠部分像素被舍弃。
改进方法在原方法基础上,使得zwrite off,关闭深度写入。
个人误打误撞,目前没掌握系统的方法确定马赛克相关文件。
注意到旧版本去码教程中的Path ID为182,且其与Path ID 183文件的size之比约为1:6。假设游戏的更新使得这两个文件Path ID差值不变地发生了增减,并且size之比没有大的变动,在shader中基于此假设寻找可能的文件,得到Path ID为192。
另:在某旧版本去码教程的评论中,提到了v132的Path ID为192。
AssetStudio:https://github.com/Perfare/AssetStudio/releases
UABEA:https://github.com/nesrak1/UABEA/releases
[1]【去码+汉化】通过解包和修改文件实现的去马赛克教程!
链接:https://github.com/RiccaSinicization/RICCA-Chinese-file-public-version
[2] 圣骑士莉卡的物语去码文件制作过程视频演示/unity游戏去码的一种方案演示
[3] unity游戏去除mosaic方法
链接:cv14476957
[4] [UnityShader基础]04.ColorMask
链接:https://blog.csdn.net/weixin_30561425/article/details/98998275
[5] 透明混合为什么要关闭深度写入,不关闭会怎么样
链接:https://blog.csdn.net/a1047120490/article/details/106744930