マップ冒険ゲームの最終回!
前回(13回目)に続き、今回は…
今回は、前回の「レクチャーⅢ イベントを作成する!①」の続きからとなるが、使用するflaも前回と同様の「GameMapAdv」を用いて進めていく。
レクチャーⅢ イベントを作成する!②
前回は、「イベント位置データ」とマップに配置したイベントの解説を行い終了した。今回は、その続きからとなるので、イベント位置データによってマップ上に配置されたイベントの中身、実際のイベント内容やイベントコントロール、表示するメッセージなどについて解説を進めていく。
(1)イベントクリップ解説
マップ上に配置されたイベントの実際、各イベント内容は、「イベントクリップ」内に一括してまとめてあり、ここでイベントコントロールやメッセージ表示などを行っている。
今回のサンプルゲームでのイベントは、各イベントに対応するメッセージを表示するのみだが、基本的な作りとして、今回のようなイベントコントロールクリップを作り、その中でイベントコントロールを行うのが扱いやすい。
イベントクリップ内部では、ゲーム中に発生するev1~ev4の各イベントをタイムラインによって区分けして管理している。ev1~ev4は、多少の違いはあれど、基本的に同様な構造で同様なイベントコントロールによってイベント進行やメッセージ表示を行っている。
それでは、各イベント内容の解説をしていくが、主要なイベント「ev1」「ev2」の解説のみでご了承頂きたい。
(2)ev1「スコップの入手」解説
まず、イベント1(フレームラベル「ev1」)を解説すると…
- 〔①解説〕
このフレーム1は待機フレームであり、ゲームスタート時はstopによって停止になっている。また、各イベントが終了するとこのフレームにgotoStopしてくる。
ここに記したスクリプトは下記の通りで、_visible=falseによってイベントクリップの表示OFFを行い、各フラグ(変数)の値を初期値0に戻している。
- 〔②解説〕
PCがマップ上に配置されたイベント1上にいる状態で5キーが入力されると、このev1フレームへgotoPlayしてきて、ここから再生スタートする。
このフレームへgotoPlayしてくると、IF文によってイベントの発生判定を行う。フラグev1の値をチェックし、イベント1が未発生ならイベントを発生させ、発生済なら何も行わず待機フレームへ戻している。
- 〔③解説〕
このフレームで画面上にイベント終了ボタンを表示し、5キー入力の受付けを可にする。ev1のメッセージはフレーム3ですでに表示されているが、キー入力はこのフレームまで受付けない。この理由は、キー入力をメッセージ表示と同タイミングで許してしまうと、メッセージを読む前に誤って終了してしまう恐れがあるため。
- 〔④解説〕
イベント1の最終フレーム。ここでイベント1を発生済にし、待機フレームへ戻す。
(3)ev2&2a「目的物の入手」解説
続いて、主要イベントであるイベント2(フレームラベル「ev2&2a」)は、プレイヤーがスコップを所持しているかどうかによって内容が分岐するが、基本的な進行はイベント1と同様である。
このサンプルゲーム「GameMapAdv」は、ev2aが発生することによって"ある物"が入手でき、一応終了となる(といってもエンディングは無いが…)。"ある物"は簡単に入手できるので、プレイして頂ければと思う。
このev2&2aの解説は、上のFla画面4に番号振った①と②について行うことにする。
- 〔①解説〕
PCがマップ上に配置されたイベント2上にいる状態で5キーが入力されると、このev2フレームへgotoPlayしてきて、ここから再生スタートする。
イベント1同様にイベントの発生判定を行い、発生ならイベントを実行し、否なら何も行わず待機フレームへ戻している。
- (A)まず、フラグev1の値を見る。その値が0ならイベント1は未発生であり、まだスコップは入手していない。従って、この場合は「何か掘るものがあれば…」というメッセージを表示する。
- (B)ev1の値が0でなければこの判定に移ってくる。ここでは、ev1の値が1(スコップ入手済)かつ、ev2の値が0(目的物未入手)であれば実行され、これにより目的物が入手できる。
- (C)上記二つ以外ならここが実行される。つまりは、すでに目的物は入手しており、このイベント2は発生済になっている。従って、何も行わず待機フレームへ戻す。
- 〔②解説〕
イベント2の最終フレーム。ここでイベント2を発生済にし、待機フレームへ戻す。
(4)5キー入力解説。イベントの発生と終了
イベントは、5キー入力により、PCがいる場所にイベントがあった際に発生するが、一旦イベントが発生すると、keyNG=1によって全てのキー入力を受付けなくしている。
そしてイベントメッセージが表示され、前項(2)で触れたevEnd_input=1によって5キーのみ入力を許し、5キーの入力によってイベントから抜けることになる。
5キーの入力については、マップクリップ内に配置したボタンに記述した次のスクリプトによって行っている。
- (A)まず、フラグevEnd_inputの値を見る。その値が1なら、発生中のイベントが終了入力を求めていることになり、入力された5キーによって発生中のイベントは終了することになる。
- (B)上記が当たらなければこの判定に移ってくる。フラグkeyNG(キー入力の受付け可不可)の値が1か、フラグido_wait(PCが移動中か否か)の値が1なら、イベント発生中かPCが移動中なので、何も起こさない。
(C)上記二つ以外ならこの判定に移ってくる。ここでは、5キーの入力によって、PCがいる場所にイベントがあるか「イベント位置データ」を参照している。その結果、イベント位置データの値は0だったので、イベントは無く何も起こさない。
substring (ed, pc_md, 1) == 0は、(イベント位置データ,マップ移動データ上のPC位置,1)が0ならば…であり、前回レクチャーした「イベント位置データ」と前々回にレクチャーした「マップ移動データ上のPC位置」を比較し、PCがいる場所にイベントがあるかチェックするもので、例えば、PCがマップ移動データ上の100番目位置にいるとすると、イベント位置データの100番目を文字列検索し、100番目の文字が0ならば…となる。
- (D)イベント位置データの値が0以外、イベントがあったので、イベント位置データの値と対応するイベントを発生させる。その際、キー入力を不可にし、PCの移動や5キーの入力を受付けなくしている。
(5)イベントの発生について補足
サンプルゲーム「GameMapAdv」でのイベントは、5キー入力によって発生するものしかないが、この発生トリガーのみでは、マップ冒険ゲーム1回目に載せたサンプルゲームのような他マップへの自動移動など、5キー入力以外で発生するイベントは対応できない。
そこで、ゲーム中、どんなイベントを作りたいか?を考えた上、キー入力により発生、PCがイベント範囲に入ったら発生、何かを所持していたら発生など、幾つか用意しなければならないだろう。
ただ、これらは、今までレクチャーしてきた何かの方法で実現可能であり、例えば、PCがイベント範囲に入ったら…は、イベント位置データを参照すればいいし、何かを所持していたら…は、それが何であろうとフラグを参照すればイベントを発生させられる。
…というわけで、イベントの作成解説は以上で終わるが、さて皆さんは、どんなストーリーやイベントを作るのだろう? 好みのゲームBGMにノッて、ワクワクするゲームシナリオを作ってください!
そして…まだ冒険は続く!
さて、4回に渡って行ってきたマップ冒険ゲームレクチャーも、一旦ここで終了としたい。サンプルゲームに登場する全てのイベントについて解説していないし、モンスターや他マップへの移動なども残っているが、それらは下記に少々紹介するに留め、また機会があれば加筆してレクチャーできればと思う。
(1)1回目のサンプルゲームについて一部紹介
…以上、マップ冒険ゲームレクチャーの終了です!
ゲームの規模上、全て解説し切れず恐縮ながら、こういったマップ冒険ゲームの考え方、Flashによる設計例、作法のサンプル色々と、全4回に渡って熱い思いで執筆とサンプルの作成をしてきたつもりです。
ボスを倒してエンディングへ辿り着くにはまだ先は長いけれど、作ったゲームを遊ぶプレイヤーが楽しんでくれたら!皆さんも、そんな情熱で、熱~いマップ冒険ゲームを作ってください!
謝辞。
サンプルゲーム用に作曲いただいた渡邊さん、AYU○Iに始まり、今回も有難うです!今回のサンプルゲーム、非公式ながら、あのゲームの続編ということで??? 18年ぶり(^^;)にオリジナルスタッフで作れて楽しかったです。感謝!