分享一下自制mod时遇到的一种批处理文件的问题,因为比较麻烦,就直接做了流程式方案,去解决批量注册肖像的问题。
只有三个要求:高清,高清还是TMD高清(其实不一定,自己喜欢就完事了)
【资料图】
上面我瞎说的
图片集最好具有以下几点:高清,基本无背景(换言之,基本是透明背景,JPG格式的文件基本就要出问题了),大小最好超过1280×360。
如果说下载的文件有背景,或有大部分区域不是透明的,或是JPG文件,得酌情考虑扣一扣图。
PS处理所要达到的目的,是将下载过来的图片,制成1280×360大小的png文件(当然,直接制成DDS文件应该也可以,但是直接储存为DDS文件,是不能够作为PS的动作,从而进行大量的文件批处理的,因此最好还是先制成PNG文件。)
去实现这个目的,过程相当简单,首先需要开启PS的动作功能,设置动作图层以及动作。
其次,只要将目标文件置于图层中间(大部分情况是这样,由于要用PS的动作实现图片批处理,所以过多的移动图层位置,有可能会导致批处理的时候有些文件错位,届时需要额外处理错位文件。当然,如果原图片集的位置就比较合适,那么批处理也就方便很多。)
然后就是需要进行画布大小的修改,直接再PS内部更改画布大小就行了,当然需要注意,要根据你的图片集的立绘位置,决定画布改变大小时的中心点在哪,这也就是为什么需要提前对立绘的位置进行调整。
最后储存文件。
请注意,上述操作全都在一个动作内。
完成动作录制之后,我们就可以通过PS的批处理,来处理图片集。
我们导出之后的图片集是PNG格式,但是群星mod要识别的,应该是DDS文件,我们的PS可以通过Novdia的插件,来实现DDS文件的导出,但是并不能作为动作进行批处理。(不要问我如何安装Novdia的插件,自己去找,大佬们写的群星模组教程内有。实在不行,可以试试看GIMP软件,免费使用的,但是操作起来没有PS顺手就是了。)
此时我想了一计阴招,虽然不知道合不合理,但是事实证明能用。既然能跑,你管他使用手跑的还是用头跑的呢()
我们需要找到导出的图片集位置(这个是你自己决定导出到哪的,我怎么可能知道你导出到哪去。当然我觉得应该没多少人会找不到)
然后我们需要新建一个TXT文件,名字随意,在里面输入:
ren *.png* *.dds
然后保存,退出,将.txt文件的后缀改成.bat。
这样一个更改格式的批处理命令就做好了。
这个命令实现的是,像我们改txt文件为bat文件一样,将所有(也就是.png的.的含义)通通改为和原本一样的名字,但是是.dds后缀的文件。
但事实上png改成dds文件不应该这样操作,这种改后缀的方式就像windows提示的那样,可能会造成文件产生错误,可是除了这个办法,我也想不到其他的办法能够批量更改成dds。
如果PS有可供使用的接口,那应该还可以用代码实现这种功能,但是……我不会啊()
所以我说,这是一计阴招。
我们处理完图片集之后,得到的是DDS格式的图片集,然后我们最好提前将你的图片集归类(当然不归类也行),放入你的模组的/gfx/models/portraits/大类/小类内,这样方便后续操作。(大类并不是说你的文件夹的名字叫大类,小类同理,文件夹的名字都是自设的,但是最好不要或者都可以说一定不要是中文,不确定游戏是否能够正常读取中文文件。而且要注意 /gfx/models/portraits/ 不能更改,必须保持文件夹名字一致)
再之后,我们将所有的图片选中,右键复制地址,然后同目录下新建一个TXT文件,将复制的地址粘贴进去。这样,我们就得到了所有图片的地址。
但是这样是不够的,除非你并不想要上传mod,否则是一定需要将图片集放在你的mod文件夹内,因此,一开始图片集的地址是不能使用的,而且导入idea的时候也是需要按照p社语言来注册的。
注册时的格式如下:
sniper_32_3= { textureFile= "gfx/models/portraits/*肖像大类*/*小类*/*.dds"}
而我们得到的地址,基本上都是C: D: E:等等磁盘下的格式,与注册时的代码有所区别。此时需要运用txt文件的查找替换功能(所以其实word也可以做到,但是一下用txt讲述),不过此时就能看出为什么要提前将图片集放入mod文件夹内了,不然你的地址文件都不包含/gfx/models/portraits/,这样后续操作会变得很麻烦。
我们找到文件编辑栏内的替换,或者按下 CTRL+R,选取任意一行的gfx/models/portraits/前面的所有内容,复制粘贴进替换的上面一栏,然后将:
= { textureFile= "
输入到替换栏下面一栏,点击全部替换。
同理,复制.dds 更改为 .dds"}按上述操作,应该就能够把你的所有地址改为:= { textureFile= "gfx/models/portraits/肖像大类/小类/ (图片名).dds "}形式。
谁都能发现,我们按照上述操作之后,地址文件缺少类似 sniper_32_3= 的内容。这是你注册肖像时,你个这一张立绘取的名字,你当然可以取你喜欢的名字,但是这不方便批处理,所以不建议使用。
要添加这一内容,我们可以通过excel实现。
因为我做的是舟的肖像处理,所以,我将肖像注册分成了职业干员编号立绘编号。
基于这种命名方式,我们新建一个excel文件,我们把第一列(A)、第二列(B)、第四列(D)分别作为职业、干员编号、立绘编号,第三列(C)填入。
然后在excel内导入你之前做好的地址文件的地址(获取地址很简单,在之前的模组文件夹内,右键你的地址文件夹,复制它的地址粘贴进excel文件即可)。
在设置列的时候,需要根据你自己的需求进行处理。
举个自己的例子。guard_11_1= { textureFile= "gfx/models/portraits/rhodes_island/guard/立绘_幽灵鲨_1.dds"}这是我的一张图片,你可以看到,职业为guard,干员编号为11,立绘编号为1
而我还有
guard_11_2= { textureFile= "gfx/models/portraits/rhodes_island/guard/立绘幽灵鲨_2.dds"} guard_11_3= { textureFile= "gfx/models/portraits/rhodes_island/guard/立绘幽灵鲨skin1.dds"} guard_12_1= { textureFile= "gfx/models/portraits/rhodes_island/guard/立绘羽毛笔_1.dds"}这三张图片
我要通过excel做到的是,区分干员的名字,每一行检测干员名字是否与上一行不同,不同则编号加一;相同则立绘编号加一。
那么我们的思路很清晰。
地址文件的内容基本上都是:= { textureFile= "gfx/models/portraits/rhodes_island/guard/立绘_羽毛笔_1.dds"}
那么excel设置列的时候,我们要在= { textureFile= "gfx/models/portraits/rhodes_island/guard/立绘_ 处,做出中断
这样以后再导入excel,我们应该能够得到在E列为= { textureFile= "gfx/models/portraits/rhodes_island/guard/立绘_
F列为羽毛笔_1.dds"}
这样,初步的设定就算完成了。
另外,中文的文件夹能不能识别我不知道,但是中文的图片文件居然可以识别是我没想到的,本来还以为需要对文件名称进行批处理,不需要真是万幸了。
之前说过,我们需要根据图片名称设置干员编号以及立绘编号,这一点excel所具有的函数功能就能够实现。
虽然我不是很精通,但是可以用简单粗暴却不易维护的方式,提供一个大致思路。
我们把地址分成了E(通用地址),F(文件名+句末杂项),F列的开头是干员的名字,那么我们可以在B列写入
=IF(MID(Fn+1,1,2)=MID(Fn,1,2),Bn,Bn+1)//n为当前行数,n0为1
MID函数是取F(n)单元格的第1个字符到第2个字符,可能会产生错误的原因是,文件名字含有重复,比如,一个图片文件叫做玛丽,还有个加玛丽苏,所以MID函数的终止位置需要自己设定。
IF判断本行F列的前几个字符是否与上一行一致,如果一致,则本单元格延续上一格,不一致,则加一。
D列的内容与B列相似,就不过多赘述。
最后将公式拉至底端,就完成了神似:sniper_32_3= { textureFile= "gfx/models/portraits/肖像大类/小类/(图片名).dds"}的格式。
最后,只需要选中文件另存为,选择更多格式,找到txt文件,然后随便命名,放在自己找得到的地方。
然后我们打开文件,照理来说,导出后因为我们导出了多列内容,不提前设定的话基本上是由tab的占位符的,这个很简单,只需要把占位符复制,替换成空值就行。
(记得先不要关闭excel,后面有用!)
完成上述操作之后,我们应该已经得到了全部文件的规范化注册代码。
之后就是要找到mod文件内的肖像注册文件(.txt文件,存放在/gfx/portraits/portrais内),写上:
portraits = {}
把你刚刚搞好的记事本内的注册代码复制进去就行了。
最后,已经是收尾工作了!
种族需要定义,需要包含各种立绘。再在/gfx/portraits/portrais下创建一个txt,命名随意,但是一定要让自己看得懂这是啥文件。在里面输入:
portrait_groups={ "uva_caster"//种群的名称,比如我这个就是我的mod下的术士分支种族。 default = {} game_setup = {} species = {} pop = {} leader = {} ruler = {}}
这一串代码,如果你是使用IDEA或者VSCode,那么可以直接创建这个格式,不用自己输入,但是如果不是,那你也可上wiki查找这一模板。
这里有些小麻烦,我们需要获得之前注册的内容,把他们全部放入肖像组内。
这样说可能有些抽象,但是意思就是说,excel文件内的ABCD列,我们将他们放入模板内的大部分区域。
这里不过这样也很简单,你直接复制abcd列,到之前的地址文件内,再做一次替换tab占位符就行,然后全部复制到模板内。
这样种群的肖像设定就完成了,至于如何制作自己的种群,b站上已经有很多内容了,建议自行查找。
标签: