找回密码
 注册
搜索
查看: 3135|回复: 3

[FC] [TB作品]三国志II霸王大陆计策分析

[复制链接]
发表于 2008-9-8 23:34 | 显示全部楼层 |阅读模式
作者:tanjian_barry
出处:http://bbs.emu-zone.org/newbbs/thread-261695-1-3.html



此分析来自对游戏代码的解读,应该可以保证正确
其中有些分析的结论和我所阅读到的以前的资料不相符合,希望大家可以讨论讨论
计策成功率:
基本成功率算法: (距离修正+智力差+等级差x2+难度修正)%
距离修正=(距离-3)x(-5)
其中距离取两个部队横坐标差或纵坐标差中大的那个值,由于计策施展的距离不会大于5,所以取值只可能为1,2,3,4,5. 修正值分别为10,5,0,-5,-10
智力差为施方与受方之差,若受方智力反而高的话则为0.
等级差为施方与受方之差,若受方等级反而高的话则为0.
难度修正: 人类玩家=10 level1的电脑=5 level2的电脑=10 level3的电脑=20
对于基本成功率还要做调整,基本成功率95%的按5%和95%计算
也就是说至少有5%的成功率,最多也只有95%的成功率.
以上计算方法对笼络和十面埋伏无效,对其他计策均有效.
笼络成功率算法: [等级差x2+(德+智)/10+忠诚修正]%
等级差为施方与受方之差,若受方等级反而高的话则为0.
德和智为施方武将的仁德和智力.
忠诚修正和受方武将的忠诚有关,0到30的修正为50,31到50的修正为30,50到70的修正为10
若受方武将忠诚在70以上时,则笼络不会成功.
十面埋伏的成功率为100%.
对于劫火 共杀 水攻 连环这样影响多个部队的计策,其成功率只看被点的那个武将.也就是说和白痴靠在一起就认栽吧.
看来所谓的按A可以提高成功率的说法只是心理作用.
如果同样智力不如对方,那么等级高的武将成功率略占便宜.
对忠诚大于70的武将施展笼络是唯一肯定失败的计策.
笼络方面同样等级的诸葛亮和周瑜的成功率是一样的。
笼络的时候成功率和对方武将的忠诚度关系是一段一段的,0和30是一样的,31和50是一样的,51和70是一样的,在一个区段内不影响成功率,只影响成功后的忠诚值。
由于计算的时候采用单字节带符号运算所以把智力修改过高可能反而适得其反。比如智力高达200的武将对智力小于70的武将的成功率只有5%。
(由于随机算法的局限性,以上的提到的成功率并不是概率论严格意义上的概率,但应该可以说是十分十分接近概率了。)
 楼主| 发表于 2008-9-8 23:35 | 显示全部楼层

计策伤害算法:

火计、共杀、伪擊转杀: 智x(9~13)/10+(等级-1)x10+30
要擊、落石(兵): 武x(14~20)/10
乱水、水攻: 智x(20~26)/10+(等级-1)+7
劫火: 智x(30~35)/10
陷阱、落石(体): (5~7)x[等级-1+(武+智)/10]/10
连弩: (150~349)+(武+智)/2
十面埋伏: (30~40)x智/10
火箭: 粮x(10~14)/100+智/5
奇门遁甲: 80~150
其中X~Y代表取随机,X为下限,Y为上限。所有随机基本是平均分布,也就是各个可能值的可能性相等。同样由于随机算法的
局限性,概率只可以说十分十分接近,不是概率论上的相等。举例来说9~13代表这个值可能是9,10,11,12,13中的任何一个,
而且每个值得可能性相等。
其中所有值均为施计武将的数值,唯有粮代表了受方的粮草.
对于影响多个部队的计策,对于每个部队独立计算伤害值.也就是算法中各个部队的随机数是不同的。
奇门遁甲只有诸葛亮在战场上的时候才能造成伤害,如果诸葛亮离场了,那么将停止伤害,但依然不能移动。
要擊、落石(兵)只和武力有关系,也就是说诸葛匹夫反不如无脑的吕布。
十面埋伏和劫火的系数真是大,造成的伤害也十分恐怖。
水攻和乱水的算法是一样的,但是劫火却要比火计厉害多了。
单次伤兵最少29(崔谅用要击),最多可能有3460(诸葛亮用劫火)[这个似乎不可能,由于随机算法对于联合概率近似的局限
性,应该不可能连续10次随机出系数35]。
考虑到要击对武力的依赖,连续数次施展时高武力武将比高智商武将可能有更高的总伤害力数学期望值。
以上所有除法结果均舍去小数。
 楼主| 发表于 2008-9-8 23:35 | 显示全部楼层

分析方法

算法其实不难跟踪,我为大家分析一下跟踪中的难点。
F2D7开始的调用是取人物数值基地址,参数在A中(人物代码),结果保存在$00和$01中。
人物具体数值按人物数值基地址和偏移量得到,偏移量参数为Y,$#00为体力,$#01为武力,$#02为智力,$#03为忠诚,$#04
为仁德,$#06和$#07为经验值,$#08和$#09为兵力,$#0A为装备,$#0B比较复杂,高4位为等级-1,低4位中的高两位为兵种
,(低4位的低两位好像和十面埋伏或奇门遁甲有关?望高人赐教)
B806开始的调用是判断两个部队的距离,参数在$0509和$050A中(人物代码),结果保存在A中。
E8B7开始的调用是取随机数。
E862开始的调用是取值小于A的随机数。
B854决定计策是否成功的分支语句。
EAA5是除法$00$01$02/$03$04;EBE9是乘法$00$01$02x$03;EA7C是除法$01$02/$03$04。(注意字节反序)
B68B开始的调用是开始落实伤害(兵),并计算经验值等等。
我用的调试器是FCE Ultra debug,据说NESten不错,VNES也有debug版本的(我的似乎比较慢)。
 楼主| 发表于 2008-9-8 23:36 | 显示全部楼层
1:跟踪算法是什么?几个公式怎么推导出来的?需要什么工具?
楼主解释得不够傻瓜。又或者哪有教程和相关下载?
2:在实际游戏中,有些情况与楼主所写的有些公式并不完全吻合。例如火计、共杀、伪擊转杀伤害算法: 智x(9~13)/10+(等级-1)x10+30,我的体会是当智力大于143,而经验在70以上时,伤害程度会忽大忽小,有时三、四十,有时两百多;当等级在16,智力大于等于82时,也会出现伤害程度会忽大忽小的情况。如果仅从公式来看是不应该出现这种情况的。
又如基本成功率算法: (距离修正+智力差+等级差x2+难度修正)%,
我的体会是智力差在123左右时 ,成功率会有个突变;小于等于123时,成功率很高;大于123时,则成功率突然变得极低,如果仅从公式来看也是不应该出现这种情况的。楼主的解释是“由于计算的时候采用单字节带符号运算“的缘故,什么意思,不懂,烦请解释一下。
3:请教人物姓名(文字的汉化)、图像、寿命、人物出现的时间地点、游戏结束时间怎么改?[/QUOTE]
1.跟踪算法是通过对程序的解读,还原成简单的数学公式. 比如有一个从F2D7开始的20行代码左右的调用,通过分析将其理解为取人物基本地址的调用. 还有比如从EAA5开始的一个调用,其功能是进行乘法运算. 通过对代码的分析,得出编写人员当初设计时所用的数学公式.
主要就是汇编语言,可以看看汇编教程,推荐从Z80,CASL,65C816,68000的汇编开始入门.不推荐8086系列(也就是大家通用的计算机CPU), 因为一来8086体系比较复杂,二来对模拟没有太大用处.
fc用的6502 SFC用的65c816 GBA用的ARM 大量街机用到68000和Z80
2.你所提出问题的确存在,解释起来并不麻烦. 只要理解字节概念就可以了. 6502是8位的CPU,主要用于处理8位(也就是单字节)的数据. 一个字节如果用来表示正数,那可以表示0~255, 如果用来表示负数那可以表示-128~127. 在0~127这一段中正数和负数的表示是一样的. 但在128~255和-127~-1这段表示却是有歧意的,比如255这个单字节是FF,而-1单字节也同样是FF. 也就是说0-1=-1(FF),也可以解释为0-1=255. 而127+1=128(80),也可以解释为127+1=-128 FF和80到底解释为什么是由程序决定的. 我所分析的算法都是在正常游戏的情况下得出的结论,在正常情况下,对单字节的解释不会产生歧意. 但如果做了随意的修改,那程序难免出现问题. 可谓物极必反. 你所提到的123现象应该只对低智商的人会出现问题, 因为大于等于128其实就是负数了,按5%计算. 而伤害的问题更为复杂一些,因为牵涉到乘法,霸王大陆中乘法分为好几种,有些是单字节的,有些是双字节的,而有些则是三字节的,还有一些简单乘法,比如乘以10之类的,采用的是简单位移运算,所以很难一下子说清楚,具体情况还要具体分析.
3.请教人物姓名(文字的汉化)、图像、寿命、人物出现的时间地点、游戏结束时间怎么改
汉化可以参看网上铺天盖地的汉化教学,而且霸王大陆已经有人汉化了. 不过我认为要汉化霸王大陆这种FC文字游戏难度是挺大的,毕竟6502的处理能力太弱了. 图象只要修改rom中的图象就可以了,关于这方面汉化教学也有提到,其实只要看看FC的架构介绍就可以了. 寿命 人物出现地点 游戏结束时间等等霸王大陆的其他算法我正在分析整理中, 过两天会发表的.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|虎纹猫家园

GMT+8, 2024-11-27 15:30 , Processed in 0.019811 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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