超简单的帝国3拆包/读码入门教程
帝国3赛事姬
编辑于 2024年12月24日 19:58

为什么要写这个教程

决定版更新了许多新的文明与机制,导致原版的单位手册提供的信息严重满足不了需求了。新的网页版单位手册又很不可靠,提供的数据仍有大量缺失或误导信息。这导致厘清单位属性或者卡片科技效果还是要靠游戏内测试+读码并用。

读码并不算硬需求,圈子里会读码的人不少,有问题往群里/贴吧一发就有人回答。所以这个教程只是给想要自力更生,喜欢鼓捣东西的人提供的简明入门指南。

读码的门槛

帝国3绝大多数数据都来自简单的xml文本数据,并不需要编程知识。尤其最主要的单位/科技/卡片信息,都写在xml里,不算编程语言(这应该是叫超文本标记语言?)只有很偶尔的时候需要你懂一些C++去看懂一些细枝末节的问题。

对英语的要求不高,词数很少,不懂的词查一下就行了。

读码的工具

拆包器下载地址 https://github.com/MissionLemur128/Resource-Manager/tree/master

或 https://drive.google.com/file/d/1MiUzxQO8g-LkaeneV-VlZtsAugs3Ssq9/view

(Reference: https://forums.ageofempires.com/t/v-0-7-resource-manager-age-of-myth-retold-bar-extractor/260136/22)

下载这个

解压,得到工具

工具界面

工具很简单。File-Open能打开一个压缩的游戏文件,即.bar格式的。(后文讲需要打开哪些文件),然后Extract-AllFile将其解压到指定的文件夹,就得到了所需的文件。

就像这样。下面两个设置需要勾上。

帝国3决定版的文件体系

帝国3相关文件在两个文件夹里,一个是存档文件夹,在C盘:\用户 目录下面,储存录像文件和主城文件(即自己的卡片组)。这个文件夹可以用来方便地①管理录像文件②拷贝卡片组。如果你建了小号或者要到了别人的卡片组,就可以直接复制粘贴覆盖其中sp打头的文件。(每个国家有一个dat一个xml,一共19国*2=38个文件)。游戏会自动将这些文件同步上传。

找不到的可以直接在游戏里找 加载--打开游戏存档,会弹出这个文件夹

然后是游戏文件夹,即Steam安装游戏的那个文件夹,一般在...\Steam\steamapps\common\AoE3DE\Game 目录。

这里

其中.bar格式的文件都可以用上面的拆包器抽取数据

下面介绍比较重要的文件

RandMaps 地图文件夹,游戏内所有的地图储存在这里。这个文件夹不需要拆包,可以直接看到内容。其中的.set格式的文件,记录着每一个地图组包含的地图。比如天梯地图池,就是standardmaps.set,用记事本打开就能看到天梯有哪些图(需要懂每个地图的英文名),以及每个图的出现概率。文件夹内.xs格式的文件是地图文件,记录着每个地图的生成机制,需要C++知识看懂。

Sound 音效文件夹,包含着游戏内的声音文件,想要音效文件就解包吧。音质很低,所以想收藏帝国3的配乐的话,还是去网上找高清版吧。

UI 美术资源文件夹,包含着游戏内的所有图片文件,比如单位立绘,卡片图标,...。内有五个文件,需要拆包到同一文件夹下。比较重要的内容有:Data\wpfg\resources\images\icons 含有科技和卡片的图标,Data\wpfg\resources\art\units 含有单位的立绘,当然其它文件也都有价值。

Data 数据文件夹,目前537Mb,包含着游戏内的各种数据文件,以下内容为粗略介绍此文件夹下核心文件的作用。

  • abilities 这个文件夹下面的文件记录着单位的技能(主动与被动)。使用例:上版本中国老和尚的击晕技能CD被削到了40秒,现在我好奇印度和尚的击晕CD是多少,就打开abilities.xml文件,找到 ypPowerGuardianStun60就知道印度和尚的击晕CD是60秒了

  • strings 翻译文件夹,这个文件夹下的stringtabley.xml文件记录着不同语言的文本。每一句话都有一个文本编号,其它文件调用文本时就会根据文本编号来这个文件夹下寻找。用法多样,可以用来做中英文对照,可以用来反定位兵种/科技在其它文件中的位置

  • tactics “招数”文件夹,和abilities文件类似,更进一步记录了技能的信息。比如鹰炮两种模式切换的耗时,比如光环的范围...属于很难看懂的文件,很多时候需要去倒推一个数据是什么意思。使用例:我想知道非洲粮仓加采肉效率的光环范围,就在granary.tactics文件里找到 

代码块
HTML
自动换行
复制代码
<action>
    <name stringid="68961">NaturalFoodAuraGranary</name>
    <type>AutoRangedModify</type>
    <maxrange>17</maxrange>
    <modifyabstracttype>AbstractVillager</modifyabstracttype>
    <persistent>1</persistent>
    <squareaura>1</squareaura>
    <nostack>1</nostack>
    <modifytype>NaturalFoodGatherRate</modifytype>
    <modifymultiplier>1.1</modifymultiplier>
    <modelattachment>effects\ypack_auras\econpower.xml</modelattachment>
    <modelattachmentbone>bonethatdoesntexist</modelattachmentbone>
  </action>
复制成功

    知道这个光环范围是17,效率为10%

  •     attacktime.xml  记录着单位抬手时间的文件,好像是决定版新加的文件,一目了然,非常好用。唯一的问题是里面的数据和原版单位手册有出入,让人怀疑我们对这个文件的理解是否真的正确。使用例:我觉得富拉尼的抬手好夸张,看看抬手时间到底多少,找到

代码块
HTML
自动换行
复制代码
<unit name="deFulaWarrior">
    <protoaction name="BuildingAttack">
      <time>2.94</time>
    </protoaction>
    <protoaction name="MeleeHandAttack">
      <time>0.5925000000000001</time>
    </protoaction>
    <protoaction name="VolleyRangedAttack">
      <time>0.15000000000000002</time>
    </protoaction>
    <protoaction name="VolleyLongRangedAttack">
      <time>0.30000000000000004</time>
    </protoaction>
  </unit>
复制成功

     嗷,远程攻击0.15的抬手,超远距离慢射也只有0.3的抬手,那是真的牛批(欧洲标准散的抬手是0.3,玉米的抬手是0.42,长弓的抬手是1.47)

  • civs.xml 记录了每个文明开局赠送资源的信息,好像没什么用。里面可以看到西德印三国的经验值惩罚系数(-28%,10%和7%),还能看到中国和日本有个诡异的0.1234%经验值惩罚,为什么呢?我也不知道。

  • homecityxxxxxx.xml 记录了每个文明所拥有的卡片信息,包括默认的初始卡片组。好像没什么用。真要说的话,有时候在techtreey里找到了没见过的卡片(一般是废案,比如美国的瑞典移民卡),就会想来这个文件里确认下到底有没有实装。

  • nuggets.xml 记录了宝藏信息的文件。内容格式为:宝物名—奖励—守护者信息—允许出现的地图—难度。可以和地图文件结合起来,判断每个地图可能刷什么宝。比如4月份更新后发现喜马拉雅好像不再有7猴宝,西伯利亚好像不再有10猴宝,就可以通过这个文件+地图文件去确认。属于是高难度系数的读码操作了。

  • protoy.xml 与 techtreey.xml  最最重要的两个文件。前者记录了游戏内所有单位的信息,后者记录了游戏内所有科技/卡片的效果信息。读码99%的时候是在这两个文件里找信息。对单位的属性/卡片的效果有疑问,就来这个文件里看。里面的内容大都看英文变量名就能猜出来,所以很快就上手了。我举四个读码例子吧:

    • 查龙骑反土狼游击兵倍数: 首先要知道龙骑的调用名。原版单位手册就注明了每个单位的调用名。如果手册里没有,你可以试着用你的英语知识去试。如果没试出来,最笨但最有保障的方法,通过string文件去看编号。打开Data\strings\SimplifiedChinese\stringtabley.xml,搜索“枪骑兵”(游戏内的中文译名),找到一行枪骑兵,再在protoy.xml内搜索22960,找到条目,知道其调用名为Dragoon,然后在此条目下找其攻击数据,看到StaggerRangedAttack下的2.250000,知道龙骑的反土狼倍数为2.25倍。(注:使用文本id定位时一般会定位到多个条目,需要找到其中最“标准”的那一个)(注:此例默认了你知道土狼的标签是什么,如果对标签系统不了解,见下一例)

    • 查奥斯曼轻炮兵反鹰游击武士倍数:首先你用各种方法知道了奥斯曼轻炮兵的调用名为AbusGun,知道了鹰游击武士的调用名为xpEagleKnight。在protoy.xml中搜索name="xpEagleKnight"(如果直接搜xpEagleKnight会搜到别的条目对此单位的克制条目,所以需要用name=去定位)。在unittype一栏中找到其拥有AbstractLightInfantry标签。再看AbusGun的属性,找到其各种攻击模式中表示远程攻击的那一栏(Volley齐射Stagger交错两种都行)。代码内容如下。看到其对"xpEagleKnight"有1.5倍加成,对“AbstractLightInfantry”有0.5倍加成,合计0.75倍,这样就知道了奥斯曼轻炮兵0.75倍反鹰游击武士。(注:一个效果的对象可以是单位名,对一个单位生效,也可以是一个标签,对所有拥有此标签的单位生效。上面xpEagleKnight是单位名,AbstractLightInfantry则是标签名)

代码块
HTML
自动换行
复制代码
    <protoaction>
      <name>StaggerRangedAttack</name>
      <damage>40.000000</damage>
      <damagetype>Siege</damagetype>
      <minrange>4.000000</minrange>
      <maxrange>18.000000</maxrange>
      <rof>3.500000</rof>
      <damagecap>80.000000</damagecap>
      <damagebonus type="AbstractCavalry">0.500000</damagebonus>
      <damagebonus type="AbstractLightCavalry">1.500000</damagebonus>
      <damagebonus type="xpEagleKnight">1.500000</damagebonus>
      <damagebonus type="AbstractVillager">0.250000</damagebonus>
      <damagebonus type="AbstractLightInfantry">0.500000</damagebonus>
      <damagebonus type="AbstractHeavyInfantry">1.500000</damagebonus>
      <damagebonus type="AbstractArtillery">0.500000</damagebonus>
      <damagebonus type="Ship">0.750000</damagebonus>
    </protoaction>
复制成功
  • 查柏柏尔贩盐商队给的资源数量:找到此科技的调用名为DENatBerberSaltCaravans,在techtreey里搜索,看到如下代码块。根据变量名猜测含义,知道所给的金流数量为肉木资源的千分之一,最高为4金/秒。这个肉木资源多半为肉木资源的和,但也有可能是其最大值,是哪一种需要进游戏去测以确认。

代码块
HTML
自动换行
复制代码
  <tech name="DENatBerberSaltCaravans" type="Normal">
    <dbid>8045</dbid>
    <displaynameid>102637</displaynameid>
    <cost resourcetype="Food">150.0000</cost>
    <cost resourcetype="Wood">150.0000</cost>
    <cost resourcetype="Gold">150.0000</cost>
    <researchpoints>40.0000</researchpoints>
    <status>UNOBTAINABLE</status>
    <icon>resources\images\icons\techs\africans\saharan_trade.png</icon>
    <rollovertextid>102636</rollovertextid>
    <flag>CountsTowardEconomicScore</flag>
    <flag>YPNativeImprovement</flag>
    <effects>
      <effect type="AddTrickleByResource" resource="Gold" minvalue="0.001" maxvalue="4.0" minsrcvalue="1.00" maxsrcvalue="4000.00" srcresource1="Food" srcresource2="Wood">
      </effect>
    </effects>
  </tech>
复制成功
  • 查非洲国佣兵自动升级的属性:自动升级涉及到科技,需要在techtreey里寻找。这个问题需要有一定经验,知道此类科技大致的生效方式,才有快速定位的思路。通过文明的初始科技去寻找。搜索