前回までで「移動編」、「攻撃編」がだいたい終わりました。
「攻撃」は実際にHPが減ったりレベルが上がったりの処理がまだですが、それを作るために必要なのが、ユニットのHPやLvを格納する可変データベース(CDB)の設定です。
攻撃によるHPの増減なんかも、実際はCDBの中の数字の増減であって、ゲーム画面に出てくるものはそれをあらわす演出です(数字が動いた結果に合わせて、グラフィックの演出が起こる)。
作る側にとってのゲームの本体は、このCDBになるのです。それではやっていきましょう。
はじめに
今回扱うデータベースの立て方は、特にさまざまな方法が考えられる項目です。
移動力の範囲や移動ルート検索と違って、処理負荷もあまり気にする必要がありませんから、正解とか不正解ということもなさそうです。
思い思いの方法でやればよく、ここで紹介するのはあくまで筆者にとってのラクな方法に過ぎません。
参考になるとすれば、SRPG専用のエディターのデータベースの構成ではないでしょうか。
こちらの美麗な本格SRPG(unity製)も制作者さんのブログによると開発初期はイメージ固めとして上記のエディターSRPG Studioを使用されていたご様子。
自作システムでSRPGを作ってしまうにせよ、専用エディターはデータベースの組み立てや、モックアップ(試作品)の用意で非常に助かるものなのですね。
SRPG Studioはプラグイン等の導入によってかなりアレンジも可能ですから、そのまま完成品に進んでいくこともできるかもしれません。
CDB:勢力別に同内容のデータベースを作る
さてさて、それでは筆者なりのデータベースの組み立て方に入りましょう。
一例をとりあえずお見せするぐらいですから、ざっくり読み飛ばして構いません。
ウディタの基本システムだと「主人公ステータス」1つで済んでいましたが、SRPGでは「敵の説得」なんてアツいシステムがあります。
条件を満たせば敵がそのままの性能で味方になる(所属が変わる)わけですから、敵も味方も同じステータス構成をしているのが望ましいはず。
そしてそのデータベースに立てる項目は下記のようになってきます。
CDB(可変データベース)からUDB(ユーザーベース)を参照することもあるので、この2つのデータベースは密接に絡み合います。
基本的には「ゲーム中にどんどん書き換わるデータを扱うのがCDB」という理解でよいでしょう。主人公のHPやLvが最たる例ですね。
ゲームの始めから終わりまで不変の項目がUDBに登録するものです。王道RPGでいえば「てつのつるぎの威力は5」、「ファイアーの魔法の消費MPは3」みたいな設定です。
UDBから参照してくるもの
キャラID、クラス、アイテム、アビリティ など
まずは項目だけ用意しておきます。
UDBで対応のデータベースを作ったら、「データ内容の特殊設定」から目的のUDBを参照するように整えます。
CDBで独自に持つもの
名前、移動力とその他のステータス(HP、MHPや攻撃力、守備力、Lv、EXPなど)、AI設定、状態異常、行動フラグ、所持アイテムの耐久力(残回数)、最大射程、出撃フラグ など
最大HP(MaxHP=MHP)と現在HP(単にHP)が分かれることにご留意ください。
というわけでざっと作ってみるとこんな感じ(敵軍、友軍のCDBでもまったくの同内容です)。
以前定めた「ユニット番号は101から」規則に従うなら、CDB0番に対応するユニットは存在しないので空欄を意味します。もったいないとか、不在を一律”-1″と扱うほうがラクと思う場合は、「リーダーは100番」に作り直すとよいですね。
細かな補足
「状態異常」は、いちどになるのはひとつだけなら、アイテムなどと同様にUDB参照にしてしまってもよさそうです。
名前はキャラIDから辿ってこれますが、イベント演出を絡めて一時的に「???」と表示することはありそうですし、「称号システム」とか「合体コマンド」なんかも絡みそうですから、柔軟に対処できるようにしておきます。
また、スパロボライクに、そのマップでの撃墜数やそれをもとにしたMVPなどを作るなら「今のマップでの撃墜数」と「トータル撃墜数」なんてのも必要ですね。
「出撃フラグ」というのが見慣れないかもしれません。SRPGでは仲間が20,30人といても、実際に戦闘に出るのは10人ほど。出撃メンバーと、お留守番メンバーがいるわけですね。
出撃/お留守番を、また別のデータベースで管理するのも大変ですから、1つのデータベース内で出撃フラグが立っているかどうかによる判断ができるようにしています。
「最大射程」は好き好きの項目です。
「複数のアイテムを持ち歩いて、任意の武器を使える」とか「アビリティによって本来装備できない武器が装備できる」といったゲームシステムの場合、「そのユニットが今できる攻撃(使える武器)の最も射程が長いもの」の取得もそれなりの計算量に。
自軍リーダーが槍(射程1)と弓(射程2)と剣(射程1)を持っていて、使用可能な武器は剣と弓なので、そのうちの射程の長い方は弓……という言葉にするだけで長い判定をコモンイベントで毎回やっていたら大変ですよね。
しかし、アイテムの増減やクラスの変更でもない限り再計算の必要もありませんから、いちど計算したら、その値を「最大射程」に持ち続けておくと、いくらかゲーム全体の計算量がおさえられるのではないでしょうか。
UDB:CDBでの参照元データを作る
「存在しない」(アイテムやアビリティを持っていない)という状態もありえます。
CDB初期値やUDBの並びを工夫して、「0」か「-1」が空欄を意味する作りにしていくことになるかと思います。
キャラID(キャラの名前や顔)
レベルアップの際に、FEのように運が絡むステータスアップをするなら「成長率」設定も必要です。
必要な項目としてはこんなところでしょうか。
- キャラ名、顔グラフィック
- 各ステータスの成長率
- 倒れた時などに出る戦闘時のイベント台詞
- キャラ個別のヘルプメッセージ(詳細ステータス画面などでキャラの概説を出すなら)
「種族」といった要素を付けることもあるかもしれませんね。
クラス(ジョブ)
クラスにも成長率設定を作っておきましょう。「キャラID成長率+クラス成長率=Lv時に適用される成長率」という具合になります。
- クラス名
- 装備可能な武器の種類
- 歩行タイプ
- 基本移動力
- 成長率
- 下級クラスか上級クラス
- クラスチェンジ先のクラスID
- 上限レベル
- レベル1時の基本ステータス
- キャラチップ(クラス別の歩行グラフィック)
- ヘルプメッセージ(解説文)
FEに準拠したイメージです。
移動力はクラスさえわかっていればUDBから参照してくることはできますが、CDBで専用にもっておいた方が「ドーピングアイテムで移動力を上げる」といった対応もやりやすいでしょう。
アイテム(武器・道具)
アイテムの仕組みがあるなら、最低限このぐらいは必要になってきそうですね。
- アイテム名
- アイテム種類(剣なのか弓なのか魔法なのか杖なのか薬草なのか……)
- 射程/威力/命中/クリティカル率
- 価格(買値/売値)
- 基本耐久数(使用回数)
- 専用キャラID指定(特定キャラにしか使えない武器を作る場合など)
- アイコン画像(使うなら)
アビリティ(スキル)
アクティブかパッシブか、目指すSRPGがFE系かスパロボ系か……などで作り方はかなり変わってくる項目です。
イメージの不確かなうちは、「名前」の項目だけ置いておいてもよいでしょう。基本的な動作が揃って来ないことにはアビリティの実作もままなりません。
AI
AIづくりはSRPG作りの第2の醍醐味にして最難関の処理。
今回行っているデータベースづくり以上に作り方は千差万別になってきそうですね。この記事では立ち入りませんが、アビリティ同様、UDBに項目だけでも作っておくと良いと思います。
【余談】ユニット画像の管理方法について
仮に主人公やマップイベントをそのままユニットの画像として使ってきました。
が、SRPGは敵味方あわせて1マップに30以上のユニットが出るようなジャンルです。すべてのマップに30以上のマップイベントをぽちぽち置いていくのは重労働。
マップイベントの個数=登場可能ユニットの上限にもなりますから、増援や召喚のシステムにも制限がついてしまいます。
ユニット画像もピクチャで管理するのもひとつの手でしょう。
ユニット画像と紐づけしてあると扱いやすいのですが、1ユニットあたり結構な枚数のピクチャを使う可能性があります。HPバーを重ねたり、リーダーキャラならそのマークを足したりですね。
「ユニット番号×10」を基本のピクチャ番号にすると便利かもしれません。
ユニット番号103なら、ユニット(キャラ)そのものの画像が1030番。1031~1039番の範囲をHPバーなどに使っていけますね。