星ドラ: いちばん分かる! 耐性計算 — 基本から細部まで

耐性計算、できてますか? 簡単ですよ。できると、ぜんっぜん違いますよ! 意外と、入門から、細部までキチンと書いた記事が無さそうなので、書きました

目次

基本の「き」

耐性は足し算じゃありません! 「食べ物で20%、鎧で30%だったら、20+30=50%」 じゃなくて、0.8×0.7=56%来る、よって44%耐性ですよ。

だいじょぶ、上の説明で分かんなくても、ゆっくり行きます。Okって方も、最後の行だけ読んで下さい。

食べ物、兜、紋章... どれも、「○%耐性」じゃなくて「△%通すフィルター」と覚えて下さい。さっきの例なら、食べ物は80%、鎧は70%通すフィルターです。

結局は、キャラに何%届くか、を知りたいわけです。各フィルターが「防いだ分」は忘れていい。問題は、食べ物を通過して、更に鎧も通過しちゃうのは、80%の70%だから 0.8×0.7=56%が、トータルの害。

ダメージの場合でも、眠りとかの確率でも、同じです。

かけ算だから、順番は何でも同じ。アタリマエ。(基本的には、です。細かい話は後で) 記憶法のもう一つのキモは、「耐性じゃなくて倍率」という事ですね。上の例だと、知りたいのは「倍率56%」であって、わざわざ最後に「耐性44%」に直す必要はありません。

知っとくとお得ですよ!

計算すると! 似てるようで全然違う例

(たとえば)眠りが何回も何回も来る場合、耐性が高い方がいいですよね。でも目覚しリングで「眠りガード+中」の Lv1 (50%耐性) も Lv10 (60%耐性)も似たようなもの、と言えます。どっちでも耐性が低過ぎて、寝まくるから。(ダメージとか、眠りが時々しか来ない場合は、必ずしも悪くないですけど。)

ところが2つ装備すると全然違います。Lv1を2個だと倍率25%。カフェラテ(60%耐性)を足して、ようやく倍率10% = 耐性90%。でもLv10まで上げて2つ装備すれば、既に倍率16% = 84%耐性。それなら、強化玉使ってLv10まで上げて、食べ物で別の属性の耐性稼ぎたいですよね。

計算すれば! 事故が防げる例

DQ8イベント前半で、ドルマゲスが赤ゲージ突入時にジバリア属性の「ガレキ」を3発投げてくる、というものがありました。耐性ないと約300点喰らいます。2発来るのはよくある(確率5/8 ※1)なので、ガードしても耐性なしでは事故、つまりノーデスが取れない可能性があります。またゲージ跨ぎ役も、耐性なしは危険(※2)ですね。 全キャラ耐性20%持たせられないようだと、ノーデスはちょっと面倒かな、と分かります。無理じゃないですけどね。

計算メンドい? 耐性1分で計算する方が、クエスト何回も挑戦するより楽ですよ。

※1 ガレキが全部違うキャラに行く確率を計算するのが簡単です。1発目が当たったキャラをAとして、2発目がA以外 (Bとしましょう) に行く確率は3/4。3発目はAでもBでもないとすると、2/4。よって求める確率は3/8。誰かに2発以上当たる確率は5/8で、半分より多いんですよ!

※2 ゲージ跨ぎ役に2発以上当たる可能性の計算は、ちょっと難しいですね。1発目と2発目が跨ぎ役に来て3発目が他に行く確率は、(1/4)^2 × 3/4 = 3/64。1・3発目、2・3発目の確率も同じ。全部跨ぎ役に来る可能性が(1/4)^3=1/64で、合わせて10/64 ≈ 1/6.5。これが来たら「運が悪かった」で片付ければいいのでは?

足し算でも大づかみには正しい例

耐性は足し算ではありません。でも!! 足し算でも、いい見積りができる場合があります。それは、足し合わせた数字が小さい場合。(注意: これは倍率ではなくて、元の耐性のままです。) 3、40%くらいまでなら悪くありません。ちょっとやってみましょう。

  • 1%耐性×2。倍率 0.99^2 = 0.9801 だから、耐性1.99%。ホラね!!
  • 10%耐性×2。倍率 0.9^2 = 0.81 だから、耐性19%。おっけい!
  • 5%耐性×4。倍率 0.95^4 = 0.8145\ldots (10%耐性×2と、ほとんど同じ例なんですケド、ツッコまないでね)
  • 30%耐性と10%耐性。倍率 0.7×0.9 = 0.63 だから、耐性37%。ま、そこそこですね
  • 30%耐性と20%耐性だとどうでしょう? 結果は44%耐性だから、ちょっとズレを無視しづらくなってきました。

数式見るのがイヤな人は、上の結果だけ知ってればokですけど、式を書いてみましょう

耐性がx, y, zの3点を用意したとします。倍率は
(1-x)(1-y)(1-z) = 1- (x + y + z) + R,
R = (xy+yz+xz) - xyz

です。Rを無視すると、耐性はx + y + zと足し算ですね。R が無視できる、つまり小さいのは、なぜでしょう。そもそも、x,y,zは小さい場合を考えたんでしたね。たとえば1%なら、xは0.01。すると、Rの中の、たとえばxyは 1万分の1とか、とても小さい数になります。でもx=y=z=0.3だと、R = 0.27と、無視できません。

中級: マルチの食べ物と、紋章ボーナス

マルチの食べ物は特殊。「最高の耐性を持つもの1点を基本として、同じ属性の他の食べ物は、最大値の2割として足される」という変則ルールです。game8のコメントまとめ[1][2]参照。(これは@henohenoさんのこのツイートで教えて頂きました。)

たとえば、いちごスライムアイス(ギラ耐性25%)を持って行った場合を考えます。この時、他のギラ耐性の食べ物は何であっても、25%の2割、5%が1点につき加算されます。苺スライムアイス、豆腐ハンバーグ(同20%)、あんかけ豆腐(同10%)、どれも1個につき5%です。全部で苺スライムアイス2個、あんかけ豆腐1個なら、25+5+5=35%のギラ耐性です。

よって耐性を上げるには「何か耐性が高いもの1点と、後は安いものを持ち寄る」のが基本になります。(ただし、上の例ならギラ耐性以外の効果を考えると、そうも言い切れません。全員が苺スライムアイスだとデイン耐性25%がボーナスですし、豆腐ハンバーグは身の守り+20など、ありますので。)

紋章ボーナスは、画面を見れば分かる通り、4つの紋章のボーナス部分だけは、同じ耐性ごとに、ひとまとめに足し算しますね。紋章のボーナスではない部分は、1点1点別個に扱います。

もちろん「ブレスならなんでも耐性」は、各属性ブレス耐性とは別個扱いです。

パラディンの「戦友の盾」の時に、盾の紋章ボーナスの「防御時は」が活きるのはご存知ですよね。

技術的な詳細

前置き: たとえば眠り耐性が十分あると、眠り攻撃が「無効!」になる事があります。掛け算なら、耐性100%未満の要素がいくつあっても、耐性100%になるはずは無いのです。どうしてこうなるのでしょうか。

耐性計算は、アプリ内部では以下のようになされていると考えられています:

  1. 各要素を、耐性の高い順に並べます。
  2. 高い方から、順に一つずつ掛け算をします。
  3. 手順2において、結果を%で表して、小数点以下を四捨五入します。
  4. 「1%上積み保証」: 手順3において、耐性が上がらない場合があります。(たとえば95%耐性の時に5%の要素を掛けても、95%のままです) この時は、特別に耐性を1%押し上げます。
  5. 手順2に戻って、また次の要素を掛けます。

これは、ツイッターのユーザー「碧@星ドラ 」(@cobalt_dq)さんにより、この2017年7月のツイートで提唱されました。碧さんにお訊ねしたところ、2018年4月の時点でも矛盾は知られていない (アーカイブ) ようです。ご回答ありがとうございました。

また「ゆおねろ」さんが、耐性一覧の画面で☆や◎になるかどうかから、上の方法を2018年4月17日にいくつかの場合について調べたところ、やはり矛盾は確認されませんでした

私自身、以下の条件で封印が「無効!」になった事があります。ロトの兜☆の「封印ガード+極」 Lv9 (耐性98%)、賢者の上級職ボーナス(5%)、紋章(5%)。後2者からの1%上積み保証が確かに効いています。

以下はいずれもgame8内のページです: