RPGにおけるマップデータの制御

http://gamdev.org/w/?%5B%5BFF%C9%F7RPG%A4%F2%BA%EE%A4%EC%5D%5Dを参考に、
RPGもどきをチクチク作ってます。
 
とりあえず、Level8までクリアーしました。
(あ、でも、スクロールとマップエディタは作ってませんね…(´Д`;
 
その過程でなんとなく気が付いたことをメモ書きします。
 

マップデータの構造

RPGのマップデータは、

  • 地形データ
  • イベントデータ
  • NPCデータ

の3つ階層が必要となってきます。
 

地形データ

マップのデータは、n×nの2次元配列になります。
平地とか森とか、通行できない海とか山岳とかのデータがここに入ってきます。
 

イベントデータ

そして、これにさらにイベント処理用のレイヤー*1をかぶせてやります。
例えば、宝箱とか扉とか階段とか、特殊なエンカウントなどですね。
 
このデータの値には、イベントIDを入れておいて、
プレイヤーがその座標に移動した場合には、
イベントスクリプト*2を呼び出せるようにします。
 
イベントIDを、全マップで使える「グローバルID」と、
そのマップでしか使えない「ローカルID」に分けておくと管理がしやすくなります。
(グローバルIDにはショップイベントなど、ゲーム全体で共通のイベントスクリプトを呼び出すIDを割り当てる)
 

NPCデータ

さらに、NPCをこの上に配置してやります。
NPCレイヤーとするのもアリかもしれませんが、
たいていNPCはふらふらと動き回ったりします。
 
また、NPCイベントもあります。
 
そこで、レイヤーよりもスクリプトで管理してしまうのがいいかもしれません。
 
そしてイベントスクリプトも呼び出せるようにしておきます。

*1:ここでのレイヤーとは、数値型の2次元配列のことを指します

*2:ここでのイベントスクリプトとは、構造体のようなものです