密语提取CG记录

Catalogue
  1. 1. 接下来是正题,如何提取《密语》的CG
  2. 2. 引用

又是摸鱼的一天,这几天把《密语》推完了,果然现实中的妹妹绝对比不上二次元的妹妹,看着CG我的老毛病又犯了,提取出来(之前也提取过一些黄油,不过提取完之后就没看过,一直在硬盘里吃灰)。


接下来是正题,如何提取《密语》的CG

进入主目录发现文件是以.int形式封包的,我记得之前玩的ISLAND也是以.int形式封包的。

密语的打包格式跟ISLAND一样,ISLAND的游戏引擎为cat-system,这款引擎对应的打包格式是.int。

在网上搜索得到了一套Asmodean开发的逆向提取工具exkifint,针对的引擎 cat-system。
工具的使用方法很简单,里面提供了已经编译好的可执行程序,重新创建一个文件夹,将原始文件(.int)和程序放在新建的文件夹里。
目录里提供了exkifintv1 - v3 三个版本,如果不知道怎么用的话,打开powershell,切换到对应目录,直接输入exkifint_v?.exe,就可以得到usage了
这里我用的是exkifint_v2.exe:

1
$./exkifint_v2.exe ./image.int


然后返回一堆文件,足足有1000多个,而且还不是同一格式的。正常来说应该是得到hg3格式的文件,然后在将其转换成PNG格式的。
先看看这些文件的后缀名有哪些

1
2
3
4
5
6
7
8
9
10
import os

files = os.listdir('./')
houzhui = []

for i in files:
i = i.split('.')[-1].lower()
if i not in houzhui:
houzhui.append(i)
print("Extensions include: ", houzhui)

发现了有几个是hg3的格式,还有很多其他格式的,基本上都带3结尾,正常来说得到的文件应该都是hg3格式的,这些格式只有3对应,试着打开这些文件,发现文件头都是hg-3,也就是说,这些文件的真实后缀是hg3,只不过文件名称和后缀被某种算法更改过。

在纸上找找规律,发现是凯撒位移。所以我们只需根据后缀名确定位移距离,然后反向移动就行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import os

stdext = "hg3"
charset = "abcdefghijklmnopqrstuvwxyz"

def calcutale_diff(origin, target):
diff = 0
start = ord(origin) - ord('a')
end = ord(target) - ord('a')
while start != end:
diff = diff + 1
start = (start + 1) % 26
return diff

def moved(origin, diff):
return chr((ord(origin) - ord('a') + diff) % 26 + ord('a'))

def alter_filename(origin, diff):
result = []
for char in origin:
if char not in charset:
result.append(char)
continue
result.append(moved(char, diff))
return "".join(result)

if __name__ == "__main__":
filelist = os.listdir("./")
for filename in filelist:
if filename[-1] != '3':
continue
temp = filename.lower()
diff = calcutale_diff(temp.split('.')[1][0], "h")
os.rename(filename, alter_filename(temp, diff))

然后就得到了清一色的.hg3,有的贴吧上说,得到.hg3后,使用hgx2bmp.exe ?.hg3,将hg3转换为bmp。但我没有成功。什么变化也没有。文件只是在程序中过了一遍
于是我使用了另外一种方法,通过GrisaiaExtract进行转换为png格式。


galgame文件提取整合

引用

https://moeblog.cn/329.html
https://www.yukict.com/bbs/thread-55377-1-9.html
https://github.com/trigger-segfault/GrisaiaExtractor/releases