为给《圣骑士莉卡物语》去码看了不少专栏,现将见到的通用性方法记录于此。格式为专栏链接+内容概括,存在相同方法将省略,类似方法简化描述。
其实不太明确这样是否算转载和摘编他人专栏,如果反馈侵权会尽快删除。
该专栏介绍了三大类方法。
A1. 修改.assets方法(live2d)
使用AssetStudio工具加载游戏文件夹。
搜索找到同时带有“live2d”和“mosaic”字段的文件,记录其Path ID(和Size)及来源的.assets。
根据记录的信息,使用UABEA工具打开相应.assets并删除文件。
A2. 修改.assets方法(shader)
使用AssetStudio工具加载游戏文件夹。
搜索“mosaic”,找到含有mosaic字段的Shader类型,记录其Path ID(和Size)及来源的.assets。(还可以寻找带有_CellSize的shader)
根据记录的信息,使用UABEA工具打开相应.assets并选中该文件,“Export Dump”为txt格式。
打开txt,用替换功能把“0 SerializedShaderFloatValue colMask”下一行的“0 float val = 15”全部替换为“0 float val = 0”,保存退出。
UABEA选中原文件,把修改后的txt “Import Dump”回去完成修改。
A3. 修改.assets方法(mesh)
此专栏中带过,在[2]中提及。
该大类方法,注意对修改的.asset文件进行备份,以防修改不当导致崩溃等。若有如data.unity3d等文件,可能需要用AssetStudio解包后修改。
B. 修改Assembly-CSharp.dll
用dnSpy工具加载该文件。
搜索mosaic,点击结果跳转到类。
编译类,将“float”浮点数的值改为“0.01f”(要足够小)。
编译后保存。
该方法同样注意文件的备份。另外:其实这部分语焉不详,建议看[4]。
C. BepInEx框架(UniversalUnityDemosaics插件)
在游戏.exe文件所在目录安装合适版本的BeplnEx框架。
启动游戏。若成功加载,在../BeplnEx下将生成config、plugins等文件夹。
在GitHub(或其他地方)下载对应BeplnEx框架版本的UniversalUnityDemosaics插件。根据readme.md说明,逐个尝试,单独(除非特殊说明需要联合)将.dll文件放入../BeplnEx/plugins下,启动游戏查看去码效果。
在../BeplnEx/config/BepInEx.cfg令"Logging.Console.Enabled = true",打开控制台,能查看BepInEx框架和插件是否正确加载。同理,使用了BeplnEx框架插件的游戏,想要关闭控制台,可以令"Logging.Console.Enabled = false"。
用AssetStudio定位到带“mosaic”字段的mesh文件,UEBEA删掉。
该专栏提出:与mosaic相关文件,通常位于resources.assets、sharedassets0.assets、globalgamemanagers.assets。
介绍了AssetBundleExtractor这款工具。
针对带有mosaic字段的material文件,查看其内容(比如用UABEA导出为txt)。
“PPtr<Shader> m_Shader”下的信息,提供了关联Shader文件的FileID和PathID(通常在globalgamemanagers.assets,可能FileID对不上;PathID一定对上)。进一步对shader进行 [1]-A2 的修改;或者用UABEA修改该material中关联shader的ID信息,如“int m_FileID = 0”和“SInt64 m_PathID = 0”。
修改该material的“int m_CustomRenderQueue = xxx”。若原本为一个很大的值,代表其被很迟渲染。值改为0,较早被渲染从而被覆盖,呈现为去码。
该专栏与[1]-B思路相同,但阐述详细,案例更复杂。
用dnSpy加载Assembly-CSharp.dll文件。
搜索“cg”字段和“方法”类型,查看搜索结果中可疑的“类”。案例中名为“wcgmode”。
初步筛选这个类中的可疑方法。案例中筛选出init()、ReloadThumb(int)、Show(GameObject)三个方法。
仔细查看,关注这些方法是否有调用其他奇怪的方法。案例中ReloadThumb(int)调用了SetMSC(GameObject),MSC似乎是mosaic的缩写。
后续的具体修改详见原专栏,看不懂了...
该方法需要一定的逆向经验。
该专栏提出:使用Il2CppDumper加载GameAssembly.dll、global-metadata.dat文件,导出dll到游戏data目录下手动新建的Managed目录,以供AssetStudio加载游戏目录时选用dll目录。
针对用类似[1]-A方法搜索得到的MonoBehaviour文件,修改参数。案例中令相机镜头前马赛克滤镜的生效距离为0——“0 float thresholdDist = 0”。
在对《圣骑士莉卡》去码的过程中,个人感到上述针对shader的修改效果存在瑕疵,提出可以尝试修改shader的zwrite值为0。
这一链接指向f95zone论坛的工具主题帖,由kumarin建立。
kumarin给出了BeplnEx框架的插件工具Texture Replacer,能够在游戏运行时,使用特意准备好.png或.asset进行texture的替换。插件不修改游戏的.asset,从而伴随游戏更新不太会出问题。(除非插件、框架、游戏之间存在版本不兼容)
个人尚未仔细阅读,因此无法说明具体实现。
该插件能作为解决游戏图片本身带码、模型贴图带码的途径之一。
存在的麻烦:需要准备对应的去码素材,以及具体实现上的困难。
有点像自己做个补丁了
mosaic,mozaic,msc,pixel,censor,...