铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 6341|回复: 16

[通用] 修改z.dat教程—详解物品选单的修改

 关闭 [复制链接]
发表于 2008-2-3 16:23 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
实际上修改物品选单的难度还是比较高的,与状态选单的修改比较在于物品选单多了一个光标,而状态选单只要看看。但是就工作的繁琐来看状态选单又要复杂一些,因为状态选单涉及的项比较多。

阅读这个教程需要汇编语言基础,并且最好读过我前面写的“简明指南”并大致看懂。

目的:扩大物品选单,将5*3扩展为12*8。

这是原版的物品选单,在高分辨率下面显然看来比较别扭,那么我们的目的就是将其扩大。





阅读前辈留下的反汇编文件,看这个子程:

dseg02:0002A0D9 wupin_sub       proc near               ; CODE XREF: sub_212C0+173p
dseg02:0002A0D9                 push    10h
dseg02:0002A0DE                 call    check_stack
dseg02:0002A0E3                 mov     byte_51B6B, 0   ; 键值
dseg02:0002A0EA                 push    0
dseg02:0002A0EC                 call    sub_2A10F
dseg02:0002A0F1                 add     esp, 4
dseg02:0002A0F4                 push    0
dseg02:0002A0F6                 push    0
dseg02:0002A0F8                 push    0
dseg02:0002A0FA                 call    sub_2A186
dseg02:0002A0FF                 add     esp, 0Ch
dseg02:0002A102                 push    0FFFFFFFFh
dseg02:0002A104                 push    0
dseg02:0002A106                 call    sub_2A86C       ; 使用物品
dseg02:0002A10B                 add     esp, 8
dseg02:0002A10E                 retn
dseg02:0002A10E wupin_sub       endp


既然名字是wupin那估计不是乱写,前辈们的工作还是相当严谨的。注意到这个函数调用了三个子程,后面一个有注释“使用物品”,那么上面那两个可能是生成物品选单,进去看看。

进去之后可能发现尽管有一些注释,但仍然一头雾水。但是我们记住这里有两个重要数字,5和3,看看有没有连续使用它们的地方。经查看在2A186子程中发现这样一段程序。

dseg02:0002A2FF                 inc     ebx
dseg02:0002A300                 cmp     ebx, 5
dseg02:0002A303                 jl      short loc_2A287
dseg02:0002A305                 inc     ebp
dseg02:0002A306                 cmp     ebp, 3
dseg02:0002A309                 jl      loc_2A285
dseg02:0002A30F                 push    offset array_VRAM


就是上面这里,连续使用了5和3。现在还不能明白它们各自控制什么,但是无论如何修改一下看看效果。把它们各自改成0C和08。



这就是修改之后的效果,那么我们知道了这个是控制物品贴图数量的。但是物品贴图显然还有些错误,多出来的部分在新的一行又重新出现了一遍。

猜想贴图是一行一行画的,所以在上面可能会出现5这个重要数字。但是似乎并未发现5的踪影,注意这几行:

dseg02:0002A262                 mov     eax, edx
dseg02:0002A264                 shl     eax, 2
dseg02:0002A267                 add     eax, edx


这个实际上是eax=edx*5,与imul eax,edx,5是相同的。在编译时,乘以与2^n仅相差1的数字时,多数是这种形式。

改成

dseg02:0002A262                 imul    eax, edx, 0c  
dseg02:0002A268                 nop


nop是空指令,是用来占位的。
修改后发现还是不正常,这应该是修改的位置不全,找找附近有没有类似的地方。果然,有:

dseg02:0002A2AE                 mov     eax, edx
dseg02:0002A2B0                 shl     eax, 2
dseg02:0002A2B3                 add     eax, edx


跟上面是相同的,也作相同的修改。看看效果:



贴图顺序正常了,但是物品的介绍跟贴图显然对不上。在显示物品介绍的部分应该还有类似的语句没有改。

继续向下观察,发现有:

dseg02:0002A33F                 mov     ebx, edx
dseg02:0002A341                 shl     ebx, 2
dseg02:0002A344                 add     ebx, edx


把这句改成imul edx, ebx, 0c,注意这里是ebx和edx,修改后看看效果:



物品名字正常了。但是你的人参真的是“起死回生的丹药”吗?对比一下物品数量和介绍,发现实际上是天王保命丹。

实际上,类似的语句在下面还有很多。在寻找物品,显示物品名称,介绍,使用人,数量时都要进行类似的计算,把它们找出来全部进行对应的修改。



现在我们已经把这个子程里面的乘5全改成12了,看来物品的显示已经基本正常了,但是使用人参时,发现还是天王保命丹。那么我们考虑物品的使用子程中可能还有一个乘5指令。进入那个子程看看,果然是这样:

dseg02:0002A98A                 mov     eax, edx
dseg02:0002A98C                 shl     eax, 2
dseg02:0002A98F                 add     eax, edx


把这个也改掉,物品选单就正常了。



但是这时还有一个问题,就是物品选单多出来的部分根本选不到。那么我们猜测可能是存在一些控制“溢出”的部分,实现横坐标是5时,再按右就是1这样的功能。4个方向键都可能对应类似的功能,试着找一下。

dseg02:0002A8CD                 cmp     esi, 4
dseg02:0002A8D0                 jnz     short loc_2A8D6
dseg02:0002A8D2                 xor     esi, esi
dseg02:0002A8D4                 jmp     short loc_2A8D7


这里实际上是把4变成0,跟我们提到的功能是类似的。对应的把0变成4的:

dseg02:0002A916                 test    esi, esi
dseg02:0002A918                 jnz     short loc_2A921
dseg02:0002A91A                 mov     esi, 4
dseg02:0002A91F                 jmp     short loc_2A8D7


把这两处的4改掉,改为0B。至于上下方向键作用和修改方法也是类似的,把03改成08,或者把02改成07。



现在你的物品选单已经可以正常使用了。到这里主要的功能都完成了,后面可以做些美化工作。比如扩大那3个黑色矩形,把显示说明文字的位置移到中间等等。还有可能出现的上下箭头,也许要改一下位置(我是偷懒把箭头都去掉了)。另外翻页键的作用也需要修改一下。


[ 本帖最后由 scarscc 于 2008-4-13 15:58 编辑 ]

评分

参与人数 1 +30 收起 理由
游客 + 30 辛苦了

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-2-4 17:51 | 显示全部楼层
学习了~~还有谢谢LZ换了空间~~让我亦能下载~~谢谢LZ!!!!
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
头像被屏蔽
发表于 2008-2-4 18:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2008-2-4 18:19 | 显示全部楼层
懂汇编的话,照着这个例子练习一下,就能清楚很多修改的原理。
不过并不是很容易。。。

其实我用的基本上全部方法都在那几个帖子里面了。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-2-6 18:49 | 显示全部楼层
好 顶一个
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-3-20 01:44 | 显示全部楼层
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-3-20 09:33 | 显示全部楼层
匯編語言不懂阿
不過修改技巧的方向大致上能抓到了

[发帖际遇]: 参与红花会陈家洛的计划:游客向清廷告密,遭到红花会追杀损失银两2.
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2008-3-20 20:04 | 显示全部楼层
像改中毒效果那樣改幾個數字還是比較簡單的,這個例子中需要改寫某些語句,懂彙編的可以用C32Asm比較快。
涉及到屬性值就要改重定位表,就複雜一些。

在NT系統下DOS程序無法用調試工具直接調試,所以大多數時間只能靜態修改。

[发帖际遇]: scarscc在海边沙滩上捡到一支圣火令,当废铜卖了,获得银两6.
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-3-30 09:15 | 显示全部楼层
也不算太难,不过没试过的还是不好弄
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-4-21 23:38 | 显示全部楼层
期待更多好贴。。。

感谢之。。。。

[发帖际遇]: 幻阴指遭遇四大恶人,奋力拼搏,得到银两14两银子
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-4-21 23:52 | 显示全部楼层

问题!

问了个傻问题。。。。已经解决。。。

[发帖际遇]: 幻阴指请陈园园签名,被胡逸之发现,引为知己,增加奖惩积分8.


[ 本帖最后由 幻阴指 于 2008-4-22 00:08 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-4-27 13:22 | 显示全部楼层
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-4-27 13:25 | 显示全部楼层
好贴 收藏了先~~~~
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-4-28 22:17 | 显示全部楼层
太难了.....看不懂.....

[发帖际遇]: qqqqqliji买通太监进宫偷葵花,转手挣到银两22.
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
头像被屏蔽
发表于 2008-8-28 17:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-8-17 23:18 | 显示全部楼层
谢谢...不过感觉好麻烦哦...

[发帖际遇]: 171617337去长白山捉火蟾,掉入泥沼中,损失银两11.
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-5-11 20:40 | 显示全部楼层
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-12-23 00:42

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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