ターン制RPG戦闘演算ノウハウ
はじめに
この文書は、私が過去携わってきたターン制RPGの戦闘の内部演算やその数値設計についてのお話です。
ここで記述されている具体的な内容ですが、既存の特定のゲームの内容とは異なっています。
というのは、既存のゲームの内容をそのまま書くとゲーム仕様書は著作権で保護されているので、それに抵触する可能性があるためです。
このため、新規ゲーム条件を設定して、それに即したものとして新たに書いています。だものですから、ここに書かれている内容は、実際にプログラミングされてテストされたものではありません。
それでも、応用するための基礎や応用の方法などを知る手掛かりにはなると思います。
ゲーム開発にあまり詳しくない方には、分かりづらい箇所もあるかも知れません。その点ご容赦ください。
また、敵は同時に複数体登場しますが、主人公は一人、という設定にしています。
主人公の仲間が出てくるタイプは、構造が複雑になるのでまずは主人公一人として記述しようと考えました。
この文書が好評でしたら、仲間が出てくるタイプも書くかも知れません。
ゲーム全体の中での戦闘部分
え?どういうコト、と思った方もいらっしゃるかも知れません。知りたいのは戦闘の演算なのに、と。
戦闘の仕様は他の部分と密接にあるいは緩やかに関連しています。戦闘だけ抜き出してそのノウハウを出しても、他の部分との関連性が分からないと、役に立たないと思ったからです。
また、私がゲーム制作に携わる際は、できるだけ全体像を把握してから自分のパートに取り掛かるようにしている、ということもあります。
戦闘は、RPGという物語の一部です。そして戦闘は主人公が成長した事を体験できる部分でもあります。
物語と主人公の成長の「年表」
では、物語はどのように進行するのか。
主人公はどのように成長するのか。
この二つがプレイヤーのプレイ時間軸を基軸とした年表のようなものにまとまっていると、とても作業がしやすいです。
この年表(プレイイメージ)が後々、戦闘の数値設計に関わってきますから。いわゆる難易度設計、調整です。
成長はレベルで表されます。この年表にレベルが書き込まれます。そして、その時点でどの場所にいるかなども。物語の進行度合いも記載されます。
もちろん、プレイヤーのプレイ次第でかなりゲームは変化します。ですからこの年表は、想定する標準的なプレイヤーがプレイした場合、という事になります。
標準的なプレイヤーは、このゲームが購入層の中心に位置するプレイヤーと想定しています。ここがズレると、難しすぎたり、易し過ぎたりします。
さて、この年表が出来上がると、プレイ時間のどの辺で主人公キャラの想定レベルはこれくらい、というのが分かるようになります。
イベント
あ、そうそう。イベントで経験値が入る場合、そのイベントを記載しておく必要もあります。これを忘れると、ズレが生じて後々修正が入るのですが、この修正はとても面倒です。下手すると数値設計を根本からやり直す、という事態になりかねません。
イベントで手に入る数値は、後から決めますから、この段階ではどのタイミングで入るかだけ分かれば十分です。イベントの重要度や影響の大きさなどが決まっていれば記載されているとより良いと思います。
戦闘時間とターン数
一つの戦闘がどれくらいの時間の長さになるか、というのを戦闘時間と呼ぶ事にします。
なかなか戦闘の数値に辿り着きませんね。でもこの戦闘時間の設定は重要なんです。これが決まらないと、その先の色々が決まらなくて、攻撃力、防御力、HP、そしてそれらの成長、敵の設定なんかに辿り着けないんです。
戦闘時間ですが、ゲーム開始時の戦闘は大体30秒とか、中盤のエンカウント雑魚は1分とか、中盤の小ボスは10分とか、これも敵の種類(エンカウントの雑魚、弱中強、イベントの敵)で決めて、年表に記載します。(いや待てよ、ここ本当は誰が決めるのが本当なんだろう)
ま、とにかく決まった内容になるように各データを作って調整する、そういうのが戦闘演算仕様と数値設計です。結構動かすとズレてるものなんですけどね。あんまりズレてるとディレクターに怒られれます。
さて、戦闘時間が決まると、プレイヤーの入力時間、攻撃演出時間、ダメージ演出時間を概算すると、ターン数が出ます。
え?そんなトコまで考えるの!?と思った方は、最後の方で苦労してませんか?この辺まで設計段階で考えておくと後が楽です。まあ、ちゃぶ台返しは覚悟しないといけませんが。
とにかくターン数が割り出されたら、それを年表のその戦闘の箇所に書き入れます。この戦闘ターン数は戦闘演算パートのみが意識すれば良いと思います。
戦闘回数
戦闘ターン数とは別に、そのレベルでの戦闘回数を求める必要があるんです。
これは、そのレベルの滞在時間内に発生するランダムエンカウト戦闘の回数です。イベント戦闘は特殊なので外します。
そのレベルでの戦闘を含む移動時間から割り当てます。
エンカウント率は主人公のレベルではなく、マップのどこかで決まりますから、主に年表でそのレベルがいる場所を導いて、その場所のエンカウント率を決めてます。同じ場所のエンカウント率を他のレベルの同じ場所の箇所にも入れておきます。
これ、Excelとかだと場所に名前を付けて、その場所名にエンカウント率を記載して、年表に記載した場所名からエンカウント率を参照するようにしたりしました。ちょっとしたリレーションです。このテーブルの事を「場所テーブル」とでも呼びましょうか。後でも出てきますから。
さて、そうするとそのレベルでの大体の戦闘回数が決まります。
経験値の割当とレベルアップ
もう全然戦闘の話じゃ無いじゃない!
いえいえ、ここを超えないと戦闘の数値に辿り着けないんですよ。だから初めに書きましたよね、戦闘はゲームの一部分だって。戦闘は主人公が成長した事を体験できる部分だって。だから重要なんです。
さて、ここまでの段階で年表には必要な情報が書き込まれました。
そのレベルでの戦闘で得られる経験値を当てはめて行きます。
敵のランダムエンカウントは、場所に依存しますから、戦闘回数を割り出す時に使った場所のテーブルに得られる経験値量を記入して、それが年表に反映されるようにします。Excelのワークシート関数でできるのですが、できなかったら手作業です。手作業ですか、私はやりたくありません。だってあとで絶対細かく修正が入りますから。入力ミスを探すのは地獄。
で、年表に得られる経験値が入ると、戦闘回数からそのレベルで得られる経験値の総量が求められます。
そのレベルで得られる経験値の総量=そのレベルの戦闘回数 ×1回の戦闘で得られる経験値
これで、そのレベルで得られる経験値が求められました。
で、このレベルで得られる経験値をレベル順に並べると、多分、おかしなコトに気がつくと思います。
レベル3よりレベル4の方が入る経験値量が少ない!
お分かりですね。マズイ状況が可視化されました。
この段階で調整が必要なんです。で、その調整の基準となるのが、経験値テーブルです。
ここから先は
宜しければ、ゲーム制作などのクリエーター活動のサポートをお願い致します。