FF8经验值计算公式(完全版)

2004-09-09 21:01 | bsp


方法: 用调试器监视程序对内存的读写进而推导出公式
环境: Win98SE
工具: SoftIce 4.05 for win9x
场景: Disc2,仙人掌岛北面的大沙漠
敌人: Blitz, Grand Mantis

为了方便下面的叙述,先说一些地球人都知道di东东(表怪偶火星):
1.战斗后得到的经验值分为两部分, 基本经验值和增益经验值.
2.基本经验值是正常状态下每个角色必得的,而且每个参战队员都是一样的.(所谓的正常状态,是指角色能够得到经验值的状态,而比如石化,战斗不能的状态则不能得到经验值.)这个值与敌人的Lv,被扣掉的HP,我方队员的Lv,敌人的基本经验值有关.
3.增益经验值是给予敌人最后一击的角色获得的.GF与队员一样,也可以获得增益经验值.这个值与敌人的Lv,我方队员的Lv,敌人的增益经验值有关.
4.战斗中角色的基本经验值是所有敌人的基本经验值汇总,而每个敌人的增益经验值则分配给完成对该敌人的最后一击的角色.

然后是一些不为人知的东东:
1.角色的每一次物理或魔法攻击的结果在输入指令后角色行动前已经确定,状态攻击要拖后一点,直到作用在敌人身上才能确定.
2.每个敌人的经验值的计算在对它的最后一击生效前发生.其中石化是例外,在战斗结束时发生,而且不计算增益经验值.

好了,给出公式.下面的两个公式都只对当前受到攻击的敌人和当前正在进行攻击的角色(含GF)起作用.
eLevel: 该敌人的当前Lv值
pLevel: 该角色的当前Lv值
sLevel: 参战队员的Lv总和
nParty: 参战队员的人数,这个人数是实际在战场上的人数,战斗不能和石化都计算在内
eMaxHp: 该敌人的当前最大HP值
eCurHp: 该敌人的当前HP值,一般为0(已经挂了嘛),不过若是石化或者逃跑就不是0了
bExp: 该敌人的基本经验值,自身的属性.这个数值参考小薇儿的敌人资料,不过我是从内存中找到的
eExp: 该敌人的增益经验值,自身的属性.这个数值参考小薇儿的敌人资料,不过我是从内存中找到的

baseExp: 本场战斗该敌人所产生的基本经验值
extraExp:本场战斗该敌人所产生的增益经验值

baseExp = [ 5 x eLevel x bExp / ( sLevel / nParty ) - bExp ] x ( eMaxHp - eCurHp ) / eMaxHP

extraExp = 5 x eLevel x eExp / pLevel - eExp

注意:
1.这里的除法只取商, 忽略余数
2.如果公式中的bExp=0, 那么baseExp=0;如果eExp=0,那么extraExp=0

怎么样,还算简单吧

上下限的判断:
两种经验值的上限均为60000(不是65535),下限均为1(当计算结果不大于1的时候取下限值).每次公式计算后和队员的求和后都会产生一次,具体的判断过程请参见下面的例子.

举例:

敌人:
Blitz: Lv14, HP 861, bExp 20, eExp 10
Grand Mantis: Lv12, HP 5449, bExp 80, eExp 20

队员:
Quistis: Lv9
Squall: Lv17, 完成对Grand Mantis的最后一击
Rinoa: Lv21, 完成对Blitz的最后一击

计算:
基本经验值:
Blitz: = [ 5 x 14 x 20 / ( (9 + 17 + 21) / 3 ) - 20 ] x ( 861 - 0 ) / 861 = 73
min(73, 60000) = 73 <---上限判断
max(73, 1) = 73 <---下限判断

Grand Mantis: = [ 5 x 12 x 80 / ( (9 + 17 + 21) / 3 ) - 80 ] x ( 5449 - 0 ) / 5449 = 240
min(240, 60000) = 240
max(240, 1) = 240

总计: = 73 + 240 = 313 <--这里不再判断下限
min(313, 60000) = 313

增益经验值:
Blitz: = 5 x 14 x 10 / 21 - 10 = 23
min(23, 60000) = 23
max(23, 1) = 23

Grand Mantis: = 5 x 12 x 20 / 17 - 20 = 50
min(50, 60000) = 50
max(50, 1) = 50

各队员所得:
Quistis: = 313
Squall: = 313 + 50 = 363
Rinoa: = 313 + 23 = 336
(这里不再判断上下限)

总结:
1.基本经验值的公式里,只要最后不是石化或者逃跑,那么敌人的HP根本不用考虑;若是石化或者逃跑就不同了,还要乘上扣掉的HP再除以最大的HP,这也解释了为什么石化敌人后碰敌人越"轻",经验值越少;为什么"碰"了敌人逃跑还会得经验值.
2.GF的基本经验值的分配是按照基本经验值/该GF所在队员所连接的GF个数,即使连接它的队员没有得到经验值(比如KO状态);增益经验值为完成最后一击的GF独享,公式不变,只是pLevel的值为该GF的当前Lv.
3.有几种方式的最后一击是不会获得增益经验值的,不过并不影响公式的正确性.

关于经验值的计算就是这么多,欢迎挑错.如果有不符合以上公式或者漏掉的情况,请回帖说明.
-
Kweh!!Kweehhhh!!