▼ require

拡張ライブラリを読み込むRubyの組み込み関数に"require"というものがあります。
しかしこの関数はツクールの方でundefされている為か、利用することができません。
もしどうしても利用したい場合は、次のようにKernelから呼び出すことができます。
Kernel.require

▼ オートタイルの配置パターン

オートタイルにはおそらく次の47通りのパターンがあり、
SHIFTキーによる配置やコピーを駆使することで様々な表現が可能です。

▼ サウンドテストでフェードアウト

サウンドテストで再生中にSHIFTキーを押しながら停止ボタンを押すと、
フェードアウトしながら停止します。

▼ スクリプトエディタのフォントサイズ

エディタの編集部分にフォーカスを合わせてから、
Ctrlキー+マウスのホイールでエディタのフォントサイズを変えることができます。

▼ Mainセクションの下にあるスクリプトを読み込む

RGSS2には$RGSS_SCRIPTSというグローバル変数が用意されています。
これは導入している全スクリプトをセクション単位で格納した配列で、
推測としては、これを使って起動時のスクリプト読み込みとか、
エラーが発生した際のスクリプト名や行数のフィードバックをしてるんじゃないかと思います。

この配列には、Mainセクションよりも下に貼り付けてあるスクリプト情報も格納されているので、
次のようなスクリプトを実行することで、本来読み込まれていないスクリプトを読み込むことができます。
# セクションインデックスの決定
index = $RGSS_SCRIPTS.size - 3
# 取得してくる情報の決定
# 0 => セクションに当てられたID?
# 1 => セクション名の取得
# 2 => セクション内容の取得
type = 2
data = $RGSS_SCRIPTS[index][type]
eval(Zlib::Inflate.inflate(data))
ちなみにこれを実行すると、下から3番目のセクションのスクリプトを読み込んでくれます。

▼ Rubyのファイル検査は暗号化アーカイブに対して無効

RubyはDirクラスやFileTestモジュールを用いることで、
指定のファイルが存在しているか等の検査を行うことができます。
これによりファイルが存在しない場合のみ実行する処理などを実現することができます。

しかし、例えば暗号化されたゲームのGraphicsフォルダに対して、
FileTestモジュールのexist?関数を使用しても、正常な結果が得られないので注意が必要です。
どうしても「ファイルが存在しない場合」を検知したい場合は、
とりあえずファイル読み込みを試みて、失敗した場合の例外処理を実装しましょう。

▼ ゲーム配布時の実行ファイル名


これはご存じ、VXでプロジェクトを圧縮した際のフォルダ内容です。
Gameという拡張子の異なる3つの同じ名前のファイルがあることがわかります。
これは試してみた結果、次のようにGamaの部分は名前を変えることができるようです。

もしファイル名を変更する場合はゲーム圧縮後に行ってください。
またゲーム内でWin32API使っている場合は、
ウィンドウハンドルの取得にGameという名前を使用している可能性があるので注意が必要です。

▼ RTPを使わないゲームを開発する

VXでRTPを使わないゲームを作る場合、iniファイルを書き換える必要があります。
開発プロジェクトのフォルダにあるGame.iniというファイルを、適当なテキストエディタで開き、
以下のように"RPGVX"という文字列を削除してください。
[Game]
RTP=
Library=RGSS20xJ.dll
Scripts=Data\Scripts.rvdata
Title=xxxxxxx
この操作はVXのエディタが閉じられている状態で行ってください。
またRTPを使わないにあたって、マップチップやタイトルグラフィック等を準備するのはもちろんですが、
フォントやライブラリ(RGSS20xJ.dll)の用意し忘れに気をつけましょう。

▼ RGSS2Playerは動作を停止しました

VXで発生するエラーの大部分は、どのスクリプトの何行目でどんなエラーが発生したのかを示した上で落ちてくれます。
しかし稀に「RGSS2Playerは動作を停止しました」と表示されてゲームが落ちてしまう場合があり、
これは何が原因なのか把握しずらく、非常に厄介な不具合の1つとなっています。
原因の一つに、公式としてエンターブレインが提示しているハードウェアDEPがありますが、
これ以外にも動作停止の原因はいくつかあるようです。

その1つにスプライトの解放し忘れが挙げられます。
これはどこかで未解放のスプライトがあると、その先のゲーム進行中にゲームが落ちてしまうというものです。
特徴に「確実に落ちる訳ではない」「シーンが切り替わる際に落ちる」という2点があります。
ここで気をつけなくてはならないのがスプライト解放し忘れが発生したシーンとはまったく別のシーンで落ちるという点です。
例えばスプライトの解放し忘れが戦闘シーンであっても、マップからメニューを開く際に落ちる場合が有り得るということです。
もしRGSS2Playerが動作停止するようになってしまい、尚且つ原因がわからない場合には、
直前に実装したシステムでスプライトの解放し忘れがないかを確認してみると良いかもしれません。

▼ F12リセットエラーについて

ゲームの実行中にF12リセットを行うと「SystemStackError」というエラーが発生する場合があります。
これはメソッドの呼び出しの無限ループにより発生するエラーになります。

まずF12リセットで何が行われているかについてですが、一言で言えばスクリプトの再読み込みです。
スクリプトエディタ上にある全てのセクションをF12が押されるたびに読み込んでいます。
しかし再読み込みされるのはエディタ上のスクリプトのみで、
組み込みクラスや組み込みモジュールは再度読み込まれることはありません。
この差異がF12リセットエラーの根本的な原因です。

この問題を抱えた状態で、組み込みクラスやモジュールのメソッドに対してエイリアスを行うと、
再読み込みの際に多重のエイリアスを行うことになり、結果としてメソッド呼び出しの無限ループの原因となります。

▼ F12リセットエラー対策①

リセット時の多重エイリアスを防ぐ方法です。
組み込みのメソッドをエイリアスしている部分に、初回読み込み時のみにエイリアス実行という処理を追加します。
alias foo ber unless $!
この"unless $!"という部分がF12リセットがまだ発生していない場合を意味します。

▼ F12リセットエラー対策②

F12リセットでスクリプトの再読み込みが発生する前に、自ら落ちる(笑)ことでエラー回避する力技です。
次の1行をスクリプトエディタの一番上のセクションに記述することで、
F12リセットの挙動をシャットダウンに変更できます。
exit if $!

▼ F12リセットエラー対策③

おススメの対策方法。
F12が押された際に発生する例外を補足して、再読み込みさせずにタイトル画面へ戻ります。
Mainセクションにあるbegin~の処理を次のように書き換えてください。
class Reset < Exception; end

begin
  Graphics.freeze
  $scene = Scene_Title.new
  $scene.main while $scene != nil
  Graphics.transition(30)
rescue Reset # ←これ追加
  RPG::BGM.stop
  RPG::BGS.stop
  $scene = nil
  GC.start
  retry
rescue Errno::ENOENT
  filename = $!.message.sub("No such file or directory - ", "")
  print("ファイル #{filename} が見つかりません。")
end
注意しなくてはならない点があるとすれば、
Bitmapをトップレベルで読み込んでいたり、クラスの定数として読み込んでいる場合でしょうか。
F12リセットと同時に全てのBitmapは強制的に解放されてしまいます。
この方法を使うとスクリプトの再読み込みが行われないので、Bitmapは解放されたままになってしまいます。
Bitmapに限った話ではありませんが、トップレベルに処理を書いている場合は注意してください。
ちなみに解放されるだけであって、nilにはならない点にも注意。