H3 各种文件版本迭代的解读与整合思考
本帖的目的是为了解决多MOD共存的问题,以及市面上各种错综复杂的原版版本的同一问题。【问题背景】迄今为止,英雄无敌3有很多不同的版本和精彩的MOD,无一例外带来了很大的乐趣,但是当失踪人口的我回归时,尝试解决在WoG里面选择VCMI里的英雄,并且也可以建城、拆城花仙堡,部队有经验值等等,却发现无法实现,即便我联系了圣龙大大和总上所述,结果都是如此,为此我尝试解决这个问题,尽可能多的让多个MOD整合在一起。
【解决思路】以程序员版本迭代的真实开发经验,按照增量差异法,去还原版本变更的过程,需要2个步骤:
①弄清楚变更过程中,每个文件的含义,解决掉冗余安装和不必要的安装
②通过版本变更的过程,探究少部分牺牲下,多MOD共存的办法
其中步骤②可能需要论坛的老前辈给予经验上的支持,我只是尝试用新思路去求解,并抛砖引玉期待大家一起完善,需明确:
①游戏等很多都是国外开发,因此从纯英文版本开始会很好
②其他语言版本理论上出现时机在英文版停更的情况下必定高于中文版高于英文版,因为需要翻译③严格对比两个文件是否相同,应该使用文件MD5摘要,我这里只考虑文件大小需注意:如果英文版不停更,那么理论上翻译版必定大概率落后于新版,不管是谁落后于谁,我们总是要用最新的去替代最旧的,这是不变的宗旨
楼主,首先感谢你辛苦打了这么多字,不过这么多字,和你主楼提到的
当失踪人口的我回归时,尝试解决在WoG里面选择VCMI里的英雄,并且也可以建城、拆城花仙堡,部队有经验值等等,却发现无法实现,
...
为此我尝试解决这个问题,尽可能多的让多个MOD整合在一起。
有没有关系?
你的“整合”是将多个mod放在一个文件夹,而不是同时启用不同mod包含的功能?
这是挂羊头卖狗肉?
本帖最后由 SweetLover 于 2023-5-18 21:32 编辑
本楼层主要是形成结论性质的文档和压缩包,形成物将会记录在此,期望论坛有人受我的启发,我们一起攻克这个问题,也欢迎大家补充自己的发现,以下是形成的结论性的东西,对于单机版本,直接下载以下安装包即可:
链接:https://pan.baidu.com/s/1Olv6R4ahG-Tu7rQAqAxSfQ
提取码:2pxp
本帖最后由 SweetLover 于 2023-5-18 21:33 编辑
第一阶段分析成果物:含末日之刃的中文版英雄无敌3,去除冗余文件
本帖最后由 SweetLover 于 2023-5-18 21:35 编辑
第二阶段分析成果物,通过 Git Ban本分析工具判断出变化的文件,顶层目录开始直接解压即可
保留楼层,后续可修改编辑 保留楼层,后续可修改编辑,最近学驾照相亲各种,很多帖子因为发帖需要间隔,所以整理的阶段性分析过程是记录在文档中的,周一开始逐步发布 SweetLover 发表于 2023-5-14 22:40
保留楼层,后续可修改编辑,最近学驾照相亲各种,很多帖子因为发帖需要间隔,所以整理的阶段性分析过程是记 ...
祝你驾照一次过,相亲对象一个比一个漂亮;kl; 加油!~看好你!~期待惊喜 {:2_147:}哇哇哇,听着就好高大上,必须支持。 这样的好事必须强烈支持。 wolfsums0663 发表于 2023-5-15 08:20
祝你驾照一次过,相亲对象一个比一个漂亮
感谢大佬,我开始水经验了,玩笑 通过增量对比网络上下载的3个包解压后的文件:
①死亡阴影中文版:https://pan.baidu.com/s/1R3TP0UqdWWBpEvRBWVvfSQ
②论坛死亡阴影中文白金版
③追随神迹白金版:http://www.962.net/rac/9684.html
下面我们对比文件截图,使用增善法来分析不同文件的作用
先主要分析③和①,以下是③的文件截图:
可以看到③里的文件不多,但是排列很整齐,打开游戏可以看到比较遗憾的是3不是中文版
我们暂时不对比分析,先来讲述从这里开始的原因:经过网友整理的比较整齐的原始英文版本开始,可以得出结论,比如哪些文件是必要的?因为很多中文的软件,会有各种广告商加载各种想不到的广告等等,为了解决这些潜在问题,我们从干净的开始,结合程序员的一些经验,配合英语联想,我们很容易就能突破这样的问题。 我们再看看①的文件截图
游戏截图如下:
通过2个版本的对比,可以发现:
【小结论1】必带文件夹:Data(死亡阴影数据)、game(游戏记录保存)、Heroes3(免CD,也是战役视频)、Maps(游戏地图和自定义战役地图)、MP3(游戏内置城镇+战斗等音乐)
【小结论2】random_maps不区分大小写是随机生成的地图
展开上述小结论,再去看内部细节:
Data和Heroes3内,存放的都是后缀为vid、snd、lod的文件,前两者很好猜测,表示的是视频video和声音sound,而lod是什么呢?
通过bmp和spr开头的文件可以得知,lod是游戏内的贴图bmp和精灵sprite,我们最终的目标是得到并保留纯粹的中文版。再次对比会发现,Data里,这2者差别都不是很大。而打开战役视频,也可以发现:只是有字幕的差别,但是英文版里面,视频明显大了很多,snd声音文件没有变化,如下图:
中文版的视频少了很多MB,假设我们要汉化英文版,那么推论:把中文版本里的对应文件拷贝到英文版里面覆盖行不行?结果会发现是:花屏和乱码
可能的原因和解决办法是解决字体、翻译缺失,我们待会再来看,毕竟这个问题关系到了程序主体,我们现在是一个个文件夹文件比对,也是尽可能宏观比对,而且通过上述比对我们也发现:声音文件等并无太大改动,如果后续比如要改为中文配音伴随背景乐朗读战役中文文字,或许只需要替换snd文件即可,至于snd是mp3还是什么格式,需要通过格式工厂去查看:
似乎声音文件被加壳/加密了,以至于我们并不知晓其到底是源自于wav、mp3还是ogg之类的,但是作为一款Win98上面安装的基于DirectDraw版本的游戏,在Windows上发售,大概率3种格式加壳:wav、wma、mp3
再看Mp3文件夹里的内容,全选后发现大家都是57个文件,75.2MB
接下来我们看Maps文件夹里的内容,这里我们要忽略大量的地图,看地图的拓展名区别,我们会发现主要有:
一般对抗地图:h3m
战役地图:h3c
教程地图:Tutorial.tut
我们发掘的办法是根据英语单词,c是战役campaign的缩写,m是map的缩写,对于学过编程的人来说,教程一般就是tutorial,你们可以验证绝对是这样 现在我们开始分析exe文件,先从程序主体开始,程序加载的原则是:
① 对于模块,依据二进制指纹加载,不一定是文件名,但是对于98年开发的程序,大概率是根据文件名,因为通过C语言调用函数LoadLibrary加载动态库;
② 而对于外部文件,诸如文本、MP3、地图等等,则是通过文件名加载;
我们使用增删法,先把白金中文版和网站上下载的程序主题拷贝到桌面,然后分别打开,会有报错:
白金版里面报错缺少的是:ms32.dll、smackw32.dll、binkw32.dll、ifc20.dll
而网络上下载的中文版是:ms32.dll、smackw32.dll、binkw32.dll、ifc21.dll
网络上下载的版本,报错的一个文件是ifc21.dll,根据版本号递增的原则,大概可以推理出来:网络上的版本,理论上是后来出现的汉化版,因此应当比白金版更新!
现在,我们把网络版解压里的程序主体拷贝过去,也把ifc21拷贝过去,ifc20删掉,然后运行!发现黑屏进不去,最小化后发现报错:
字体初始化失败,这也对应我们对白金版改造过程中,战役视频拷贝过去乱码,现在我们要修复问题,需要知道中文编码一般是GBK、GB2312标准,有时候,字体文件也叫zh_hans,也有大小,比如16x16等等,由以上知识,我们常是把以下文件拷贝到英文版:
然后再次打开,发现:
少了末日之刃,再一个是英文版里的训练地图内容是英文的,而中文版本的训练,地图是中文,于是我们先解决训练地图不是汉化的问题,并把自定义战役,即map3里面,后缀名为h3c的历代记战役文件连同中文地图的Tutorial.tut都拷贝过去,然后删掉其他h3m地图,最终文件夹如下!
我们决定把弄出了包含末日之刃在内的中文版当作第一版本,因此上述操作并未完结!现在问题来了:白金版里,有末日之刃的英文战役视频,大小也比中文版的大,而中文版视频很小,但是也有末日之刃视频,那现在问题在哪?我们回到先前操作的程序主体,既然中文版的程序主体已经开始用ifc21.dll替代ifc20.dll了,那么另外几个相关的dll是不是大小版本等也有变化?比对后发现没有变化。于是我们采取排除法,先删除一部分肯定是无效的文件,英文版里面,所有的英文pdf,我们用不着了,而hlp文件是Win98时代的帮助文件,对于xp之后的系统,不安装补丁是看不了的,安装看了也是英文,既然如此不如删掉!然后英文版就会变成这个样子!
注意MP3DEC.ASI不要删除,这个是MP3的解码器,缺失的话选地图的页面里面就会无法播放声音!不仅如此,我还验证了,这个解码器应该也和战役视频有关,删掉这个文件进入战役的话,只有英文朗读的声音,不会有背景乐,所以MP3DEC.ASI是MP3的解码器,而战役里的snd声音文件,应该是MP3音乐,但是通过加密加壳,格式工厂已经不能识别那个声音文件是MP3,同理用windows自带的音乐播放器也无法播放,显示snd文件已损坏,本质上是通过加密加壳,游戏厂商防止盗版的办法,因此部分音乐只有游戏内部可以播放!同理我们可以看看vid文件是不是可以直接打开的视频文件,那个年代要对视频做加密还是很难的,我推测vid文件可以打开!结果发现不能,看来厂商的防盗版做的还是很棒的!
cnt文件到底是什么呢?打开看看:
既然是和hlp帮助文件相关的,那我们就都删了吧! 现在我们看看中文版里面相对于英文版多出的部分:
既然我们把中文版的程序主体拷贝过来覆盖英文版程序主体导致了末日之刃资料片的缺失,那么和末日之刃相关的有哪些呢:
①我们注意到,视频文件里,英文版旧版本的视频比中文版的大很多
②我们还注意到,即便中文版的视频小,但也有末日之刃,那就说明末日之刃在别的地方
好,那我们就从多出来的文件快速入手,依旧是排除法!
RegSetup是注册表相关的修复,在Win98、95系统上面这个是需要的,后续程序内部是可以自带版本信息等manifest文件的,所以我们可以不去拷贝这个文件,而unins相关的文件是从第三方安装后生成的卸载文件,可以看到第三方打包很恶心,带了Secdrv.sys这样的可以在windows安全模式下工作的系统文件(如果确实是,并不只是拓展名的情况下),为了避免安装了广告或者后门,不要去考虑或者激活这个文件,从英语单词上来看,Secdrv可能是Security Driver的缩写,安全驱动,或者是安全磁盘,那么和末日之刃相关的,可能只有H3blade类似的了,而blade的英语单词也是刀剑的意思!那我们就把H3blade相关的拷贝过来,看看能不能解决!
完美解决,那么我们就要形成第一阶段的成果物了!最终当下目录如下:
我们将对成果物进行模块化拆分打包,这样便于后期拼装也不冲突!以下是拆分结果:
链接直接参考首页即可,此外我们把非原版的地图和自定义战役归类为可选模块,这部分将以希腊字母顺序作为代号作为可选安装,数字序号的都是必选!而字母顺序表示推荐非必选安装,一般以地图和自定义战役为主!↓表示不建议安装! 谢谢楼主的分享。 很精彩,来看后续,等待更新 强烈支持,很精彩! 非常好,可以精简无用文件,不过现在的硬盘似乎影响不大,剔除无用的东西总是好的。
页:
[1]
2