どうも皆さんオハイオ州です。テラメリテールの製作作業がグッツグツです。 未来のために色んな所を修正し、それは確かに前進してはいるんだけれど…!

「FIGHT」の「挙動」はまあまあできました。それを選べばバーが流れてきてそれを ボタンで止めれば攻撃エフェクト。だが装備している武器によってはバーの数は1〜5に変動。 ボタンを押さずにバーが画面外に行ってしまえば攻撃はMISSとなるが、 バーが3本ある時に1本目はボタンで止めて2本目を見逃し、3本目を止めるなんてこともある。

武器によって、どこで止めたかによってクリティカルになるかどうかも決まる。エフェクトも変わる。 そして、止めた場所と武器と自分の攻撃力によって与えるダメージも決まる。 やることが多い…!!

…ってか、UNDERTALEの攻撃の処理というかダメージ計算ってどうなっているのか? 遺跡の中の敵は1発で倒せたり2発かかったり、トリエルさんなんかは攻撃し続けていると ダメージが急に増えるし、Gルートだとあり得ないダメージ値になるし、「ふじみのアンダイン」と 戦っている時なんて4桁のダメージがデフォだし…。

これはもしかして、一つの計算式では表せないのではないだろうか…?

テラメリテールDEMOではとりあえず遺跡の中でしかバトルは発生しないうえに 戦うのはマネキン、ナプスタブルーク、トリエルさんの3人(+最初のフロギー)だけだから そこまでナンにでも合う計算式など作っていませんでした。武器も2種類(ぼうきれとおもちゃのナイフだけ)しかないし。

それどころか、バトルごとに攻撃の計算式は違っていてまさに「それらしく見える」ように作っただけ。 一応自分の攻撃力や武器の攻撃力を加味して計算式を作った気はするけど、 それ以降の遺跡から出た後のバトルに適用できるかと言ったら全然そうじゃなかった。

…だが、今はそれをちゃんと作るべき時。でもいったいどんなパラメータと計算式にしたら、 「ふじみのアンダイン」とのバトルだけあんなダメージになったり、 トリエルさんへの攻撃のダメージが徐々に上がっていったりするというのか…!?

結論から言うと、バトルごとに計算式が違った。やっぱりかー!!

「ふじみのアンダイン」戦ではものすごく補正がかかっているっぽいです。なるほどぉ。 でもそれだけ分かれば、ほかのバトルもそれぞれの計算式を作ってよさそう…か?

何となくわかったのは、ザコバトルでのダメージ式は 「武器攻撃力+自分の攻撃力-モンスターの防御力+乱数」を出して、 それにタイミングよく中央付近で止めるアレを掛けるっぽい。 自分はプログラム文の変数名は「攻撃精度」としています。つまりは中央付近だと掛ける数も増えて、 ダメージもUP。

でもそもそも武器攻撃力と自分の攻撃力も最初から底上げされており、 「STAT」で見られるあのパラメータをそのまま使って計算はしていなさそうです。

…さて、それが分かった今、困ったことが。 テラメリテールの「FIGHT」を一通り作ったんだ。7つぐらいのコモンイベントで構成されており、 一つは「FIGHT」を選んだ時に実行される、攻撃精度を測る画面を生成し、 現在装備している武器によりバーが何本出るかを算出し、それを横に流す処理。

それを作り終えた直後に並列で実行されるのが、バーが画面外に行ってしまったかを判定する処理。 バーの本数分それを判定し、全部画面外なら攻撃は「MISS」となる。

それともう一つ同時に行われているのがボタンを押したかどうかの処理。 ボタンを押したときにバーを止めて、その止まったときの座標を取得。 これをバーの本数分行う。

それが終わると次に攻撃精度の判定の処理。バーの座標によって、 攻撃精度を段階に分けて数値をバーの本数分保持。 この頃はまだUNDERTALEでは敵スプライトの幅が攻撃精度に関係してるとか 分からなかったので、数段階にしか分けていません。

次にダメージ計算を攻撃精度、攻撃力、武器攻撃力、敵の防御力を使って行う。 (でもここはまだ「それらしく見える」ようにしてるだけなので正しい計算式ではない) ついでに同じイベント内に武器の種類に応じた攻撃エフェクトを敵の座標にアニメーション表示。

そのダメージ計算によってダメージ値が0だった場合、攻撃エフェクトの敵のHPバーの代わりに 同じ位置に「MISS」と表示。

それぞれのバトルの処理に戻り、いくつダメージを与えたかの値だけを取得。 …と、いうような流れになっています。文字にすると非常にややこしいけど、 UNDETALEの攻撃ってそういう感じだと思う…。必死に再現したらこうなったんだ。

で、まあこれでザコバトルを作ってきて、最初のフロギー戦にも応用が利いたし、 ナプスタブルーク戦もできた。じゃあ残るはトリエルさんとのバトルだな、と 思ったんだけどここで猛烈に困る現象が…。

トリエルさんだけ、「MISS」したときだけバトルが進行することがある。 まあこれはいい。「FIGHT」を選び、ダメージ値が0だったときにその処理をすればいいだけ。

だが、トリエルさんが主人公を逃がしてくれるために語り始めた時、 「FIGHT」を選び、攻撃をした時だけダメージ値が異様に増えるのである。 これは…どうしたらいいのか…!?

FIGHTの一連の流れの中でダメージ値を決めているため、これができない。 トリエルさんのバトルのイベントの中だけを変えてダメージ値を異様に増やしたいが、 主人公の攻撃力や武器攻撃力はFIGHTの中で取得しているのでトリエルバトルイベント内で そこを変えたとしてもFIGHTの中で再取得して上書きされるので意味がない。

トリエルさんの防御力をストーリー通り下げたいところだが、 CHECKで出る防御力は80、でもその通りの防御力で計算すると「おもちゃのナイフ」なんかでは 歯が立たない。まともにダメージが与えられるようにするにはザコバトルの方が めっちゃ強くなってしまう。

なので表示上は80でも実際は低く計算しており、そして不意打ちやGルートの 攻撃で大ダメージを与えるにはもう減らせるものがないという有様なのだ…。

じゃあ武器攻撃力を異様に上げるため、FIGHTの際に武器攻撃力を取得するのではなく エンカウント時、バトル開始時にだけ取得してあとは変えない、 不意打ち+Gルートの攻撃時に武器攻撃力をめっちゃ上げてFIGHTする?

いや…「おもちゃのナイフ」をトリエルさんとのバトル中に装備することもできるんだ。 つまりバトル中に武器攻撃力が上がることもある。それなのに、 バトル開始時に読み込むだけじゃバトル中の装備という行為が無意味になる…。

ということは…もう一つだけあるか。バトル中に絶対に変わらないもの。 それは、主人公自身の攻撃力。これをFIGHTのたびに読み込むということをしなければ、 トリエルさんが油断している時orGルート時、FIGHTを選んだ時にだけ 主人公の戦闘力を53万にしてFIGHTの処理に渡せば、異様なダメージになるかな…!?

よしよし、ちょっと光が見えてきました。なんにしても…テラメリテールでは バトルはオマケ要素程度のものなので、あんまり期待はしないでくだちい。
2021年5月21日


◆目次に戻る◆






inserted by FC2 system