设为首页收藏本站

八达网

 找回密码
 注册
查看: 1032|回复: 10
打印 上一主题 下一主题

老生常谈,关于神族护盾参与防御时对伤害值的具体影响zzps

[复制链接]

1

主题

0

好友

3184

积分

飞龙

跳转到指定楼层
1
发表于 2008-12-6 18:06 |只看该作者 |倒序浏览
首先感谢startoss、victim.csa和plp等同学的启发,让我有了思考和分析这个问题的想法,他们还帮我解决了一些问题。

其实研究这个问题对于游戏的进行,真是没什么帮助。大家星际打到现在了,这种东西已经毫不重要了,还不如吞噬者减防那个的知识有用。不过既然都花了一笔时间了,还是总结一下发个帖吧。

问题主要是围绕着“神族护盾数值不足以承受一击时,单位所受伤害是怎么算的”展开的。

多数人都认为,这个时候的伤害计算公式应该是 (攻击伤害-护盾防御力-护盾值-HP防御力)*伤害系数(这是没考虑溅射伤害的情况)。

然而,实际上。。。。   这个是对的。

但是实际操作中经常会有伤害少了1的情况发生,比如SCV焊0防0盾的Probe时。假如这个Probe护盾是1,血是20,SCV焊下去之后实际效果是护盾变0了,血变成了17。看上去SCV只造成了4点伤害。同样的,攻击神族别的单位的时候,即便是不同的攻防情况,这个情况也时有发生。上面的公式的正确性因此受到了挑战。

因为已知星际里有非整数伤害的存在,所以为搞清神族护盾究竟是怎么回事,我搜索内存来看护盾是如何记录的。

结果发现护盾存储的前一个字节,是用来表示小数的,比如护盾如果剩4,他的表示是 4D 04,高位的4是护盾的显示值,而低位的那个字节的数值是不停递增的,这里4D只是举个例子。

我认为星际里计时的最短单位是一帧,所以把星际的游戏速度调到最慢,用变速齿轮调到2^(-4)倍的速度,一帧一帧观察护盾增长。

每一帧护盾涨7(指的是低字节的数值)。也就是说护盾增长最小单位是7/256(0.02734375),并非很整的数。
同时说明护盾记录的最小单位是1/256点护盾。

星际fastest下,每秒24帧,也就是说每秒回护盾0.65625,龙骑80点护盾回满需要约121秒,和秒表成绩相符。


好了,弄清楚护盾是怎么回事并不够,还得看看HP对非整数的处理。

HP的表示也是同理,高位是显示的血量,低位记录不足1的部分。

先算算满血坦克被ghost打(都是未升攻防的)
tank被ghost打一枪,伤害应该是(10-1)x0.25=2.25
打完之后坦克显示的血量是148,我们知道其实应该是147.75
看内存里:
低位是C0,十进制也就是192,192/256=0.75,正好表示剩余的不足1的血量,
(这点说明在HP方面,最小单位也是1/256。)
同时高位是93,十进制是147。说明内存里记录的还是147.75,只是显示成了148。

看起来星际有把小数位入到整数的习惯。

为了验证到底什么情况下才把小数的HP入到整数位,我手动修改坦克HP的低字节,发现只要不是00,都会入到整数位,意思就是即便真实血量是147.00390625,在星际里也会显示成148。

而护盾不同,高位是什么就显示什么。(否则就看不到护盾显示为0的情况了)
比如护盾实际值是0.9,会显示成0,实际值是8.9,会显示成8。


护盾以非整数速率增长,HP显示会把不足1的部分入到整数位,似乎已经说明了什么。文章开始所说的SCV攻击后的Probe,因为护盾是1.X,可能实际上剩的HP是16.X,SCV的攻击力并没有缩水。
但是雷车两炮就能打死一个probe,又与上面的假设有悖。
那么就只能再次假设,护盾整数位为0时,不能抵消伤害。

为了验证这一点,我继续用超慢速观察护盾在受伤害时的变化。
过程略去,直接说结论,
护盾大于1的时候(比如1.5),小数部分也会用来抵消伤害(抵消的就是小数,不会取整的),而且抵消之后彻底清零,重新增长。同时经它抵消的伤害,也会变成非整数。

而如果护盾小于1(比如0.5),小数部分会被无视,伤害直接作用于HP,伤害不会被减少,而这小数部分的护盾也不会被清零,继续增长。

这样的话,护盾承受伤害的细节就搞清楚了,而且解释了为什么攻击神族单位时伤害会有一些浮动。


---------------------------------------分割線の憂鬱---------------------------------------

除了护盾,还顺便实验了点儿些别的,一并说一下。

虫族回血,每帧回复4,即0.015625,每秒就是0.375。

之所以会有虫族一被打就会回1点血的情况,是因为HP的小数部分都入到整数位的缘故。
假如SCV打drone,drone一下会变成35.0HP,但是下一帧就变成35.015625了,因此星际里会显示成36。


科学船辐射问题。
科学船辐射减血是每8帧减少3.33203125的血,并非每帧都减,和护盾回复有别。
还以fastest 24fps计算,每秒辐射的减血是9.99609375。
从实践来看,辐射死一个SCV需要六七秒,也是符合这个速率的。
一次辐射一共输出伤害是249.90234375,共25秒。


---------------------------------------分割線の嘆息---------------------------------------

类似的还有defiler瘟疫减血速率、medic医疗速率、电池充电速率之类的,但是没有进行测试,因为实在是意义不大了。。。


本文完。
1

查看全部评分

60

主题

0

好友

6万

积分

仲裁者

战队
[HS81]
种族
Terran
2
发表于 2008-12-6 19:12 |只看该作者
这贴比前面发的更详细了. 作为T.我希望能够出更多的新技术.
欲鹏程万里,首言出必行。
   
             載自—《ヽ.李先玍語彔》
回复

使用道具 举报

0

主题

0

好友

1万

积分

航母

3
发表于 2008-12-6 20:55 |只看该作者
原帖由 ヽ.李先玍 于 2008-12-6 19:12 发表
这贴比前面发的更详细了. 作为T.我希望能够出更多的新技术.

对你有撒帮助
你现在堕落!B
分析的很好 很全面
中国ESP星际骑士战队 荣誉 激情 执着 我们始终为荣誉而战
回复

使用道具 举报

50

主题

0

好友

5万

积分

光明执政官

4
发表于 2008-12-6 20:58 |只看该作者
...分割線的嘆息...orz
战争即和平,自由即奴役,无知即力量
回复

使用道具 举报

43

主题

0

好友

2万

积分

大和

D调·D调

5
发表于 2008-12-6 21:52 |只看该作者
不错,转的很好。LZ辛苦了
回复

使用道具 举报

60

主题

0

好友

6万

积分

仲裁者

战队
[HS81]
种族
Terran
6
发表于 2008-12-6 22:15 |只看该作者
3楼就是个悲剧...单手直接A死你.
你先把LZ说的东西看完吧.你个菜P 对你有帮助
欲鹏程万里,首言出必行。
   
             載自—《ヽ.李先玍語彔》
回复

使用道具 举报

0

主题

0

好友

1万

积分

航母

7
发表于 2008-12-6 22:40 |只看该作者
原帖由 ヽ.李先玍 于 2008-12-6 22:15 发表
3楼就是个悲剧...单手直接A死你.
你先把LZ说的东西看完吧.你个菜P 对你有帮助

来撒 哥带1个电脑灭拉你 楼主转的很辛苦  支持
中国ESP星际骑士战队 荣誉 激情 执着 我们始终为荣誉而战
回复

使用道具 举报

0

主题

0

好友

5134

积分

飞龙

8
发表于 2008-12-6 22:42 |只看该作者
你用8条小狗包围虫族的农民`` 再同时基本上的同一时间 ` 没点偏差...  
   A不死`` 还剩一点血`` 因为这个是虫族的第一点回血可以算是多出来的
我仿佛看见  一出悲剧在上演
回复

使用道具 举报

13

主题

0

好友

4882

积分

飞龙

9
发表于 2008-12-6 22:54 |只看该作者
LZ真强   以后不升防了
回复

使用道具 举报

0

主题

0

好友

1万

积分

航母

10
发表于 2008-12-7 00:15 |只看该作者
有点理解了升盾的涵义了
努力啊努力,淡定啊淡定.............
回复

使用道具 举报

0

主题

0

好友

3722

积分

飞龙

11
发表于 2008-12-7 12:42 |只看该作者
看来盾比较实用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|八达网    

GMT+8, 2025-11-23 11:54

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部