[data.cpp]
フィールド・マップの追加を行います。
●ヘッダを追加
フィールドマップのイベント・シナリオを追加してください。
イベント・シナリオ(町)への修正もお願いします。 ●マップ定義の配列
フィールド(島)を追加してください。
// フィールド(島)
{
"島", //マップ名
"data/map/field.fmf", //マップファイル名(fmf)
"data/map/field.png", //マップチップ画像ファイル名
{ //マップ固有のキャラクタ・ファイル
NULL,
},
0, //エンカウント平均歩数(0にするとバトルは発生しない)
0, //エンカウントする敵の種別
&g_FieldEventData //イベント構造体ポインタ
},
// 終端
[scnTown.cpp]
マップチェンジのシナリオを町に組み込みます。
●コメントなどの修正
コメントが変だったので修正です。
//----------------------------------------------------------------------
// システム・シナリオ
//----------------------------------------------------------------------
// 初期スタート時シナリオ
static ScnData_t InitStartScn[] = {
// シナリオ命令,文字列,数値パラメータ1,数値パラメータ2,
{ SCN_PLY_EPOS, NULL, 0 }, //自キャラの位置をイベント番号の位置にします。
{ SCN_MES, "さーて!今日はレベル上げちゃおっかな(勇なま風)", TRUE, SCN_WND_MSGD },//セリフ
{ SCN_EXIT }, //イベントを抜けます。
{ SCN_END }, //ストッパとしてシナリオ終端に必須です。
};
上の直後に追加してください。
マップチェンジで他のマップから移ってきたときの処理で、自キャラの位置と方向を設定しています。
// マップチェンジ時シナリオ
static ScnData_t MapChangeScn[] = {
// シナリオ命令,文字列,数値パラメータ1,数値パラメータ2,
// フィールドからのマップチェンジ
{ SCN_PLY_EPOS, NULL, 1 }, //自キャラの位置をイベント番号の位置にします。
{ SCN_PLY_POS, NULL, 1, 0 }, //自キャラの位置を変えます。
{ SCN_PLY_MUKI, NULL, CHAR_MUKI_RIGHT, 0 }, //自キャラの方向を変えます。
{ SCN_EXIT }, //イベントを抜けます。
{ SCN_END }, //ストッパとしてシナリオ終端に必須です。
};
各町人のセリフです。
//----------------------------------------------------------------------
// 町人シナリオ
//----------------------------------------------------------------------
// 町人
static ScnData_t Man0[] = {
// シナリオ命令,文字列,数値パラメータ1,数値パラメータ2,
{ SCN_MES, "町人「ようこそ、作りかけの町へ」", TRUE, SCN_WND_MSGD },//セリフ
{ SCN_EXIT }, //イベントを抜けます。
{ SCN_END }, //ストッパとしてシナリオ終端に必須です。
};
// 道具屋
static ScnData_t Man1[] = {
// シナリオ命令,文字列,数値パラメータ1,数値パラメータ2,
{ SCN_MES, "道具屋「ここは道具屋だ。ただ、まだ何も売ってないけどな」", TRUE, SCN_WND_MSGD },//セリフ
{ SCN_EXIT }, //イベントを抜けます。
{ SCN_END }, //ストッパとしてシナリオ終端に必須です。
};
// 宿屋
static ScnData_t Man2[] = {
// シナリオ命令,文字列,数値パラメータ1,数値パラメータ2,
{ SCN_MES, "宿屋「ここは宿屋です。いまは開店休業。だって未完成ですから」", TRUE, SCN_WND_MSGD },//セリフ
{ SCN_EXIT }, //イベントを抜けます。
{ SCN_END }, //ストッパとしてシナリオ終端に必須です。
};
マップの出口で街を出てフィールドマップ(島)にマップチェンジします。
//----------------------------------------------------------------------
// マップイベントのシナリオ
//----------------------------------------------------------------------
// 出口イベント
static ScnData_t mapExit[] = {
// シナリオ命令,文字列,数値パラメータ1,数値パラメータ2,
{ SCN_MAP_CHG, "島", 0 },//マップをチェンジします
{ SCN_EXIT }, //イベントを抜けます。
{ SCN_END }, //ストッパとしてシナリオ終端に必須です。
};
最後にイベントデータで、各シナリオデータとイベントとの接続を記述しています。
//----------------------------------------------------------------------
// イベントデータ
//----------------------------------------------------------------------
//----------------------------------------
// 町のイベントデータ
//----------------------------------------
struct tag_EventData g_TownEventData = {
{ //システムイベント
InitStartScn, // 初期スタート時イベント
NULL, // ゲームロード時イベント
MapChangeScn, // マップチェンジ受けイベント
},
{ //地形イベント
NULL, //初期スタート時の出現位置
mapExit, //出口イベント
},
{ //キャラクタイベント
Man0, //町の入口
Man1, //道具屋
Man2, //宿屋
},
};
続いてフィールドです。
[scnFeild.h]
ここではg_FieldEventDataだけを定義しています。
●g_FieldEventData
#ifndef INCLUDE_SCNFIELD_H
#define INCLUDE_SCNFIELD_H
//----------------------------------------------------------------------
// 変数
//----------------------------------------------------------------------
// 町のイベントデータ
extern struct tag_EventData g_FieldEventData;
#endif /*INCLUDE_SCNFIELD_H*/
ここからがフィールドのイベントやシナリオの実体です。
●ヘッダのインクルード
ヘッダをインクルードします。 ●システム・シナリオ
マップチェンジ後に呼び出されるシナリオで、元々のマップ名から自キャラの出現位置を決めています。
町からのマップチェンジならイベント番号0でダンジョンからならイベント番号1が出現場所です。
//----------------------------------------------------------------------
// システム・シナリオ
//----------------------------------------------------------------------
// マップチェンジ時シナリオ
static ScnData_t MapChangeScn[] = {
// シナリオ命令,文字列,数値パラメータ1,数値パラメータ2,
// 町からのマップチェンジか?
{ SCN_IF_SKIP, "town",SCNVAR_BEFORE_MAP_NAME,IF_EQUAL }, //条件==なら次の命令をスキップする。
{ SCN_GOTO, "島" }, //指定されたラベルにジャンプする。
// 町からのマップチェンジ
{ SCN_PLY_EPOS, NULL, 0 }, //自キャラの位置をイベント番号の位置にします。
{ SCN_EXIT }, //イベントを抜けます。
// ダンジョンからのマップチェンジ
{ SCN_LABEL, "島" }, //ラベル
{ SCN_PLY_EPOS, NULL, 1 }, //自キャラの位置をイベント番号の位置にします。
{ SCN_EXIT }, //イベントを抜けます。
{ SCN_END }, //ストッパとしてシナリオ終端に必須です。
};
それぞれマップイベントを踏んだ時にマップチェンジするマップを書いています。
町のイベントなら町マップへ、ダンジョンの入口ならダンジョンのマップに移る様になっています。
//----------------------------------------------------------------------
// マップイベントのシナリオ
//----------------------------------------------------------------------
// 入り口イベント
static ScnData_t townIn[] = {
// シナリオ命令,文字列,数値パラメータ1,数値パラメータ2,
{ SCN_MAP_CHG, "town", 0 },//マップをチェンジします
{ SCN_EXIT }, //イベントを抜けます。
{ SCN_END }, //ストッパとしてシナリオ終端に必須です。
};
// 入り口イベント
static ScnData_t dungeonIn[] = {
// シナリオ命令,文字列,数値パラメータ1,数値パラメータ2,
// { SCN_MAP_CHG, "ダンジョン", 0 },//マップをチェンジします
{ SCN_MES, "ダンジョンは、まだありません。", FALSE, SCN_WND_MSGD },//セリフ
{ SCN_EXIT }, //イベントを抜けます。
{ SCN_END }, //ストッパとしてシナリオ終端に必須です。
};
イベントとシナリオをつなぐ定義です。
ここはキャラクタはいないので、マップチェンジ受けイベントと地形イベントのみです。
//----------------------------------------------------------------------
// イベントデータ
//----------------------------------------------------------------------
//----------------------------------------
// フィールドのイベントデータ
//----------------------------------------
struct tag_EventData g_FieldEventData = {
{ //システムイベント
NULL, // 初期スタート時イベント
NULL, // ゲームロード時イベント
MapChangeScn, // マップチェンジ受けイベント
},
{ //地形イベント
townIn, // 町に入る
dungeonIn, // ダンジョンに入る。
},
};
マップチェンジと会話でした。
今回のプロジェクトです。
マップが増えてますので必ずダウンロードして下さい。 次は何時に成るか分かりませんが、メニューの仕上げをお届けする予定です。