RPGツクールXP講座



RPGの作り方 Lv3

 Lv3では、さらに高度ことをやってみたいと思います。そろそろ、中級レベルに近づいてきました。


始める前の下準備

 これから説明をしていくために、専用のプロジェクトを作ります。みなさんも、同じことをして確認する場合は、同じようにプロジェクトを作って準備してください。

 Lv2からデータを引き継ぎますが、区別するため、フォルダ名とタイトルは、ともに「test3」にします。


進行度の管理

 ストーリー性の強いRPGでは、ストーリーの進行によって、状況が変わっていきます。そこで、そのストーリーの進行度を管理してやる必要があります。
 今まで、この講座で作ってきたゲームでも、一応、進行度の管理をしています。
 オープニングイベントが終了したとき、スイッチ[0001]をONにすることで、オープニングイベントを終了させましたね? あれで、ストーリーの進行度を一つ進めたわけです。
 しかし、そうやって何か変化がある度に、スイッチを使って切り替えを行っていくと、設定するスイッチの数がどんどん増えていきます。
 短編作品ならともかく、長編作品ではとんでもない数のスイッチを管理せねばならず、管理が煩雑になってきます。
 そこで、ここでは進行度の管理に変数を使います。変数なら、ひとつで全体の進行度を管理できるからです。


◆進行表を書く
 どのようにストーリーが展開するか、進行表を書いてみます。
 進行度いくつで、どんな出来事が起こり、その後進行度がいくつに変化するか書いています。(進行度の数字は、適当に設定しています)

○進行度:0
 オープニングイベント。グロリアが仲間になる。→進行度:10

○進行度:10
 ドロシーイベント。ドロシーが仲間になる。→進行度:20

 こんな感じです。とりあえず、今まで作ってきたストーリー展開は、このようになっています。
 ただ、ゲームはこんなに単純じゃありません。分岐もなしに一本道で展開するなら楽ですが、実際には分岐があったり他の条件が絡んできます。
 このゲームにも、分岐がありましたね。ドロシーイベントが発生する前に、村を出ようとすると、グロリアが思い出すイベントがありました。
 それも含めて書くと、こんな感じです。


○進行度:0
 オープニングイベント。グロリアが仲間になる。→進行度:10

○進行度:10
 思い出しイベント。グロリアがドロシーのことを思い出す。→進行度:15

○進行度:10,15
 ドロシーイベント。ドロシーが仲間になる。→進行度:20

 状況によって、「オープニング」→「思い出し」→「ドロシー」という順番で進行する場合と、「オープニング」→「ドロシー」という順番で進行する場合の2つのパターンが考えられます。
 「オープニング」→「思い出し」→「ドロシー」の場合、進行度は「0→10→15→20」と変化します。
 「オープニング」→「ドロシー」の場合、進行度は「0→10→20」と変化します。

 このように、分岐も含めてひとつの進行度で管理することが出来ますが、ちょっとややこしくなったりもします。その場合、進行度は「0→10→20」の展開だけにして、思い出しイベントは、別個にスイッチで管理するという手もあります。

 ちなみに、進行度を10刻みで上げている理由ですが、もうお分かりだと思いますが、後で新たに進行度を設定する必要が出てきたときに融通がききやすいからです。今回の場合、進行度10と20の間に15を挿入しました。これがもし、1刻みで進行度を上げていたら、1と2の間にはもう何も挟めませんので、進行度の数値の設定をやりなおさなければなりませんでした。そういう手間が無いように、10刻みもしくは大きく展開したときなどは100刻みで上げていきます。


◆オープニングイベントの修正
 実際に、進行度を変数で管理してみましょう。
 まず、変数の[0001]番に、進行度という名前をつけましょう。(筆者は、常に変数の[0001]番を進行度にしています)

▼進行度を管理する変数を決める



 変数の準備が出来ましたので、今までに作ったイベントを進行度で管理するように修正します。
 最初に、オープニングイベントの最後のイベントを修正します。

▼フレイザ村 グロリアのイベント 1ページ目


 見てのとおり、最後の行の「スイッチの操作」が「変数の操作」に代わっています。進行表にあるとおり、このイベントの最後で、進行度を10にしますので、変数:[0001:進行度]に、10を代入しています。

▼フレイザ村 グロリアのイベント 2ページ目


 さらに、2ページ目も変更します。
 条件を、スイッチから、「変数:[0001:進行度]が10以上」に、変更します。
 これで、変数:[0001:進行度]が10以上になると、2ページ目に切り替わることになります。

 他のイベントも、2ページ目の条件を「変数:[0001:進行度]が10以上」に、変更します。
 変更するイベントは、村長の家の中の、3つのイベント(グロリア、村長、魔法アニメの3つ)です。


◆思い出しイベントの修正
 次は、思い出しイベントを修正します。フレイザ村の北端にあるマップ移動イベントを編集します。

▼フレイザ村 マップ移動イベント


 変更された点は、2点です。
 まず条件分岐の条件が、「ドロシーがパーティにいるか」から「変数:[0001:進行度]が20以上」に変えられています。
 進行表にあるとおり、ドロシーがパーティに加わると、進行度が20になりますので、変更前でも後でも結果として同じ条件で分岐することになります。
 それなら、前のように「ドロシーがパーティにいるか」で分岐してもいいように思えます。実際それでも不都合はありません。しかし、ここでは、進行度の変数で分岐する方を選びます。
 なぜなら、今後のストーリー展開によっては、ドロシーがパーティを抜ける可能性もあるからです。そうなると、ドロシーが居なくなった後、この移動イベントが正しく動作しなくなってしまいます。後々のことを考えて、進行度で管理することにします。

 もうひとつの変更点は、スイッチの操作で、[0002:ドロシーのこと思い出す]をONにしていたのを、「変数の操作:[0001:進行度]に15を代入」に変えたことです。
 これも進行表にあるとおりです。 


◆ドロシーイベントの修正
 次は、ドロシーイベントを修正します。宿屋のドロシーのイベントを編集します。

 変更された点は、2点です。
 最初の条件分岐の条件が、「変数:[0001:進行度]が15以上」に変更されています。
 思い出しイベントが実行されていると進行度は15になり、実行されていないなら10のままですから、進行度が15以上かどうかで分岐すれば、思い出している時のセリフと、思い出していないときのセリフを適切に表示できます。

 もうひとつの変更点は、最後の行で、セルフスイッチの操作を、「変数の操作:[0001:進行度]に20を代入」に変えたことです。
 これも進行表にあるとおりです。ドロシーがパーティに加わったら、進行度を20にします。

 もうひとつ、忘れてはいけない変更がありました。ドロシーのイベントの2ページ目の条件を、セルフスイッチから「変数:[0001:進行度]が20以上」に変更します。


 これで、進行度の管理を、スイッチから変数に変える作業は、終了です。


◆使わなくなったスイッチの整理
 これで、今まで使っていた[0001]から[0003]までのスイッチを使わなくなりましたので、紛らわしくないように、名前を消しておきましょう。

▼スイッチの名前を消す




◆動作確認
 テストプレーをして、確認しましょう。プレイ内容は、変更前とまったく変わっていませんので、前と同じように処理されるか確認しましょう。


道具屋を作る

 さて、いよいよ洞窟探検に行けるようにします。
 しかしその前に、旅の準備をするための道具屋を作る必要があるでしょう。


◆道具屋のイベント作成
 道具屋のマップのカウンターの向こうに、道具屋のイベントを作成します。
 お店を作るには、「ショップの処理」というコマンドを使います。

▼道具屋のイベント


 「ショップの処理」を選択したら設定欄の紺色の部分をダブルクリックします。

 すると下図のような商品の選択画面が出ますので、まずポーションを選択します。

▼商品の選択


 ポーションが設定されました。
 
▼次の商品の選択


 さらに、ポーションの下の紺色の部分をダブルクリックし、2つ目の商品、アンチドートを設定します。

 アイテムは、とりあえずこの2つにします。
 次は武器や防具です。

▼次の商品の選択


 アイアンソードを設定します。
 同じように、アイアンナイフ、アイアンメイス、アイアンロッドも設定します。
 これらは、それぞれのアクター(主人公)の装備できる上級武器です。


▼道具屋のイベント


 最終的にこうなりました。


◆お金を入手する
 さて、これで買い物が出来るようになりましたが、肝心のお金がありません。
 お金を入手するイベントを作ります。

 ドロシーが仲間になるイベントに、お金入手イベントを付け加えます。

▼ドロシーのイベント


 適当に会話を入れて、最後に「ゴールドの増減」で、73G増やしました。


◆動作確認
 テストプレーをして、確認しましょう。
 ドロシーのイベントの後お金を入手し、道具屋で買い物が出来ます。


戦闘 ランダムエンカウント

 いよいよ戦闘です。
 戦闘をするためには、エンカウントシステムを作らなければなりません。(エンカウントとは敵に遭遇することです)
 最初は、ツクールで用意されている、標準のランダムエンカウントシステムを使って戦闘をやってみましょう。
 

◆エネミーの設定
 まず、データベースでエネミーの設定をします。
 標準で設定されているエネミーには、ザコっぽいモンスターが居ないので、ザコっぽいのを追加します。

 追加するので、最大数を増やします。35に増やしました。
 
▼最大数を増やす



 [033]番に新しいエネミーを設定します。
 ザコの定番、スライムを設定しました。強さは、アルシェスなら一発で倒せ、グロリアやドロシーなら2発で倒せるくらいです。

▼エネミーにスライムを設定




◆トループの設定
 データベースでトループの設定をします。
 [001]番に設定されているゴーストを全削除で消して、スライムを2匹追加します。
 [002]番には、スライム3匹組を設定します。

▼トループにスライムを設定


 設定したら、戦闘テストでどのくらいの強さか確かめてみると良いでしょう。


◆他のエネミートとトループも設定
 同じようにして、大コウモリと鬼シメジのエネミー設定と、トループ設定を行いました。

▼トループの設定


 全部で6つのトループを設定しました。


◆エンカウントの設定
 洞窟のマップに、エンカウントの設定をして、モンスターが出現するようにします。

 マップツリーの「002 洞窟」の部分を右クリックしてメニューを出し、「マップの設定」を選択します。
 エンカウントの所(下図の紺色の部分)をダブルクリックして、追加するトループを選びます。

▼エンカウントの設定


 下図のように、6つのトループを全部設定しました。

▼エンカウントの設定




◆動作確認
 テストプレーをして、確認しましょう。
 洞窟へ行って、歩き回って敵が出てくるか確認しましょう。


◆調整と改良
 戦闘は、最初の設定で完璧に決まることはありません。
 何度かテストしてみて、強さは適当か、手に入る経験値やゴールドは適当か、エンカウント率は適当か、などをチェックしていきます。

 実際に、少し調整をしました。
 手に入るお金が少ないので、多くします。しかしコウモリやシメジがお金を持ってるのは変なので、コウモリやシメジはアイテムを落とし、それを売れるようにします。(スライムは体の中に金目のものを取り込んでるのでアイテムでなくゴールドを落とすようにします)
 そこで、換金用のアイテムを設定することにします。

▼換金用アイテムの設定


 換金用アイテムとして、コウモリの羽とキノコの胞子を設定しました。
 ここで注意する点は価格です。アイテムは、売るときには半額になりますので、20Gで売りたいなら、40Gに設定しておく必要があります。

 次に、エネミーの設定で、トレジャーの項目にコウモリの羽とキノコの胞子をそれぞれ設定します。

▼エネミーのトレジャー設定


 出現率は、エネミー1体のアイテムを落とす確率です。
 仮に出現率が100%の場合、4匹組なら4個のコウモリの羽が手に入ることになります。これでは多すぎるので、30%にしてあります。


宿屋を作る

 戦闘をしたら消耗しますので、宿屋で回復できるようにしないといけません。宿屋のマップに宿屋の主人をおいて、回復の処理が出来るようにしましょう。
 XPには、2000や2003のような「宿屋の処理」が無いため、自分で作る必要があります。

 宿屋のマップのカウンターの向こうに、宿屋の主人のイベントを設置します。
 
▼宿屋の主人のイベント内容


 イベント実行内容を説明します。

 最初に、変数の操作で、宿泊料金を計算しています。
 一時変数というのは、筆者が便利だと思って使っているものです。A〜Dまで4つ設定してあって、一時的な計算をするのに使います。
 このように、値を保存しておく必要が無い一時的な計算には、一時変数を設定して使うと便利です。計算のたびに、いちいち専用の変数を設定していると、変数の数が増えて管理が煩雑になりますので。
 宿泊料金は、一人10Gにしていますので、まず[0005:一時変数A]に10を代入し、次にパーティ人数を乗算しています。これで、宿泊料金が設定できました。

 次に[0006:一時変数B]に、ゴールド(現在の所持金)を代入しています。これは、後でお金が足りているかどうかの判定に使います。

 セリフを表示し、選択肢を表示して、[はい]を選んだ場合は、お金が足りているかどうかの判定に進みます。
 [いいえ]を選んだ場合は、セリフを表示して終了します。
 宿屋の主人のセリフと、選択肢の「はい」の前に「¥G」と書いてあります。これは、所持金を表示するための命令です。
 分かりやすいように、現在の所持金を文章表示と同時に表示するようにしています。
 
 [はい]を選んだ場合、条件分岐で、お金が足りているかどうかの判定を行います。

▼条件分岐


 このように、設定してあります。
 [0005:一時変数A]=宿泊料金
 [0006:一時変数B]=現在の所持金
 ですから、[0006:一時変数B]が、[0005:一時変数A]以上なら、宿泊できるわけです。

 宿泊できる場合、「MEの演奏」で宿泊の音楽を流し、「画面の色調変化」で画面を暗くしています。
 そして、「ゴールドの増減」で[0005:一時変数A]の値だけ、ゴールドを減らしています。
 [0005:一時変数A]には、宿泊料金が設定されていますので、これで宿泊料金分だけ所持金を減らせるわけです。

 次に「全回復」で、パーティメンバー全員を全回復し、「画面の色調変化」で元の明るさに戻しています。


◆動作確認
 テストプレーをして、確認しましょう。


成功判定 罠の解除

 シーフ(盗賊)のドロシーの能力を生かすため、罠の解除が出来るようにします。
 宝箱などを調べたとき、ドロシーが居ると、罠の解除を試みます。
 成功すれば、宝箱を開けることができ、失敗すれば罠が発動して、ダメージを負ったりします。

 Lv1で作った宝箱のイベントを編集します。

▼宝箱のイベント内容


 順番に説明します。

 最初に「条件分岐」で、ドロシーがパーティに居るか居ないかで分岐します。
 居る場合、罠の解除をするかどうか選択でき、居ない場合は宝箱を開けずに立ち去ります。

 「選択肢の表示」で、罠を解除するかしないか選択させます。
 罠を解除する場合は、成功判定をします。罠を解除しない場合は、宝箱を開けずに立ち去ります。

 「アクターのグラフィック変更」で、アルシェスのグラフィックをドロシーのものに変えます。これで、ドロシーが、作業するという雰囲気を出します。

 「SEの演奏」で、罠をはずそうとしている様子を表します。

 さて、次からが成功判定です。
 例によって、一時的な計算をしますので、一時変数を使います。
 今回は、変数[0005:一時変数A]に、成功率を設定し、変数[0006:一時変数B]に、成功判定用の乱数を設定して、両者を比較することで、成功かどうか判断します。
 成功率は、下記の計算で求めています。
 「変数の操作:[0005:一時変数A]=ドロシーの器用さ
 「変数の操作:[0005:一時変数A]/=2
 「変数の操作:[0005:一時変数A]+=20

 ドロシーの能力値「器用さ」の値を代入し、それを2で除算して、20を加算します。
 ドロシーの器用さが。72なら、72/2+20=56で、成功率は56%となります。
 ドロシーは、レベルアップで成長していきますので、それにつれて器用さも上がっていきます。そうなれば、成功率も高くなります。
 最後に加算している20は、難易度だと思ってください。この値が高いほど簡単に解除できる罠だということです。
 この値は、マイナスにしても良いです。解除が難しい罠ならマイナスにするといいでしょう。

 次に成功判定用の値を決めるため、変数[0006:一時変数B]に乱数1〜100を代入しています。

 次が成功か不成功かで分岐する「条件分岐」です。
 この「条件分岐」の条件は、変数[0006:一時変数B]が変数[0005:一時変数A]以下かどうかです。
 つまり、成功判定用の変数が、成功率の変数以下なら、成功とみなしているわけです。
 
  
▼宝箱のイベント内容 続き


 続きです。
 成功判定が、成功の場合、成功時のセリフを表示します。
 失敗の場合は、失敗時のセリフを表示し、毒を食らいます。「ステートの変更」で、ドロシーを毒状態にしています。

 次にアイテム入手イベントです。 
 罠の解除に成功しても失敗しても、宝箱のふたは開くようにしてありますので、アイテムは手に入ります。
 最後に忘れずに、アルシェスのグラフィックを元に戻します。 


◆動作確認
 テストプレーをして、確認しましょう。


コモンイベントを使う マップイベントから呼び出す

 今まで作ってきたイベントは、すべてマップ上に設置したイベント「マップイベント」でした。
 ツクールには、もうひとつ「コモンイベント」というイベントがあります。
 「マップイベント」は、そのイベントが設置してあるマップでのみ、動作するイベントです。それに対して、「コモンイベント」は、どのマップにいても動作するイベントです。
 「コモンイベント」は、使用しなくてもゲームを作ることが出来ます。しかし、上手く利用することによって、大幅に手間を減らすことが出来ますので、是非使い方をマスターしてください。


◆宝箱の処理をコモンイベントにする
 宝箱は、洞窟内にいくつか設置する予定です。
 と言う事は、ゲーム中、同じ処理が何度も行われるということです。
 このように、同じ処理が何度も行われるような場合、コモンイベントを使うと楽です。
 
 ではまず、先ほど作った、宝箱の罠解除の処理を、コモンイベントに移してみましょう。
 下図のように、宝箱のイベントの実行内容を全部選択し、コピーします。

▼宝箱のイベント内容をコピー



 次にデータベースを開き、コモンイベントタブをクリックして、コモンイベントの[001]の実行内容のところに貼り付けます。

▼コモンイベントに貼り付け


 貼り付けたら、分かりやすいように、名前をつけます。今回は、「宝箱罠解除」と名づけました。

▼コモンイベントに名前をつける



 これで、イベント内容をコモンイベントに移すことができました。


◆宝箱からコモンイベントを呼び出す
 宝箱のイベントを実行したとき、コモンイベント[001:宝箱罠解除]を呼び出すように設定します。
 まず、宝箱の1ページ目の実行内容を全部消し、「コモンイベント」というコマンドを設定します。

▼宝箱のイベント内容



▼宝箱のイベント内容 設定後


 宝箱のイベントの実行内容は、これだけです。これで、宝箱を調べると、コモンイベント[001:宝箱罠解除]が呼び出され実行されます。

 
◆動作確認
 実際に、宝箱を調べて、ちゃんと処理されるか確認しましょう。 


コモンイベントを使う より高度な使い方

 前の項目で、宝箱の処理をコモンイベントに移し、宝箱のイベントからコモンイベント[001:宝箱罠解除]を呼び出すようにしました。
 これで、他の宝箱のイベントを作る場合も、同じように[001:宝箱罠解除]を呼び出すようにすれば、宝箱のイベントができます。
 しかし、そうすると、どの宝箱もまったく同じ処理になってしまいます。罠の種類も手に入る物もみんな同じです。これでは、あまりに芸が無さすぎます。

 先にも書いたとおり、コモンイベントは、ゲーム中に何度も同じ処理をする場合に使うと有効です。
 しかし宝箱のように、全部同じように処理する部分もあれば、それぞれ違う処理をする部分もあるという場合には、単純な使い方では処理できません。
 そこで、もう少し高度な設定の仕方をしてみたいと思います。


◆共通でない処理を切り分ける
 まず、共通の処理と共通でない処理を切り分けて整理しましょう。
 共通の部分は問題ないので、共通でない部分をあげてみます。

 ・成功判定の変数の操作:[0005:一時変数A]+=20←この数値が変わる
 ・成功判定で失敗だった場合罠が作動する←罠の種類が変わる
 ・アイテム入手イベント←アイテム(もしくはゴールド)の種類(金額)が変わる

 こんなところでしょうか。
 と言うことは、上記の3つの処理以外の部分は、コモンイベントで共通の処理をすればいいわけです。
 では、上記の3つの処理は、どうしたらいいでしょうか?
 

◆変数で値の受け渡しをする
 まず、最初の「成功判定の変数の操作:[0005:一時変数A]+=20」から考えて見ましょう。
 ここで変数に代入される値は、罠解除の難易度を表す数値です。この数値は、宝箱によって変わります。それ以外の計算は、どの宝箱も共通です。
 それなら、宝箱のイベントからコモンイベントへ、この数値を受け渡してやれば、問題なく計算できます。
 そこで、下図のようにしました。

▼宝箱のイベント内容


 [0007:一時変数C]に、難易度を表す値を代入してから、コモンイベントを呼び出しています。

 そして、コモンイベントの方を下図のように変更します。

▼コモンイベント


 紺色に反転している部分に注目してください。
 「変数の操作:[0005:一時変数A]+=20」が、「変数の操作:[0005:一時変数A]+=変数[0007:一時変数C]」に変更されています。
 これで、宝箱のイベントで設定された難易度の値が、コモンイベントの計算に使われることになります。

 このように、マップイベントからコモンイベントへ値を引き渡せば、共通でない部分を共通の部分に組み込むことができます。


◆値の受け渡しに条件分岐を組み合わせる
 次に「成功判定で失敗だった場合罠が作動する」の部分を考えてみましょう。
 これは、罠の種類ですので、単に変数で値を受け渡しただけでは、処理できません。
 こういう場合は、変数での値の受け渡しに条件分岐を組み合わせて処理します。
 まず、宝箱のイベントを下図のようにしました。

▼宝箱のイベント内容


 [0008:一時変数D]に、罠の種類を表す値を代入してから、コモンイベントを呼び出しています。
 変数の値と罠の種類の関係は、「1=毒 2=発火 3=爆発 4=ドレイン 5=テレポータ」としました。

 そして、コモンイベントの方を下図のように変更します。 
 
▼コモンイベント


 宝箱のイベントで設定した、変数[0008:一時変数D]の値を条件に使って、条件分岐で分岐し、それぞれの値に対応する罠を発動させます。

 もうひとつ、スイッチの操作[0005:一時スイッチA]というのが、いくつか追加されているのに気づいたと思います。
 これは、一時変数のスイッチ版ですが、今回はこれを、アイテム入手に成功したか失敗したかを表すために使っています
 この設定は、次の項目で生きてきます。


◆コモンイベントからマップイベントへの値の受け渡し
 最後に「アイテム入手イベント」について考えましょう。
 このケースでは、前の例とは逆に、コモンイベントからマップイベントへスイッチの値を引き渡します。
 そこで、宝箱のイベントでの処理は、下図のようにしました。

▼宝箱のイベント内容


 条件分岐で、スイッチ[0005:一時スイッチA]がONなら、アイテムを入手するようにしています。
 そして、セルフスイッチをONにして、ページを切り替えて終了です。

 ここで、コモンイベントで、スイッチ[0005:一時スイッチA]をONにした意味が出てきます。
 スイッチ[0005:一時スイッチA]は、アイテム入手に成功した場合にONにするようになっていますので、ONの場合のみアイテム入手を行い、OFFの場合には、何もしません。

 ちなみに、スイッチ[0005:一時スイッチA]は、コモンイベントの最初で、OFFにしておかなければなりません。下図のようにです。

▼コモンイベント


 このようにしておかないと、前回一時変数を使ったときにONにったままになっていると、アイテム入手に成功していないのに、入手してしまう可能性が出てきます。


◆コモンイベントかマップイベントかの選択
 コモンイベントを使うとき、ある処理を、コモンイベントかマップイベントか、どちらで処理するか、迷うことがあります。
 今回も、「罠が作動するイベント」は、コモンイベントで処理するようにしましたが、「アイテムを入手するイベント」は、マップイベントで処理するようにしました。
 このような使い分けは、どのような基準で決めるのでしょうか? 特に明確な基準は無いですが、基本的には共通性がどの程度あるかということになると思います。
 「罠が作動するイベント」の場合、罠のパターンが5つと決まっており、何度も同じ処理が繰り返される可能性が高いので、コモンイベントで処理しました。
 それに対して、「アイテムを入手するイベント」は、入手するアイテムは何種類もありますし、またアイテムではなくお金を入手する場合もあります。お金の場合、宝箱によって金額が変わります。
 また、アイテムにしても、今後特別なアイテムを設定する可能性もあり、不確定でもあります。
 そんなわけで、「アイテムを入手するイベント」は、マップイベントで処理するようにしました。
 このように、共通性が高い場合はコモンイベントで、共通性が低い場合はマップイベントで処理するようにすると良いと思います。


◆宝箱の配置
 これで、宝箱のシステムが完成しました。
 あとは、新たに宝箱を設置するとき、今回作った宝箱イベントをコピーし、難易度の値と、罠の種類、そして入手するアイテムの設定を変更するだけで、様々な種類の宝箱を作ることが出来ます。
 実際に、洞窟のマップに、3つ宝箱を置いてみましょう。
 
 下記のように設定しました。
 宝箱1 難易度=40 罠=1(毒)  入手アイテム=ポーション
 宝箱2 難易度=30 罠=2(発火) 入手アイテム=390G
 宝箱3 難易度=20 罠=3(爆発) 入手アイテム=786G
 
  
◆動作確認
 普通なら、ここで動作確認するところですが、ちょっと待ってください。
 先に次の章の修正を行いましょう。


コモンイベントを使う コモンイベントの修正

 コモンイベントを使う大きなメリットに、修正が楽だ、ということがあります。
 実際に、コモンイベント[001:宝箱罠解除]を修正してみましょう。


◆宝箱のふたが開くアニメーションを追加する
 今の宝箱のイベントでは、ふたがいきなりバカッと開きます。これでは、あんまり格好よくないので、もっとスムーズにふたが開くようにしましょう。
 
 データベースを開いて、コモンイベント[001:宝箱罠解除]を編集します。
 罠を解除する部分の最後に、下図のような処理を追加します。

▼コモンイベントの内容


 条件分岐で、スイッチ[0005:一時スイッチA]がONの場合に、「移動ルートの設定」で、宝箱の向きを変えてふたが開くアニメーションをしています。
 先に説明したように、スイッチ[0005:一時スイッチA]は、アイテムを入手できた場合にONにされるスイッチです。つまり、アイテムが入手できた場合にのみふたを開き、そうでない場合は何もしないわけです。
 
 「移動ルートの設定」で、対象を「このイベント」にしてあります。
 コモンイベントで「このイベント」を指定した場合、コモンイベントを呼び出したマップイベントが、対象になるようです。(ちなみに、ツクール2000では、この指定は出来ませんでした)

  
◆動作確認
 実際に、宝箱を調べて、ちゃんと処理されるか確認しましょう。 

  
◆コモンイベントのすすめ
 コモンイベントを使っていて良かったと思うのは、やはり今回のように修正をするときです。
 もし、コモンイベントを使わずに宝箱のイベントを作っていたとしたら、3つの宝箱をそれぞれ修正してやらなければならないところでした。
 3つくらいなら、大して手間は変わらないですが、もし、これが20個とか50個とかだったら大変なことになります。とてもそんなに修正しようという気力はわいて来ません。しかも、修正漏れや修正ミスが出る可能性もあります。
 しかし、イベントの組み方に不具合があり、どうしても修正しなければならないことがあります。
 ゲームを最後まで作って、宝箱が100個くらいになっている状態で、致命的な不具合が見つかったとしたら。考えるだけで恐ろしいですね。
 しかし、コモンイベントで作っていれば、宝箱が100個あろうが、1000個あろうが、コモンイベントひとつを修正すれば済みます。
 ですから、コモンイベントに出来る部分は、積極的にしていったほうが良いのです。


マップ移動にトランジションを使う

 トランジションとは、移り変わりという意味です。RPGツクールXPでは、画面切り替えのことをトランジションと呼びます。
 マップ移動の際の画面切り替えを、トランジションを使ってやってみましょう。


◆村長の家へ入るマップ移動イベントを変更する
 村長の家へ入るマップ移動イベントを編集します。
 「場所移動」の前に「トランジション準備」後に「トランジション実行」を加えました。
 
▼村長の家へ入るマップ移動イベントの内容


 「トランジション実行」では、好みのトランジショグラフィックを選んでください。
 また、「場所移動」のフェードの項目を「なし」に設定してください。「あり」にするとトランジションが働きません。


◆動作確認
 実際に、村長の家に入って、トランジションが処理されるか確認しましょう。
 選んだトランジショグラフィックの黒い色の濃い部分から画面が移り変わっていくはずです。


◆コモンイベントに移す
 マップ移動のイベントをコモンイベントに移してみましょう。
 マップ移動前、マップ移動後の2つのコモンイベントを作ります。

▼コモンイベント マップ移動前


▼コモンイベント マップ移動後


 村長の家へ入るマップも、コモンイベントを呼び出すように変更します。
 
▼村長の家へ入るマップ移動イベントの内容



 たった1行づつのイベントを、なぜわざわざコモンイベントにするのかと思うかもしれませんが、マップ移動の際に、なにか特別な処理をすることもあり得ますので、後々のことを考えて、今のうちにコモンイベントにしておきます。もちろん、トランジションの画像を変更したい場合などにも修正が楽です。


▼他のマップ移動イベントも修正する
 他のすべてのマップ移動イベントを、コモンイベントを呼び出す形に変更します。
 「場所移動」のフェードの項目を「なし」に設定するのも忘れないでください。
 全部で10箇所ほどありますのでちょっと大変ですが、コピー&ペーストを使ってコマンドを貼り付けていけば効率よく修正できます。


並列処理を使う 回復システムを作る

 ゲーム中、常に処理をし続けたいときには、並列処理を使います。
 普通、イベントを実行してるときは、主人公キャラを操作することは出来ません。しかし、並列処理のイベントは、実行中でも主人公キャラを操作することができます。
 また、並列処理は「条件スイッチ」がONになっている限り、1/40秒ごとに1回づつ、繰り返し実行されます。「条件スイッチ」をOFFにしない限り、何度でも繰り返し永遠に処理し続けます。
 ですから、常に処理をし続けたいときには、並列処理を使うのです。

 今回は、時間経過とともに、HPとSPが少しづつ回復していくという処理を作りたいと思います。


◆回復システムを作る
 コモンイベントに、下図のように回復システムというイベントを設定します。

▼回復システムイベントの内容


 「トリガー」が、並列処理になっています。これで、このイベントは、並列処理で実行されます。
 「条件スイッチ」は、このイベントを動作させるか、停止させるかのスイッチです。今回は、スイッチ[0011:回復システム]を、「条件スイッチ」に設定しました。
 スイッチ[0011:回復システム]を、ONにすれば、回復システムイベントが動作し、OFFにすれば止まります。

 実行内容は、簡単です。
 「HPの増減」と「SPの増減」で、パーティメンバー全員のHPとSPを1回復します。
 そして、ウェイトで20フレーム(1秒)待ちます。
 並列処理は、何度でも繰り返し実行しますので、回復と1秒待つのを繰り返します。と言うことはつまり、1秒に1ポイントづつ、HPとSPが回復していくわけです。(厳密には、1秒+1/40秒ごとにですが)

◆「条件スイッチ」をONにする
 回復システムは、スイッチ[0011:回復システム]をONにすると動作します。
 スイッチ[0011:回復システム]は、オープニングイベントの最後でONにすることにしましょう。
 フレイザ村のグロリアのイベントを編集します。
 下図のように、スイッチの操作[0011:回復システム]=ONを追加します。

▼回復システムイベントの内容




◆動作確認
 動作確認をしますが、スイッチ[0011:回復システム]がONになるのは、オープニングイベントの最後ですので、もう一度オープニングからプレイしなおさないと確認できません。
 それは面倒だという場合は、デバッグ画面を使いましょう。
 ゲームをプレイ中に、キーボードのF9を押すと、デバッグ画面が出ます。
 ここで、スイッチや変数の値を変更できますので、スイッチ[0011:回復システム]をONにしてから、セーブしましょう。

▼デバッグ画面



 スイッチ[0011:回復システム]をONにしたら、ダメージを負ったり、SPを消費したりしてから数秒待ち、メニューを開いて、回復しているか確認してください。


並列処理を使う ダッシュシステムを作る

 ダッシュシステムとは、主人公キャラの移動速度を上げて、歩くのを早くする(あるいは走れるようにする)システムのことです。
 マップが広かったり、同じところを何度も行き来したりする場合は、あると便利です。

◆ダッシュシステムを作る
 今回は、Aボタンを押している間だけスピードアップするようにします。(Aボタンは、キーボードの場合は、Shiftキー)
 ダッシュシステムというコモンイベントを設定します。
 「トリガー」は、並列処理、「条件スイッチ」は、スイッチ[0012:ダッシュシステム]に設定しました。

▼ダッシュシステムイベントの内容


 まず「条件分岐で」Aボタンが押されているかどうかを判断しています。
 これで、Aボタンが押されている場合と押されていない場合とに分岐します。
 Aボタンが押されている場合、「移動ルートの設定」で、プレイヤーの移動速度を5にしています。
 Aボタンが押されていない場合、移動速度を4にしています。 
 
 ウェイト1フレームというのは、パソコンの処理の負担を軽減するためのものです。
 並列処理は、ずっと繰り返し実行されますので、パソコンの処理に負荷がかかり、ゲームの動作が遅くなったりする原因になります。
 そのため、可能な限り長い時間のウェイトを入れて待ち時間を作り、負担を軽減することをおすすめします。
 
 さて、これで一応、Aボタンが押されている間だけ、スピードアップするシステムが出来ました。


◆動作確認
 動作確認をしましょう。
 まだ不完全なシステムですので、デバッグ画面で一時的にスイッチをONにしましょう。
 プレイ中に、キーボードのF9を押すと、デバッグ画面が出ます。
 ここで、スイッチや変数の値を変更できますので、スイッチ[0012:ダッシュシステム]をONにして確認しましょう。


◆ダッシュシステムを改良する
 先ほど作ったダッシュシステムは、あまり良くありません。
 なぜなら、並列処理は繰り返し実行されますから、ダッシュイベントが動いている間、「移動ルートの設定」が延々と繰り返し実行されてしまうからです。
 「移動ルートの設定」は、同じ対象に対してはひとつしか設定できません。ですから、他のイベントでプレイヤーに対して「移動ルートの設定」をしても、すぐにダッシュイベントの「移動ルートの設定」が上書き設定されてしまうため、前の「移動ルートの設定」は取り消されてしまいます。
 このようなことを防ぐために、下図のようにする方法があります。

▼ダッシュシステムイベントの内容


 スイッチ[0013:ダッシュ中]を設定し、現在ダッシュ中であるかそうでないかを判定しています。
 これによって、「移動ルートの設定」は、Aボタンが押された直後と離された直後に1回づつしか行われなくなります。
 押しっぱなしの時と離しっぱなしの時は、「移動ルートの設定」が行われないわけです。

 しかし、この方法も万全ではありません。他のイベントで「移動ルートの設定」で主人公が動作している途中に、Aボタンを押してしまうと、結局同じ問題がおきます。

 この問題を解決するには、都合が悪い時に一時的にダッシュ機能をOFFにするという方法などがありますが、実はもっと簡単に問題を解決する方法があります。
 それは、スクリプトを使う方法です。スクリプトに関しては、もう少し後でやりますので、とりあえずは、上記の方法でダッシュをすることにします。
 しかし、ダッシュは、どうしても必要な機能ではないので、必要なければOFFにしておきましょう。
 ONにするときは、イベントで主人公キャラを動かしている時にAボタンを押さないよう注意しましょう。


シナリオを進める

 ここまで、ゲームシステムを作ってきました。
 シナリオの方がちっとも進んでいませんので、少し進めてみたいと思います。

◆ヒルダを仲間にする
 フレイザ村には、お宝の噂を聞きつけてやって来た冒険者たちが居ます。
 その中に、最後の仲間ヒルダも居ます。ヒルダの仲間マイケルも設定したいと思います。

 進行表を書いてみます。現在、進行度20まで進んでいます。

○進行度:20 [001:森]
 ヒルダとマイケルの会話イベント。→進行度:30

○進行度:30 [002:洞窟 B1]
 ドロシー警告イベント。ドロシーが嫌な感じがすると注意を促す。→進行度:40

○進行度:40 [008:洞窟 B2]
 ヒルダイベント。ヒルダが仲間になる。→進行度:50


◆ヒルダとマイケルの会話イベントを作る
 森のマップに、ヒルダとマイケルの会話イベントを作ります。下図のように設定します。

▼ヒルダとマイケルの会話イベントの内容


 これは、普通の会話イベントです。


◆ドロシー警告イベントを作る
 まず、新たに洞窟の地下2階のマップを作ります。
 洞窟の地下2階に階段を設置して、2階へ行ける様にします。
 階段の手前に、ドロシー警告イベントを作ります。下図のように設定します。

▼ドロシー警告イベントの内容


 透明なイベントで、主人公がイベントの上に乗ると始まります。


◆ヒルダイベントを作る
 階段を下りてすぐのところに、イベントを作ります。下図のように配置します。

▼ヒルダイベントの配置


 ヒルダイベントの内容は、下図のようになります。

▼ヒルダイベントの内容


 詳しいイベント内容は、ツクールで開いてみてください。

 今回始めて出てきたイベントのみ説明します。

 「バトルの処理」は、イベントでバトルを発生させるためのものです。今回は、ヘルハウンドとの戦闘を発生させていたす。

 「ラベル」と「ラベルジャンプ」は、処理をラベルまで飛ばすためのものです。
 今回は、選択肢の前に、「質問」という名前をつけてラベルを設置しました。そして、選択肢で「あまりよくない」を選ぶと、ラベルジャンプで、ラベル:[質問]までジャンプするようにしています。
 こうすることで、「あまりよくない」を選んでいる限り、永遠にループして終わりません。結局「いいよ」を選ぶしかないわけです。

 「レベルの増減」は、アクターのレベルを操作するコマンドです。 
 今回は、ヒルダのレベルを、アルシェスに合わせて上げるようにしています。
 なぜこうしているかというと、グロリアやドロシーと違い、ヒルダはある程度戦闘をこなした後に仲間になるため、他のキャラとレベルのズレが出てしまう可能性があるからです。
 そこで、アルシェスのレベルを基準に、ヒルダのレベルを決めています。
 

◆動作確認
 動作確認をして、ヒルダを仲間にしましょう。


Lv3のまとめ

 これで、「RPGの作り方 Lv3」は、終わりです。
 RPGとしてのシステムが、かなり出来上がってきました。
 次回は、いよいよスクリプトも使って、もう少し高度な処理に挑戦したいと思います。

 ここまで作った分を、下記からダウンロードできます。

 サンプルゲーム「test3.exe」298KB



Last Updated : 2004-10-19

Copyright © 2004 noziko irie. All rights reserved.
http://gcg.sakura.ne.jp/tt/tt_top.htm