游戏cg提取工具

您所在的位置:网站首页 如何导出galgame的cg 游戏cg提取工具

游戏cg提取工具

2022-10-07 12:10| 来源: 网络整理| 查看: 265

封面:梦回2019ICPC银川区域赛热身赛(

自从Steam版的蒼の彼方のフォーリズム发行之后,就一直惦记着游戏的CG资源,毕竟宣传的时候可是着重强调了2K(2560*1440)的分辨率。但是经过搜索,网上现有的解包都是针对DVD版蒼の彼方のフォーリズム的,那时候的封包是基于bgi/arc的格式,而且没有2K分辨率的资源,如下:

aabdaaa859a9b8d89af0a8ca74230171.png 自己装的蒼の彼方のフォーリズムPerfectEdition,可见BGI/arc封包形式

而Steam版的资源文件就完全不一样了:

6eb43445992aa2af51577f9daa184998.png 等等......这不是Uni.......

竟然是Unity的文件夹形式,那先直接扔AssetStudio里看看:

8589e80652baf36f49c5dd8a95267190.png

很遗憾,从文件夹中读取到的有效资源只有OP/ED/ROUTE_END影片,不过先收下了(

游戏发售后的研究就这些了......

剩下的事还要从蝙蝠说起......转眼到了2020年,在家无聊到发霉的人又开始打起了各种Galgame资源的主意

由于游戏是基于.NET的Unity实现,那

.NET反编译方便啊游戏运行时玩家要查看CG必然会从封包中提取资源,而提取的方式会以dll库函数/直接写在可执行程序中的形式存在

以下Python脚本,展示了从.dat文件中提取文件的逻辑:

#! /usr/bin/env python3

代码各部分的功能写在注释里了

UPDATE:之前写文章的时候懒得去找dll中的方法,但前天把三色s破解之后顺手又逆向了苍彼的方法,顺着关键词找方法,定位在Assembly-CSharp.dll下的PRead方法中,有:

private

有兴趣可以对照两版本代码了解其解密过程,Github地址

调用方法:

从input_file.dat提取文件到output_path中:python3 .py 查看 input_file.dat文件中的内容

通过查看各dat文件的内容得到evcg2.dat中存放了游戏的2k分辨率的CG

我们的目标是 evcg2.dat中打包的CG,因此执行 python3 extract.py evcg2.dat ./extracted/ 提取后的目录如下:

39a053360f78a0b137988d7f84a32945.png evcg_cersor是和谐后的CG/evcg是游戏CG/sd是Q版CG

然后还有对补丁文件的提取......由于场面过于xxx,因此这里不放图了......

一点插曲:去下18xPatch的时候,意外的发现18x补丁还更新了Perfect Edition里的h场景......

真 事 好 啊

还有一个问题是提取出来的文件形式都是webp的,而且分镜依然是Base+Sprite的组合方式:

bba54efb5ff71badc6de912aa101ca1c.png 心跳文学俱乐部脸(

cn/en/jp/tc中的图含有文字,分别存放了不同语言版本的图片。接下来,需要把webp形式的图片转为png以便进一步的处理(记得把含有语言的CG也拿出来,当然,还有18x的;如果有需要,把Q版的图片文件也放到同一个文件夹下):

import

ffmpeg真的是全能,在CG文件夹下执行此脚本,转换后的PNG图片存放在convert目录中。

但是合成的时候我直接迷惑——虽然说底图和Sprite区别很明显的,但是应该按什么形式来组合成正确的CG呢,一不小心就合成出了DDLC风格的CG:

1c3b1ce2013e810055c023d6040c445e.png DDLC风(迫害明日香√

461123077137d2c867ccabdc8915c485.png 正常的组合

游戏一定是将CG的组合方式记录到的某处,再次对游戏文件分析,system.dat 中的内容引人注意:

a3c74d1dc37fccf6ebca40bb60bc1477.png vcglist.csv

vcglist.csv 文件内容如下:

...... VCG01_351 AKCG01_A3 AKCG01_B5 AKCG01_C1 VCG01_361 AKCG01_A3 AKCG01_B6 AKCG01_C1 VCG01B_310 AKCG01B_A3 AKCG01B_B1 VCG01B_320 AKCG01B_A3 AKCG01B_B2 VCG01B_330 AKCG01B_A3 AKCG01B_B3 VCG01B_340 AKCG01B_A3 AKCG01B_B4 VCG01B_350 AKCG01B_A3 AKCG01B_B5 VCG01B_360 AKCG01B_A3 AKCG01B_B6 VCG02_11 AKCG02_A1 AKCG02_B1 VCG02_12 AKCG02_A1 AKCG02_B2 VCG02_13 AKCG02_A1 AKCG02_B3 VCG03_11 AKCG03_A1 AKCG03_B1 ...... 第一列为CG的命名,前面的数字代表CG所属组,后面的数字代表CG所属分镜其后若干列代表合成该CG所需的文件的文件名(无扩展名)

将转换后的所有png图片、vcglist.csv、以下combine.py文件放在同一文件夹下,创建combine文件夹存放合成后的CG:

import

我是在WSL环境下(安装了ImageMagick的convert命令)执行该脚本,如果合成出现问题(如缺少文件),会在同目录下的failed.log日志中记录合成失败的CG,以此为根据查询vcglist.csv找到缺少的文件。

P.S. 合成要花挺长时间......可以开多线程来进行,但是正好要睡觉了,所以就没多想,写完开始运行就睡了(逃

第二天:

2f9a6f86075eed74c49258436ad097a7.png 我:Yes!

b9acf4c264842ced33cb57cf0630c6a6.png

以上,蒼の彼方のフォーリズム的CG提取也就告一段落了,不过合成出来的文件真的多且大(3000+文件&&7G+大小)

展示几张合成的CG,点击查看原图就是2k分辨率图(当 心 流 量):

d9e45f8137f5e3f91b692683a84d9840.png

422eeeb89fa08aca4f99f815253013f7.png

d06121de080cdba64c95237067c466fd.png 吃瓜,都可以吃.jpg

b91ba96da41c2738aa3107b2c81e2e32.png 串戏的米泽圆配音

75a934cdc84a74d5039fa25b9eda9c7c.png 来张全家福

最后的吐槽:

雪碧社你复活了extra2就gkd!雪碧社的CG真挺好(柚子社你多整点日常CG)我永远喜欢小木曽雪......莉佳!(划掉,みさき是我老婆)他们什么时候更新的18x补丁啊我怎么不知道(蹲一个看看多少人记得2019银川热身赛的题(


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3