我是谁004 发表于 2016-5-28 17:34:11

“新”新建筑工人——关于EXE的研究v2.0

本帖最后由 我是谁004 于 2016-12-26 22:32 编辑

(注:现在已经做出了专用的补丁,本文只需阅读原理就可以了)


过去密铺帝adongct发过一个帖子“新建筑工人”,便是将渔船的页面征用为建筑工人所用——单位命令ID为渔船的9,但类别为4村民。这样做,该村民便可以建造额外的建筑。
固然可以通过渔船模式来添加十余个新的地基按钮,但毕竟还是数量有限。后来,在去编辑EXE之前,我想过用命令ID为2或10时,村民是不是可以放置地基?但后来尝试的结果是,这么做,按钮可以点击,但不是放置地基,而是训练。
自从着手反编译EXE后,我便想到去探索如何添加新的建筑页面。经过我的研究,左下角的按钮是在生成时,便已经确定了其功能,不仅包括训练、地基按钮,还包括控制键。其中训练为0x12,地基为0x13。
用关键数据找到了绘制按钮的程序,经过调试,达成了我的设计方案。我设计的方式为,单位类型80时,按钮为训练;否则为建造地基。这是因为,80以下的单位是不可以进行训练工作的,甚至会跳出。
虽然我寻找到了,并很快发现了按钮功能的部分,但问题来了——如何将单位的属性传送到距离很远的另一处指令。所有几个寄存器在过程中均被使用,想保存于其中是不可能的了。用堆栈预先压入的话,又发现过程中还会调用更深的,不行;想在堆栈上面预存一个,会被过程清空。我在这方面浪费了昨天一整天,最后,今天再拿起来,便选择了在ES中存入数据,并且是允许访问的0x700000那部分;这下子便可以正常运行了,虽然显示的图标从建筑变成了单位,但至少可以了,不是么。

游戏里确实能像上图一样,但不稳定,经常出现选择建筑工人单位后,画面不动,甚至异常中止的现象。换了几个暂存地址都是如此。后来想到,虽然工人单位时常出问题,但在测试过程中点击的那些可训练单位的建筑,却没有出现一点问题。看来,暂存的地址不是问题,问题该出现于单位类型之中,70容易出错,80就没事。故我对建筑工人进行了一点修改,类型改为80;并把判断条件从类型改为类别(=4时用13,否则12),果然改过的不再出问题。而未改的依旧会跳出。

经过再次研究后,已经可以将图标改为建筑的了。但是这样的建筑者有几个缺点——因为类型为80,不能驻扎进建筑物,也不能直接训练(会出现一个地基),只有用含有堆积单位或附加单位的组装投石机来凑了。
此外,我还准备研究渔船建筑页面的方法。不过因为考虑太多了,现在觉得脑袋痛,还是以后再说吧。
(注:现在已经做出了专用的补丁,所以除去解除右下角,请不要再按照下面的方法去修改,不仅麻烦而且可能会有其他影响)
修改方法:请将数据写入以下地址开头的位置。

建筑式新建筑工人

使用条件:单位类型=80,类别=4,命令ID=2或10。配合第二页按键,这种建筑工人可以放置最多26个建筑地基,但不能驻扎进建筑。同时,生产该单位时需要使用类型为80、类别为51的单位前导,即建筑中训练的是后者,而后者具有堆积单位=前者与建造后消失的属性。
00127B35:
80 79 16 04 E9 3C CE 10 00 90
0x127e2b:
E9 69 CB 10 00 90
0x23497a:
75 0D 26 C7 05 25 A5 79 00 13 00 2C 10 EB 0B 26
C7 05 25 A5 79 00 12 00 28 10 E9 A6 31 EF FF 31
D2 26 66 8B 15 25 A5 79 00 52 31 D2 26 66 8B 15
27 A5 79 00 51 50 8B 14 32 52 E9 7D 34 EF FF



5.31更新:渔船式新建筑工人



用渔船界面的建筑工人。请注意右上角的驻扎键。

终于来到了!我成功地解决了渔船建造页面的唯一问题,感谢密铺帝,感谢Daniel,感谢OllyDbg程序!这样一来,只要用渔船命令ID,就可以拥有属于它自己的建造页面!
以下的修改地址是基于前面的建筑工人的,因此如果单独使用,会在前面留出一小段空白。
使用条件:单位类型=70或80,类别=4,命令ID=9。虽然面板上会出现三个命令按钮(死亡、驻扎和停止),但它们可以被建造所覆盖,实际上可以多达15个(需要配合解除右下角训练限制)。
0x11fe7b:
E9 3A 4B 11 00 90
0x125e22:
E9 BC EB 10 00 90 90 90 90
0x2349b9:
90 26 89 0D 34 A5 79 00 66 8B 49 10 26 66 89 0D
30 A5 79 00 26 8B 0D 34 A5 79 00 80 79 04 50 0F
85 04 B5 EE FF E9 9E B4 EE FF 26 89 15 34 A5 79
00 31 D2 26 66 8B 15 30 A5 79 00 52 26 8B 15 34
A5 79 00 57 53 E8 4D 23 E2 FF E9 23 14 EF FF 90

解除右下角限制
如果所有建筑都有第二页,那么建筑中右下角限制的解除便没有意义了,因为会被第二页按钮所占用。但是对于渔船而言,依然是有用的。
0x120369:0F
0x12037A:1E
0x120384:10

我是谁004 发表于 2016-5-29 20:53:11

做了一些修改,原来的会导致GAIA卡屏

我是谁004 发表于 2016-5-31 23:04:50

渔船也可以开放建筑页面了!

黄栌苦竹 发表于 2016-6-1 18:08:24

大发现!反编译的想法真是太高明了!

黄栌苦竹 发表于 2016-6-1 18:09:35

对了,既然可以有新建筑工人,是否可以有新采集工人呢?

我是谁004 发表于 2016-6-1 18:51:14

黄栌苦竹 发表于 2016-6-1 18:09
对了,既然可以有新建筑工人,是否可以有新采集工人呢?

伐木采矿牧羊修理之类的,包括建造(拿锤子敲地基的动作)原本都可以有任意数量新的单位的,甚至可以给非村民单位这样的能力。
不过呢,这里说的“建筑工人”主要是指放置地基的能力,原本只有村民类能放置,而且由于硬编码效果,所有的村民页面只能用训练地点为118号的那些建筑,而这些建筑自然最多只能同时存在13×2=26个按钮。渔船也类似,固定使用13号;即使右下角可以放置训练按钮,也只能有14个。
所以,要拓展建筑页面,就需要修改硬码

阿拉伯野猪 发表于 2016-6-6 14:25:01

屌炸天{:154:}

我是谁004 发表于 2016-6-6 16:20:41

阿拉伯野猪 发表于 2016-6-6 14:25
屌炸天

野猪兄,你的特色mod的特色建筑工可以如法炮制

黄栌苦竹 发表于 2016-6-13 15:17:32

我是谁004 发表于 2016-6-1 18:51
伐木采矿牧羊修理之类的,包括建造(拿锤子敲地基的动作)原本都可以有任意数量新的单位的,甚至可以给非 ...
那么可以有更多的突破。真是个好消息。

阿拉伯野猪 发表于 2016-6-15 15:26:52

我是谁004 发表于 2016-6-6 16:20
野猪兄,你的特色mod的特色建筑工可以如法炮制

GOOD,只是没时间弄了

slx 发表于 2017-11-13 20:49:57

请问补丁在哪里下载?

我是谁004 发表于 2017-11-13 23:18:23

slx 发表于 2017-11-13 20:49
请问补丁在哪里下载?

https://www.hawkaoe.net/bbs/forum.php?mod=viewthread&tid=137261

slx 发表于 2017-11-14 12:03:24

我是谁004 发表于 2017-11-13 23:18
https://www.hawkaoe.net/bbs/forum.php?mod=viewthread&tid=137261

感恩~~~

jpfdiguoshidai2 发表于 2022-11-12 13:56:35

建筑式新建筑工人

使用条件:单位类型=80,类别=4,命令ID=2或10。配合第二页按键,这种建筑工人可以放置最多26个建筑地基,但不能驻扎进建筑。同时,生产该单位时需要使用类型为80、类别为51的单位前导,即建筑中训练的是后者,而后者具有堆积单位=前者与建造后消失的属性。
00127B35:
80 79 16 04 E9 3C CE 10 00 90
0x127e2b:
E9 69 CB 10 00 90
0x23497a:
75 0D 26 C7 05 25 A5 79 00 13 00 2C 10 EB 0B 26
C7 05 25 A5 79 00 12 00 28 10 E9 A6 31 EF FF 31
D2 26 66 8B 15 25 A5 79 00 52 31 D2 26 66 8B 15
27 A5 79 00 51 50 8B 14 32 52 E9 7D 34 EF FF
这些数据在哪里打开,用什么软件,求解

jpfdiguoshidai2 发表于 2022-11-13 09:47:42

我用的是论坛帝王版,想在WK中增加新建筑工人

jpfdiguoshidai2 发表于 2022-11-13 09:54:46

用软件打开age2_wk,是下面的界面,没找到对应的编码

我是谁004 发表于 2022-11-13 10:55:59

jpfdiguoshidai2 发表于 2022-11-13 09:54
用软件打开age2_wk,是下面的界面,没找到对应的编码

因为本文研究是早期的,其中的修改数据不合适,请您移步https://www.hawkaoe.net/bbs/forum.php?mod=viewthread&tid=137261
页: [1]
查看完整版本: “新”新建筑工人——关于EXE的研究v2.0