つくったときの記録
「アイテムを全部集めても倒せない?」に数字で答える — 性能の違う二人とボス戦の設計
からくり双星で、2面と3面のボスが厳しすぎるという声が出ました。アイテムを全部集めれば倒せるのか。理想条件での最短討伐時間と、回避ボットの生存時間を比べると、2面のトワには大きな余裕がありませんでした。攻撃力と消費スタミナを別々に調整した結果も含め、難度の調べ方を紹介します。
問いは「全部集めても倒せないか」

からくり双星は、アオイとトワのどちらか一人を選んで三つの面を抜けるアクションゲームです。アオイは重い一撃、トワは速さと二段跳びが持ち味で、選択画面に並ぶ力は2.45と1.55、速さは218と286です。
調整を重ねるうち、「2面と3面のボスが厳しすぎるのでは」という声が出ました。問いは具体的でした。アイテムを全部集めても、倒せないのか。
遊んで確かめる手もあります。ただ、何回負ければ「倒せない」と言えるのかは決まりません。そこで、まず理想条件で必要な討伐時間を計算し、ボットの試行結果と比べることにしました。
アイテムの数と火力を確かめる
本作のアイテムは確定で出ます。木箱と鐘を壊せば強化、敵を倒せば回復です。闘技場にある木箱と鐘の数から、その場で得られる強化の回数を数えられます。
| 壊せる物(=強化) | 強化が続く時間の合計 | |
|---|---|---|
| 1面 | 木箱2・鐘1=3個 | 25.5秒 |
| 2面 | 木箱2・鐘1=3個 | 25.5秒 |
| 3面 | 木箱4・鐘2=6個 | 51秒 |
次に、あり得ないほど有利な条件での火力を出します。弱点は開きっぱなし、自分は無敵、ずっとボスに密着。制約は攻撃に使う拍(スタミナ)だけです。この条件の毎秒ダメージは、アオイが強化なしで7.99、二種類の強化を両方かけて16.31。トワは3.28と4.22でした。
ここから、性質の異なる二つの数字を作ります。
- 倒すのに要る時間の下限:上の理想条件で、ボスの体力を削り切るまでの時間。実戦ではこれより必ず長くなる
- 回避ボットの生存時間:攻撃せず、回避に専念するボットが力尽きるまでの実測時間。プレイヤーの生存時間の上限ではない
二つを比べれば、このボットにどれほど余裕があるかを見積もれます。ただし、回避の仕方やボスの行動次第で長く生きられる可能性があるため、勝利が不可能だという証明にはなりません。
2面のトワは、今回のボットでは勝てなかった
| 倒すのに要る時間(理想条件での下限) | 回避ボットの生存時間(実測) | 生存時間÷討伐時間 | |
|---|---|---|---|
| 1面 アオイ | 8.9秒 | 161秒 | 18倍 |
| 1面 トワ | 28.6秒 | 200秒超 | 7倍 |
| 2面 アオイ | 20.3秒 | 47秒 | 2.3倍 |
| 2面 トワ | 72.5秒 | 36秒 | 0.5倍 |
2面のトワは、理想条件でも討伐に72.5秒かかる計算でした。一方、今回の回避ボットは36秒で力尽きました。これは難度を疑う強い材料ですが、もっと長く回避できる操作がないとは言えません。3面の討伐時間の下限は48.9秒です。3面では回避ボットがボスの動きに対応しきれず、実戦を模したボットもトワで6回とも敗れました。
そこで、アイテムの数だけでなく、トワの攻撃効率も調べました。
犯人は、二つの調整の掛け算
トワの通常攻撃には、別々の日に二つの調整が入っていました。一つは「通常攻撃の威力を半分に」、もう一つは「1振りで使う拍を2倍に」です。それぞれ別の調整として加えられました。
ところが、二つは掛け算で効きます。威力が半分で、拍の消費が倍なら、拍1あたりのダメージは4分の1近くまで落ちます。計算すると、トワの拍1あたりのダメージはアオイの0.29倍でした。
強化を両方使っても、理想条件での毎秒ダメージはアオイ16.31に対してトワ4.22でした。強化によってトワの火力も上がるため、火力差だけで「アイテムを増やしても勝てない」とは言えません。ただ、現在のアイテム数と効果時間で試したボットでは、討伐に届きませんでした。
もう一つ、見過ごせない所見がありました。実戦を模したボットを各6回戦わせると、2面はアオイでも0勝6敗です。ところが、キャラクターと関係のない修正を当てただけで、これが3勝6敗に揺れました。少なくとも今回のボットでは、ボスの行動順や試行ごとのばらつきが勝敗に大きく影響しました。調べると、2面のボスは弱点を見せている時間が29〜34%で、三体の中でいちばん短く、構えや突進のあとには一度も開きませんでした。
直し方も、実際に試して選ぶ
いくつかの直し方を、実際にゲームの値を書き換えて、それぞれ6回ずつ戦わせました。
| 直し方 | 2面アオイ | 2面トワ | 3面アオイ | 3面トワ |
|---|---|---|---|---|
| いまのまま | 0/6 | 0/6 | 6/6 | 0/6 |
| 2面も技のあとは必ず弱点を開く | 0/6 | 0/6 | 5/6 | 0/6 |
| ボスの体力の基準を0.8倍 | 3/6 | 0/6 | 6/6 | 2/6 |
| トワの攻撃の調整を一部戻す | – | 0/6 | – | 1/6 |
| 上の三つを全部 | 1/6 | 0/6 | 6/6 | 4/6 |
この6回ずつの試行では、単独の変更で勝利回数が増えたのはボスの体力を下げた場合でした。最終的には、2面と3面のボスの体力を0.6倍にし、あわせて雑兵の装甲を威力に関係なく一撃で外れるようにしました。それまでは、軽い一撃のトワだけが雑兵の装甲を割るのに溜めを要していました。
6回ずつという回数は、判断を下すには少なめです。ここでは「0勝が続くか、勝ちが出るか」という大きな違いだけを読みました。細かな差を比べるなら、回数と比べ方を増やす必要があります(自動プレイの記事で統計の置き方を書きました)。
性能の違うキャラクターに、同じ目標を置くとき
この一件で残った手順は次のとおりです。
- アイテムが確定で出るなら、闘技場で手に入る個数と効果時間をまず数える
- 攻める側に有利な条件で討伐時間の下限を計算し、回避ボットの生存時間と比べる。後者は実測値であり、人が生きられる時間の上限ではない
- 攻撃力と消費スタミナのように、掛け算で効く調整を重ねるときは、攻撃一回の威力だけでなく、スタミナ当たりの火力と強化後の討伐時間を確かめる
- 試行ごとの勝率のばらつきも記録する。別の修正の前後で勝敗が変わったら、乱数やボスの行動順など、何が変わったか調べる
- 直し方は、実際に値を書き換えて比べる
足場の設計でも、考え方は同じです。「このジャンプは届くか」を、実際の更新処理と入力で確かめます。本作には、足場を離れた直後0.12秒まではジャンプを受け付け、着地の直前0.13秒以内に押したジャンプも覚えておく猶予があります。届くかどうかを測るときは、この猶予をぎりぎりまで使った一回と、余裕を持って押した一回を分けて記録します。ボス戦は「間に合うか」、足場は「届くか」。どちらも、遊ぶ前に数えられるものは先に数えておくと、「難しい」という声に数字で答えられます。
物理の更新を一定の刻みで進める理由は、Fix Your Timestep!が参考になります。端末の速さが違っても、同じ入力が同じ結果になることが、こうした測定の前提です。