铁血丹心

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

[通用] 常见问题集合【续】【提高篇】

[复制链接]
发表于 2008-6-20 23:25 | 显示全部楼层 |阅读模式

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

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

x
以下为常见问题集合的第二部分,适合于在学习MOD制作教程【提高篇】的朋友。


三、指令

原作的指令集是变长的,一定要注意不要任意改动指令的长度。

1.方向键的键值
KG的解释如下:
上下左右的键值都是读两次的,第一次都是131,第二次是不一样的。可以这样:
读键;
if 键值=131  否:此键不是方向键;
是:再读键;
得出的就是真正的键值。
分别是左 154,右 156,上158,下 152。
补充:51B6B地址会保存当前按下的键,直接读这里可以不必等待。

2.如何在不出空语句(0)的情况下将文字消除
根据显示文字的原理来看,不可能。

3.播放动画时从倒地的主角身上还会站一个主角起来
动画指令的事件编号改为-1。

4.指令中的label
label并不是正式的指令,是根据事件中的跳转指令计算得到的。仔细查看会发现label的前面都会有一个分号,这表示该行为注释。
例如:
36 256 308 0                   ;  36(24):跳转变量JMP是否为0是则跳转到:Label0
这个308就是指跳转到308个参数之后。
修改器中调整label的位置非常困难,但可在需要label的地方插入跳转指令,并调整跳转指令的位置。

5.让装备影响更多属性
需要“物品调用事件”,在事件中进行复杂的判断。同时卸下装备的时候也很麻烦。
判断的流程大致是:
判断此道具是否有人在装备,判断选定的人是否有装备,判断是否能装备。
每次判断均需按照结果进行属性的增减。

6.高分辨率下显示字符串失败
显示字符串的指令在纵坐标超过200时可能会无效,需要进行以下修改:
3D84C处的B9 00 00 00,将B9改成更大的值。

7.在事件中判断当前分辨率
读取地址5b53a,如果值为1则是高分辨率,值为0是原分辨率。新版对话指令在一开始即进行了这个判断。

8.离队时会花屏
不要在离队事件中加入清屏指令。这就是说离队时只能说一句话。
但是在“战斗扩展指令”中附带的z.dat文件已经改写了清屏指令,去掉了这个问题。

9.银两溢出
这不是你的错,用修改器改回来吧。
据说在《再战江湖》的系统增强补丁中去掉了这个错误。

10.显示一个大图片
KG曾部分修改了50指令的功能,可以显示与标题文件格式相同的大图片,不受RLE8算法的限制。

11.编辑大地图时画了一座桥,但船到桥头的时候不能上岸
大地图地面层仍然是水的贴图,也需要换成陆地贴图。

12.能否获得当前时间
地址1C0B90(字)保存了目前系统时间一小时内的部分。计算方式是将一小时等分成65536份,每3600/65536秒这个值加1。
地址1C0B92(字)保存了目前系统时间小时的部分,取值为0~24。

13.50指令每位的含义
50指令由8个数字构成,一个例子如下:
50 30 1 5 0 6 0 0
其中第一位都是50,第二位为指令位,后面6个是参数。很多指令中使用一个参数作为标志位,表示其他参数是变量或是常数。作为标志位的参数都是用bit来表示不同的位置。请参阅fishedit中附带的文档。
战斗指令集也属于50指令,是专门为扩展战斗系统制作。如果需要学习战斗指令集的话最好先学完0.72版中已有的50指令。
经常50指令并不会用完全部的6个参数。未使用的参数可以为任何值,结果都是相同的。

14.怎样切换场景
传送点的原理是把场景切换的入口修改到主角所在位置。但是在游戏的初始场景是不能这样切换的,至少要出来一次再进去。


15.能否增加更多的对话,超过16382个
以下为KG的回答:

其实不只可以扩充到16382个,只要在对话前调用一个事件,而那个事件就是用写内存指令把“talk.grp”“talk.idx”两个文件的名字改掉,那就可以做到无限对话了。



四、系统

这部分多数跟修改z.dat文件有关,技术的门槛比前面会略高一些。
z.dat文件实际上是一个可执行文件,真正的扩展名应是exe,写成dat大概是个幌子。

1.进入场景条件中的70轻功
这个判据写在了z.dat中。从反汇编的结果来看,地址在259DD,原来的数值是46H。

2.不用坐船也可在海上走
fishedit提供这个选项,在选项那里打上勾即可。《再战江湖》的原版并不适用,而系统增强补丁中直接提供了这个功能。

3.缺少atk24.wav
在使用fishedit自带的z.dat替换原来的z.dat文件的时候,在游戏一开始会有这个错误。
简单地说,新的文件中修改了文件的查找方式,普通音效文件的文件名被定义为统一以atk开头。而原版中使用的是列表和指针运算的方式查找。任意复制一个原版的wav文件改为这个名字即可。                                                      

4.对音效音乐文件进行替换
音效文件尽管是相当通用的wav格式,但却被定义成只能使用某种特殊的比特率和混音方式,因此基本不能添加。我也曾经试图利用其他软件生成这种格式,但是并未成功。
音乐文件是当前极少见的xmi格式,可以认为是与mid相似的格式。将mid转为xmi格式的软件确实存在,但是效果一般。此外适合的mid音乐也非常难找。

5.升级时经验的计算方式以及增加等级的上限
因经验值使用了双字节无符号整数,所以最大只能到65535,即使增大等级,重新分配也是件很伤脑筋的事。在游泳的鱼的0.72版修改器中漏掉了一个最大等级的地址,这是以前的修改一直不正常的原因。
后来有人提出升级之后减掉当前的升级经验的方法,具体内容请参考下面的帖子:
http://www.txdx.net/thread-393071-1-1.html
在“系统增强”系列补丁中均使用了这个算法。

6.辟邪剑法和葵花宝典的作用
对这两个物品的判断是写在源码中的。每个物品代码出现两次(判断是否能修炼和佩带之前的提问),基本上不能添加。而且修改它们的代码看来也没有必要,只要避过这两个代码就可以了。

7.游戏中的字符串和Big5编码
z.dat中的中文字符是采取Big5编码,你可以在UltraEdit或WinHex中打开z.dat文件,在十六进制显示方式下面将字体改为MingLiU,字符集改为Big5即可查看这些字符。如果你想对它们进行修改,还需要一张Big5的码表(请使用google)。
使用转码软件当然也能看到,但是我并不提倡。许多字体本身就有Big5字符集,直接利用较好。

8.0.72版z.dat文件的判断性别指令无效
这是游泳的鱼的一个错误。他在新的36指令中加了一个判断,如果符合某个条件则调用原版的36指令,但他写成了调用原版的50指令。请修改以下几个字节:
5d0f9: e8 c4 25 fd ff。

9.50指令的实现方式
汇编,还是汇编。不要想得太简单。没有原游戏的源码,能有这么一个没加过密能顺利反汇编的文件已经不错了。

10.队伍人数的限制
如果把原本读字的语句改成读字节,也许可能增加到12个人,但是提出这个设想的作者已经放弃了。

11.各类公式
参考以下帖子:
http://www.txdx.net/thread-394465-1-1.html

12.用毒效果能否更强
用毒效果可以更强,但请仔细考虑。尽管在《苍龙逐日》中的毒的效果一直为人乐道,但作者本人也认为有些过火。
http://www.txdx.net/thread-393425-1-1.html

13.能否使升级增加属性按资质固定
并不推荐这样做。

使用系统增强补丁加上伤害公式修改器,或者修改z.dat文件:
3B7DA: 58 48 90 90 90 90 90 90
实际上修改器做的是同样的修改。

14.系统增强补丁
作为单独的正式补丁作者仅仅发布了4个,另外还有3个针对原版和较早修改版的补丁。
此外,作者已经基本不对它们进行维护。
它们的内容主要有:
新的伤害公式;物品选单;状态选单;4位属性可以正常显示;升级时的经验算法;对话框位置的调整等。
另外,没有为低分辨率制作的类似补丁。
如果你想重制一个MOD,不建议以任何一个“系统增强”补丁为基础。毕竟有些处理方法是当时的权益之计。推荐使用的是含有扩展战斗指令的版本。

15.山洞的遮盖
在z.dat修改中的“山洞列表”即含有遮盖效果的场景。

我曾经试图修改过山洞的遮盖效果,但是很遗憾没有成功。所以这个还没有好的方案。

16.高分辨率花屏,以及在退出和切换时失效
高分辨率使用的是VESA模式,即使在DOS下面也并非所有显卡都能完美支持这个模式。所以此类问题基本是无解的。
使用dosbox可以基本完美运行高分辨率模式,但是效率比较低下。这是目前不可调和的矛盾。

17.初始的全属性密码
虽然这个一度是秘密,但是现在看来也并没什么。在了解它的工作原理之后,可以使用特殊的方法对密码进行处理甚至取消。
从0.72版z.dat的271F0开始每隔几个字节就可以看到这个密码。

18.开始事件
起始场景的位置:26D6E。
起始事件的位置:26E4E。原来是691事件。
四个坐标分别是:
主角位置:
26DB7:        13
26DC0:        14
屏幕左上角坐标位置:
26DC9:        08
26DD2:        09

19.内力消耗的bug
根据Guest的说法,有时消耗内力没有乘以武功等级。但是从反汇编的结构看似乎并没有错误,而且目前的证据还不是很足。

20.能否在场景内使用“离队”和“系统”
能,但不建议。而且从反汇编结果来看,原本是可以在场景内使用“离队”的,但是应该是后来为避免剧情的逻辑错误屏蔽了。


21.声望200得武林帖,这个值如何修改
2D79E,3012F两个地址的C8。不要改得超过游戏中能够获得声望的总和。

22.怎样取消取名字
00027124开始的E8 FD 08 00 00 改成90 90 90 90 90

23.武功在9级时升级的bug
原版在武功等级为899的时候,修炼秘笈不会再使武功升级,但属性还会增加,可以用来刷武力。
这是原版在判断等级的时候,把大于899即不再升级误写成了大于等于899就不再升级。0.72版的z.dat文件把判断改成了大于等于900即不再升级,已经消除了这个错误。

24.能否在事件中修改人物行走图
544e2开始共有8个字节,4个双字节数,是主角行走图的4方向的起始编号,可以用事件改动这里。以下是示例事件:
;Kdefnum=1116
  0                              ;  0(0)::空语句(清屏)
  50 0 0 0 0 0 0 0               ;  50(32):变量赋值 [X0]=0
  50 0 2 3320 0 0 0 0            ;  50(32):变量赋值 [X2]=3320----(第二套行走图开始-第一套行走图开始)
;:Label0
  50 26 1 0 17634 5 1 0          ;  50(32):读取给定地址数据 [X1]=[5-44E2+[X0]](Int)
  50 3 1 0 1 1 2 0               ;  50(32):四则运算 [X1]=[X1]+[X2]
  50 25 3 0 17634 5 1 0          ;  50(32):保存给定地址数据 [5-44E2+[X0]]=[X1](Int)
  50 3 0 0 0 0 2 0               ;  50(32):四则运算 [X0]=[X0]+2
  50 4 0 1 0 6 0 0               ;  50(32):变量判断 If[X0]<=6 then JMP=0 else JMP=1
  36 256 -44 0                   ;  36(24):跳转变量JMP是否为0是则跳转到:Label0
  -1                             ;  -1(FFFF):事件结束



A1.什么设想可以实现
在提出设想的时候,最好首先考虑是否可以实现。DOS下的这个引擎如今经过了诸多的修补之后已经能够实现很多设想。但是它能否实现更多的功能还有待商榷。
如果能够仔细阅读fishedit中附带的扩展指令文档以及战斗指令中的附带的说明文档,就会对现在可以实现的设想有大概的了解。


A2.修改z.dat以添加新的功能
你需要有汇编的基本知识,无需你能够完整的写出一个汇编程序(事实上现在我已经忘了怎么写Assume这一段了),但是要对常用指令,寄存器有所了解。
除此之外,需要对线性可执行文件的格式有所了解,最主要是重定位表的部分。
通常MOD作者们并不会一一满足每个人特殊的修改要求,除非这个要求是比较通用的。所以你可能需要自己动手。
而UltraEdit在这里的作用仅仅是十六进制编辑器而已。

A3.反汇编文件
每个人利用工具都可以顺利作出反汇编文件,但是一份注释良好的反汇编文件可以节省很多重复研究的时间。

这份文件最早的注释者可能是游泳的鱼自己,而我在最近添加了一些有用的部分。


五、杂项

一些与修改关系比较远的问题。

1.z.pif程序文件名无效
这个文件不应该存在,删掉它。

2.fishedit显示乱码
在非中文的操作系统里可能出现这种情况。解决方法是:
控制面板-区域与语言设置-高级-为非Unicode程序选择一个编码,选择Chinese(PRC)。
如果操作系统并非中文,请自行翻译上述文字。

3.什么是SDL
SDL是一组系统API级的函数,对许多平台上的游戏相关的系统API进行了封装。并非类似GM,RMXP一类的游戏引擎。
在Windows下面SDL实际上就是DirextX的封装,但是SDL的使用比DirextX要简单得多。基本上SDL可以在所有主流编程语言上使用,但C++的资料最多,而且有很多是中文的。如对此有兴趣可以私下讨论。

4.怎样学习汇编语言
我无法教你怎样学习汇编,通常工科的大学生均会有这一门课程。在你需要资料的时候,善用Google和Baidu。
当然我们欢迎更多的汇编高手加入到修改行列中来。

5.如何在压缩时获得更高的压缩比
使用WinRAR,在压缩时勾选上“固实压缩”。据说7z格式可以获得比RAR更好的效果,可以试试。


[ 本帖最后由 weyl 于 2009-8-7 13:36 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-6-21 07:26 | 显示全部楼层
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-6-21 20:39 | 显示全部楼层
好东西~~~看到我眼都花了~~~
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-6-21 21:48 | 显示全部楼层
SCC竟然把5000对话限制的那个帖子锁了
我在这里补充一下
其实不只可以扩充到16382个
只要在对话前调用一个事件
而那个事件就是用写内存指令把“talk.grp”“talk.idx”两个文件的名字改掉
那就可以做到无限对话了
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2008-6-21 22:12 | 显示全部楼层
没锁过,老帖子全是飞虫干的…………
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-6-23 22:22 | 显示全部楼层
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-7-25 19:51 | 显示全部楼层
刚来,好像到了闯王宝藏了,高手太多
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2008-7-26 10:49 | 显示全部楼层
这部分太高深了。看不懂!
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-12-10 23:09 | 显示全部楼层
19.内力消耗的bug

经我研究,只有一些空挥耗内力有变,敌人一般无空挥,己方空挥则可能发生问题。每次刚运行程序,空挥系数默认为0,直到本次运行敌我双方出现的第一次命中,才可能开始出现空挥系数。每一次命中都将刷新空挥系数,出现空挥时所耗内力按上一次命中的武功等级决定,若无命中则为0。读档丝毫不会影响空挥系数,只有退出再运行才使空挥系数恢复默认的0。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

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

GMT+8, 2024-5-3 18:14

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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