troytroytroy 发表于 2015-4-21 07:31:17

再論英雄血

本帖最后由 tryotryotryo 于 2015-4-21 10:33 编辑

英雄血是很常用的一個效果。例如有一個單位生命值為 x ,設定兩個循環的觸發損傷該單位-(16777217-x)

(16777216-x)

就可以讓這個單位回血速度每秒+1。如果這個情形下改變這個單位生命值y (變成x+y),則明顯這個觸發就會崩潰。


問題是"存不存在某個 y 使得這個條件不崩潰?"


我先用弓兵為例 x=30,y=2時


崩潰了。那如果是 y=4呢?


成了,沒崩潰。猜想是:y 只要是 4的倍數都行。試試 y=8:


好,我想這是對的 (暫定假設)。但是這樣真的有英雄血嗎?損傷他 5 血試試,結果他回血成為


我直接說結論:當你改了某個 4 倍數的血量,受傷後血量為 z 則他會回到 x+4k,k 滿足 z <= x+4k 且為最小 。像在這個例子裡,受傷低於 30 會回到 30、31~34會回到 34,高於 34會回到38。

回到實際面,如果不是弓兵這類不會自動回血單位,而是英雄單位,那在 34到35 血之間可以靠英雄血"移動"過去。換句話說,對英雄來說這仍是加快回血速度。只不過不再是每秒一血,因為在 30~31 和 34~35間是沒有英雄血效果的。

狂~劇情狂 发表于 2015-4-21 10:22:50

文章結論沒有說明 k 何所指……

其實類似問題過去不少文章已經說過了(例如拙作https://www.hawkaoe.net/bbs/thread-5375-1-1.html),英雄化特效的基本原理就是浮點數精確度問題(專業的分析參見https://www.stata.com/support/faq ... nt/float-data-type/)。遊戲儲存單位現在生命值為 float 、最大生命值為 signed short ,兩者實際沒有直接聯繫,僅有遊戲正常治療行動增加前者時會限制數值不大於後者;英雄化效果利用的摧毀目標觸發事件效果僅祇干涉單位的現在生命值,其 x 值只是方便設定一個自我回復上限而已,同樣與單位最大生命值無直接關係。

不過,最大問題還是在 1.4 版已經提供治療新觸發事件效果的情況下,英雄化特效基本與被淘汰無異……
页: [1]
查看完整版本: 再論英雄血