翔鹰帝国网|帝国时代论坛|帝国时代II高清版|神话时代|亚洲王朝|征服者|罗马复兴
 找回密码
 注册翔鹰会员(昵称)
搜索
查看: 1938|回复: 12

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

[复制链接]

368

主题

14

精华

6万

积分

宗主教

耕战
9162
鹰币
25058
天龙币
18
帖子
4949

特级嘉禾勋章三级帝国勋章十字军勋章

附庸关系0
发表于 2016-5-28 17:34:11 | 显示全部楼层 |阅读模式
本帖最后由 我是谁004 于 2016-12-26 22:32 编辑

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

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

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

QQ截图20160531214949.png

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

终于来到了!我成功地解决了渔船建造页面的唯一问题,感谢密铺帝,感谢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

评分

参与人数 1耕战 +20 鹰币 +20 收起 理由
troytroytroy + 20 + 20 原创精华

查看全部评分

004时代:战役时代
我很乐意看到有人在MOD技术上超过我。
回复

使用道具 举报

368

主题

14

精华

6万

积分

宗主教

耕战
9162
鹰币
25058
天龙币
18
帖子
4949

特级嘉禾勋章三级帝国勋章十字军勋章

附庸关系0
 楼主| 发表于 2016-5-29 20:53:11 | 显示全部楼层
做了一些修改,原来的会导致GAIA卡屏
004时代:战役时代
我很乐意看到有人在MOD技术上超过我。
回复

使用道具 举报

368

主题

14

精华

6万

积分

宗主教

耕战
9162
鹰币
25058
天龙币
18
帖子
4949

特级嘉禾勋章三级帝国勋章十字军勋章

附庸关系0
 楼主| 发表于 2016-5-31 23:04:50 | 显示全部楼层
渔船也可以开放建筑页面了!
004时代:战役时代
我很乐意看到有人在MOD技术上超过我。
回复

使用道具 举报

118

主题

8

精华

3万

积分

教皇

耕战
4936
鹰币
2008
天龙币
0
帖子
1930

特级嘉禾勋章特级翔鹰勋章一级帝国勋章

附庸关系2
发表于 2016-6-1 18:08:24 本帖来自手机 | 显示全部楼层
大发现!反编译的想法真是太高明了!
回复

使用道具 举报

118

主题

8

精华

3万

积分

教皇

耕战
4936
鹰币
2008
天龙币
0
帖子
1930

特级嘉禾勋章特级翔鹰勋章一级帝国勋章

附庸关系2
发表于 2016-6-1 18:09:35 本帖来自手机 | 显示全部楼层
对了,既然可以有新建筑工人,是否可以有新采集工人呢?
回复

使用道具 举报

368

主题

14

精华

6万

积分

宗主教

耕战
9162
鹰币
25058
天龙币
18
帖子
4949

特级嘉禾勋章三级帝国勋章十字军勋章

附庸关系0
 楼主| 发表于 2016-6-1 18:51:14 | 显示全部楼层
黄栌苦竹 发表于 2016-6-1 18:09
对了,既然可以有新建筑工人,是否可以有新采集工人呢?

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

使用道具 举报

59

主题

5

精华

3万

积分

征服者

耕战
5734
鹰币
20099
天龙币
0
帖子
1333

翔鹰建站十周年纪念章一级翔鹰勋章一级嘉禾勋章三级帝国勋章

附庸关系0
发表于 2016-6-6 14:25:01 | 显示全部楼层
屌炸天
吃猪肉了
回复

使用道具 举报

368

主题

14

精华

6万

积分

宗主教

耕战
9162
鹰币
25058
天龙币
18
帖子
4949

特级嘉禾勋章三级帝国勋章十字军勋章

附庸关系0
 楼主| 发表于 2016-6-6 16:20:41 | 显示全部楼层

野猪兄,你的特色mod的特色建筑工可以如法炮制
004时代:战役时代
我很乐意看到有人在MOD技术上超过我。
回复

使用道具 举报

118

主题

8

精华

3万

积分

教皇

耕战
4936
鹰币
2008
天龙币
0
帖子
1930

特级嘉禾勋章特级翔鹰勋章一级帝国勋章

附庸关系2
发表于 2016-6-13 15:17:32 | 显示全部楼层
我是谁004 发表于 2016-6-1 18:51
伐木采矿牧羊修理之类的,包括建造(拿锤子敲地基的动作)原本都可以有任意数量新的单位的,甚至可以给非 ...

那么可以有更多的突破。真是个好消息。
愿你快来
回复

使用道具 举报

59

主题

5

精华

3万

积分

征服者

耕战
5734
鹰币
20099
天龙币
0
帖子
1333

翔鹰建站十周年纪念章一级翔鹰勋章一级嘉禾勋章三级帝国勋章

附庸关系0
发表于 2016-6-15 15:26:52 | 显示全部楼层
我是谁004 发表于 2016-6-6 16:20
野猪兄,你的特色mod的特色建筑工可以如法炮制

GOOD,只是没时间弄了
吃猪肉了
回复

使用道具 举报

0

主题

0

精华

4

积分

农夫

耕战
0
鹰币
10
天龙币
0
帖子
2
附庸关系0
发表于 6 天前 | 显示全部楼层
请问补丁在哪里下载?
回复

使用道具 举报

368

主题

14

精华

6万

积分

宗主教

耕战
9162
鹰币
25058
天龙币
18
帖子
4949

特级嘉禾勋章三级帝国勋章十字军勋章

附庸关系0
 楼主| 发表于 6 天前 | 显示全部楼层
004时代:战役时代
我很乐意看到有人在MOD技术上超过我。
回复

使用道具 举报

0

主题

0

精华

4

积分

农夫

耕战
0
鹰币
10
天龙币
0
帖子
2
附庸关系0
发表于 5 天前 | 显示全部楼层
我是谁004 发表于 2017-11-13 23:18
http://www.hawkaoc.net/bbs/forum.php?mod=viewthread&tid=137261

感恩~~~
回复

使用道具 举报

本版积分规则

排行榜|小黑屋|翔鹰帝国 ( 蜀ICP备07503549号 )

GMT+8, 2017-11-19 22:20

Powered by Hawk Studio  QS Security Corp.® Licensed

© 2001-2017 Hawkaoc.net All rights reserved

快速回复 返回顶部 返回列表