簡単RPG講座10-7。イベント(シナリオ)システム編7

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

簡単RPG講座10-7。イベント(シナリオ)システム編7

投稿記事 by softya(ソフト屋) » 14年前

いよいよイベントを組み込みます。

[data.cpp]
フィールド・マップの追加を行います。
●ヘッダを追加
フィールドマップのイベント・シナリオを追加してください。
イベント・シナリオ(町)への修正もお願いします。

CODE:

#include "scnTown.h"	//イベント・シナリオ(町)
#include "scnFeild.h"	//イベント・シナリオ(フィールド)
●マップ定義の配列
フィールド(島)を追加してください。

CODE:

	//	フィールド(島)
	{
		"島",						//マップ名
		"data/map/field.fmf",		//マップファイル名(fmf)
		"data/map/field.png",		//マップチップ画像ファイル名
		{							//マップ固有のキャラクタ・ファイル
			NULL,
		},
		0,							//エンカウント平均歩数(0にするとバトルは発生しない)
		0,							//エンカウントする敵の種別
		&g_FieldEventData			//イベント構造体ポインタ
	},
	//	終端

[scnTown.cpp]
マップチェンジのシナリオを町に組み込みます。
●コメントなどの修正
コメントが変だったので修正です。

CODE:

//----------------------------------------------------------------------
//	システム・シナリオ
//----------------------------------------------------------------------

//	初期スタート時シナリオ
static ScnData_t InitStartScn[] = {
	//	シナリオ命令,文字列,数値パラメータ1,数値パラメータ2,
	{ SCN_PLY_EPOS, NULL, 0 },	//自キャラの位置をイベント番号の位置にします。 
	{ SCN_MES, "さーて!今日はレベル上げちゃおっかな(勇なま風)", TRUE, SCN_WND_MSGD },//セリフ
	{ SCN_EXIT },	//イベントを抜けます。

	{ SCN_END },	//ストッパとしてシナリオ終端に必須です。
};
●追加シナリオ1
上の直後に追加してください。
マップチェンジで他のマップから移ってきたときの処理で、自キャラの位置と方向を設定しています。

CODE:

//	マップチェンジ時シナリオ
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 },	//ストッパとしてシナリオ終端に必須です。
};
●追加シナリオ2
各町人のセリフです。
画像
画像
画像

CODE:

//----------------------------------------------------------------------
//	町人シナリオ
//----------------------------------------------------------------------

//	町人
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 },	//ストッパとしてシナリオ終端に必須です。
};
●追加シナリオ3
マップの出口で街を出てフィールドマップ(島)にマップチェンジします。

CODE:

//----------------------------------------------------------------------
//	マップイベントのシナリオ
//----------------------------------------------------------------------

//	出口イベント
static ScnData_t mapExit[] = {
	//	シナリオ命令,文字列,数値パラメータ1,数値パラメータ2,
	{ SCN_MAP_CHG, "島", 0 },//マップをチェンジします
	{ SCN_EXIT },	//イベントを抜けます。

	{ SCN_END },	//ストッパとしてシナリオ終端に必須です。
};
●イベントデータ
最後にイベントデータで、各シナリオデータとイベントとの接続を記述しています。

CODE:

//----------------------------------------------------------------------
//	イベントデータ
//----------------------------------------------------------------------

//----------------------------------------
//	町のイベントデータ
//----------------------------------------
struct tag_EventData g_TownEventData = {
	{	//システムイベント
		InitStartScn,	//	初期スタート時イベント
		NULL,			//	ゲームロード時イベント
		MapChangeScn,	//	マップチェンジ受けイベント
	},
	{	//地形イベント
		NULL,		//初期スタート時の出現位置
		mapExit,	//出口イベント
	},
	{	//キャラクタイベント
		Man0,	//町の入口
		Man1,	//道具屋
		Man2,	//宿屋
	},
};
ここまでが町のイベントです。
続いてフィールドです。

[scnFeild.h]
ここではg_FieldEventDataだけを定義しています。
●g_FieldEventData

CODE:

#ifndef INCLUDE_SCNFIELD_H
#define INCLUDE_SCNFIELD_H

//----------------------------------------------------------------------
//	変数
//----------------------------------------------------------------------

//	町のイベントデータ
extern struct tag_EventData g_FieldEventData;

#endif /*INCLUDE_SCNFIELD_H*/
[scnFeild.cpp]
ここからがフィールドのイベントやシナリオの実体です。
●ヘッダのインクルード
ヘッダをインクルードします。

CODE:

#include 

#include "main.h"
#include "eventScn.h"
●システム・シナリオ
マップチェンジ後に呼び出されるシナリオで、元々のマップ名から自キャラの出現位置を決めています。
町からのマップチェンジならイベント番号0でダンジョンからならイベント番号1が出現場所です。

CODE:

//----------------------------------------------------------------------
//	システム・シナリオ
//----------------------------------------------------------------------

//	マップチェンジ時シナリオ
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 },	//ストッパとしてシナリオ終端に必須です。
};
●マップイベントのシナリオ
それぞれマップイベントを踏んだ時にマップチェンジするマップを書いています。
画像
町のイベントなら町マップへ、ダンジョンの入口ならダンジョンのマップに移る様になっています。

CODE:

//----------------------------------------------------------------------
//	マップイベントのシナリオ
//----------------------------------------------------------------------

//	入り口イベント
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 },	//ストッパとしてシナリオ終端に必須です。
};
●イベントデータ
イベントとシナリオをつなぐ定義です。
ここはキャラクタはいないので、マップチェンジ受けイベントと地形イベントのみです。

CODE:

//----------------------------------------------------------------------
//	イベントデータ
//----------------------------------------------------------------------

//----------------------------------------
//	フィールドのイベントデータ
//----------------------------------------
struct tag_EventData g_FieldEventData = {
	{	//システムイベント
		NULL,			//	初期スタート時イベント
		NULL,			//	ゲームロード時イベント
		MapChangeScn,	//	マップチェンジ受けイベント
	},
	{	//地形イベント
		townIn,		//	町に入る
		dungeonIn,	//	ダンジョンに入る。
	},
};
以上。
マップチェンジと会話でした。

今回のプロジェクトです。
マップが増えてますので必ずダウンロードして下さい。

[拡張子 zip は無効化されているため、表示できません]

次は何時に成るか分かりませんが、メニューの仕上げをお届けする予定です。

コメントはまだありません。