>  RPG開発関連

RPGツクール4・小技集

本当はかなりの荒技です。

御品書き

1.複数のサブシナリオをメインシナリオから独立させて、
メインシナリオからいつでもアクセスさせて使い回す方法

 ここでは、3個あるメインシナリオデータがA→B→Cの順に進むとして、サブシナリオデータSを作ったとします。
Sには「カジノ」・「洞窟」・「城」の3個のイベントがあるとしましょう。以下、この設定で話を進めさせて頂きます。
 制御上、ここでは変数1個とスイッチ3個を用意することにします。
それぞれの番号は「変数101番」、「スイッチ201番」「スイッチ202番」「スイッチ203番」を使わせて頂きます。

 お題は、「ABC各シナリオにある「カジノの玄関」・「洞窟入口」・「城の正門」からサブシナリオSに作ったカジノ・洞窟・城に入り、
再び元のメインシナリオの元の場所に帰還する」です。

手順1

 まずシステムデータのマップを開き、ダンジョンマップでパーツの全くない「真っ黒けっけのマップ」を作成します(64バイト)。
 又は、デフォルトの黒い部分を利用しても結構です。38「時計台」の「3」「4」あたりがおすすめ、これなら32バイトで済みます。

 BGMは無し、マップ名は何でもいいですが、ここでは 「スタート地点」としましょう。システムに関しての準備はこれだけでOKです。

手順2

 次にABCSすべてのシナリオデータのパーティー初期位置を 「スタート地点」内に置きます。

 シナリオデータについては、ロードされた時点でのパーティー初期位置はたった1箇所しか設定できないですよね。
 位置は真っ黒な場所ならどこでもOKですが、 画面を12コマほどスクロールしても画面真っ黒が維持できる場所にして下さい。

手順3

 手順1で作ったマップ上に、「初期イベント」の「画面エフェクト」でパーティーが表に出ないように あらかじめ画面をずらしておきます。
 上に10(又は右に12)もずらせば十分でしょう。
注意:画面「1マス分」ずらすには「2」を入力する必要があります。よって「10ずらす」というのは実際「5マス分」のずれです。 間違えないで下さい。

途中経過

 この設定でシナリオをロードすると「スタート地点」に行くはずですね。パーツが無いのでもちろん歩けません。それでいいんです。でも歩かす必要は無いんですが、
パーティーが表示されては困るのです。ごく短い間、真っ黒のままにさせる必要があります。
 そこで「初期イベント」の「画面エフェクト」で位置をずらしておけばこの時点で何も表示されません。 もちろん、「パーティーを消す」でもいいんですが、
それだと「元に戻す」が必要になるのでずらした方がメモリーを節約できます。

 これで下準備は完了です。いよいよ制御コマンドを作成します。

手順4

 真っ黒マップ「スタート地点」の適当な場所にイベントを1個置きます。

まず1ページ目から…。

Ⅰ メインシナリオABCは……。
 1ページ目は「すぐ実行」にして、メイン用の初期コマンドを書きましょう (パーティー編成やメイン上必要なスイッチ操作等です)。

 ここで重要なのは「変数101」に数値を代入することです。 Aのスタート時には「1」、Bには「2」、Cには「3」を必ず代入して下さい!!

 そして、このページの最後の命令は必ず「場所移動」です。これで短時間の真っ黒マップからサヨナラ。この間、コントローラーを操作することなく、
マップ移動できれば成功です。テストプレイでは画面下に文字が出ますからプログラムが進行しているのが確認できます。

Ⅱ 一方、サブシナリオSの1ページ目は……。
 1ページ目は単体テストプレイ用に使うことをおすすめします。例えば、 「すぐ実行」にして、ページ内に選択他分岐を置いて「カジノ」「洞窟」「城」と書き、
それぞれに場所移動。本番では全く実行されませんが、テストプレイではこのページが実行されるので、それぞれのテストが簡単です。
メモリー不足でどうしてもというなら無しでもいいですが、その時は1ページ目はなるだけコマンドを書かないで下さい。

手順5

 「スタート地点」のイベント2ページ目以降について

Ⅰ メインシナリオABCは……。
 あらかじめ用意しておいたスイッチ3個「スイッチ201」「202」「203」をここで 使います。

 2ページ目の条件は「すぐ実行・スイッチ201がONの時」

       ページ内は「スイッチ201をOFF」
          「場所移動」でカジノの玄関にジャンプ。

 3ページ目の条件は「すぐ実行・スイッチ202がONの時」

       ページ内は「スイッチ202をOFF」
          「場所移動」で洞窟入口にジャンプ。

 4ページ目の条件は「すぐ実行・スイッチ203がONの時」

       ページ内は「スイッチ203をOFF」
          「場所移動」で城の正門にジャンプ。

 条件を間違えないで下さいね。それから、場所移動前にスイッチをOFFにすることを忘れずに。これは後で説明します。


Ⅱ サブシナリオSは……。

 2ページ目の条件は「すぐ実行・スイッチ201がONの時」

   ページ内は「場所移動」でカジノの内部にジャンプ。

 3ページ目の条件は「すぐ実行・スイッチ202がONの時」

   ページ内は「場所移動」で洞窟内部にジャンプ。

 4ページ目の条件は「すぐ実行・スイッチ203がONの時」

   ページ内は「場所移動」で城の内部にジャンプ。

 条件はメインと同じですが、サブ側のコマンドは場所移動だけです。そして、メインが入口に移動するのに対して、サブではダンジョン内部に移動します。

これで真っ黒マップ「スタート地点」のシナリオ設定は完了です!!

手順6

  次にシナリオ引継ぎ部分の設定です。

Ⅰ メインシナリオABCは……。

 ABC各シナリオに「カジノの玄関」・「洞窟入口」・「城の正門」があるはずですね。(無かったらこれをやる意味がありません……。)
 改めて説明すると、Aの「カジノの玄関」からSのカジノに入り、Sのカジノを出た時にAの「カジノ玄関」に帰還すればいいわけです。
Bの洞窟入口からSの洞窟に入り、Bの洞窟入口に帰還するわけです。
Cのカジノ玄関からSのカジノに入り、Cのカジノ玄関に……。
 ちょっとくどかったですか? でも、こんなことが本当にできるんですからメモリー の節約効果は絶大です。さて、もうひとがんばり……。

 以下、ABC共通です。


 「カジノの玄関」

 ページ内コマンドは「スイッチ201をON」
        「シナリオ変更 S」

 「洞窟入口」

 ページ内コマンドは「スイッチ202をON」
        「シナリオ変更 S」

 「城の正門」

 ページ内コマンドは「スイッチ203をON」
        「シナリオ変更 S」

 条件は普通に「主人公と接触」でいいです。
 ここで付けたしておきたいのは、移動時にはプレイヤーにSの準備をさせる必要があることです。
よって、これらのコマンド実行は2択分岐内に置き、例えば「カジノに入りますか? サブシナリオSが必要です」とでもしておくことをおすすめします。
スイッチ操作は絶対忘れないで下さい!!


Ⅱ サブシナリオSは……。

 イベント設定自体はカジノ内部、洞窟内部、城内部、そして「スタート地点」だけ ですね。スタート地点は設定済みです。
 以下、カジノ内部、洞窟内部、城内部共通です。もちろん、出口に設定して下さい。


 ページ内コマンドは「変数多分岐・変数101が…」

         数値1の時 「シナリオ変更 A」
         数値2の時 「シナリオ変更 B」
         数値3の時 「シナリオ変更 C」
         (分岐終了)

 こちらも条件は普通に「主人公と接触」でいいです。
 やはり付けたしておきたいのは、移動時にはプレイヤーにメインの準備をさせる必要があることです。よって、これらのコマンド実行は2択分岐内に置き、
例えば「カジノを出ますか? 元のシナリオに帰還します」とでもしておくことをおすすめします。

 スイッチ操作は必要ありません。変数も絶対いじらないで下さい!!

 これですべて完了です!! テストプレイではテストできませんので、 本番でテストして下さい(……って、日本語か? これ)。


 最後に流れを簡単に説明しておきましょう。

 メインシナリオ内では常に変数(101)を不動にします。これはサブからの帰還先を指定させるからです。よって変数(101)の数値の変化はメインの変更時のみです。
他では絶対操作しないで下さい。

 そして、この例ではサブ内にダンジョンが3個あるので、スイッチが3個必要となり、「スタート地点」での制御がそれだけのページ数となります。
サブダンジョンが1個の時はスイッチは特に必要ありません。

 尚、スイッチの代わりに変数でもできます(実はこっちの方がメモリー消費は少ない!!)。

 やり方は「変数102番」を使用するとして、カジノでは「変数102に数値1を代入」・洞窟では「数値2」・城では「数値3」を使えば同様の制御ができます。
メイン帰還時には必ず「数値0」を代入し、「スタート地点」の2ページ目の条件を「すぐ実行・変数102≠0」にして、
コマンド内で「変数多分岐・102」を実行させれば「スタート地点」は2ページで済みます。
 こっちの方がいいじゃんか!!
 まあ、今回はわりと分かりやすい方法で説明しました。これを使えば、
「メインシナリオ内のダンジョンに先へ進んだメインシナリオから再度入れる」
といった制御も可能です。いろいろ応用が利くでしょうから試してみて下さい。



2.無限ループの有効利用

 無限ループは脱出条件を誤るとゲームがストップしてしまうので厄介な感じもしますが、一般的にC言語の繰り返し処理のアルゴリズム等、非常に役に立ちます。
でも4でこれをやろうとすると、他イベント実行で直接同じページには移動できません。
 「直接」移動が無理なら「間接」ではどうなのか? はい、あっさりできてしまいます。


例1. ゲームオーバーを自作する。

 イベントNo.0があった時…

1ページ目 すぐ実行 メッセージ(自動送り、20秒)「ゲームオーバー……。」
           「他イベント実行 0-2」

2ページ目 「他イベント実行 0-3」

3ページ目 ウェイト 10秒
    「他イベント実行 0-2」

 はい、2ページと3ページを永久に繰り返します。ハードリセットか電源OFFでしか抜けられません。3ページ目のウェイトは不測の事態に備えてのクッション的なものです。
ただでさえ不安定なものですから…。これの欠点は「ソフト立ち上げに時間がかかる」ということでしょうか…。
あまり難しいイベントで多用するとプレイヤーには酷かもしれませんね。ゲームクリア時には有効かも。


例2.全く同じ選択分岐を繰り返し出す。

 イベントNo.1があった時… (作業用変数151番と、所持メダル数を格納した変数40番を使用するとします。)


(ここでイベント開始)
1ページ目 メッセージ「いらっしゃいませ」
        「他イベント実行 1-2」

2ページ目 #「選択多分岐」
        #「コーラ飴      1枚」
               アイテム増 コーラ飴
               変数40 減 1 
        #「厚焼きせんべい 2枚」
               アイテム増 厚焼きせんべい
               変数40 減 2 
        #「プチチョコ     3枚」
               アイテム増 プチチョコ
               変数40 減 3 
        #「缶ジュース    6枚」
               アイテム増 缶ジュース
               変数40 減 6 
        #「次へ」
            「他イベント実行 1-3」
        #(分岐終了)

        「変数151」(←代入)「数値1」
        「他イベント実行 1-4」

3ページ目 #「選択多分岐」
        #「ケータイフード   10枚」
               アイテム増 ケータイフード
               変数40 減 10 
        #「パッチリドリンク  20枚」
               アイテム増 パッチリドリンク
               変数40 減 20 
        #「タフガイドリンク  30枚」
               アイテム増 タフガイドリンク
               変数40 減 30 
        #「前へ」
            「他イベント実行 1-2」
        #「おしまい」
         メッセージ「ありがとうございました。」
            「変数151」(←代入)「数値0」
            「他イベント実行 1-5」
        #(分岐終了)

        「変数151」(←代入)「数値2」
        「他イベント実行 1-4」

4ページ目 効果音「チーン」(レジの音)
       #2択分岐「変数151」
        #「数値1」
           「他イベント実行 1-2」
        #「NG」
           「他イベント実行 1-3」
        #(分岐終了)

5ページ目 (何も無し)

 当局制作「HEBOSLOT13」を元に作ってみました。多分岐による景品カウンターの設定です。1ページ目はイベント開始、2・3ページ目では品物を選ぶたびに
景品交換の処理を行った後、4ページ目経由で同じ画面に復帰しています。 「景品交換の部分でメダルが足りなかったらどうするの?」という質問は
ここでは割愛させて頂きます。

 ポイントは 「他イベント実行」を行うと、そのページの以後のコマンドは無視されて他のページに飛んでしまうことです。
(ちなみにRPGツクール2000では無視されません。) これによりメモリーが節約できますね。最後に「おしまい」を選ぶことで無限ループ脱出!
作業用変数(ここでは151番)は必ず0に戻しましょう。これによって他のイベントで使いまわせるわけです。
 ここでは5ページ目を設定しましたが、同一マップ内に全く命令の無いページがあればそこに飛ばして終わらせたほうが節約できます。
「岩」とか「木」とか、ただ置いてあるだけの物なら何でもいいですね。
 又、3ページ以上の選択肢を設ける場合は折り返し部分(ここでは4ページ目)を「選択多分岐」にすればOK。いくらでも増やせます。




3.開始条件が「開始しない」とは

 何のこっちゃ? 「開始しない」でページ内にイベント書いて、何の役に立つんじゃ!? そんな風に思った人、これもメモリー節約にちゃんと貢献します。
デフォルトではページ開始条件は「主人公と接触」ですね。複数のページに及ぶイベントの途中の「つなぎのページ」であれば、
「他イベント実行」で呼び出して「他イベント実行」で脱出しますから、極端な話、そのページの開始条件は何でもいいわけです。
 例えばこのすぐ上のお店イベント、実行条件を全く設定しなければ、開始条件は1ページ目だけ「調べられた」にしておくだけでちゃんと機能します。
2ページ目以降の開始条件は、デフォルトの「主人公と接触」のままでもいいわけです。
 ところが、何かの間違いでに3ページ目に(満たしてしまう)実行条件が入ってしまったらどうなります? はい、このイベントに触れた瞬間、3ページ目が実行されますね。
こういう不測の事態を考慮すれば、「つなぎのページ」(ここでは2~5ページ目)の開始条件を「開始しない」にしておけば、より安定するわけです。

 通常「開始しない」はこのような場面でしか使いようが無いですが、、これならメモリー消費量は変わりません。それじゃあどんな場合に節約できるんだ? となるでしょう。
 はい、上のイベントのあるマップ内に、グラフィックだけで中身がすっからかん(当然1ページしかない)のイベント、
「剣(イベントNo.2)」「鎧(イベントNo.3)」「樽(イベントNo.4)」「岩(イベントNo.5)」が置いてあるとしましょう。
 これらは「ダンジョンチップにするとシステムのメモリーを食うからってんでシナリオ側に回した」と考えて下さい。でも、中身がすっからかんじゃあもったいないですね。
そこで開始条件をすべて「開始しない」にします。
 そして、1-2を2-1に、1-3を3-1に、1-4を4-1に、1-5を5-1に移植し、「他イベント実行」内もすべて変えた上で No.1の2ページ目から先を
ばっさりと削除すると…。

 はい、見事にちゃんと動きます。しかも4ページも減ったからかなりの節約になりました。

 欠点はズバリ「後で調べるのが分かりにくい」の一言です。でも限られたメモリー、ここまでやらなきゃ足りない場面がいくらでも出てきます。
削れる部分はとことん削りましょう。




4.テスト用プログラムのすすめ

 これ自体は4に限らずとも、すべてのRPGツクール、いや、すべてのソフト開発において当てはまります。そもそも市販のコンピューターソフトはプログラムの規模が
大き過ぎて1人で作ったら何年もかかるだろうし、第一そんな開発のやり方はまずありません。1つのプロジェクトに対して複数名でチームを組み、
各モジュール・各オブジェクト毎に担当を決めてまずは各自で作成し、後でそれぞれ完成させたものを持ち寄って1つのプログラムに合体して総合的なテストを行います。
これが一般的なソフト開発の流れです。
 では、この場合どこでデバッグを行うのでしょう? 最後の総合テストの部分だけですか? 違います。合体する前に、まずは各自で作成したものを各自が責任を持ってテストする必要があるのです。
 だけど、それはまだ全体的なプログラムの「部品」でしかありませんから、そのままではテストのしようがありませんね。そこで 「テスト用のプログラム」を
作成するわけです。これは最低限動作させるための簡単なものでいいのです。

 ツクールではこれを応用させることで、重大なバグを未然に防ぎながら制作できます。まずは1つのイベントが完成するたびにをテストを行います。これだけなら
テスト用プログラムは不要かもしれませんが、段々と複数のイベントが合わさると、 シナリオデータ1つの容量がいっぱいになります。4では容量の関係でどうしてもこの場面に遭遇します。
 こんな時、普通に「テストプレイ」を実行させたらどうなるでしょう? はい、仕様の都合でパーティーや所持品はシステムデータで登録した初期のものが
実行されてしまいます。これでは都合が悪過ぎますし、プログラムをちょっと書き換えただけであっという間にセーブデータがフリーズしますから、
4の「テストプレイ」はセーブせずにシナリオの最初からやることをお勧めします。

 そこで「テストプログラム」の登場です。各シナリオスタート時にその時点で考えられる「パーティー編成」や「スイッチ・変数操作」「所持品」、
更には「各キャラのレベル・職業」等も設定してしまいます。これで各シナリオデータ別にテストが行えるわけです。
 もちろん、用途はこれだけではありません。「HEBOSLOT13」を例に挙げれば、「メダル数の増減」「時間の経過」「HP・TPの増減」「技術・必殺技の会得」
「BONUSを意図的に確定させる」といったものが、実は製品版プログラムの中にすでに組みこまれています。(一部消したものもありますが…)
 ではどうやって実行させるんでしょうか? 簡単な方法は「テスト用スイッチ」を作ることです。500番をこれに充てるのが最適と思います。
テストプレイではスイッチの切り替えが可能ですので、テストをしたい場面でメニューでスイッチを切り替え、テストプログラムを発動させればいいわけです。
ついでにテストプログラム有効時には、目印になる専用のグラフィックにするとわかりやすいでしょう(当局では「熊のぬいぐるみ」にしています)。

 テストプログラムは本番では全く実行されませんから、テスト終了後に削除しても何ら問題ありません。しかしながら、容量の都合でどうしてもという場合以外は、
なるだけ残しておくことをお勧めします。理由は後でバグ発見時やイベントの作り替えが必要になった場合にいつでも対応できるからです。
完璧に作ったつもりでも「ファイナルアンサー」はなかなか言えませんね。



5.「宝箱イベント」「分身イベント」が使えない。さて、どうする?

 4(旧ROM)における凶悪なバグ「人消え」によって、もはや「分身イベント」は例外なく封印せざるを得ません。更に、あろうことか4の修正ROMには、
旧ROMに無かった絶望的なバグ「続きロードバグ」が存在するのです。(バグの詳細についてはバグ・ライブラリーを参照して下さい。)すべての4ユーザーに
ノーバグで提供するために、どうしてもこの難関を克服しなければなりません。そうなると、「宝箱イベント」を宝箱として使用できなくなってしまいます。
 理由は「実行後の宝箱イベントはシナリオ変更時に実行前に復活する」という仕様があるからです。書き忘れましたが、このコーナーの1番、サブシナリオの分割・使い回しで
サブ内に宝箱を設定する場合も同じなので注意して下さい。遅くなって申し訳ありません。いずれにせよ、「続きロードバグ」によってユーザーに二度手間をかけさせたく
なければ、宝箱はすべて通常イベント2ページで作る必要があるのです。(何と、セーブデータをロード後にメニューで再ロードした場合は、
実行済みの宝箱イベントは復活しません。どういう構造なんだか、ある意味芸術的です……。)
 そうなると、この二大バグを回避するために貴重なメモリーを余計に消費しなければなりません。涙モノです。でも、こうしなければ すべての4ユーザーが楽しめません。

 これが運命ならば、少しでもメモリー消費を押さえることに全力を尽くすしかありません。さて、どうする? 例えば「分身イベント」であれば、
見た目も中身も本体と同じです。ならば、本体に複数の命令が書かれているのであれば、分身の中身は「他イベント実行」で本体に飛ばすってのはどうでしょう?
1~2行の短い命令でもメモリー消費を確実に押さえられえるはずです。
 次に「宝箱」。どう頑張っても1個当たり2ページ必要です。こればっかりは避けられません。でも、メモリー消費を抑える工夫はできます。 例えばこんな感じです。


イベントNo.0
 1ページ目(開ける前)  スイッチ300 ON
                 他イベント実行 2-1
 2ページ目(開けた後)  固定テロップ:何も入ってない…。
(実行条件:スイッチ300がON)

イベントNo.1
 1ページ目(開ける前)  スイッチ301 ON
                 他イベント実行 2-1
 2ページ目(開けた後)  他イベント実行 0-2
 (実行条件:スイッチ301がON)

イベントNo.2 1ージ目のみ
(開始条件:開始しない)  SE「アイテム」
          アイテム増「薬草」
          固定テロップ:「薬草」を入手した!!

 このマップには薬草が入った宝箱が2個あるとします。ならば、「入手するイベントは共通だからまとめちゃえ」ってんで共通部分を
マップ内の「岩」(ここではNo.2)にでも入れてみました。No.2の開始条件はこのコーナーの3番の応用ですので「開始しない」です。
書いていませんが、No.0とNo.1の開始条件は当然「調べられた」ですね。
 ここでは開けた後に御丁寧に説明を入れてますが、「開けた後のグラフィックを見りゃわかるじゃん!!」てなわけで、2ページ目のイベントは特に必要ないですね。
又、御察しの通りスイッチより変数の方がより節約できます。変数の残り具合と相談してどっちを使うか判断して下さい。

 さて、始めの方には「宝箱イベントは宝箱としては使用できない」と書きました。では、空箱以外には使い道はあるんでしょうか?
 そうですね…「例えば、グラフィックをモンスターにして、主人公と接触したらイベントバトル」なんてのはどうでしょう?倒せばそこでは消えます。
でも、シナリオ変更で復活しますから、サブシナリオのダンジョンなんかでは有効かもしれませんね。これ以外にはありますかね~???

RPGツクール4関連

RPGツクール4の概要
RPGツクール4・バグ・ライブラリー
RPGツクール4・小技集
HEBOSLOT13について~PC⇔PSメモリーカードのデータ転送方法