记RIDDLE JOKERのCG提取

您所在的位置:网站首页 游戏cg储存位置 记RIDDLE JOKERのCG提取

记RIDDLE JOKERのCG提取

2023-03-24 15:28| 来源: 网络整理| 查看: 265

首先是柚子社的传统艺能,xp3的封包形式,很容易能通过提取程序(如Crass / ExtractData)提取出里面的内容

众所周知CG应该放在evimage中

提取后的文件内容分为两部分:

请自行忽略010Editor的打开方式SD(沙雕?)文件夹:存放着png形式的Q版CG, 可以直接浏览(拿来当沙雕图)部分S(沙)D(雕)图形如 ev*.pimg的文件,文件大小在几M至几十M

通过010 Editor查看二进制流,发现(猜测)其形式为包含了底图(背景CG)和分镜时的覆盖图层(Sprite),以及覆盖的坐标信息。在查看CG时,程序会首先置放底图,并在查看不同分镜时利用坐标信息在对应位置覆盖Sprite。

正当在考虑如何编写程序,将pimg文件含有的数据分离开时,狗哥让我发现了这个(其实人家本来是给DRACU-RIOT用的)。其中包含的 expimg.exe 将传入的pimg文件分解为了若干 tlg 文件和一个单独的 layer 信息。编写一个脚本,来将pimg文件放入单独的文件夹中,并在单独的文件夹里提取出tlg文件和layer信息:

# Run this script under pimg directory $file = Get-ChildItem foreach ($f in $file) { if ($f.Name -cmatch ".pimg") { $filename = $f.Name $perfix = $filename -creplace ".pimg","" New-Item -Path .\ -Name $perfix -ItemType "directory" Move-Item -Path .\$filename -Destination .\$perfix .\expimg.exe ".\$perfix\$filename" } }

然后在万能的Gayhub上找到 tlg2png,用法为 tlg2png.exe ,利用以下脚本遍历文件夹转换tlg文件,并清理之前的文件:

# Put tlg2png.exe outside *.pimg directory $file = Get-ChildItem foreach ($f in $file) { if ($f.Name -like "ev*") { $directoryName = $f.Name $imgFile = Get-ChildItem -Path ".\$directoryName" foreach ($f1 in $imgFile) { if ($f1.Name -like "*.tlg") { $tlgFile = $f1.Name $pngName = $tlgFile -creplace ".tlg",".png" .\tlg2png-v10-w32\tlg2png.exe ".\$directoryName\$tlgFile" ".\$directoryName\$pngName" } } Remove-Item -Path ".\$directoryName\*.tlg" Remove-Item -Path ".\$directoryName\*.pimg" } }

转换后的内容如下:

ev*+pimg+layers.txt 文件中内容形式如下:

image_width: 1920 image_height: 1080 name: Ah layer_id: 9 width: 257 height: 191 left: 1036 top: 199 opacity: 255 layer_type: 0 type: 13 visible: 1 name: Ag layer_id: 8 width: 257 height: 199 left: 1036 top: 191 opacity: 255 layer_type: 0 type: 13 visible: 1 ......

包含了编号、位置、大小、透明度等信息,利用以上信息就可以构造出完整的CG图片来,但Windows下命令行图片构造工具8太好找,因此以下环境切换为WSL:

sudo apt install imagemagick-6.q16 # Use convert command to generate a full CG convert --help

以下perl脚本可以读取ev*+pimg+layers.txt中的位置信息,并利用convert命令合成CG:

# Usage: merge_pimg.pl # Notice: All required PNG file must under same directory $filename = $ARGV[0] =~ m@(.*)\+pimg\+layers@; $prefix = $1; sub get_value { $line = ; if ($line =~ m@.*:\s*(\S+)@) { return $1; } else { return ""; } } $image_width = get_value(); $image_height = get_value(); get_value(); while (1) { $name = get_value(); last unless $name; $layer_id = get_value(); $width = get_value(); $height = get_value(); $left = get_value(); $top = get_value(); while (get_value() ne "") {} $layers{$layer_id}{"name"} = $name; $layers{$layer_id}{"layer_id"} = $layer_id; $layers{$layer_id}{"width"} = $width; $layers{$layer_id}{"height"} = $height; $layers{$layer_id}{"left"} = $left; $layers{$layer_id}{"top"} = $top; $last_layer_id = $layer_id; } for $layer_id (keys(%layers)) { $name = $layers{$layer_id}{"name"}; $width = $layers{$layer_id}{"width"}; $height = $layers{$layer_id}{"height"}; $left = $layers{$layer_id}{"left"}; $top = $layers{$layer_id}{"top"}; if ($layer_id != $last_layer_id) { $base_name = $layers{$last_layer_id}{"name"}; $base_width = $layers{$last_layer_id}{"width"}; $base_height = $layers{$last_layer_id}{"height"}; $base_left = $layers{$last_layer_id}{"left"}; $base_top = $layers{$last_layer_id}{"top"}; system("convert", "-size", "${image_width}x${image_height}", "-page", "+${base_left}+${base_top}", "${prefix}+pimg+${last_layer_id}.png", "-page", "+${left}+${top}", "${prefix}+pimg+${layer_id}.png", "-mosaic", "${prefix}+${base_name}+${name}.png"); } else { system("convert", "-size", "${image_width}x${image_height}", "-page", "+${left}+${top}", "${prefix}+pimg+${layer_id}.png", "-mosaic", "${prefix}+${name}.png"); } }

将perl脚本分发至每个含有png和txt文件夹中,遍历执行

一个合适的文件夹形式(文件夹ev601a)for dir in $(ls ./) do echo "Processing ${dir}" cd $dir ./merge_pimg.pl "${dir}+pimg+layers.txt" cd .. done

不过处理的真心有点慢......文章写到这里,程序还在跑着:

快好了,快好了.jpg一组已经处理好的CG如图所示

很不负责任的一次update,优化了以上合成CG的方法:

另外给自己挖个大坑,试试有空写一个一键提取合成游戏内cg的方法(

一点吐槽:

柚子社不愧是黄油带厂,日常场景CG分镜+-10张,HS分镜一般50+convert跑的真慢啊......(不过也可能是CG太多)柚子社以上打包形式的游戏都可以这么拆了(Steam上的千恋*万花说你呢)打算之后开个专栏,记一下Gal的解包日常


【本文地址】


今日新闻


推荐新闻


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