Friday, March 28, 2008

重定位表的作用

 

游戏的主程序文件z.dat实际上是一个线性可执行文件(LE),真实的扩展名应是exe。

重定位表用于标识可执行文件中与引用地址相关的语句。

在编译时,变量会被编译成地址,可以反汇编查看。但是代码段的地址位置通常只是形式上的,因为程序被载入内存时,究竟会被载入何处并不是确定的,所以代码段所写的地址通常跟真实的地址会差很远。在程序一开始,会依据重定位表,对代码段进行处理。

游戏主程序中的重定位表中的一项一般是这样的:

07 10 YY YY 02 XX XX XX XX

07 10 和 02 都是标志位,不同的标志位有不同的含义,游戏中只用了这一种。

重定位表一般是分段的,代码段中每 1000H 为一段,比如 20000H~20FFFH 的代码在重定位表中有单独一部分,而 21000H~21FFFH 又有另一部分。每一部分的开始位置写在重定位表的最前面,相当于索引。

在程序被载入时,一般可以这样理解:[段基址+YYYYH+程序实际载入的首地址]开始的4个字节会被替换成[XXXXXXXXH+程序实际载入的首地址]。

由于段基址是以 1000H 为一段的,所以 YYYYH 的最高位一般是0。

全部重定位项可以用一个应用程序 DUMPLX.EXE 导出。

我的描述仅仅是一个形象的说法,真正权威的解释和严格的格式定义可以从 LX 和 LE 格式的说明文档中找到。

Thursday, March 27, 2008

一些笔记

 

50指令的编写方式

1.保存现场。主要是ebx,edi,esi,ebp四个基本寄存器,eax和ecx均直接使用,不予保存。

2.从栈中提取参数。

2.处理标志位。方法是压入标志位位置标识,标志位,和参数。调用另一子程,返回标志位指定的数值或变量的值到eax。

3.指令功能。变量从内存120000H开始。有些是自编子程,完成某些系统功能的是引用原有的子程。

4.恢复现场,返回。

 

战场在内存中的保存方式

共3层:

第一层:26个人物数据。每个人物占据1CH字节,保存的数据主要有:人物战场id,人物实际id,敌友信息,坐标等。

第二层:效果信息。格式为40H*y+x+基址。在播放效果的时候会首先清空此层,之后根据所使用的招式重新对这一层的某些位置赋值为1,在播放效果的时候不为0的位置均会有效果。

第三层:保存整个战场信息。格式为(40H*y+x)*2+基址,每个位置占据一个字长,是战场上的人物信息,如对应位置有人,则是人物的战场id,如无人则是-1。

基址的位置在代码段和重定位表里面不同,需以重定位表中的值+20000H为准。

 

SwimmingFish未发现的

3B717H:人物最高等级。之前的修改器在30级之后一直不正常是因为漏了这个地址。

第二层战场信息的含义。

绘制背景矩形子程中第一个参数是透明度。对话框为4,其余大多为3。故对话框比其余很多框黑一些。

 

杂项

人物内场景坐标:1D295CH,1D295AH。

需要修改重定位表的有:属性引用,显示内存,直接用寄存器标示子程。

进入场景子程:28E40,参数一个,为场景编号,直接引用可进入某场景,如需切换场景则只引用部分。

游戏中使用的wav文件为11025bps,8bit,用其他软件生成的基本不能直接使用。

push会将字算术扩展为双字再入栈,提取时很可能已经不是原来的样子。需设法处理掉高位字的数据。

Thursday, March 13, 2008

改善对话框效果

我比较喜欢高分辨率的效果,前面很多显示补丁都和这个有关。目前可以说除了对话框能挪的都差不多了,还有几个小的字符串,比如进入场景的和战斗结束的,大概也无伤大雅。

这个补丁用于改善对话框的效果。增大了对话框大小和每页显示的字符数。

12个是对话框大小,对话框位置,头像位置,每个都对应不同情况下的4个值。因为头像大小固定,头像框大小就不用管了。至于每个数字控制什么,自己试一下吧。
注意对话框尺寸的y值不能超过127。
上面chinese charactors in 1 line 是一行中汉字的个数。

Pixels for 1 charartor in x (and y) axis 是一个汉字在x轴(和y轴)占的像素,如果是16和17就是原版的紧凑效果,想让汉字分开一些就把它们加大。

以下是两组不同的效果:

30, 102
16, 17, 4
512, 108, 512, 108
94, 17, 23, 336
23, 17, 546, 336

z_017

24,95
18,19,3
457,101,457,101
90,370,90,370
91,305,91,305

z1_004

Click here to download.

PTT版系统增强补丁

基本和“苍龙逐日”系统增强补丁内容是差不多的,但这次讲的详细些吧。

增强内容:

1、增强物品选单。在一页里显示72(6*12)个物品,同时在选单下方显示物品的详细属性。

2、增强人物状态选单。在一页里显示人物的全部属性,包括隐藏属性。

3、人物的属性值在1000以上时可以在状态、战斗、医疗中正常显示。

4、等级上限改为60级。使用了新的升级经验算法,可以正常升级。

5、使用新的伤害公式。内力,轻功,拳剑刀特均参与伤害计算。拳剑刀特4个属性仅在使用相应武功时有效,如御剑高的人用剑法伤害就会加强,同时对敌人的剑法防御也会加强。

6、增强医疗。

7、附带伤害公式编辑器,可以自己调整伤害公式和一些其他参数。

8、山洞场景里取消黑色遮盖。

一些细节说明:

1、PTT版里面许多属性是没有上限的。但这个补丁使用了0.72版的z.dat文件,取消上限比较麻烦,所以多数定为999。需要修改的请自己用Fishedit 0.72修改(至少我自己打通时还没到1000,但听说有把暗器练到几千的狂人)。

2、显示物品属性时,最后一行为秘笈或装备的要求,秘笈所需内力性质看数字的颜色。不过如果某个秘笈只要求阴性或阳性内力就看不到了,但这样的秘笈似乎没有。状态中还有中毒程度和受伤程度没显示。

3、修改器中有“空挥升级速度”和升级增加属性固定的修改。“空挥升级速度”越大,武功升级就越快,讨厌空挥的朋友可以试试。“升级增加属性固定”是在升级时加攻击防御轻功的值固定为资质所对应的最大值,在“苍龙逐日”中很多人问过类似的问题,但在PTT版里面这个大概没什么用。

4、由于PTT版很多地方比较夸张,级别升多点也没关系,所以解除了30级的限制。但注意敌人战斗后也会升级,所以你下次见到同一个人他可能会变强。

5、推荐使用dosbox运行游戏。

6、如果在使用时跳出并且报告缺少文件,可以自己先复制一个解决。出现类似问题请告知于我。

已知问题:

补丁与Fishedit 0.72基本兼容,但不要试图改回低分辨率。如果有些场景(主要是皇宫)有死角,可以暂时换回原来的z.dat。

我在编写新伤害公式的时候无意中占用了游泳的鱼为武器武功配合列表预留的一部分空间。目前来看不会导致bug,但是如果你需要自己增添这个列表,请不要超过30个。

Click here.

《再战江湖》系统增强

《再战江湖》是目前开放性最高的MOD,也是我最喜欢的。

这个补丁的内容与之前两个区别不大,是这个系列的最后一个,大概一段时间内不会再做。

请直接用z3.exe进入游戏(自己改成z.com或play.com或其他任何可执行文件名都可以)。

说明:

1、直接使用高分辨率。全属性密码正常,开始时正确显示主角躺在地上的图片,物品选单能够正常显示,所有属性的增加与原版一致。

2、取消山洞的遮盖,因为高分辨率时山洞遮盖效果不正常。

3、游戏中许多对话比较长,故附带对话框调整器,压缩包里的截图是我推荐的数值。不过《再战江湖》的对话文件并非talk.grp,而是zztt.ngm,所以可以先改文件名字,补丁后再改回去。另外注意主程序文件名不是z.dat。

4、其余请参考“PTT”版补丁的说明。

5、这个补丁中修正了物品数目超过32767后会出错的问题,如果物品数超过这个值之后就不再增加,之后就看着办吧。

已知问题:

1、我试过重新开始时品德指数总是很高,甚至有几次到了100,原因不明。

2、与liudu发布的修正补丁暂时不能兼容,因liudu修改了原版的一些内容。

感谢南宫老师同意放出本补丁。

感谢liudu协助测试。

Or click here to download.

《苍龙逐日》的系统增强补丁


08-01-25,Beta1:

征得原作者小小猪同意放出此补丁。

游戏数据没有任何修改,主要是物品选单上增加了显示物品的详细属性。同时附带伤害公式编辑器,可以自行调整伤害公式。修改器中添加了升级加属性固定的修改。
补丁中经验值的计算方法与原版不同(实际上补丁中的等级上限已经可以轻易取消),所以有些队友加入时经验可能过高。
需要修改进度请用fishedit0.72版。

这实际上可以算是最近制作的所有补丁在mod应用的一次集合和尝试。

08-01-26,Beta2:
秘笈需要内力性质可以显示,看最后一行数字的颜色。
显示人物隐藏属性。

08-01-26,Beta3:
隐藏属性漏了“抗毒”,补充上。

08-01-27,Beta4:
增加“生命增长”显示,修正一个字符串。
默认伤害公式略为修改。

08-01-27,Beta5:
修正队伍中有高武学常识角色时战斗跳出的错误。

08-01-28,Beta6:
选择初始属性可以看到资质,与原版一致。

08-01-29,Beta7:
进入游戏后即可正常查看物品菜单,无需黑屏。
在战斗时物品图像可以显示。
选择初始属性可以看到特殊。

不确定是否仍然有bug,使用时请多存档。

已知主要问题及修正记录:

1、刚进入游戏时物品选单不显示贴图,原因:主地图贴图个数未修改(Beta7中修正)。
2、在桃花岛打开机关时当机,原因不明。自己复制一个wav文件改名为atk36.wav可解决。
3、在选择性情节中,显示的字符串是“是否住宿”(Beta4中修正)。
4、队伍中如有高武学常识角色战斗时会跳出(Beta5中修正)。
5、战斗时物品贴图不显示,原因:初始内存未修改(Beta7中修正)。

Click here to download the Beta 7.

Tuesday, February 05, 2008

新年快乐


 


主题颜色改了一下,配合一下气氛。


这是新的模型照片,造型不是我摆的。



P1310057


Monday, January 28, 2008

This site.

 

This site is hard to visit in China Mainland. So I left it for a long time.

Post what?

Friday, January 04, 2008

玩具照片


 


这年头无聊的人还真多。。。


黑的那个是捡到的,缺了手,另一个无聊的人把这两个重新组装了一下。



P1020035
 P1030037


Wednesday, January 02, 2008

圣诞和新年


 


圣诞和新年总是连在一起。


近几年的这些时候,我在做些什么?


记忆是容易变淡的。


 


PS:花5块钱买了个高达的扭蛋玩具,居然有人说我白痴。


Head Image

ha2 q2 cy1 sz2 zy3cr3

Monday, December 17, 2007

垃圾邮件


 


每天从邮件服务发来的垃圾邮件隔离通知告诉我,每天都有很多垃圾邮件。有些邮件的后缀看起来还很有名。


比如有过nvidia,drexel,tsinghua。


什么时候要是收到aaas的垃圾邮件,恐怕也算到头了。


Tuesday, November 13, 2007

去哪吃饭


 


每天都必须考虑这个问题,每天都想不出什么好的结论。


Monday, November 12, 2007

Another site


 


There is another site of mine.


http://anothersty.spaces.live.com/


那里是一些评论、小问题的讨论以及从网上收集来的东西。相对来说更为乏味和个人化一些。别人问我的问题也可能从里面找到。


里面的日期多数是我随便填上去的。


Saturday, November 10, 2007

借书


 


借了两本流体力学来看,很快就看不下去了。


主要是没什么兴趣,还有全英文的看得也不是很爽。


去图书馆换两本好了。