修羅場

12月1日に動くバイナリを提出ということでヤバイです。未だに細かい仕様が修正される程に・・・。
今回施した仕様変更。状態変化遷移の成功率。SRSの状態変化は段階があるために遷移という言葉を利用した。段階があるというのは、例えば、正常→微毒→猛毒、みたいな単方向や、躁←正常→鬱、みたいな双方向といった感じになる。なので、右にどれくらい動くか?左にどのくらい動くか?という形になる。で、正常というのも一つの状態変化と考えることにより攻撃・回復を一つにまとめたのだ。で、これが思わぬバグを引き起こしていた。
攻撃の場合は成功率がある。パラメタとしては、攻撃側の成功率の他、受ける側の耐性がある。で、攻撃側パラをK(0〜∞)、守備側の耐性パラをS(0〜100)とした場合、遷移確率は、
(1-\frac{S}{100})^{\frac{1}{K}}
普通なら耐性が0で普通に状態変化がおこる。で、耐性がある、つまりS=100だと状態変化は絶対起こらない。はい、ここでバグ発生ですね。攻撃的な状態変化ならこれでよい。ただし、回復の場合どうか?この方法だと耐性があると回復も不能なんですよね。「そもそも耐性があるから回復以前にその状態変化が起こらないんじゃないのか?」普通ならそうでしょう。しかし、以前紹介したように動パラ依存となると話は変わってくる。一番わかりやすいのは戦闘不能状態だろう。これに耐性をつけるということはすなわち、即死耐性がつくということ。コレ自体は何も変ではないだろう。しかしHPが0になれば即死耐性があろうがなかろうが関係なく戦闘不能状態になる。つまり耐性があってもその状態変化が起こることは普通にありうるのだ。
ということで、結局のところ、攻撃と回復(発生と解除)は別に管理しなければいけないということですね。