ケータイFlashゲーム制作レクチャー

第13回マップ冒険ゲームレクチャー(3) マップ上のイベントを作る!

マップにイベントを配置してゲームシナリオを作る!

今回はイベントの作成へ入ります!マップ冒険ゲームにとってイベントは大事なシナリオ! ちょっと難しいけど、flaを参考にしながら読んでね!

前2回に続き、今回は…

前2回は、基本レクチャーとして、マップ作成~PC移動&マップスクロールを解説してきたが、今回は、⁠レクチャーⅡ スクロールコントロールを行う!⁠⁠~⁠レクチャーⅢ イベントの作成!」へとドドッと進めていく。‥とすれば、盛り上げるBGMは、ドラマティックなイベントBGMやら手強い中ボスとのバトルBGMといったところだろうか。では、気合入れてスタート!!

今回使用するflaは、イベントまで入れた「GameMapAdv」となり、そのflaを用いて進めていく。

レクチャーⅡ&Ⅲで使用する「GameMapAdv」解説

まずは、使用する「GameMapAdv」の解説から入る。実際に遊べるswfを載せたのでプレイして頂きたい。そして、続いてflaの解説を行っていく。

実際にプレイできます。

2キー: 上へ移動
8キー:下へ移動
4キー:左へ移動
6キー:右へ移動
5キー:押下時、足元にイベントがあればイベントが発生。

(1)「GameMapAdv」ゲーム&マップクリップ内解説

次のFla画面1「GameMapAdv」のゲームクリップ内。今回はイベントが入るので、前回までより複雑な構造になっている。

Fla画面1 ゲームクリップ内
Fla画面1 ゲームクリップ内
Fla画面2 マップクリップ内
Fla画面2 マップクリップ内

マップクリップのフレーム1に記した、初期設定、フラグ、データは次の通り。マップコントロールやイベントが入ったため増えている。

初期設定に追加したフラグとデータ
//マップとPCのスタート設定
//マップの配置座標
_x = -8;
_y = -8;
//PCの配置座標
pc:_x = 128;
pc:_y = 128;
//PCの向きフラグ (0初期 1前 2後 3左 4右)
pc_posi = 0;
//PCの位置カウンタ。スクロール開始判定用
pc_ichi_ct_x = 0;
pc_ichi_ct_y = 0;  ┛①

//PCの移動ウエイトフラグ
ido_wait = 0;

//マップ移動データ
md = "(省略。下の「Fla画面3」を参照)"
//マップ移動データ1行数(マップの横幅分)
md_xmax = 33;
//PCのマップ移動データ上位置
pc_md = 240;

//キー入力フラグ (0可 1不可)
keyNG = 0;
//押されたキーを覚えておくフラグ
//0キーは使用しないので初期値とした
key_input = 0;

//イベント位置データ
ed = "000000000000000000000000000000000"
   add"000000000000000000000000000000000"
   add"000000000000000000000044444400000"
   add"000000000000000000000044444400000"
   add"000000000000000000000044444400000"
   add"000000000000000000000000000000000"
   add"000000000000000000000000000000000"
   add"000000000000000000000000000000000"
   add"000000000000000000000000000000000"
   add"000000000000000000000000000000000"
   add"000000000000000000000000000000000"
   add"000000000000000000000000000000000"
   add"000000000000000000000000000000000"
   add"000000000000000000000000000000000"
   add"000000000000000000000000000000000"
   add"000000000000000000000000000000000"
   add"000000000000000000000000000000000"
   add"000000000000000010000000000000000"
   add"000000000000000000000000000000000"
   add"000000000000000000000000000000000"
   add"000000000000000000000000000000000"
   add"000000000000000000000000000000000"
   add"000000000000000000000000000000000"
   add"000000000000000000000000000000000"
   add"000000000000000000000000000000000"
   add"000000000000000000000000000000000"
   add"000030000000000000000000000000000"
   add"000000030000000000000000000002000"
   add"000300000300000000000000000000000"
   add"000003000000000000000000000000000"
   add"000000000000000000000000000000000";
 
//イベントフラグ初期設定 (0未発生 1済み)
ev1 = 0;
ev2 = 0;
ev3 = 0;
 
//イベント終了ボタン入力を可にするフラグ
// (0解除 1可にする)
evEnd_input = 0;┛②

 増えた部分。スクロール開始判定用カウンタ
 増えた部分。イベントで使用。解説は「レクチャーⅢ」にて

Fla画面3 マップ移動データ
Fla画面3 マップ移動データ
「GameMapAdv」のマップ移動データ。このデータの見方は、前回を参照。

レクチャーⅡ スクロールコントロールを行う!

実は、前回レクチャーした障害物の回避移動は、その内容難度からレクチャーⅡの予定だったのだが、マップ移動データの解説に伴う必要性から前回解説を行った。というわけで、このレクチャーⅡでは「スクロール開始判定」のみ解説することにした。

(1)マップスクロールを開始する境界範囲を作る!

下のFla画面4を見て頂きたい。この赤い枠は、マップのスクロールを開始する境界である。PCがこの境界範囲内で動き回ってもマップはスクロールしないが、この境界上で移動キーが入力されるとマップのスクロールを開始する。

なぜこうするかと言うと、PCが一歩動く度にマップがスクロールしていては、RPGという長時間プレイするゲームでは目が疲れてしまうし、イベントなどを解くためPCを画面中央で小まめに動かす必要がある際にも、いちいちマップがスクロールしていては鬱陶しく感じてしまう。こうした遊びやすさの配慮から、PCが画面中央辺りにいる場合はマップスクロールをしないよう、マップスクロールをコントロールしている。

Fla画面4 スクロール開始する境界
Fla画面4 スクロール開始する境界画像

このように、スクロールを開始する境界範囲を決めたら、PCがその境界まで進み、境界上で移動キーが入力されたらマップスクロールする仕組みを作る必要がある。今回のレクチャーでは、PCの位置カウンタを用意し、PCが画面中央にいる際には位置カウンタ「pc_ichi_ct_x」「pc_ichi_ct_y」の値を0とし、一歩移動したらカウンタを±1、そのカウンタの値によって、PCが境界上か否か判るようにしてある。そして、PCの移動処理の中で、境界上か否かによってマップスクロールの可否を決めている。

(2)マップスクロールの可否判定処理

PCが境界上か否かによるマップスクロールの可否判定処理は、PCクリップの内部で行っている。これは、前回解説したPCの移動&マップスクロールの処理を拡張した形となる。

Fla画面5 PCクリップ内部
Fla画面5 PCクリップ内部

〔PCが前向き(↓へ移動)の場合〕

次のスクリプトによって判定処理している。

PCが前向きの場合、PCは下方向へ移動するので、PCの位置カウンタ「pc_ichi_ct_y(Y軸用⁠⁠」を見て、値が3より小さければマップスクロールせず、以外ならスクロールさせている。

if (../:pc_ichi_ct_y < 3) {
 ../:pc_ichi_ct_y++;    ―①
 _y += 16;
} else {
 _y += 16;
 ../:_y -= 16;    ―②
}

 マップスクロールしない範囲内でPCが下へ一歩進むので、Y軸用の位置カウンタをインクリメントする

 PCが境界上で移動キーを入力されたのでマップスクロールさせている

〔PCが後向き(↑へ移動)の場合〕

前向きの場合と逆に、値が-3より大きければマップスクロールせず、以外ならスクロールさせている。

〔PCが左向き(←へ移動)の場合〕

PCが左向きの場合、PCは左方向へ移動するので、PCの位置カウンタ「pc_ichi_ct_x(X軸用⁠⁠」を見て、値が-3より大きければマップスクロールせず、以外ならスクロールさせている。

if (../:pc_ichi_ct_x > -3) {
 ../:pc_ichi_ct_x--;    ―①
 _x -= 16;
} else {
 _x -= 16;
 ../:_x += 16;    ―②
}

 マップスクロールしない範囲内でPCが左へ一歩進むので、X軸用の位置カウンタをデクリメントする
 PCが境界上で移動キーを入力されたのでマップスクロールさせている

〔PCが右向き(→へ移動)の場合〕

左向きの場合と逆に、値が3より小さければマップスクロールせず、以外ならスクロールさせている。

レクチャーⅢ イベントを作成する!

今回のようなマップ冒険ゲームの場合、フィールドやダンジョンといったマップ自体もゲームシナリオであるが、そのマップ上に配置されたイベントの数々を解いていくことによってゲームストーリーが作られていく。例えば、誰かに出会って重要な情報(というフラグ)を入手する。または、ダンジョンの奥で重要アイテム(というフラグ)を発見する。あるいは、重要ポイントを守るモンスターやトラップをクリアする(これもフラグ)等々…。

画面での見た目上は、人だったりアイテムだったりトラップやモンスターとの戦いだったりするが、その裏では「フラグ」という変数の値が0になったり1になったり、0→1→2→3…とカウントされていたりする。つまりは、フラグ(変数)の値によってイベントが発生済みか否か、どういった状態か内部的に把握するのだ。

今回の「GameMapAdv」では、マップ上に4つのイベントを配置した。

(1)イベント位置データを用意する

マップ上のどこにイベントがあるか。イベント位置の決定は、マップ移動データと同様な方法でイベント位置データを作成、これを用いてイベントの位置を決めている[1]⁠。

Fla画面6 イベント位置データ
Fla画面6 イベント位置データ

データの数値については、0は、そこにイベントは無し。1~4は、PCがその位置にいる時に5キーが入力されると、対応するev1~ev4のイベントが発生する。これについては、次の(2)で詳しく解説する。

(2)「GameMapAdv」に配置したイベント

次のFla画面7は、マップ上に配置したイベントの内容と、イベントの発生に影響するフラグについて示したもので、前述もしたが、イベントとフラグは密接な関わりを持ち、イベントを作るにはフラグを理解して活用しなければならない。

Fla画面7 マップに配置したイベント
Fla画面7 マップに配置したイベント Fla画面7 マップに配置したイベント Fla画面7 マップに配置したイベント

…ということで、いよいよイベント作成の内容へ!で終わってしまって申し訳ないが、内容ボリューム上、この後は次回に続くとし、今回は終了。

次回、マップ冒険ゲームレクチャーのラスト! 冒険も大詰めだぁ~!!

ハイ、ということで、このマップ冒険ゲームは次回がラストです!季節はもう夏~て感じだけど、熱~い次回に期待をっ!!

おすすめ記事

記事・ニュース一覧