レベルデザイン層の構築

はじめに

レベルデザインを楽に作るためのツールとしては、

三種の神器ではないかと思っています。
 

マップエディタ・スクリプト・データベースとは

それぞれについて簡単に説明すると、、、
 
マップエディタとは、マウスで絵を描くようにフィールドマップを作成できるエディタです。
マップエディターには色々種類があって、
地形データを作るだけのものから、
複数のレイヤーを使用して、敵やアイテム、イベントを配置できるものがあります。
 
スクリプトとは、イベントを制御するためのものです。
RPGの会話イベントや敵・アイテムの生成などを行います。
高度なものとしては敵・アイテムなどの動作を制御することもあります。
(例えば、BulletMLですね)
 
データベースとは、
敵のHPや攻撃力、アイテムの効果、などを「データ」のみを定義するものです。
(例えば、XMLCSV、INIファイルなどですね)
 
 

レベルデザイン層の階層関係

で、kenmoが言いたいこととしては、、、
「これらが持つ階層関係や役割を意識して構築することが大切」
ということです。
 
試しに図にしてみました。

マップエディタ層

レベルデザインの最上位層は、「マップエディタ」です。
「マップエディタ」は、
敵・アイテム・イベントなどの「トークン」がどこにあるか、
という位置情報を定義したものです。
あくまで、マップオブジェクトの生成しか行わないことに注目です。
 
個別の詳細を定義するには、「スクリプト」「データベース」で行います。
(ただ、トークンの詳細が複雑でない場合、「スクリプト」「データベース」を使うのは大げさかもしれません。
その場合、マップが直接「トークン」の生成を行います)
 

スクリプト

マップからイベントが呼ばれた場合、スクリプトが起動します。
(※マップが必要でない場合には、直接プログラムから呼び出されます)
(※スクリプトから再帰的に呼び出されることもあります。例えば、敵イベントスクリプトから弾生成イベントスクリプトの呼び出しなど)
スクリプトは、主にトークンの「生成」を行います。
少し難しくなりますが、「動作」の制御を行う場合には、
BulletMLのように、動作を定義したActionオブジェクトを生成します。
 

データベース層

データベース層では、敵のHPなど、データ部分のみを定義します。
データの持ち方は色々あるのですが、それぞれメリット・デメリットがあります。
表にするとこんな感じです。

データ形式 メリット デメリット
INIファイル 簡潔な記述・意味が分かりやすい 階層が2つまで。配列的なデータとして使うには冗長
CSV 解析が容易 2次元のテーブルのみ。データと区切り文字しかないので意味が分かりにくい
XML 意味が分かりやすい・階層をどこまでも深くすることができる 記述が冗長

INIファイルは、用途が設定ファイルなので、データベースにはあまり向いていないかもしれません。
CSVは解析が容易ですが、ファイルにどんな種類のデータであるか?という情報がないため、パッと見てもどんなデータか分かりません。
XMLは解析がちょっと面倒ですが、ファイルを見ただけで、どんなデータがあるかが分かりやすいです。ただ、記述が冗長です。
なので、実際はExcelVBAなどツールを使って、それぞれのファイルを出力するというのがベターかもしれません。
 
この層は、スクリプト層に埋め込んでもいいような気がしますが、
例えば、シューティングゲームで、
「ショットの威力を変えよう!」
となったとき、
全ての敵スクリプトの耐久力の定義を見直すことになり、
とても手間がかかります、、(´Д`;)
 
そういうとき、面倒なことが嫌いなkenmoはすっぱりあきらめて、
「バランスはプレイヤーが調整するものなのだ!」
と放置してしまいますが、
完璧なゲームを作りたい人は、あとあと調整が利くように、
こういうデータの分離を考慮したほうがいいのかもしれません。