英雄无敌3吧 关注:188,506贴子:4,157,784

HoMM3 Modding简介

只看楼主收藏回复


本文/本帖许可协议:CC BY-NC-SA 4.0
基础标记-背景知识需求
[] 不需要背景知识。
[script] 需要基础编程知识。
[native] 需要基础native编程知识。
[inet] 需要访问国际网络的能力。
目录
前言
HoMM3各版本介绍
数据文件修改 (SoD, ERA)
图片文件修改 (ERA+HD)
ERA Mod结构
ERM使用简介 [script] [inet]
代码修改简介 (SoD, ERA) [native] [inet]
杂谈


IP属地:上海1楼2022-04-13 17:58回复
    和谐天皇之殇、唐斩铁、Tegra_X1. . . 被楼主禁言,将不能再进行回复
    前言
    HoMM3是一个20多年的老游戏,且没有成功的复刻。
    即使喜爱游戏的玩家依旧存在,社区和资源也日渐萎缩,搜索引擎的命中也变得日渐困难。
    所以尝试总结了一下Modding HoMM3的常用资源和入门教程。
    这篇文章面向希望自己构建mod的玩家,希望能够帮助读者快速开始,降低入门成本。
    而进一步的使用和熟悉,就需要读者实践和举一反三了。
    对没有意义的回复可能不予回答并随时删除,例如:
    伸手党;或者包含baidu搜索结果的提问。
    应该首先使用g*l*或者bing搜索。
    因为贴吧对于链接有强烈的食欲,所以文内只有关键字,不包含链接。
    链接可能在后续某楼中,也许没有或者被吞,推荐自行搜索。
    常用关键字
    era3 homm3 heroescommunity heroes3wog


    IP属地:上海2楼2022-04-13 17:59
    收起回复
      2025-07-30 13:58:30
      广告
      不感兴趣
      开通SVIP免广告
      HoMM3各版本介绍 [*]
      版本一览
      SoD    官方的死亡阴影资料片版本,严格意义上唯一能获得经典体验的版本。
      然而和当代windows以及的当代分辨率的兼容性极差,因此实际体验极差。
      HoMM3 HD    Ubisoft官方重置的高清版本,但是只有RoE的内容;因此不予讨论。
      GoG HoMM3 Complete    目前唯一可合法获取的HoMM3版本。可以在当代windows下运行。
      HoTA    一个非常善于PR宣传的高度商品化Mod。
      乱改了各种数据和机制;不能回退SoD体验;且没有Mod支持。因此不予讨论。
      WoG    一个著名古老而著名的闭源商品化Mod,引入了指挥官等新功能,以及ERM脚本系统。
      WoG项目死于3.59的制作途中。
      新功能难以自定义,不能回退SoD体验,bug多,不支持GoG版本,不兼容当代系统。
      完全被ERA替代,因此不予讨论。
      ERA    一个缺乏PR宣传的开源Mod平台。只支持GoG版本。
      WoG项目死亡后,(部分?)源码公开;新的开发者继承了WoG 3.59,重定位为Mod平台。
      项目专注于增添面向Mod的新功能,以及修复WoG缺陷。
      关闭WoG选项即回退SoD的游戏规则;不过若要回退SoD的视觉效果需要一点Mod (UI和地图对象)。
      但在细节方面,和SoD有所差异。
      HD Mod    一个著名的多功能补丁,适用于GoG,ERA和HoTA。只支持GoG版本。
      主要功能是支持高分辨率,优化UI和操作,例如一键分兵。
      实际上主要是UI布局,操作和文本。贴图画质没有改善甚至倒退;因为闭源也没有SDK,难以优化。
      在细节方面,和SoD有所差异。
      VCMI    HoMM3的开源重制项目,可运行。
      普遍被认为死亡的项目,虽然没有正式死亡。
      总结
      严格意义上的经典游戏性体验 ---- SoD
      游戏性体验和SoD基本一致 ---- ERA+HD,GoG+HD,SoD
      视觉体验和SoD基本一致 ---- SoD,GoG+HD,ERA+HD
      能在当代windows(10/11)上完美运行,且体验和SoD完全一致的版本 ---- 不存在
      体验和SoD基本一致,且明显高画质的版本 ---- 不存在
      能在当代windows上完美运行,体验和SoD基本一致 ---- ERA,GoG+HD
      能在当代windows上完美运行,体验和SoD基本一致,适合Mod ---- ERA+HD
      有志者事竟成 ---- VCMI
      二进制兼容性 [native]
      HD,ERA都是动态patch代码的。
      ERA是使用的一个固定的WoG exe,加上是era.dll。所以没有静态的二进制冲突问题。
      固定的exe里包含,SoD和WoG的部分;WoG部分只是加了个section,实际都是动态patch SoD的;然后era.dll再在WoG基础上二次patch。所以如果要改代码,也需要动态patch (主菜单时ERA就patch完了)。


      IP属地:上海3楼2022-04-13 18:03
      回复
        数据文件修改 (SoD, ERA) [*]基础工具:
        ERA3安装包;(包含所有常用工具,SoD/GoG也必须)
        excel或其他table editor。
        额外工具:
        7-Zip
        CudaText,vim等能够不毁坏并且编辑换行符(LF,CRLF)的文本编辑器。
        准备工具:
        安装或者用7-Zip解压ERA3安装包。
        安装根目录,或者解压目录_Install_\Root下包含h3wmaped,社区制作的加强版地图修改器。
        Tools目录下包含所有常用工具。
        文件格式:
        .lod(SoD)/.pac(WoG) 数据包。
        .bik/.smk 古老的音视频格式 (RAD);当年很常见。
        .fnt 字体。
        .txt 数据和文本;多为tab分割的表格;小心换行符。
        .pcx 单帧图片,包括UI和英雄头像。
        .def 多帧图片,包括UI和动画。例如兵种图标在一个def里。
        .msk 同名def对应的轮廓。
        修改数据文件 (SoD):
        1.用Tools\MMarchive解压H3bitmap.lod,得到.txt。
        2.修改想要的.txt。
        3.将修改过的.txt放在Data目录下。
        具体txt的内容,基本上打开txt看一下就能理解了,从略。
        注意txt有不少地方(列)只是注释,并没有实际作用;而少数地方有错误或误导。
        txt不能修改的内容,需要内存和代码修改,或者ERM (例如生物等级)。
        修改数据文件 (ERA):(ERA目录结构见下一节)
        1.用Tools\MMarchive解压H3bitmap.lod,得到.txt。
        2.用Tools\MMarchive解压Mods\WoG\Data\hmm35wog.pac,得到额外的.txt,覆盖掉第1步里的.txt。
        3.修改想要的.txt。
        4.将修改过的.txt放在Mods\{MyMod}\Data目录下。
        注意WoG包里的.txt不全,而有些.txt文件名称并不相同。例如zcrtrait.txt替代了crtraits.txt,后者不再有效果。
        WoG/ERA下可通过.txt修改的内容比SoD多一些,例如建筑依赖;生物经验(buggy,但可以一定程度给现有特技)。
        数据文件格式(SoD,ERA)
        基本上是tab分割的表格,用excel或其他数据表编辑器打开。
        需要严格注意换行符和行列数;否则游戏崩溃并且没有任何具体错误提示。
        1.不要删除行或列。
        2.每数据行最后一列避免为空白。
        3.每数据行的换行符必须是CRLF。
        4.多行文本。必须以""包含。换行必须是LF。
        因此,修改文本时应该使用excel,CudaText,vim等能正确编辑LF/CRLF混合的编辑器。
        地图对象
        objects.txt/zobjcts.txt SoD/WoG的基础地图对象文件,避免删行。
        zaobjts.txt ERA的随机地图的地图对象文件,可删行。
        zeobjts.txt ERA自带的加强版地图编辑器的地图对象文件,可删行。
        这些文件的格式参考Third Upgrades Mod manual。
        也可以用Tools\ObjTxtEditor修改。
        (如果在报错找不到mscomctl.ocx,可以用regsvr32注册一下)
        ERA自带的Unleashed Editor是原版编辑器的完全替代品,可以编辑任何版本的地图。


        IP属地:上海4楼2022-04-13 18:05
        回复
          图片文件修改 (ERA+HD) [*]
          基础工具:
          ERA3安装包;(包含所有常用工具,SoD/GoG也必须)
          任何图片编辑器。
          任何文本编辑器。
          工具:
          ERA3安装包下包含处理DEF(多帧图片)/MSK(轮廓)的工具。
          文件格式:
          .lod(SoD)/.pac(WoG) 数据包。
          .txt 数据和文本;多为tab分割的表格;小心换行符。
          .pcx 单帧图片,包括UI和英雄头像。
          .def 多帧图片,包括UI和动画。例如兵种图标在一个def里。
          .msk 同名def对应的轮廓。
          .zip ERA新增部分支持。
          .bmp etc. 常见图片格式。ERA+HD新增部分支持。
          笔者不建议在SoD/GoG下做图片资源相关的修改,徒增额外的麻烦和工作量。
          推荐ERA+HD或者VCMI。
          修改图片文件 (ERA):
          1.图片文件可能在:
          - Data\H3bitmap.lod,H3sprite.lod中 (用Tools\MMarchive解压)
          - Mods\WoG\Data\hmm35wog.pac中 (用Tools\MMarchive解压)
          - 在其他Mods\子目录下,.pac/.zip,.def或者独立的图片文件
          - _HD3_Data子目录下
          2.修改或制作图片或者DEF。
          - DEF制作教程,参考Third Upgrades Mod manual。
          - ERA+HD支持在UI中使用bmp/png,详见era iii changelog。
          - ERA支持png进行DEF帧替换/增加,以及合成帧。因而大部分制作/修改DEF的麻烦可以避免。
          3.按照ERA的Mods目录规则存放。例如:Mods\MyMod\Data\PSKIL42.def


          IP属地:上海5楼2022-04-13 18:08
          回复
            ERA Mod结构 [*]
            ERA文档:
            ERA没有完整的文档。碎片化的信息分散在这些地方:
            - ERA源码
            - Help\Era manual\index.html
            - Help\Era manual\era ii changelog.txt
            - Help\Era manual\era iii changelog.txt
            - Tools\Era\SDK (native plugin例子)
            ERA Mods管理结构:
            根据现有mod和Tools\Mod Manager很容易就能猜出来。
            - Mods下每个目录是一个mod
            - 禁用的mod,目录名前面加了个-100
            - 启用的mod,优先级数字越高,优先级越高。通常为0,负数优先级较低。
            - 游戏加载的时候,使用Mods\list.txt。越后面的优先级越高。
            - Mods\WoG是WoG/ERA的核心,优先级最低。
            - Mods\ERA scripts是原WoG的默认ERM脚本集合。
            正常来说,Mods\WoG和ERA scripts必须的;这不影响把WoG的功能全部禁止。
            mod优先级只是影响资源文件的加载顺序;ERM脚本另有优先级。
            ERA mod结构:
            - 支持zip打包,详见era iii changelog.txt。
            - mod.json\mod_info.ini主要供Mod Manager使用,游戏中仅用于错误报告。
            - EraPlugins下是通过era插件。.era/.dll是常规dll;.bin是二进制patch。
            - EraEditor下是地图编辑器的插件。
            - Lang下是多语言文本。
            - Data\s下是ERM脚本,应该以.erm结尾。.ert是老文本格式,现在应该用Lang/*.json。
            WoG就是一个不错的例子,可以参考。
            ERM是什么:
            ERM是WoG/ERA的脚本语言,用于WoG定制地图和WoGify的SoD地图。
            ERM优先级:
            如果ERM是数字开头,就是具有额外的高优先级,按照数字顺序加载。
            ERA scripts的值是1-80,因此正常来说脚本优先级都应该在这个范围内(或者不以数字开头)。
            ERT文件注意事项:
            .ert有和.txt一样的换行符要求;否则文本数据错乱或丢失。
            每个数据行必须以CRLF结束,多行文本必须使用LF。


            IP属地:上海7楼2022-04-13 18:10
            回复
              代码修改简介 (SoD, ERA) [native] [inet]
              如果不熟悉native开发
              可以参考:搜索h3_hacking.txt。
              那里面没有的,也就别想改了。
              有native开发能力就不用看了。
              二进制兼容性和稳定性:
              如前所述,HD和ERA都是动态patch代码的,所以ERA下不应该直接修改exe,HD下也不建议。
              ERA自带了一堆Plugins,Mods也有自己的Plugins;所以要维护二进制兼容性是较麻烦的,但冲突概率不高。
              HD Patch就更糟糕,闭源,无扩展性,如果hook HD,升级版本必然不兼容;而HD基本hardcode (例如,如果spell points计算方法改变了,回蓝的显示就必然错误了)。
              参考资源:
              - Tools\WoG Source下的源码和数据结构。有少数错误。
              WoG的注释基本是俄语,需要机翻+脑补。
              WoG的代码非常烂,总体上只能用于参考和hook,难以复用。
              - h3api repo,几乎把HoMM3的数据结构摸透了。有少数错误。
              h3api有少量代码,但基本无用,只能用于参考一下SoD的默认行为。
              - ERA源码。ERA用冷门的pascal,但是完全可以当成c来读。
              编译需要支持非Unicode string的老delphi;dephi社区版不支持;Lazarus笔者曾尝试过,编译错误过多而放弃。
              - 地图格式,在github上也有资源,包括文档和parser。
              总体上,门槛非常低,属于有手就能改。
              ERA上的注意事项 (ERA):
              英雄/生物等数值是能通过ERM修改的,也是存档的一部分,所以WoG/ERA上有多份数据。
              在第一次新开游戏时,WoG用SoD+自身数据复制到一个备份里;游戏中修改使用另一份数据;离开游戏后重置回备份。因此修改英雄/生物等数值较为麻烦。
              当然,默认逻辑下,地图外只有英雄信息起作用,因此只要处理英雄数据即可。


              IP属地:上海9楼2022-04-13 18:12
              回复
                杂谈 [*]
                - 强烈希望回复SoD游戏性体验的,可以参考SoD_SP这个Mod。
                - 要从ERA回复SoD视觉体验的,至少需要恢复这些图片:
                heroqvbk.pcx kovskill.pcx kovspexp.pcx zpic001.pcx
                PSKIL32.def PSKIL42.def PSkilBon.DEF PSKILL.def
                以及zaobjts.txt里删除掉wog外观的对象。
                - 要从ERA回复SoD Cheat的,参考WoG源码_B1.cpp即可,搜索Cheat。
                - 笔者还没有看VCMI的codebase,因此没有VCMI的修改简介。


                IP属地:上海10楼2022-04-13 18:13
                回复
                  2025-07-30 13:52:30
                  广告
                  不感兴趣
                  开通SVIP免广告
                  大佬~


                  IP属地:陕西来自Android客户端11楼2022-04-13 18:43
                  回复
                    8楼吞了,拆开补一下。
                    ERM使用简介.1 [script] [inet]
                    ERM能做什么:
                    - 用于WoG定制地图,变更数据和实现动态的行为。
                    - 用于WoGify,向所有地图注入新功能新要素。
                    [native] 对于有native开发能力的人,强烈不建议使用ERM写任何逻辑。尤其是生物/战斗相关逻辑,建议绝对避免ERM。
                    - [native] 可以直接读写内存,加载dll,进行native call。
                    - [native] 作为native的API,因为ERA的很多功能通过ERM提供。
                    ERM文档:
                    - Help\ERM Help 2.81\index.html
                    - Help\Era manual\era ii changelog.txt
                    - Help\Era manual\era iii changelog.txt
                    注意, ERM Help 2.81到era ii changelog.txt之间还有缺失的内容。


                    IP属地:上海12楼2022-04-13 19:40
                    回复
                      8楼吞了,只能用图片。


                      IP属地:上海14楼2022-04-13 19:53
                      回复
                        8楼吞了,发不出。
                        2楼回复有完整版文档。


                        IP属地:上海15楼2022-04-13 19:55
                        回复
                          回复不知道能留多久


                          IP属地:四川来自Android客户端16楼2022-04-13 20:46
                          回复
                            经验+3。
                            世界第一英雄设计师——四月情塚(bilibili)——到此一游。


                            来自Android客户端17楼2022-04-14 14:01
                            回复
                              2025-07-30 13:46:30
                              广告
                              不感兴趣
                              开通SVIP免广告
                              专业帖子。占位学习。扫盲。热衷wog无法自拔。现在我仍然愿意玩wog大地图。


                              IP属地:山东来自Android客户端18楼2022-04-14 14:33
                              回复