Deep modding on Act of Aggression.17.07.16
最近接着研究起了Act of Aggression的修改,发现难度真™的高啊,像RA2或者帝国时代3之流,部队的属性和科技依赖关系要么是ini格式的,要么是xml格式的,非常简单,但Act of Aggression的数据分析起来简直是鬼畜级别的,因为它是标准的面向对象数据,光访问ObjectReference指向的各种对象打开十几个框就让人头大。我现在已经取得了一些成果,比如让US Army的HQ和FOB能够造出Crimera的HQ和outpost(可以变成repair outpost,修理一切),将US Army的维修车效率提升10倍,还有将核弹的范围变成两倍。我们需要准备Wargame Modding Suite,然后这次定位everything.ndfbin。其实Act of Aggression的everything.ndfbin和Wargame系列的差别不大,只不过所有单位的信息全部在TUniteDescriptor里面。最汪汪太阳的事情就在于单位的名称(ClassNameForDebug)就是一坨屎,一会儿英文一会儿法文,和Chimera相关的居然还是TFT(Task Force Talon,Act of War里面的精英部队),和Cartel相关的居然还是CS(Consortium,Act of War里面的反派),基本上得连蒙带猜才能搞清楚它到底™的是什么东西。
我在这儿列举一些已经搞清楚的玩意(左边是原版数值,右边是重制版数值):
TUniteDescriptor
Chimera HQ = 7463/6988
Chimera Outpost = 7464/6989
Chimera Repair Outpost = 7466/6991
Chimera Repair Outpost v2 = 7470/6994
Chimera spear bay = 8093
Namer = 9465, 9466/8094, 8095
US HQ = 17443, 17444, 17445/26386, 26387, 26388
US FOB = 17447/26366
US light armory depot = 17851
US Logistic Center = 17853/26395
US repair vehicle = 19124/26228
Dustoff = 19102/26310
Cartel HQ = 34033/26348, 26349
Cartel repair vehicle = 33943
Cartel light armory = 34039
Cartel light armory constructor (TModuleSelector)= 35384
Punisher = 2261/2277
Reboot Engineers:
Chimera: 7940, 7941
US: 26229
Cartel: 26302, 26303
Reboot Menus: 236, TCubeActionProductionUnitButtonDescriptor
Construct Chimera HQ: 12585, 12586
Construct Chimera Outpost: 12589
Construct US HQ: 38171, 38172, 38173
Construct Cartel HQ: 38699, 38700
Original Menus: 235, TCubeActionProductionUnitButtonDescriptor
Construct Chimera HQ: 8683, 9127
Construct Chimera Outpost: 8686
Construct US HQ: 18397, 18398, 18399
Construct Cartel HQ: 39745, 39746
Construct Chimera Repair Outpost v2: 52838
TTechnoLevalDescriptor 8128 8127
TCapaciteDescriptor_ModernWarfare
Heal = 12714, 12715, 19106/11127, 11128, 33818
Cartel Barrecks (Heal Wounded) = 2279/2294
Cartel Barrecks = 2280/2293
Punisher (Heal Wounded) = 2934/2942
Punisher = 2933/2941
Namer (Heal Wounded) = 12715/11128
Namer = 12714/11127
Unknown (Heal Wounded) = 19106/33818
Repair vehicle = 22234/32630
Self-repair = 22235/32631
Exosoldier Self-repair = 9402/11055
Outpost = 8159, 8209
Logistic Center = 19129/34848
(不定期更新)
所有单位的各种属性都在Modules里面,点开看有几十项,我在这里列举已经搞清楚的:
Production:这个单位自身的建造相关属性,比如需要什么资源,需要什么约束条件等。
ProductionResource:这个单位能够生产的资源(适用于超武和超武防御,别的不清楚),InResources是生产超武弹药需要耗费的资源,OutResources是生产的超武弹药数量。
Constructor:指定这个单位能够造哪些建筑,非常重要的属性,通过这个只需要知道那三个HQ的ID可以索引所有其他建筑,然后再通过各种Factory就可以索引所有部队。
Factory:指定这个单位能够造哪些车辆或者步兵。我在想如果给非建筑赋予这两个Modules它们是不是就可以边移动边造东西了。
需要注意的是光在这两个Modules里面添加需要的单位是不够的,还需要在CubeAction(接下来介绍)里面添加相应的菜单按钮才能使用。
Capacite:相当于英文中的Capacity,指的是维修车之类的被动能力。
TechnoRegistrar:注册这个单位可以进行的技能升级,但神奇的是技能升级的效果只是将一种单位duang地变成了另外一种单位而已(比如升级悍马车的时候你会发现升级完成后新的悍马车直接跳了出来)。所以当你看到US Army HQ有三个版本的时候,并没有什么惊奇的。对了,如果想在US Army的HQ里造Chimera HQ的话,那三个HQ的Constructor都需要改,但它们的CubeAction都是同一个对象,只需要改一遍即可。
说到同一单位的不同版本,Act of Aggression达到了丧心病狂的程度,除了不同升级的不同版本外,还有fake版本,visual fake版本,company版本,under construction版本,甚至连尸体都有相应的版本,难怪TUniteDescriptor对象有2017个实例。
PilotGenerator:单位被击毁的时候随机生成的Pilot(又名POW,可以被敌军抓了换钱的俘虏),但更神奇的是Pilot是可以任意指定的(是一个ObjectReference,指向TUniteDescriptor对象),比如你可以让你的Terminator被击毁后生成5辆新的Terminators(手动滑稽
WeaponManager:武器相关属性,和Wargame系列里面的设定几乎一毛一样,遵循着WeaponManager -> TurretDescriptorList -> TTurretOneAxisDescriptor -> MountedWeaponDescriptorList -> TMountedWeaponDescriptor -> TAmmunitionDescriptor的顺序,很明显Act of Aggression里面的任何一个单位的武器先是由若干个Turrets组成,然后每一个Turret上面有若干个MountedWeapens,每个MountedWeapon上使用一种Ammunition。由于在Wargame里面一个武器要开火需要先将搭载这种武器的Turret转到那个角度然后才能开火,所以有了这种操蛋的设定。不过如果只是想改改射程、武器伤害、范围等玩意,只需要关注TAmmunitionDescriptor即可。
CubeAction:差不多是Act of Aggression里面最有意思的玩意,我™从未见过一款连建造菜单都可以手动指定的RTS游戏。点开TCubeActionMenuDescriptor之后,你会看到叫做CubeActionContent的MapList,里面的每一个项对应着右下角的每一个按钮,所以最多不能超过12个。每一个按钮都是一个Map,它包含一个UInt32值,和按钮的排列顺序严格对应(行优先),和一个List值,List包含了一个或多个ObjectReference,指向TCubeAction*Descriptor对象(因为有好几种叫做这个的对象,所以中间打通配符)。就像游戏里面有子菜单(比如Defcon1-3各有不同的建筑)一样,这个里面也有TCubeActionSubMenuDescriptor对象,里面也有一个叫做CubeActionContent的MapList用来对应子菜单里的按钮,Map的数据结构和主菜单一毛一样。我不清楚能不能再嵌套一层,没试过。至于TCubeAction*Descriptor,除了有子菜单对象、科技升级对象、生产对象,建造对象,设置rally point对象,甚至还有返回上一层菜单对象,简直爽的1b。
实战篇
我们以往US Army FOB里面添加Chimera Outpost和剩下两个阵营的HQ为例,讲述下如何魔改Act of Aggression,让你轻松拥有三军科技:
首先我们需要分别在那两个HQ的TUniteDescriptor对象->CubeAction里面分别查到要搞的这三个建筑的Map的数据,记下它们的ID,比如Chimera HQ对应着8683和9127(非必需)的TCubeActionProductionUnitButtonDescriptor,Chimera Outpost对应着8686,Cartel HQ对应着39745和39746。你知道造HQ的选项肯定在三军的第一个tier里面,即第三行第一列,也就是第9个按钮里面,所以在主菜单里面肯定是编号为8的map(0是第一个)。
然后在需要添加单位的建筑的CubeAction里面找到相应的空位,创建一个Map对象,指定第一个值为UInt32,填入位置值,制定第二个值为List,然后点开它来完成List,按照之前记下的数据创建ObjectReference,原来一个按钮有几个就创建几个,然后将之前记的ID填进去,搞定。
然后我们需要在Constructor里面注册这个单位能够建造的建筑的TUniteDescriptor ID。既然TCubeActionProductionUnitButtonDescriptor里面包含了单位的名称,可以通过瞎激霸猜的方法搞到那些建筑的ID,但其实Descriptor项里就写明了ID,直接复制好这个ID就可以了。搞到所有相关的ID后直接在Constructor里面新建几个ObjectReference添加进去就可以了,大功告成。值得注意的是要修改的建筑可能存在多种形态(只论升级形态),所有升级形态的Constructor都需要添加一遍,而且如果它们的CubeAction引用的不是同一个对象,也需要分别搞一遍,才能算完成。不然你会发现US Army HQ升级完defcon1后突然造不了Chimera HQ了。
现在已经搞出了一个n00b mod,在三个阵营各自的HQ和Chimera Construction Outpost,US Army FOB和Cartel的轻型装甲车工厂里面都能造出三个阵营的HQ和Chimera Outpost,维修车和救护车的范围和维修效率也被我魔改了,范围扩大两倍,效率提升10倍,Chimera Repair Outpost的范围我没动,但维修效率提升了10倍,US Army Logistic Center的范围我改得和升级后的Chimera Repair Outpost差不多大,效率也提升了10倍。现在占领敌军基地会相当爽(手动滑稽
大神啊,膜拜了。。。。 丧心病狂 有偿 支持!!!!!!! 写的很好,本人参考作者的一些内容,也写了一篇mod教程https://blog.csdn.net/dear_Wally/article/details/127155816 本帖最后由 wang7572 于 2023-4-10 23:27 编辑
支持,修理车修理效率是哪个词条,还有建筑物生产资源,Transforma 产生资源,102金钱,99铝,稀土112。
大佬可以修改一个能建造三家HQ的,那个改好的文件,分享出来么。。谢谢谢谢。。
页:
[1]