赤いセガ信者のぶろぐ

長文でゲームのレビューを書くことが多いです。qiitaにもtwitterにもfacebookにも書きにくい記事はここ。

ここは告知欄

EFT 脱水や疲労ダメージに関する危険で面白い発見

はじめに

f:id:orzlabo:20210416234622j:plain
脱水死

wikiで少し話題に上がっていたのですが、空腹の状態だと突然死することがあるという書き込みを見かけました。
そんなわけねーだろちったー考えろやとは思いましたが、そうはいってもBSGなのでワンチャンほんとにアルカモ……思い、検証してまいりました。そしていくつか興味深い発見があったのでお伝えします。
最初に重要なことを書いておくと、突然死ぬことはありません。然るべき手順に則って死にます。

突然死は無い

厳密には悪魔の証明になってしまうので突然死肯定側の証明を待ちたいところですが、意味不明なタイミングで死ぬことは実戦ではないと思われます。
何故これが言えるかというと、オンレイドでエネルギーゼロの状態でずーっとグリズリー巻き続けて使い切っても死ななかったからです。
リアルに30分以上使いました。実践において

  • エネルギーゼロになる
  • 新品のグリズリーを使い続けられる
  • その状態で交戦も脱出も30分間しない

というようなことはまずないため、たとえ謎の死が確率で起きるとしても実戦で遭遇する可能性はかなり低いでしょう。その前に死ぬか脱出するか食い物を見つけます。
グリズリーを持ち込んで疲労/脱水対策するぞ! とかいう前にもっと気を付けることがほかにいっぱいあるのでそっちを気にしてください。
まあ、一応、サレワ残ってれば即死はない、と言い換えることもできますので、食べ物持ち込むのメンドクセー派の人にも悪い話ではないかもしれません。

しかし然るべくして突如死ぬ

これは検証中に発見したのですが、脱水/疲労の持続ダメージは胸か頭がゼロになった瞬間死ぬようです。
なのでたとえヘルスがまだ残っていても、回復が間に合わないと死にます。
脱水/疲労固定持続ダメなのでヘッドへの負担が大きく頭の回復を優先しないと死にます。疲労は結構ダメージが痛いので数分でヘッド削り切ります。 これについては脱水死を動画で取ってきたので以下でご確認ください

ヘッド脱水死する動画

ヘッド以外を回復し続け、頭がゼロになって死にました。突然死ぬ論者の方々はこれを謎の死と勘違いした可能性もあると思います。

まとめ

出血と違ってHPが残ってても問答無用で死にますが、謎の死ではなく然るべくして起こった死、というのが僕の結論です。
シーズンも後半になり、SJ1、eTGなどの薬物中毒になる人もいるかと思いますが、副作用に気を付け、食べ物を持ち込むなどして良きタルコフライフを送ってください。ミルクがおススメです。

他にもタルコフ関連の記事を書いているのでよかったら見ていってください

www.oarzet.red

おまけ: この結果から分かる少し面白いこと

注: ここからの話はゲームには全く関係なく、興味ない人にはまるで分らないお話をしています

ゲーマー的には前述の文章で終わりなのですが、エンジニアリングとして考えると少し興味深いです。(筆者の職業はぷよぐやまーみたいなものです)
何が興味深いかというと、特別扱いされていたのはデバフダメージでもなく、弾丸や分散ダメでもなく、出血ダメの方だったということです。
全然興味ない人にはワケワカラン話だという自覚はありますが、これは僕にとっては結構面白いことなのです。

例えばゲームを作っていて、ダメージを受けたときのプログラムを書くとき

  • HPを減らす
  • 胸か頭のヘルスがゼロになっているか調べる
  • 胸か頭のヘルスがゼロになっていて、その原因が弾丸か分散ダメなら死亡

というような処理を書きます。が、実際には脱水などでも即死するため、プログラム的に

  • 胸か頭のヘルスがゼロになっていて、それが出血でなければ死亡

と書くのが自然になります。もしBSGが脱水や疲労で即死してほしくないならここは

  • 胸か頭のヘルスがゼロになっていて、それがデバフダメでなければ死亡

と書くのが簡単です。出血と脱水/疲労ダメと(未検証ですが)毒もひとまとめにするわけです。しかして実際には出血の時は死なないため、出血が特別扱いされていることになる気がします。 で、実際には、出血では死なないが脱水では死ぬので、ここから二通りの考えが予測されます。

  • BSGはこれを意図している。脱水はバイタルゾーンがゼロになったら即死する仕様
  • BSGはこれを意図していない。脱水は死亡緩和条件への記載漏れである

のどちらかです。仕様であればここで話は終わりなのです。

仕様でなかった場合がまた少し面白いです。
前述の通り、脱水で即死してほしくない場合は

  • 胸か頭のヘルスがゼロになっていて、それがデバフダメでなければ死亡

と書けば済む話ですが実際はそうなっていないので、出血と脱水を同じカテゴリと見做す処理が該当部分には書いてないと予測されます。
なのでこれは想像ですが

  • 胸か頭のヘルスがゼロになっていて、それが出血、脱水、疲労でなければ死亡

という風に書かなければいけないところを忘れているのかもしれません。
こういうプログラムにしてしまうと結構大変です。死んでほしくないデバフが増えるたびにここに書き足さなければならないからです。
デバフ一覧を何処かに定義しておいて、デバフごとに即死フラグを持てるようにしておき

  • 胸か頭のヘルスがゼロになっていて、それが即死フラグを持たないデバフでなければ死亡

と書いておけば、デバフの種類が100個になろうがこの部分は変更する必要がありません。 出血、脱水といった別々の概念をある程度同じく扱えるように「デバフ」と呼ぶやり方を抽象化と呼びます。逆に

  • このデバフは即死しない。名前は出血である。止血で治せる
  • このデバフは即死する。名前は脱水である。水分を回復すると直せる

という風にデバフを複数定義し、それぞれ違う性質を追加していくことを具体化と呼びます。
BSGは兎に角バグを1個直すとバグを10個埋め込むレベルで思いもよらない部分、しかも今まで動いていた部分をぶっ壊すことでとても有名です。
プログラムを楽に書くには、具体化と抽象化のレベルをイイカンジにして、いじったときにそれがぶっ壊れてないことを担保するテストと、それが思いもよらない場所で副作用を起こして他をぶっ壊さないように疎な関係性を保つといいといわれることがあります。
どんな状況でも使える万能のやり方があればだれも苦労してねーのですが、まあBSGなので、持続ダメの仕様一つでここまで妄想が膨らんでしまいました。
どうかこれが仕様であり、BSGもイケてるプログラムを書こうと頑張っていると願いたいものです。

ここはフッター