RPGツクール2000/バグ・エラー
■バグ対策(デバッグテクニック)
(更新:2014/02/22)


バグが発生してヘコむ事はありますか?

でもご安心ください。
バグと言う物は…
「頑張って制作していても起きるもの!」
…なのです。

どんなにベテランのツクラーが制作していても、大なり小なりバグは発生します。
ここで重要なのは、バグが発生した事ではなく、いかにバグを早く直すかです。

このページでは、デバッグに関するアドバイスを載せています。



☆テストプレーはこまめに
ある程度イベントを設定しましたら、テストプレーを行いましょう!
「この設定は完璧だ!」
と思っていても一応テストプレーを行いましょう!

テストプレーを頻繁に行いますと、作業効率が悪いように思えますが、
たくさんのイベントを設定した後にテストプレーを行ってバグが発生すると、
どこに原因があるのかを探し出すのに時間がかかってしまう事があります。
特に複雑なイベント処理(自作戦闘システムなど)を設定している場合は、
こまめにテストプレーを行った方が良いでしょう。



☆どこでもセーブ
セーブが指定された場所しかできない場合は、
バグを見つけるごとに「ゲーム中断→バグを直す→セーブポイントから再開」となり、
何度もセーブポイントからの移動が必要になり、多くの制作時間を消費します。

しかしテスト用のセーブポイントを設定したり、セーブ禁止を解除したり、
近道用の場所移動を設定したりしますと、それらの設定や削除に手間がかかり、
またテストプレー後に削除し忘れてしまうようなトラブルが発生する可能性があります。
このような時にはどこでもセーブができるイベントを設定しておくと便利です。

【どこでもセーブの設定方法を見る】



☆ちょっとした設定ミスに注意!
バグの大半は、ちょっとした設定ミスによるものが多いです。

設定ミスの例 補足
変数の操作にて代入加算の設定を間違える。 よくあるバグの原因です。
変数の操作にて通常の変数を設定する所を、
間違えて「変数〜の番号の変数」を設定。
またはその逆。
YADOTなどのイベント設定例を見た時に、
Vの表示を見落とす事が原因である可能性が高いです。

【「変数〜の番号の変数」に関する説明ページを開く】
ピクチャー関連の設定で、
ピクチャーの番号を間違えて設定。
ピクチャー関連の設定をコピー&貼り付けで設定した時に、
ピクチャーの番号を直し忘れる事が原因です。
宝箱イベントなどをコピー&貼り付けして、
貼り付け後にスイッチの番号を変更し忘れる。
1ページ目のスイッチONの設定は変えたけど、
2ページ目のイベント出現条件を変え忘れる事もある。
イベントの一時消去を設定する所に、
イベント処理の中断を設定している。
またはその逆。
この2つのイベントコマンドの使い方がよく分からないと、
このような間違えた設定を行う事がある。

【「イベント処理の中断」と「イベントの一時消去」の違い】

ちょっとした設定ミスは、特にイベントをコピー&貼り付けした時によく見られます。



☆バグの原因元の探し方
定期的に並列処理する自動的に始まるを多用する作品の場合、
どこにバグの原因元があるのかが分からない事があります。
そのような時には以下のような作業を行うと良いでしょう。



●まずはバックアップを取ろう!
複雑なイベント設定を行っている場合は、バグの原因元を探す前に、
イベントのバックアップと取っておくと良いでしょう。
バックアップを取る事によって、バグを探す時にイベントの追加や削除を行っても、
すぐに元に戻せるようになります。

バックアップは作品データをまるごとバックアップしても良いですが、
マップの場合は、マップごとコピー&貼り付けして、デバッグ用のマップを作り、
コモンイベントの方は、別のコモンイベントの番号にコピー&貼り付けする形で、
バックアップを取っても問題ありません。
なお、バックアップ元のコモンイベントイベント開始条件は、
全て「呼び出されたときのみ」にしておいてください。



●出来る限り並列処理を止める!
複数の定期的に並列処理するが動いていますと、どこに原因があるのかが分かりにくくなります。
必要のない定期的に並列処理するは出来る限り動かないようにして、
最低限のイベントのみが動くようにしてください。

ここで重要なのは、止める必要の無いイベントでも止めておく事です。
例えば、アクションRPGの戦闘システムを作っている場合、
バグが主人公の攻撃時に発生するバグだったとしても、
敵キャラやHP表示などの関係無さそうな定期的に並列処理するも止めた方が良いです。

また、アクションRPGの戦闘システムのデバッグの時には、
出来る限り敵キャラのマップイベントを移動させない方が良いでしょう。
同じ条件(同じ敵の位置)で何度も動作テストをする事で、
より早く原因元を見つけられるようになるでしょう。



●文章や効果音を活用!
テストプレーの時に[F9]を押しますと、スイッチや変数の状態を見る事ができます。
しかし定期的に並列処理する自動的に始まるなどで高速にイベントを処理している時には、
スイッチや変数の状態を確認する事ができません。
このような時には、文章や効果音を活用すると良いでしょう。


基本的な設定は、以下のように設定します。
◆文章:A
〜20〜30個のイベントコマンドの設定〜
◆文章:B
〜20〜30個のイベントコマンドの設定〜
◆文章:C

このように所々に文章の表示を設定する事で、文章を表示している間は、
[F9]を押してスイッチや変数の状態を確認する事ができます。


似たような設定方法として、制御文字を使って以下のような設定方法もあります。
◆文章:\>A \V[1] \V[2]\<\.\^
〜20〜30個のイベントコマンドの設定〜
◆文章:\>B \V[1] \V[2]\<\.\^
〜20〜30個のイベントコマンドの設定〜
◆文章:\>C \V[1] \V[2]\<\.\^

この場合は、[F9]を押さずに調べたい変数の値を4分の1秒だけ文章の表示で表示して、
キー入力を待たずに文章ウィンドウを閉じて、次のイベント処理へと進みます。


文章の表示ウェイトに近い効果があり、文章の表示を実行する事でバグが発生しなくなったり、
逆に新たなバグが発生する事もあります。
また、文章を表示している間は、ピクチャーの処理が行われないなどの仕様上の問題もあります。
状況によっては、文章の表示よりも効果音を使った方が良い場合もあります。

効果音の設定方法も文章と同様に、所々に効果音の内容を変えて設定します。
効果音を使う場合は、処理の途中の変数の値を調べる事はできませんが、
イベント処理を止めずに、どのイベントが動いているのかが音で分かります。

エラー画面が表示されるバグが発生している時には、上記のようなイベント設定を行い、
エラー発生直前に表示された文章、また直前に鳴った効果音の後に原因元がある事になります。


今回のバグの調べ方は、細かく文章の表示効果音の演奏を設定するよりも、
段階的に文章の表示の設定範囲を狭めていく方が効果的です。

最初はイベント実行内容初め中間最後文章の表示を設定して、
初め中間の間でエラーが発生しましたら、
さらに初め中間の間にいくつかの文章の表示を設定して、
徐々に文章の表示の設定範囲を狭めれば、
原因元であるイベントコマンドに辿り着けるでしょう。

文章の表示の設定位置を徐々に縮めていく設定例
1回目   2回目   3回目
◆文章:A
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆文章:B(表示されず)
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆文章:C
Aのみが
表示され
てエラー
が発生!
AとBの
間にさら
に文章を
追加する
◆文章:A
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆文章:A2
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆文章:A3(表示されず)
◆何らかの設定
◆何らかの設定
◆文章:B
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
A2までが
表示されて
エラーが発
生!
A2とA3
の間に文章
を追加する
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆文章:A2
◆何らかの設定
◆文章:A2-2
◆何らかの設定←ココが原因
◆文章:A2-3(表示されず)
◆何らかの設定
◆文章:A3
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定
◆何らかの設定

なお、すぐにバグが発生するのではなく、
暫くイベントを処理した後にバグが発生する場合は、
◆条件分岐:スイッチ[0001:デバッグ開始]がON
 ◆文章:A
 ◆
:分岐終了

と言った感じに設定し、「そろそろかな〜」と思った時に[F9]を押してスイッチをONにして、
文章が表示されるようにすると良いでしょう。



●別の変数に値をコピー
変数0001の値を調べたい…しかしリアルタイム処理なので止める事ができず、
また変数0001の値が頻繁に変わるので、[F9]を押しても正確な値が見れない。
このような時には、
◆変数の操作:[0101]代入,変数[0001]の値
と言った感じに、使っていない変数に値をコピーすると良いでしょう。
こうする事で変数0001番の値が頻繁に変わっても、
知りたかった所の変数0001番の値が変数0101番の値を見る事で分かります。



●変数の値を画面上に表示
設定は少々面倒ですが、画面上に変数の値を表示するイベントを設定して、
どのように変数の値が変化していくのかを調べる方法もあります。
▼表示例(画面の右上に表示)

文章の表示が設定しにくく、また高速で処理されていて、
[F9]による変数の値を調べるのが困難である時には、有効な設定方法です。
【数字画像の表示に関するページを開く】



●時には逆転の発想でバグの原因元を探す!
自作戦闘などを制作している時に原因不明なバグが発生した場合、
大量のイベント設定を1つ1つ確認してバグの原因元を見つけ出すのは、
非常に手間がかかります。

このような時にYADOの場合は、
逆に「バグを発生させるにはどうしたら良いのか?」を考えます。

つまり意図的にバグを発生させるとしたら、どのような設定を行えば良いのかを考え、
そのバグを起こす方法と同じ設定が無いかどうかを探し出し、バグの原因元を見つけます。


例えば、主人公が動かないと言ったバグを意図的に発生させる場合は、
以下のような方法が考えられます。
主人公が動かないようにする方法
『1』 チップセットによる移動不可
『2』 マップイベントによる移動不可
『3』 定期的に並列処理する以外でイベントを実行
『4』 キャラクターの動作指定による移動不可
『5』 指定動作の全実行による移動不可


バグを引き起こす設定方法を思いついたら、
その思いついた設定方法と同じ設定方法があるかどうかを調べます。
確認方法
『1』 データベース「チップセット」の設定を確認すれば良いでしょう。
『2』 主人公の周囲にあるマップイベントを調べれば良いでしょう。
マップイベントが「通常キャラの下」なのに移動できない場合は、
設定したグラフィック(上層チップ)が移動不可である可能性があります。
『3』 主人公が移動して、イベントに触れたりしていればそのイベントを。
自動的に始まるが動いている時には、
その自動的に始まるが動き続けているかどうかを確認すれば良いでしょう。
『4』 主人公を対象キャラにしたキャラクターの動作指定があれば、
そのキャラクターの動作指定を調べていけば良いでしょう。
『5』 指定動作の全実行が設定されている所の前後に文章を設定して、
指定動作の全実行のすぐ上に設定した文章が表示されて、
指定動作の全実行のすぐ下に設定した文章が表示されなければ、
その指定動作の全実行が原因元となるでしょう。

このように原因不明のバグが発生した時には、
どうしてバグが発生したのか?」を考えるのではなく、
どうすればこのようなバグを発生させる事ができるのか?」を考えて、
バグの原因元を探し出す事も重要になります。

YADOTのバグ・エラーに関するページには、
実際に主人公が動かなくなった時に見るページなどを用意しています。
またツクールの仕様に関するページでは、
マニュアルなどに書かれていない隠れた仕様を記載しています。
原因不明なバグが発生した時には、これらのページを確認されると良いでしょう。



☆注釈の活用
ツクールの制作は、1年以上前に設定したイベントを見直す事があります。
これは「制作期間が長くなったため」と言った場合もありますが、
既に公開している作品でも、公開後に見つかったバグの修正や、
プレイヤーからの要望などによって、イベント設定に手を加える事があります。

単純なイベント設定でしたらすぐに設定できると思いますが、
複雑なイベント設定ではイベント構造を理解するだけでも時間がかかります。
あまり内容を把握せずに無理にイベント設定に手を加えますと、
それが原因で新たなバグが発生する事があります。

自作戦闘などの複雑なイベント設定を行う時には、
イベントコマンド:注釈を使ってイベント実行内容を見やすくしますと、
作業効率が上がります。

▼設定例
◆注釈:------------------------------------------------------------
:  :HPの表示処理
:  : ←3行目が表示されるようにするために、ここには空白の文字を入れておく
〜以降、イベント設定が続く〜

変数に関する情報やピクチャー番号の使い道など、
特に重要な情報を注釈に書いておくのも良い方法です。
▼設定例
◆注釈:------------------------------------------------------------
:  :敵HPをピクチャーで表示(変数0008の値を表示)
:  :01:百の位
:  :02:十の位
◆注釈:03:一の位
:  : ←2行目が表示されるようにするために、ここには空白の文字を入れておく
〜以降、イベント設定が続く〜


注釈はあまりたくさん設定し過ぎますとイベント実行内容が見づらくなりますので、
ある程度のグループに分けて設定された方が良いでしょう。

YADOT絵合わせパズルでは、注釈の使用例を見る事ができます。
【絵合わせパズルのページを開く】



☆スイッチ・変数の設定
スイッチや変数の名前には、
何に使っているスイッチ(変数)なのかがすぐに分かるような名前を付けた方が良いでしょう。

▼設定例
「オープニング終了」
「map001の宝箱2」


宝箱に設定するスイッチの名前などは「宝箱」だけでも良さそうですが、
1年後にその名前を見た時に、どこの宝箱で使われているのかが分かりづらくなります。
そのために「map001の宝箱」のように、どこで使われているスイッチ(変数)なのかが、
すぐに分かるようにしておいた方が良いでしょう。


名前の付け方だけでなく、
使用するスイッチの番号(変数の番号)をうまく調整すれば、
さらにデバッグ効率が上がります。

▼設定例
スイッチ0001〜0100番:ゲーム全体で使用
スイッチ0101〜0120番:マップ1で使用
スイッチ0121〜0140番:マップ2で使用


このように使用する場所、使用する目的ごとに、
10番単位や20番単位で区切って番号を設定しておけば、
「マップ2のトラブルだから、スイッチ0121〜0140番を調べよう」
と言った感じに調べるスイッチ番号(変数番号)がすぐに分かるようになります。

YADOTでも絵合わせパズルピクチャー弾丸を飛ばすなど、
複雑なイベントシステムを作る時には、
使用する内容に合わせて変数の番号を10番単位に区切って使用しています。
【絵合わせパズルの詳しい変数の使い方を見る】
【ピクチャー弾丸を飛ばすの詳しい変数の使い方を見る】



☆サンプルを使った時のバグ
他人が作ったサンプルイベントをイベント構造を理解せずにそのままコピーして使い、
それでバグを発生させて、質問掲示板にバグの直し方を聞いてくる方がいます。

「サンプルでは動いているけど、自分の作品では動かない」
と言った場合は、明らかにイベント構造を理解していない事がバグの原因であると言えます。

サンプルの中には、作品の内容に合わせて変数の値などを修正する必要があり、
単に変数の番号を+200番などにしても正常には動かないものがあります。
説明書が付属している場合は、まずは説明書を見てみましょう。
そして必ずイベント構造(1つ1つのイベントコマンドの設定の意味)を理解した上で、
サンプルを利用しましょう。



◎関連ページ
 ●ツクールの仕様
 ●主人公の移動ができない


YADOTトップ  このサイトは何?  気紛れな空間へ戻る  メール