RGSS
RGSS (Ruby Game Scripting System) は、オブジェクト指向言語 Ruby を拡張して開発されたスクリプト言語である。
2010年3月現在、下記のソフトに右記のバージョンが搭載されている。以下では、これらのソフトをまとめて「RPGツクール」と記す。
RPGツクールXP - RGSS(以下では区別のため RGSS1 と記す)
RPGツクールVX - RGSS2
RPGツクールVX Ace - RGSS3
PC向けRPGツクールの最新作であるRPGツクールMVでは、JavaScriptベースのゲームエンジンが採用された。そのため、2017年10月時点で存在するRGSSは上記の3つのみである。
文法は基本的に Ruby に準拠している。そのため、Ruby を扱ったことのある開発者はすぐにスクリプトの制作が可能である。
ゲームを作るうえで必要となるクラスやモジュールなどが新たに定義されている。添付ライブラリは一部を除いて添付されておらず、別途入手する必要がある。
実行ファイルは Game.exe で、これには Ruby の実装と組み込みクラス・モジュールの定義などが含まれる。
作成したスクリプトは標準ではプロジェクトフォルダ内の Data\Scripts.rxdata(RPGツクールVXは拡張子 rvdata、RPGツクールVX Aceは拡張子 rvdata2) から読み込まれて実行される。
RPGツクールXPおよびRPGツクールVXで使われているRubyのバージョンは 1.8.1 である。RPGツクールVX Aceで使われているRubyのバージョンは 1.9.2p0 である。
RPGツクールXPに搭載された。RGSS の最初のバージョンである。
画面サイズは幅 640 ピクセル、高さは 480 ピクセルで、変更することは出来ない。
内部処理のフレームレートは 40fps で、描画は 20fps で行われる。ただし、「滑らかモード」有効時は描画も 40fps で動作する。
Graphics.update が 10 秒以上実行されていない場合、例外 Hangup が発生し、スクリプトの実行が中断される。
デバッグモードでは変数 $DEBUG が true に設定される。これにより、スレッドを扱う場合などで通常のプレイ時と挙動が異なる場合がある。
Audio -- 音声出力に関するモジュール。
Graphics -- 画面出力に関するモジュール。
Input -- キーボード・ゲームパッドからの入力を扱うモジュール。
RPG -- ゲームのデータを表すクラスを子に持つモジュール。
RPG::Cache -- ビットマップのキャッシュを行うモジュール。
Zlib -- Zlib を操作するためのモジュール。添付ライブラリだが、例外的に組み込まれている。
Bitmap -- ビットマップを表すクラス。
Color -- 色を表すクラス。
Font -- フォントを表すクラス。
Hangup -- Graphics.update が一定時間以上実行されていない時に発生する例外クラス。
Plane -- スプライトの一種で、同じパターンを繰り返して表示する。フォグやパノラマなどに使用される。
Rect -- 矩形を扱うクラス。
Reset -- F12キーが押されたときに発生する例外の一種。通常 rescue などで補足することは出来ない。
RGSSError -- 例外クラス。解放したビットマップにアクセスしたときなどに発生する。
RPG::Sprite -- Sprite を継承する。ゲーム中でよく使われる処理が追加されている。
RPG:Weather -- 天候エフェクトのクラス。
Sprite -- スプライトのクラス。
Table -- 三次元までに対応する数値の多次元配列のクラス。扱える数値の範囲に制限があるが、処理は配列より高速である。
Tilemap -- スプライトの一種で、マップのタイルを表示する。
TilemapAutotiles -- Tilemap の内部で使用されるクラス。通常取り扱う必要はない。
Tone -- 色調のクラス。
Viewport -- ビューポートのクラス。
Win32API -- Win32API へアクセスするためのクラス。添付ライブラリだが、例外的に組み込まれている。
Window -- ウィンドウのクラス。内部的には複数のスプライトで構成される。
RPGツクールVXには RGSS2 という名称で搭載された。RPGツクールXPのものから一部の仕様が変更されているため、インターネットなどで配布されているスクリプトの多くは、RPGツクールXP向けのものと互換性がない。
画面サイズのデフォルト値が幅 544、高さ 416 ピクセルに変更され、実行中の画面サイズの変更が可能になった。ただし、起動時の画面サイズは変更できない。
フレームレートが 40fps から 60fps に変更され、「滑らかモード」が廃止された。
Graphics.update が長時間にわたって呼ばれなくても、例外が発生しなくなった。
フォントをゲームフォルダ内にあるファイルから読み込むことが可能になった。
クラス Tilemap の仕様が大きく変更された。その他のゲームライブラリやデータ構造も一部が変更されている。
デバッグモード時は $TEST が true に設定され、 $DEBUG は変更されない。
Audio -- 音声出力に関するモジュール。
Graphics -- 画面出力に関するモジュール。
Input -- キーボード・ゲームパッドからの入力を扱うモジュール。
NKF -- NKF を Ruby から扱うためのモジュール。添付ライブラリだが、例外的に組み込まれている。
RPG -- ゲームのデータを表すクラスを子に持つモジュール。
Zlib -- Zlib を操作するためのモジュール。添付ライブラリだが、例外的に組み込まれている。
Bitmap -- ビットマップを表すクラス。
Color -- 色を表すクラス。
Font -- フォントを表すクラス。
Plane -- スプライトの一種で、同じパターンを繰り返して表示する。フォグやパノラマなどに使用される。
Rect -- 矩形を扱うクラス。
Reset -- F12キーが押されたときに発生する例外の一種。通常 rescue などで補足することは出来ない。
RGSSError -- 例外クラス。解放したビットマップにアクセスしたときなどに発生する。
Sprite -- スプライトのクラス。
Table -- 三次元までに対応する数値の多次元配列のクラス。扱える数値の範囲に制限があるが、処理は配列より高速である。
Tilemap -- スプライトの一種で、マップのタイルを表示する。
Tone -- 色調のクラス。
Viewport -- ビューポートのクラス。
Win32API -- Win32API へアクセスするためのクラス。添付ライブラリだが、例外的に組み込まれている。
Window -- ウィンドウのクラス。内部的には複数のスプライトで構成される。
RPGツクールVX Aceに RGSS3 という名称で搭載された。RPGツクールXPやRPGツクールVX用のスクリプトとの完全な互換性はない。
ベースとするRubyのバージョンが1.8.1から1.9.2p0に引き上げられた。インタプリタの速度が向上したほか、文字列関連の仕様が大幅に変更されている。
暗号化アーカイブのフォーマットが変更され、起動時間が短縮された。
RPGツクールのゲームプログラムは、基本的にすべて RGSS で書かれている。
RPGツクールのユーザーは、初期状態で与えられたプログラム(プリセットスクリプト)を改造して、イベントコマンドなどでは実現できないシステム等を構築するために RGSS を用いる。
ただし、プリセットスクリプトを全く使用せず、自分好みのゲームシステムのためのスクリプトを一から RGSS で組み上げることも可能である。また、RGSS 自体は RPG 作成に特化したものとはいえ、その他の種類のゲーム(アクションゲームなど)を作ることも可能である。
具体的に例を挙げると、RGSS が搭載される以前のRPGツクールでは、文字の大きさを自由に変更したり、メニュー画面を自由に変更したり、HPが1京である敵を作ったりすることは容易でなかった。イベントコマンドを不可能ではなかったものの、処理が複雑になり汎用性に欠けるものであった。
しかし RGSS を使用すると、ゲームの土台となるデータ(スクリプト)から書き変えるため、あとは特別にイベントを呼び出すなどの必要がなくなり、よりスムーズに製作ができるようになった。
現在、RGSS の自作スクリプトを公開しているサイトは多くあり、そのほとんどは「プリセットスクリプトに貼り付けるだけでOK」という手軽なものである。
初心者にはエラーが起きても原因が分かりにくい。
以前のRPGツクールでも、イベントの組み方に起因するバグには原因が分かりづらいものがあった。しかしさらにRGSSの場合、Rubyにおける文法エラーなどが発生するおそれがある。デフォルトのエラーダイアログでは最低限のエラーメッセージのみ表示されるため、初心者が初見で意味を理解することは難しい。
スクリプトを公開するサイトから、複数の自作スクリプトを採用すると、それらが競合してうまく作動しないことがある。
自作スクリプトを公開するサイトのスクリプト素材では、プリセットスクリプトで定義されたクラスメソッドの一部を再定義するような内容になっている場合がある。そのため、同じクラスやメソッドの関係する自作スクリプトを2つ以上採用すると、それぞれのスクリプトで想定されているものとは異なる性質をもつクラスやメソッドの存在のために、本来期待されていたスクリプトのはたらきが損なわれることがある。
この競合を避けるために、スクリプト作者は既存メソッドをエイリアスしたり独自の名前空間を用意したりすることが多い。既存のメソッドの再定義と、新しいメソッドの定義、どちらの方法も一長一短なので、公開されたスクリプトの導入時には留意せねばならない。