ステップ5


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

ステップ5

イベントスクリプトの実装

  • ステップ2で言及したスクリプト言語の作成から入る。

データ構造

  • テキストファイルにしてマップごとに用意。
  • マップに入るたびに、マップデータとともに読み込む。
  • イベント用ハッシュテーブルを用意し、それで管理する。
  • 同じマス上に異なるイベントは配置できない。よって、1つのマップで扱えるイベントは1200個が上限。(マップスクロール可能にした場合はもっと増える)
  • 1つのマップにイベントを10個も20個もおかないと思うのでハッシュサイズは10くらいにしておく。

実行

  • オートイベントは一歩歩くごとに判定。調べるイベントは決定キーを押すごとに判定。実行条件を満たした場合にプレイヤーをイベントにアタッチする。
  • マップデータ上に置かれたイベントハッシュテーブルからイベントを読み出し、イベントデータの構造体ポインタをプレイヤーデータ側に保持する。(プレイヤーをイベントにアタッチする)
  • プレイヤーがイベントにアタッチされている時、イベント進行にかかわらないキー操作は許されない。
  • イベント終了時、デタッチする。(プレイヤーデータ側に保持されたポインタをNULLで書き換える)
  • マップ移動実行時のみ、実行中のイベントデータの構造体を丸ごとコピーして一時的に静的領域に保持する。(マップ移動時にマップデータごと再読み込みが行われ、イベントハッシュテーブルも解放するため)

書式と仕様


event_num,x,y,xsize,ysize,moveflg,solidflg,look1,look2,event_type,name {
script;
}

  • 個々のイベントの初期設定っぽい何か
名前 備考
event_num イベント番号。0及び-1(負の値)は設定できない。(不要?)
x,y イベントの座標。(正確にはイベントの左上座標)
xsize,ysize イベントの大きさ。x,yを左上端として、横にxマス、縦にyマスの大きさになる。
moveflg x,yを中心としたユニットの移動範囲の半径。
0 : 移動しない。
1 : 3 * 3マス内を移動。
2 : 5 * 5マス内を移動。
solidflg ユニットが固形として存在するか。
0 : ユニットとプレイヤーキャラが重なることができる。
1 : ユニットとプレイヤーが重ならない。ユニットのいるマスは壁として扱う。
look1 見た目の設定1。画像ファイルの名前を、""で囲んで入力する。空白の場合、見た目はない。(透明ユニット)
look2 見た目の設定2。画像ファイル内の何番目の画像を使うか。(ツクールのキャラチップ対応)
event_type イベントタイプ。
0 : ノーイベント。
1 : オートイベント1 ユニットの上に乗るとイベント発生。
2 : オートイベント2 ユニットに隣接するマスに立つとイベント発生。
3 : 調べるイベント1 ユニットの上に乗って決定キーでイベント発生。
4 : 調べるイベント2 ユニットに隣接するマスでユニットのほうを向いて決定キーでイベント発生。
name イベントを識別する名前。ハッシュのキー

  • script一覧
script 動作
if(条件式){} 条件式が満たされたとき(0以外の時){}内を実行します。
moveto "mapname",x,y; マップmapnameの座標x,yに移動します。
walkto x,y; 同一マップ内の座標x,yに歩いて移動します。
mes "string"; しゃべります。
(変数) = (式); (変数)に(式)の内容を代入します。

  • 変数の使用方法
    • int var,scope,first;
符号付き整数型変数varを定義します。firstの値で初期化されます。
イベント内で使う変数は、必ずイベントスクリプトの先頭でこの定義を行ってください。
scopeの値によって、その変数が保持される期間が決定されます。

scope
	0 : キャラ永続変数
	1 : イベント一時変数
	2 : イベント永続変数
  str var,scope,"first";
文字列型変数varを定義します。"first"の値で初期化されます。
基本的なことはintと変わりませんが、初期化値が文字列であることに注意してください。
C言語のchar配列と異なり、=による代入や==による比較が可能ですが、1文字ずつ扱うのは面倒です。

  イベント永続変数
イベント変数はそのイベント内で保持され、一度イベントを終えても保存され続けます。
セーブデータの肥大化につながるので乱用は避けてください。
  イベント一時変数
イベント一時変数evt_aにbを代入します。
イベント一時変数はイベント実行中のみ保持され、一度イベントを終えると有効範囲から外れ、解放されます。
セーブデータの量には全く影響を及ぼさないので、上記のイベント変数よりも気軽に使用できます。
  キャラ永続変数
キャラ変数ch_aにbを代入します。
キャラ変数はキャラクターデータとともに保存され、半永久的に使用できます。
セーブデータの肥大化につながるので、乱用は避けてください。