这几天在折腾emote,想要尝试魔改出一个能够能够显示emote的桌面精灵然后把巧克力和香草放桌面上当桌宠,但是最后显然这个不是我能够在完全不了解emote的原理,并且不会使用emote的api能够做到的事情。
起因
一切的一切还得从很久很久之前说起,那时候我应该还是初中,因为一些偶然,我在steam上看到了nekopara-vol1,的试玩版,然后又在试玩版的评论区里发现了包含本体的补丁,然后……
总之就是,猫娘画得非常可爱,而且还会动,觉得非常神奇。之后我也有研究过拆包想要弄出这个会动的立绘,一开始我还以为这也是live2d,后来拆出一堆.psb
文件,我才认识了emote,然后很不幸,我最后发现,这些立绘被加密了,然后就不了了之了。
直到最近,因为各种原因,我无意中又搜索了一下,居然看到了这篇文章:[全网最详细]猫娘乐园nekoparaextra,vol0,1,2,4xp3解包
这里面给出了解密立绘的密码,终于这个困扰了我多年的问题终于解决了,我成功的用FreeMote打开了香草的立绘。
之后我又萌生出了一个念头,只要把背景和边框隐藏掉,不就可以当桌面精灵了吗,正如我以前魔改PainterEngine的Windows平台的框架代码的时候一样,于是就踏进了神坑。
FreeMote编译失败
因为FreeMote带有个viewer,所以我最开始的想法就是,直接拉FreeMote下来魔改viewer部分的窗口属性部分的代码,然后就完成了。
实际上,拉取代码,然后先点“生成解决方案”看看,果然不出意外的出意外了,报了一堆错,都是些Nuget包之类的错。因为我没写过C#,也没用VS编译过项目,这个东西我还真不会了,按照网上说的给Nuget添加源也没解决,而且翻了项目的issues和wiki也没有说怎么构建或者说构建的时候出现的问题。
最后在我到处乱弄的时候,无意间发现,我硬盘里居然还留有emote官网的emote Windows SDK,一个非常简单的用C++语言写的示例,打开编译,然后复制一下库文件过去,居然真的能运行,于是又开始了第二个神坑。
emote SDK的一堆问题
这个的坑最多,虽然很多问题都是语言造成的。
VS的编码问题
一开始,我打开的时候虽然显示的是乱码,但是我无视了乱码,直接编译运行,它没有任何问题,但是我不可能一直看着乱码编写,所以我又打开了vs code,把编码从日文的Shift_JIS
转为UTF-8
,然后我也看不懂日文,于是我一边用翻译软件把注释翻译成中文,一边大致了解一下每个函数的功能。
翻译完注释之后,还好我又点了一遍运行,不然等我改了代码之后,我可能永远不会知道,改了编码会影响VS的编译,非常的逆天,而且我还是用的UTF-8
编码,居然会因为编码问题导致编译错误。
然后我又一直按撤回,撤回也没用最后又把项目删了去emote官网重新下回来,最后才发现,这是改了编码的问题。最后上网得到的解决方案有两种,一种是装插件强制使用UTF-8 no bom
,一种是使用UTF-8 bom
。很好又无意中了解到了没有用的知识。
BOM(Byte Order Mark),字节顺序标记,很不幸VS用的是UTF-8 bom
编码,这样在windows之外的平台会有一些兼容性问题,所以才会有强制使用UTF-8 no bom
的插件,但是我现在只想省事,所以编码转成UTF-8 bom
问题解决,然后又重新写一遍中文注释。
打开香草的psb闪退
然后很显然的发现了psb文件名是硬编码到代码中的,于是我直接把香草的psb文件改成了emote_test.psb
然后放到同一目录下然后运行,果然不出我所料,窗口一闪而过,报运行时错误了。
打开VS调试,然后发现并没有什么用,因为调用了emotedevice.dll
之后出错的,这个是官方给的动态库,emote的实现没有开源,这调试了跟没调试一样,我也不知道是什么问题,官方的psb和导出的psb都能通过FreeMoteViewer打开。
然后我猜测,会不会是动作名和口型名的问题,但是应该也不是,虽然代码里面确实硬编码有动作名,但是那个是通过触摸切换的,刚开始打开会是默认待机动作,不会直接导致不能打开。然后果然改了动作名也没用。
导出格式不对
之后我又试了WebGL SDK,同样也是把psb换成香草的,一样是打不开,然后我把webgl的psb拖到FreeMoteViewer的时候出现了突破点,颜色显示不正确,然后我就猜到了,好像是说这个可以导出多个平台使用的文件,也就是说可能每个平台的psb都是不同的,于是我又下了krkr平台的SDK,一样的替换文件,一样的闪退了。
之后用不同平台的官方案例的psb相互测试,发现确实不同平台之间不能兼容,但是FreeMoteViewer都能显示,只是webgl平台的颜色会不正常,真是想不通为什么同样的数据文件要区分平台,同样的立绘应该在每个平台都能显示同样的效果,这还为了每个平台单独开发了接口以及格式,然后制作软件能导出后缀名相同但是格式不同的数据文件。
最后发现,FreeMote有把psb拆成json和图片的工具,把这几个psb全都拆了对比之后发现,确实是分平台的,而且webgl(ems平台)用的颜色编码是ARGB8,krkr的颜色编码是ARGB4444,不过换个角度,如果是krkr平台的,那对我来说就没用,我需要的是windows平台使用的。
于是我继续看发现FreeMote还有把psb转成mmo的命令,我想着转完之后我自己再转导出成windows平台就行了,于是下一个神坑。
emotefuri
这个软件也是全日文,而且连软件名和安装目录都是日文,虽然网上说可以用apploc来安装解决乱码问题,但是我见硬装也能打开,就不折腾了,然后一打开,嗯软件界面没有乱码,只是,满屏幕片假名鬼才看得懂啊。
而且这个免费版不能导出psb,我也是没有注意看,虽然我就算注意看了也看不懂,官网其实就已经说了免费版不能导出psb,总之这个也是白忙活了,不过还好我不会画画,我也没有想过我能够用这个画出会动的美少女。所以这个坑也到此为止。
emotewin
有时候,人如果长眼睛,可以减少很多麻烦,就比如,如果我一开始就看到,krkr导出的文件里面,有一个是emotewin,可能我就可以少走一个坑。我在重新打开nekopara-vol1的时候发现有个emotewin,文件和emote里面的差不多,然后也是解了个psb来看,发现是windows平台的,嗯很好看来前面也是白弄了这么久。继续试验,FreeMoteViewer能打开,用windows SDK打开闪退,跟之前一样。
总结
总结一下折腾的这几天学到了什么。
- emote导出的psb文件虽然后缀都一样,但是是分平台的,不同平台之间不通用。
- 一个好用的json可视化网页版工具:jsonhero
- 解决VS乱码问题,最简单的方法就是源码全部保存为
UTF-8 bom
编码,不要管什么兼容性。如果有什么东西让你不得不使用VS来开发,那它大部分情况下都是运行在Windows平台,而不是跨平台的。
最后
暂时先不折腾了,过两天就回学校了,还得准备补考,而且服创的项目也鸽了好久了,本来是说寒假做完的,结果拖到寒假结束都没动。等什么时候有时间了再从emote的api开始研究,这里就先挖下一个神坑。