标题: DOS版三国志英杰传的研究心得——伍, 道具的数据以及与人物的数据的关系
性别:未知-离线 漫漫苦短

Rank: 2Rank: 2
组别 百姓
级别 破贼校尉
功绩 1
帖子 69
编号 545816
注册 2023-12-25


发表于 2025-8-9 19:19 资料 短消息 只看该作者
DOS版三国志英杰传的研究心得——伍

从前面几章的介绍来看,道具的数据也是有在内存中占有一块的数据空间,而且与人物的数据也是有联系的,这块数据究竟有多大,这个就是本章探索的问题。

不过说起道具,相信很多玩家想起英杰传的经典介绍。

QUOTE:
《三国志英杰传》是KOEI出品的一个集战略模拟与角色扮演于一身的上乘之作。其故事与“三国”原著颇有关联,而且免去了繁琐的练兵、种田,并提供64种道具及30余种策略,让玩者在战场上杀得淋漓尽致。

虽然听上去64个道具很吸引眼球,不过实际上这似乎是个障眼法,有很多道具具有相似的功能,那么第一节就开始从道具的简介来了解英杰传的道具,然后再由已有的知识,结合道具的内存空间以及相关代码,获得更多道具相关的细节。

目录

  • 一、道具的简介
  • 二、道具数据的组成


[ 本帖最后由 漫漫苦短 于 2025-9-9 20:06 编辑 ]


顶部
性别:未知-离线 漫漫苦短

Rank: 2Rank: 2
组别 百姓
级别 破贼校尉
功绩 1
帖子 69
编号 545816
注册 2023-12-25


发表于 2025-8-19 19:19 资料 短消息 只看该作者
一、道具的简介

对于这64个道具,根据已有的知识,可以先将它们分个几类,比如增加攻击力的武器:青龍偃月刀、蛇矛、方天畫戟等等;增加防御力的兵書:孫子兵法、吳子兵法、孟德新書等等;增加移动力的馬:赤兔馬、的盧、黃爪飛龍(没错,游戏中确实是叫这个名字);在每个行动回合开始自动恢復的道具:玉璽、赦命書、援軍報告;剩下的都是主动类道具(我军在行动回合操作使用的),并且是一次性道具,然后其实还可以再对这些道具进行一次再次分类,第一类只能对道具持有者使用并且有兵种使用限制的,比如有升职的,長槍、步兵車、連弩、發石車、馬鎧、近衛鎧、無賴精神、俠義精神,转职的,遁甲天書、青囊書、鼓吹具、弓術指南書、馬術指南書、劍術指南書。第二类只能对我军或友军使用的恢復用的道具,有必须指向的单体道具,酒、特級酒、老酒分别是三阶士气回复道具;豆、麥、米分别是三阶兵力回复道具;傷藥、中藥、茶分别是三阶士气兵力回复道具;有以使用者为中心的群体道具,平氣書、活氣書、勇氣書分别是三阶群体士气回复道具;援隊書、援部書、援軍書分别是三阶群体兵力回复道具。第三类只能对敌军使用的道具,濃霧書、雷陣雨書、豪雨書都是可以混乱敌军的,剩下的都是伤害类道具,焦熱書、火龍書、猛火書分别是三阶火系伤害道具;漩渦書、濁流書、海嘯書分别是三阶水系伤害道具;落石書、山崩書、山洪書分别是三阶石系伤害道具;最后还剩一个伤害道具炸弹,它是没有使用地形限制,然后伤害的算法也不太一样,算是特殊的道具。

根据上面的简要分析,先预估一个道具究竟需要多少字节来存储信息,首先需要1个字节来存储道具编号,64个道具对应16进制就是00至3F,还需要存储道具的名字,最长的道具有5个字,加上字符串末尾的0标志,就是11个字节,然后上述的道具分类,也需要1个字节存储,然后每个分类中每个道具的额外数值不一样,例如像攻击力的武器、防御力的兵書、移动力的馬的分类中可以有不同加成,升职和转职道具要记录变换的兵种和使用限制的兵种,这些也可能要占用几个字节,还有道具的黄金价格,最大的买道具的价格为2000(援軍書),最大的卖道具的价格为1910(不可买道具),但根据周瑜前辈的英杰传详细流程攻略,卖的道具可以由买的道具计算得出:

QUOTE:
道具卖价是买价的75%,个位数直接舍去。

可以用2个字节记录买的价格或卖的价格,不过还有另一种可能性可能这个数据已经包含在前面的额外数值里。

那么实际上一个道具究竟在内存空间中占用多大的内存空间,每个字节究竟有什么作用,本章开始逐步分析。


顶部
性别:未知-离线 漫漫苦短

Rank: 2Rank: 2
组别 百姓
级别 破贼校尉
功绩 1
帖子 69
编号 545816
注册 2023-12-25


发表于 2025-9-9 19:19 资料 短消息 只看该作者
二、道具数据的组成

上节的简介已经将道具的现有知识,不过还有一部分疏漏,每个道具其实有一串比较长的文字叙述,这样其实每个道具占用的内存是比上节最后分析的内容要多。

如果用过龙吟或godtype以及其他作者的修改器,就会发现一个问题,如果要修改道具的名字属性等等,会修改BAKDATA.R3文件,但是如果改动道具的介绍的部分,则会改变MAIN.EXE的内容。上节讨论的道具的名字属性等等,也是程序通过读取BAKDATA.R3文件中道具的数据,并导入到内存空间中。而如果从内存分段的角度来说,这两部分都在DS段中,只是有部分数据是来自MAIN.EXE,可以称为内部数据,而来自BAKDATA.R3文件中的数据,可以称为外部数据,以下就简要分析外部数据的部分。

每个道具所占的(外部)数据共17个字节,对应的16进制的偏移就是00-10,但其实只有以下5个部分:

QUOTE:
偏移+00  占n字节  道具名字
偏移+0D  占1字节  道具代码
偏移+0E  占1字节  道具购买黄金价格
偏移+0F  占1字节  道具特殊作用额外数值
偏移+10  占1字节  道具特殊作用

其中道具的名字占了13个字节的空间,但不是每个字节空间都被占用了,因为名字的长度不一样,但为了每个道具所占用的空间一样以及为了数据对齐的目的,这样就可以更加方便找到每个道具数据数据的首地址,强制占用了这些空间。一个汉字对应这2个字节的空间,这样看来可以把道具的名字最大改成为六个字的道具。

然后偏移+0E+0F+10就是本章将要讲述的重点,与上节的分析不太一致的地方就是道具购买黄金价格,这里只用了1个字节来记录,那么1个字节是如何记录道具购买黄金价格,下一节就开始分析一下。

[ 本帖最后由 漫漫苦短 于 2025-9-9 20:05 编辑 ]
顶部

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




当前时区 GMT+8, 现在时间是 2025-9-13 00:02
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

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

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