标题: 曹操传战场形象增加方法, exe研究之辗转腾挪
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4717
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2005-5-26 15:25 资料 主页 文集 短消息 只看该作者
曹操传战场形象增加方法

曹操传战场形象增加方法——三个二转变为十个一转

这几天周瑜一直在研究曹操传的exe文件,虽仍不能成功的增加长度,但于代码间的辗转腾挪还是领悟了一些,有感于说岳制作中特殊形象不足,在此奉上2个2转变成7个1转的方法。

看了叶落秋寒的这个帖子,
http://www.xycq.net/forum/index.php?showtopic=51954
我得知自60DA起连续AE个字节表示AE个具有列传的战场形象,取值为00~1D分别代表曹操(共三转)~邪恶诸葛亮(共一转)的形象,取值为1E代表该兵种的普通形象,1F以上的取值无意义。看到这里,我不禁想,同样是一个字节,为什么00就能代表三种形象,09能代表两种形象,而1D就只能代表一种形象。00代表的三种形象怎么就恰好对应形象库中曹操三转的形象,这之间的对应关系是什么,值得深入研究。

在zengpoem的帮助下,我注意到了在605D至60D8这一段存在一组跳转表,每四字节为一项,共三十一(0x1F)项,分别对应三十(0x1E)种特殊形象外加1种普通形象。指向的相对虚拟地址(RVA)为406AC9至406C56,而这一段的RVA与实际地址之差为400C00,因此可以轻松找到这一组跳转表对应的实际地址,为5EC9至6056。

继续分析,曹操形象、夏侯惇形象、张飞形象、赵云形象的起始地址分别为:5EC9、5EE4、5FD3、5FF2,把关于他们形象的代码都拿出来看看吧:
孟德: 8B 45 FC 25 FF 00 00 00 99 B9 03 00 00 00 F7 F9 83 C2 28 88 55 F8 E9 72 01 00 00
元让: 8B 45 FC 25 FF 00 00 00 99 B9 03 00 00 00 F7 F9 83 C2 2B 88 55 F8 E9 57 01 00 00
翼德: 8B 45 FC 25 FF 00 00 00 99 B9 03 00 00 00 F7 F9 F7 DA 1B D2 83 E2 14 83 C2 3A 88 55 F8 EB 64
子龙: C6 45 F8 3B EB 5E

其中曹操和夏侯惇有三转的形象,张飞有两转的形象,而赵云只有一转。这么长一串代码,都是什么意思呢,不懂。为什么曹操和夏侯惇会有两个字节不同,和后面的三转相比有些还有三个字节不同。为什么三转比一转的代码长这么多,为什么二转比三转的代码还长?还是不懂。这个时候,只有借助于反汇编的这把利器了。



对于Win32程序的反汇编,推荐使用W32dsm,无需安装,使用简单方便。

看看上面几段机器码反汇编之后的结果,冒号后的地址为RVA地址,此后为机器码,右边是反汇编结果。
曹操:
:00406AC9 8B45FC                  mov eax, dword ptr [ebp-04]
:00406ACC 25FF000000              and eax, 000000FF
:00406AD1 99                      cdq
:00406AD2 B903000000              mov ecx, 00000003
:00406AD7 F7F9                    idiv ecx
:00406AD9 83C228                  add edx, 00000028
:00406ADC 8855F8                  mov byte ptr [ebp-08], dl
:00406ADF E972010000              jmp 00406C56

夏侯惇与曹操类似,不列。由于具体显示三转的哪个形象只与兵种有关,可以推测dword ptr [ebp-04]的最低一字节表示兵种代码。进行除法运算后,edx中存放着余数。兵种代码除以3的余数只能是0、1、2,分别表示同一系列的初级、中级、高级兵种,然后把这个余数加上28,即得到三级兵种的战场形象编号:28、29、2A。
这里得出的战场形象编号还是与RPGViewer中看见的不同,究其原因,对于RPGViewer所看见的前一百零二种普通兵种形象,我友敌中任何一方各占三十四种,战场形象编号的零至三十三(0x21)指的就是普通兵种,三十四(0x22)开始对应于RPGViewer的一百零三。即特殊形象的编号与RPGViewer中看见的序号相差六十九(0x45)。

张飞:
:00406BD3 8B45FC                  mov eax, dword ptr [ebp-04]
:00406BD6 25FF000000              and eax, 000000FF
:00406BDB 99                      cdq
:00406BDC B903000000              mov ecx, 00000003
:00406BE1 F7F9                    idiv ecx
:00406BE3 F7DA                    neg edx
:00406BE5 1BD2                    sbb edx, edx
:00406BE7 83E214                  and edx, 00000014
:00406BEA 83C23A                  add edx, 0000003A
:00406BED 8855F8                  mov byte ptr [ebp-08], dl
:00406BF0 EB64                    jmp 00406C56

与曹操类似,首先取得兵种除以3的余数放在edx中。紧接着取反和带符号自减两步,把非0值变为-1(0xFFFFFFFF),0值保持不变。与上14后再加3A,非0值变为4E,0值变为3A。这样,可以得出张飞形象的初级、中级、高级兵种战场形象分别为3A、4E、4E。

赵云:
:00406BF2 C645F83B                mov [ebp-08], 3B
:00406BF6 EB5E                    jmp 00406C56

赵云形象只有一种战场形象,编号为3B,与其兵种无关。

综上,可以看出在计算出战场编号的最后,需要把结果放入byte ptr [ebp-08],跳转到00406C56。由于每一块距离该地址的长度不同,因为跳转长度也不同。跳转长度小于80时,可以使用EB短跳转,大于等于80,则只能使用E9长跳转。

现在考虑把刘关张03个二转形象,变为一转,首先计算能转几个:
每个形象除了需要上述形象说明代码,还需要04字节的跳转表,以上张飞二转说明代码为1F字节,加上跳转表共23字节;赵云一转说明代码为06字节,加上跳转表共0A字节。依次推理,三个二转共69字节,可转0A个一转,共64字节,富裕05字节。然而事实并非如此。

查看刘备(5F86)、关羽(5FB1)的形象说明就可以发现,同是二转,却比张飞多03字节,原因就在长跳转和短跳转的区别。张飞的跳转长度为64,可以使用短跳转,而刘备和关羽的跳转长度分别为AE和83,就必须用长跳转了。转变为一转的时候,假设新的一转形象说明都紧挨在赵云上方排列,按照每个06字节计算,前五个的跳转长度分别为:64、6A、70、76、7C,都可以使用短跳转,以后的则必须用长跳转。短跳转的三转形象说明1F字节,加上跳转表23字节,长跳转多03字节共26字节。短跳转的一转形象说明06字节,加上跳转表0A字节,长跳转多03字节共0D字节。吕蒙99和邪恶诸葛亮各浪费了一个跳转项,可以加以利用。列式计算如下:
刘关张三人总长度:26+26+23=6F
十个一转长度:5*0A+5*0D-2*04=6B,富裕04字节,不能使用,空闲。


下面是如何把这0A个一转插入的问题,方法如下:

把刘备、关羽、张飞原来所占的地方清空,注意刘备和关羽之间还有一个诸葛亮,原地址5FA8,把他上移至刘备的地址,暂不更改跳转长度。此时从5FBF至5FF1有63字节的空白,等于刘关张三人形象说明长度之和(22+22+1F)。需要改为0A个一转形象,说明长度之和为4B字节(5*09+5*06),剩余18字节。为保持连续性,将自赵云以后的所有形象说明,到跳转表之前的内容(5FF2至605C),其中包括所有说明跳转的地址6056,都提前18字节。

自5F8F起,依次写下0A个一转形象说明,注意长跳转与短跳转的不同,跳转长度分别为:A6、9D、94、8B、82、7C、76、70、6A、64,相应诸葛亮的跳转长度改为AF。此后,设置每个形象对应的图形,刘关张那六个不能浪费,于是前六个设成4C、37、39、4D、3A、4E,后四个可以写成53、54、55、56,表示新增,即RPGView里的152、153、154、155号。

由于形象说明的跳转地址6056已经提前18字节,赵云以后的形象说明跳转长度不需要改,而诸葛亮以前的形象说明跳转长度需要减去18,具体说就是改那07个三转形象。值得一提的是,5EB3处也有指向该地址的跳转,原019F,现改为0187。

增加了0A个一转,减少03个二转,净增07个形象,可利用02个表项,跳转表应该增加05项,表长增加14字节。考虑不变末地址,提前首地址的方法,把605D至60D8的跳转表提前14字节,在最后追加05跳转表项。

跳转表的更改就比较麻烦了,曹操等07个三转不变,第0B项诸葛亮改为86,第08、03、09、1C、1D项刘备、关羽、张飞、吕蒙99和邪恶诸葛亮五人分别改为新增的前五个一转形象8F、98、A1、AA、B3,第1F~23项新增五个表值指向新增的后五个一转形象BC、C2、C8、CE、D4(高字节均为6。指向赵云及其以后的十八项因为目标地址提前18字节的减去18。

最后,更改5EC5处的跳转表入口地址:原406C5D,现在变为406C49。


这样,就成功生成了十个一转图像,分别是:
战场形象序号: 08、 03、 09、 1C、 1D、 1F、 20、 21、 22、 23(1E仍然为普通形象)
对应图像编号:145、124、126、146、127、147、152、153、154、155

其他,关于孙氏三父子。此三人无论死活,其跳转表都指向不同形象说明,只是不同的形象说明指向相同的图片而已。这点与鲁肃99吕蒙99,以及两个诸葛亮不同,后两组的跳转表均指向同一形象说明,可以各说浪费了一项跳转表,因此可以借作他用。而想要孙氏三父子具有不同形象很简单,只需要分别更改其形象说明,指向不同的图片即可。

文中除两处出现RPGViewer的序号以外,其余所有阿拉伯数字均为十六进制,各位看官莫被蒙骗了。

附,上传此次修改后的EXE文件。

[ 本帖最后由 东方无翼 于 2007-3-30 08:36 编辑 ]


附件: Ekd5.rar (2005-5-26 15:25, 207.94 K)
该附件被下载次数 1751


精华帖
顶部
性别:男-离线 peacockwang

Rank: 7Rank: 7Rank: 7Rank: 7
组别 羽林都尉
级别 破虏将军
好贴 1
功绩 75
帖子 776
编号 30530
注册 2005-1-18
来自 秦——长安
家族 轩辕学院


发表于 2005-5-30 10:10 资料 文集 短消息 只看该作者
有点难度,还是等个编辑器的好


精华帖
顶部
性别:未知-离线 夜游魂

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 仁勇校尉
功绩 2
帖子 173
编号 26840
注册 2004-12-5


发表于 2005-5-30 17:15 资料 短消息 只看该作者
人物形象里有一个灰色的近卫队 可以把孙家的人指向他 就能白白多出个一转人物来。
精华帖
顶部
性别:男-离线 博雅张生
(张生手持石鼓文)

象郡公中书令枢密直学士

Rank: 19Rank: 19Rank: 19Rank: 19
资政殿大学士(从一品)
组别 经略使
级别 前将军
好贴 3
功绩 1118
帖子 1730
编号 28805
注册 2004-12-26


发表于 2005-5-30 17:37 资料 个人空间 短消息 只看该作者 QQ


QUOTE:
原帖由夜游魂于2005-05-30, 17:15:11发表
人物形象里有一个灰色的近卫队 可以把孙家的人指向他 就能白白多出个一转人物来。

孙家的三个一般形象、三个亡灵形象都可以指向不同的图。因此保留一个一般形象、一个亡灵形象,剩下的4个都可以变成新的形象。

皇帝的一般形象和特殊形象相同,因此可以把原皇帝的特殊形象指向新的图片,这样又多出一个1转的形象。
精华帖
顶部
性别:未知-离线 幽人独往来
(做人别太CCTV)

蒲领侯枢密直学士

Rank: 13Rank: 13Rank: 13Rank: 13
组别 翰林学士
级别 平东将军
好贴 3
功绩 592
帖子 2540
编号 1982
注册 2004-7-13


看了好几遍,还是一头雾水  

周大附件的exe应该只是把二转改一转导致增加的特殊形象吧,那么如何把孙家、诸葛、鲁肃和皇帝的特殊形象弄出来(这样又能增加7个特殊形象)?还是不太懂……
精华帖
顶部
性别:男-离线 peacockwang

Rank: 7Rank: 7Rank: 7Rank: 7
组别 羽林都尉
级别 破虏将军
好贴 1
功绩 75
帖子 776
编号 30530
注册 2005-1-18
来自 秦——长安
家族 轩辕学院


发表于 2005-6-9 13:22 资料 文集 短消息 只看该作者


QUOTE:
原帖由周瑜于2005-05-26, 15:25:29发表
自5F8F起,依次写下0A个一转形象说明,注意长跳转与短跳转的不同,跳转长度分别为:A6、9D、94、8B、82、7C、76、70、6A、64,相应诸葛亮的跳转长度改为AF。此后,设置每个形象对应的图形,刘关张那六个不能浪费,于是前六个设成4C、37、39、4D、3A、4E,后四个可以写成53、54、55、56,表示新增,即RPGView里的152、153、154、155号。

值得一提的是,5EB3处也有指向该地址的跳转,原019F,现改为0187。

跳转表的更改就比较麻烦了,曹操等07个三转不变,第0B项诸葛亮改为86,第08、03、09、1C、1D项刘备、关羽、张飞、吕蒙99和邪恶诸葛亮五人分别改为新增的前五个一转形象8F、98、A1、AA、B3,第1F~23项新增五个表值指向新增的后五个一转形象BC、C2、C8、CE、D4(高字节均为6。指向赵云及其以后的十八项因为目标地址提前18字节的减去18。

最后,更改5EC5处的跳转表入口地址:原406C5D,现在变为406C49。


这样,就成功生成了十个一转图像,分别是:
战场形象序号: 08、 03、 09、 1C、 1D、 1F、 20、 21、 22、 23(1E仍然为普通形象)
对应图像编号:145、124、126、146、127、147、152、153、154、155

有几个问题
1、这一部分还是没有看明白,RPGView中只有151个图像,后面增加的是否意味着图片也增加了?或者把它指向前面一些没有用到的图片。
2、5EB3处具体含义是什么?
3、新增的5个形象指针所指的位置是哪里?图片编号是53以后的吗?

还望周瑜兄解释下
精华帖
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4717
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2005-6-9 14:44 资料 主页 文集 短消息 只看该作者
这样说吧:
原料是刘关张三个二转,共3个跳转表项指向6个形象,加上吕蒙99和邪恶诸葛亮2个作废的跳转表项。
产品是十个一转,共10个跳转表项指向10个形象,相比之下增加了5个跳转表项和4个形象。
在上面最后给出的对应表中,1F、 20、 21、 22、 23是新增的五个跳转表项,152、153、154、155 是新增的四个形象。

诸葛亮、邪恶诸葛亮,鲁肃99、吕蒙99,都是不同的跳转表项指向同一个形象说明,相当于各浪费一个跳转表项,已经利用了。
孙氏父子,无论生死,是不同的形象说明指向相同的图片,只需要把他们的形象说明换一下就行了。
至于皇帝,那是普通形象和特殊形象相同的问题,当初我还没考虑到这一点。如此说来,凡是普通形象与特殊形象相同的都可以加以利用,比如群雄的普通形象,三转都是指向近卫骑的,可以考虑指向不同的形象,然后岳飞使用群雄的普通形象,这样又省下一个三转。

5EB3处的跳转是检查人物编号是否超过174,虽然可以把上限设大点,但是后面只有174个字节用于设置人物形象,要增加的话就只能在很远的地方写了,那样会很麻烦的。
精华帖
顶部
性别:男-离线 peacockwang

Rank: 7Rank: 7Rank: 7Rank: 7
组别 羽林都尉
级别 破虏将军
好贴 1
功绩 75
帖子 776
编号 30530
注册 2005-1-18
来自 秦——长安
家族 轩辕学院


发表于 2005-6-9 15:03 资料 文集 短消息 只看该作者
基本上明白了,总共36个形象指针,前31个可以指定,后5个必须手动修改。

形象说明中,53、54、55、56可以指向前面没有用到的图片,
同样,形象说明中的3个3C,可以改成3C、3D、3E,而3个3D可以改成前面未用的图片,
所以算下来可以指定7个图片编号,但是这7个要注意敌我关系

最后,35个特殊形象+已有的7个单兵种形象,再灵活调配下,最后特殊形象达到50个也说不定,应该足够用了。

关于灵活调配,我在东吴传中是这样做的,因为我方不会出现3转骑兵,所以将3转骑兵图片导入新的,而后将孙坚兵种形象设定为普通,因群雄的普通形象指向3转骑兵,所以节省出来一个形象指针,其他形象也可以采用类似方法。

而现在有了周瑜兄的帮助,特殊形象可以更多了。
精华帖
顶部
性别:男-离线 博雅张生
(张生手持石鼓文)

象郡公中书令枢密直学士

Rank: 19Rank: 19Rank: 19Rank: 19
资政殿大学士(从一品)
组别 经略使
级别 前将军
好贴 3
功绩 1118
帖子 1730
编号 28805
注册 2004-12-26


发表于 2005-6-9 15:40 资料 个人空间 短消息 只看该作者 QQ


QUOTE:
原帖由peacockwang于2005-06-09, 15:03:03发表
形象说明中,53、54、55、56可以指向前面没有用到的图片

53,54,55,56是固定的指向RPGViewer中看到的152,153,154,155号图片。
精华帖
顶部
性别:男-离线 peacockwang

Rank: 7Rank: 7Rank: 7Rank: 7
组别 羽林都尉
级别 破虏将军
好贴 1
功绩 75
帖子 776
编号 30530
注册 2005-1-18
来自 秦——长安
家族 轩辕学院


发表于 2005-6-9 16:00 资料 文集 短消息 只看该作者


QUOTE:
原帖由博雅张生于2005-06-09, 15:40:06发表
53,54,55,56是固定的指向RPGViewer中看到的152,153,154,155号图片。

但是RV中没有后面的图片啊,如果把53、54、55、56改成00、01、02、03,应该是指向步兵123骑兵1吧
精华帖
顶部
性别:男-离线 博雅张生
(张生手持石鼓文)

象郡公中书令枢密直学士

Rank: 19Rank: 19Rank: 19Rank: 19
资政殿大学士(从一品)
组别 经略使
级别 前将军
好贴 3
功绩 1118
帖子 1730
编号 28805
注册 2004-12-26


发表于 2005-6-9 16:06 资料 个人空间 短消息 只看该作者 QQ


QUOTE:
原帖由peacockwang于2005-06-09, 16:00:27发表
但是RV中没有后面的图片啊,如果把53、54、55、56改成00、01、02、03,应该是指向步兵123骑兵1吧

没有可以增加,很容易的。
指向步兵、骑兵,等于说还是用原来的形象。
精华帖
顶部
性别:男-离线 peacockwang

Rank: 7Rank: 7Rank: 7Rank: 7
组别 羽林都尉
级别 破虏将军
好贴 1
功绩 75
帖子 776
编号 30530
注册 2005-1-18
来自 秦——长安
家族 轩辕学院


发表于 2005-6-9 16:49 资料 文集 短消息 只看该作者
增加的话,是否是在最后拷贝一段代码,然后添加跳转表,最后修改所有跳转地址,感觉蛮难得啊,位置错一个就麻烦了——
精华帖
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4717
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2005-6-9 19:05 资料 主页 文集 短消息 只看该作者
刚才跟张生讨论了一下长跳转和短跳转的问题,发现一个更省字节的办法。
前面共有13个人物使用了长跳转,如果全部改为短跳转跳往中继点,可以省下39个字节,中继点再加上一个短跳转跳去该跳的地方,相当于省下了37个字节。

真要仔细研究代码,还有不少油水可挖,比如七个三转中都有
and eax, 000000FF
cdq
mov ecx, 00000003
idiv ecx
这样13个字节的代码,分明只需要执行一次就够了,剩下的都是浪费。总共节省6×13=78字节。
可以把上面这几行加到00406A9C的call 00406610之后,相应下一句改为
mov dword ptr [ebp-04], edx
每个形象说明的开头改为代码mov edx, dword ptr [ebp-04]

牛皋的形象比较麻烦,前面不能仅仅保留兵种除以3的余数,还要保留兵种编号,多3字节。牛皋处,赋初值3字节,跳转3处6字节,赋值2处4字节,共16字节。

所有的一转,都是先把头像值赋给[ebp-08]的,但是这一赋值过程需要四个字节,而直接给al赋值只需要两个字节,每个形象说明又能省下2字节,共56字节;所有的三转,赋值省3个字节,求和省1个字节,总计28个字节,又省下84个字节。

加上楼顶剩下的4字节,统计一下,4+37+78-16+84=187字节,可以增加23个一转,剩余3字节。
精华帖
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4717
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2005-6-9 20:43 资料 主页 文集 短消息 只看该作者
再看看普通形象的问题,现在的普通形象对应RPGViewer如下:
群雄 16,16,16
步兵 01,04,07
弓兵 19,22,25
骑兵 10,13,16
弓骑 28,31,34
炮车 55,58,61
武术 37,40,43
贼兵 46,49,52
军师 64,67,70
术士 73,76,79
道士 82,85,88
骑策 70,70,70
舞娘 43,43,43
西凉 100
海盗 97
驯熊 94
驯虎 91
都督 70
咒术 70
以上序号为我军形象,+1为友军,+2为敌军;以下序号无论我军友军敌军形象都相同。

黄巾 103
仙人 108
辎重 104
粮草 105
木人 106
土偶 107
皇帝 137
百姓 138

由于群雄、骑策、舞娘、都督、咒术、皇帝无论我友敌均无普通形象出现,故这些兵种的普通形象全部闲置。如果我友敌某方(皇帝为三方总计)有此兵种的人物,该方却无此兵种的小兵,就可以把该方此兵种的一种形象(对应一人或者多人)设置为普通形象,以达到节省特殊形象的目的。

注:群雄、骑策、舞娘是三转,都督、咒术、皇帝是一转。
精华帖
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4717
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2005-6-16 02:45 资料 主页 文集 短消息 只看该作者
在这里下载的曹操传修改器
http://dx.xycq.net/forum/index.php?showtopic=59356
使用功能2战场人物形象,更改后的形象对应如下:

普通形象:
00群雄 103,106,109
01步兵 001,004,007
02弓兵 019,022,025
03骑兵 010,013,016
04弓骑 028,031,034
05炮车 055,058,061
06武术 037,040,043
07贼兵 046,049,052
08咒术 064,067,070
09术士 073,076,079
0A道士 082,085,088
0C舞娘 112,115,118
0D西凉 100
0E骑策 121
0F海盗 097
10驯熊 094
11驯虎 091
12都督 124
17金锤 127
以上序号为我军形象,+1为友军,+2为敌军。

0B铁滑 130,131,132
13军师 133
14仙人 134
15驮龙 135
16拐马 136
18铜锤 137
19银锤 138
1A铁锤 139
以上序号或者仅有我方兵种,或者仅有敌方兵种,故无论我友敌形象都相同。
(注1:所有兵种的普通形象都指向不同的图片)


特殊形象:
00 普通形象 (注4:普通形象编号由1E改为00)
01 140,141,142
02 143,144,145
03 146,147,148
04 149,150,151
05 152,153,154
06 155,156 (注3:根据兵种来判断,群雄至西凉骑兵是155,骑马策士至铁锤骑兵是156)
07 157
08 158
……
(注2:一转个数不封顶,但图片总数不得超过255)
(注5:前174个人物的形象指定地址改在5F16~5FC3)
精华帖
顶部
性别:未知-离线 幽人独往来
(做人别太CCTV)

蒲领侯枢密直学士

Rank: 13Rank: 13Rank: 13Rank: 13
组别 翰林学士
级别 平东将军
好贴 3
功绩 592
帖子 2540
编号 1982
注册 2004-7-13


周大把普通形象的指向问题具体得说一下吧,如果修改如将孙家三口指向不同形象那么简单,那我还有希望看懂
精华帖
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4717
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2005-6-16 11:02 资料 主页 文集 短消息 只看该作者


QUOTE:
原帖由幽人独往来于2005-06-16, 10:28:46发表
周大把普通形象的指向问题具体得说一下吧,如果修改如将孙家三口指向不同形象那么简单,那我还有希望看懂  

5D53至5E23,每隔四个字节有一个字节有效,共53字节,表示了53个兵种的普通形象,与RPGViewer的对应如下:
若小于22H,乘以3后,加上1、2、3分别表示该兵种我友敌方的普通形象。
若大于等于22H,加上45H后即得到该兵种普通形象,我友敌方形象相同。

修改普通形象时要把与RpgViewer的对应关系也修改了,比如我上面的修改:
若小于2BH,乘以3后,加上1、2、3分别表示该兵种我友敌方的普通形象。
若大于等于2BH,加上57H后即得到该兵种普通形象,我友敌方形象相同。

22和44在exe中出现三次,都需要被替换为2B和56(少1的原因是RPGViewer从1开始计数,而系统中是从0开始),地址分别在:
3F072和3F0BC,5B5E0和5B601,77296和77358
精华帖
顶部
性别:未知-离线 世说新语

Rank: 2Rank: 2
组别 百姓
级别 破贼校尉
功绩 1
帖子 67
编号 39403
注册 2005-5-22


发表于 2005-6-16 16:39 资料 主页 短消息 只看该作者
周郎给我们下载的exe是修改成什么样的?
可否说明一下?
而且,但就修改形象而论,exe与RPGViewer需是配套的
可否把修改过的RPGViewer形象也发一下?
精华帖
顶部
性别:未知-离线 世说新语

Rank: 2Rank: 2
组别 百姓
级别 破贼校尉
功绩 1
帖子 67
编号 39403
注册 2005-5-22


发表于 2005-6-17 14:15 资料 主页 短消息 只看该作者
周郎说:“这样,就成功生成了十个一转图像,分别是:
战场形象序号: 08、 03、 09、 1C、 1D、 1F、 20、 21、 22、 23(1E仍然为普通形象)
对应图像编号:145、124、126、146、127、147、152、153、154、155”

是指在RPGViewer中,这些形象不再有人用了,所以是多出来的,可以自己指派。但是曹操传中的人物是固定的,战场形象必须要有它所归属的游戏人物才能在游戏中出现。这些多出来的形象分别对应的是哪些人物呢?是需要自己在EXE文件中修改还是在DATA中修改?  

“诸葛亮、邪恶诸葛亮,鲁肃99、吕蒙99,都是不同的跳转表项指向同一个形象说明,相当于各浪费一个跳转表项,已经利用了。“

这句话是指多出来的人物形象是将邪恶诸葛亮,鲁肃99、吕蒙99分开了吗?可是分出来的到哪儿了……   

”孙氏父子,无论生死,是不同的形象说明指向相同的图片,只需要把他们的形象说明换一下就行了。”
我太差了,周郎说得轻如鸿毛,我听着却觉得重如泰山——“形象说明换一下”是什么意思?
  

“17金锤 0B铁滑 130,131,132 13军师 133 14仙人 134 15驮龙 135
16鱼鳞 136 18铜锤 137 19银锤 138 1A铁锤 139”
这些是说岳中的兵种吧,但分别对应原作中的什么兵种呢?  

“特殊形象:
00 普通形象
01 140,141,142
02 143,144,145
03 146,147,148
04 149,150,151
05 152,153,154
06 155,156
07 157
……
29 191 ”
这一段是什么意思?不是说战场形象只能有174个吗?为什么多到191了?
而且00、01、02……29分别都是谁的形象啊?
精华帖
顶部
性别:男-离线 peacockwang

Rank: 7Rank: 7Rank: 7Rank: 7
组别 羽林都尉
级别 破虏将军
好贴 1
功绩 75
帖子 776
编号 30530
注册 2005-1-18
来自 秦——长安
家族 轩辕学院


发表于 2005-6-17 15:04 资料 文集 短消息 只看该作者


QUOTE:
原帖由世说新语于2005-06-17, 14:15:51发表
周郎说:“这样,就成功生成了十个一转图像,分别是:
战场形象序号: 08、 03、 09、 1C、 1D、 1F、 20、 21、 22、 23(1E仍然为普通形象)
对应图像编号:145、124、126、146、127、147、152、153、154、155”

是指在RPGViewer中,这些形象不再有人用了,所以是多出来的,可以自己指派。但是曹操传中的人物是固定的,战场形象必须要有它所归属的游戏人物才能在游戏中出现。这些多出来的形象分别对应的是哪些人物呢?是需要自己在EXE文件中修改还是在DATA中修改?  

“诸葛亮、邪恶诸葛亮,鲁肃99、吕蒙99,都是不同的跳转表项指向同一个形象说明,相当于各浪费一个跳转表项,已经利用了。“

这句话是指多出来的人物形象是将邪恶诸葛亮,鲁肃99、吕蒙99分开了吗?可是分出来的到哪儿了……   

”孙氏父子,无论生死,是不同的形象说明指向相同的图片,只需要把他们的形象说明换一下就行了。”
我太差了,周郎说得轻如鸿毛,我听着却觉得重如泰山——“形象说明换一下”是什么意思?
  

“17金锤 0B铁滑 130,131,132 13军师 133 14仙人 134 15驮龙 135
16鱼鳞 136 18铜锤 137 19银锤 138 1A铁锤 139”
这些是说岳中的兵种吧,但分别对应原作中的什么兵种呢?  

“特殊形象:
00 普通形象
01 140,141,142
02 143,144,145
03 146,147,148
04 149,150,151
05 152,153,154
06 155,156
07 157
……
29 191 ”
这一段是什么意思?不是说战场形象只能有174个吗?为什么多到191了?
而且00、01、02……29分别都是谁的形象啊?  

  

这个我来解释一下

所谓的战场形象序号08、03、09、1C、1D、1F、20、21、22、23(1E仍然为普通形象),其实就是多功能修改器中指定人物形象的指针,如曹操形象、夏侯敦形象等,原来的共有31个指针,而周瑜兄第一次修改后扩大到36个指针,也就是新增了1F、20、21、22、23,这五个指针在现有的修改器中无法指定,必须通过UE手动修改。

所谓RV图像编号是在RV中可以看到的,共有151张,出现的152、153、154、155是指新增的图片,可以使用周瑜兄的图片添加工具进行添加。

人物形象说明是游戏中使用的一种编号,00——27为各兵种形象,自28开始为特殊形象,如曹操的3转分别对应28、29、2A,夏侯敦对应2B、2C、2D,顺序按照RV中排列,最后策士99形象说明为52。如果新增了图片,则顺延为53、54……

在EXE中,这一部分的代码包括3个部分,依次为形象说明、跳转表、人物指针,你仔细观察,可以发现,

在形象说明中,会出现3个3C(孙坚)和3个3D(亡灵孙坚),明显是浪费了,所以我们只用保留一个3C,换形象说明只要把其他3C、3D改成另外的编号即可,如改为38,则孙策、孙权会以诸葛亮形象登场。

在跳转表中,会有两组跳转地址是相同的,即诸葛和邪恶诸葛,鲁肃99和吕蒙99,这里也是一个浪费,所以要修改的话,你要计算它们指向的新地址,不过现在好了,周瑜兄已经给出了修改过的文件,所以这里不用考虑。

最后,就是174个形象指针,分别对应174个人物,从00到1E可以通过工具指定,1F到23要手动修改。
精华帖
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4717
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2005-6-17 16:08 资料 主页 文集 短消息 只看该作者


QUOTE:
原帖由世说新语于2005-06-17, 14:15:51发表
周郎说:“这样,就成功生成了十个一转图像,分别是:
战场形象序号: 08、 03、 09、 1C、 1D、 1F、 20、 21、 22、 23(1E仍然为普通形象)
对应图像编号:145、124、126、146、127、147、152、153、154、155”

是指在RPGViewer中,这些形象不再有人用了,所以是多出来的,可以自己指派。但是曹操传中的人物是固定的,战场形象必须要有它所归属的游戏人物才能在游戏中出现。这些多出来的形象分别对应的是哪些人物呢?是需要自己在EXE文件中修改还是在DATA中修改?  

曹操传exe中60D9~6176有174个字节,分别指定编号为0~173的武将的战场形象。比如60D9指定曹操(编号0),60DA指定夏侯惇(编号1)。如果某字节值为00,那么指定的形象为曹操的战场形象,即RPGViewer中的109、110、111。相应,若某字节为1,指定形象为夏侯惇的战场形象,即RPGViewer中的112、113、114。若某字节为1E,那么该人的战场形象为普通形象,所谓普通形象,就是该兵种(考虑是否转职)该方(我友敌)的小兵的形象。

QUOTE:
原帖由世说新语于2005-06-17, 14:15:51发表
“17金锤 0B铁滑 130,131,132 13军师 133 14仙人 134 15驮龙 135
16鱼鳞 136 18铜锤 137 19银锤 138 1A铁锤 139”
这些是说岳中的兵种吧,但分别对应原作中的什么兵种呢?  

“特殊形象:
00 普通形象
01 140,141,142
02 143,144,145
03 146,147,148
04 149,150,151
05 152,153,154
06 155,156
07 157
……
29 191 ”
这一段是什么意思?不是说战场形象只能有174个吗?为什么多到191了?
而且00、01、02……29分别都是谁的形象啊?  

  

174指的是只有data文件中前174个人物可以有特殊形象,可以扩展,但似乎必要性不大。当然,他们也可以用普通形象。
191指的是RPGViewer中所看见的图片,原来的数量是151,使用我的工具可以扩展,但255以后的图片无法被游戏读取。
曹操传中1~108是普通形象,后面109~151是特殊形象。
说岳中经修改后,1~139是普通形象,140~最后都是特殊形象。

与原作兵种的对应请看相应的兵种帖。
http://dx.xycq.net/forum/index.php?showtopic=57475

这一部分是后来改动的结果,与首帖已有了较大差别。
00、01、02……29,指的是形象编号,后面那174字节的取值就在这些范围内。当然,也可以更大,只要有足够多的图片。
精华帖
顶部
性别:未知-离线 世说新语

Rank: 2Rank: 2
组别 百姓
级别 破贼校尉
功绩 1
帖子 67
编号 39403
注册 2005-5-22


发表于 2005-6-17 22:24 资料 主页 短消息 只看该作者
非常感谢孔雀王和周郎两位达人的解说,我基本上对周郎的成果有了一定的了解了。
我发现如果我们用周郎的补丁对EXE进行修改,那么EXE就用不了了,按周郎解释,是因为补丁在EXE里新加了形象而其实形象不够。
但是如果是这一贴顶楼下载的EXE则可以使用,只不过人物形象变了(比如张飞变成关羽,关羽变成袁绍,而袁绍没有变)。是不是因为这个EXE只是将几个2转改为一转,或者是将几个废掉的形象重新利用起来,而没有增加人物形象?
在原版曹操传里,有这样几个角色是废的:4个邪恶诸葛,孙家三口,死亡的鲁肃和吕蒙,如果将他们拆卡,那么需要6个战场形象空出来与之一一对应。如果用上本来就没见过的死亡亲卫队,那么还需要5个。周郎给我们下了直接用的EXE是不是就通过将2转改一转使得这5个形象多了出来,让4个邪恶诸葛,孙家三口,死亡的鲁肃和吕蒙能一人在RPGViewer中对应一个形象?
精华帖
顶部
性别:未知-离线 世说新语

Rank: 2Rank: 2
组别 百姓
级别 破贼校尉
功绩 1
帖子 67
编号 39403
注册 2005-5-22


发表于 2005-6-20 16:02 资料 主页 短消息 只看该作者
呼……
我问的这么有条理。怎么没人吭声了……
这可是精华贴啊
精华帖
顶部
性别:男-离线 peacockwang

Rank: 7Rank: 7Rank: 7Rank: 7
组别 羽林都尉
级别 破虏将军
好贴 1
功绩 75
帖子 776
编号 30530
注册 2005-1-18
来自 秦——长安
家族 轩辕学院


发表于 2005-6-20 16:12 资料 文集 短消息 只看该作者


QUOTE:
原帖由世说新语于2005-06-20, 16:02:22发表
呼……
我问的这么有条理。怎么没人吭声了……
这可是精华贴啊

是精华贴会怎么样?有什么好处吗?

你的问题你自己已经说出答案了,所以也不好回复了!
总不能说“对!是这样的!”
精华帖
顶部
性别:未知-离线 世说新语

Rank: 2Rank: 2
组别 百姓
级别 破贼校尉
功绩 1
帖子 67
编号 39403
注册 2005-5-22


发表于 2005-6-20 17:08 资料 主页 短消息 只看该作者
可是,实际情况是……
刘备只对应自己的一转形象,关羽对应刘备2转,张飞对应关羽1转,吕蒙对应关羽二转,四个邪恶诸葛全对应张飞1转。其它的都还是以前的形象。
那么,实际的效果是空出了张飞的1、2转形象来,其中1转给了四个邪恶诸葛,二转不知所踪。
这,和我说得“通过将2转改一转使得这5个形象多了出来,让4个邪恶诸葛,孙家三口,死亡的鲁肃和吕蒙能一人在RPGViewer中对应一个形象”似乎不太一样
精华帖
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4717
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2005-6-20 17:51 资料 主页 文集 短消息 只看该作者
世说新语的描述我没有看懂,我来讲讲实际的情况。

QUOTE:
刘备只对应自己的一转形象,关羽对应刘备二转,张飞对应关羽一转,吕蒙对应关羽二转,

这都没有问题。邪恶诸葛对应的是张飞一转,并不是有四个邪恶诸葛。所谓四个邪恶诸葛,其实是四个人物,并不是真的有四个形象。
参考一下叶落秋寒的这帖:
http://www.xycq.net/forum/index.php?showtopic=51954
00~1E分别对应着曹操形象、夏侯惇形象、张辽形象、关羽形象、许褚形象、典韦形象、貂蝉形象、司马懿形象、刘备形象、张飞形象、赵云形象、诸葛亮形象、祝融形象、孙权形象、周瑜形象、陆逊形象、孙坚形象、孙策形象、袁绍形象、吕布形象、汉献帝形象、鲁肃99形象、刘备99形象、张飞99形象、周瑜99形象、孙坚99形象、孙策99形象、孙权99形象、吕蒙99形象、邪恶诸葛亮形象、普通人物形象。
由此可以发现,四个邪恶诸葛的形象代码都是1D,指向邪恶诸葛形象。

继续说不知所踪的张飞二转形象,在RPGViewer中的编号是147,由上面我文中内容,可知对应的形象代码是1F。而原始曹操传中只有00~1E这几种形象代码,没有人使用1F形象代码,也就看不见张飞二转形象。随便把任意人改成形象代码改成1F,就变成张飞的二转形象了。

与此类似,20、21、22、23这四个代码对应着RPGViewer中的152、153、154、155这几幅图,而原始文件中只有151个图形,需要自己手工添加。
精华帖
顶部
性别:未知-离线 世说新语

Rank: 2Rank: 2
组别 百姓
级别 破贼校尉
功绩 1
帖子 67
编号 39403
注册 2005-5-22


发表于 2005-6-20 20:12 资料 主页 短消息 只看该作者


QUOTE:
原帖由周瑜于2005-06-17, 16:08:10发表
曹操传exe中60D9~6176有174个字节,分别指定编号为0~173的武将的战场形象。

非常感谢,周郎。现在我基本明白了,可以自己修改EXE了。
不过,我所引用的你的那一句话,你是不是说错了?
应该是60D9~6186吧?不然才只有158个,不是174啊……
是笔误?还是我又理解错了?

又及,在在RPGViewer中中看见的亡灵禁卫队形象对应的形象代码是xx?
精华帖
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4717
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2005-6-20 23:35 资料 主页 文集 短消息 只看该作者
确实是我笔误,应该是60D9~6186,多谢指出。

亡灵亲卫队的图片号是131,但并没有一个形象代码指向这个图片。回忆一下在游戏中也没有出现,也许是光荣修改剧本取消了这个兵种,相当于是被浪费的一个图片。
精华帖
顶部
性别:男-离线 peacockwang

Rank: 7Rank: 7Rank: 7Rank: 7
组别 羽林都尉
级别 破虏将军
好贴 1
功绩 75
帖子 776
编号 30530
注册 2005-1-18
来自 秦——长安
家族 轩辕学院


发表于 2005-6-21 08:36 资料 文集 短消息 只看该作者


QUOTE:
原帖由世说新语于2005-06-20, 20:12:23发表
非常感谢,周郎。现在我基本明白了,可以自己修改EXE了。
不过,我所引用的你的那一句话,你是不是说错了?
应该是60D9~6186吧?不然才只有158个,不是174啊……
是笔误?还是我又理解错了?

又及,在在RPGViewer中中看见的亡灵禁卫队形象对应的形象代码是xx?

亡灵骑兵的形象说明是3E
精华帖
顶部
性别:男-离线 peacockwang

Rank: 7Rank: 7Rank: 7Rank: 7
组别 羽林都尉
级别 破虏将军
好贴 1
功绩 75
帖子 776
编号 30530
注册 2005-1-18
来自 秦——长安
家族 轩辕学院


发表于 2005-6-24 21:40 资料 文集 短消息 只看该作者
研究了下,基本上明白了,简单的问一下,

1、所谓一转个数不封顶,是否意味着可以从07开始一直向后排列?或者说,最大可以用FF来指定人物形象?

2、可否把174人形象指定地址扩大?

3、普通形象代码从1E改成00,这段代码能否说明下?

盼周瑜兄解答……


精华帖
顶部

正在浏览此帖的会员 - 共 3 人在线




当前时区 GMT+8, 现在时间是 2025-2-5 18:42
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.024926 second(s), 11 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP