RPGツクール2000/バグ・エラー【サイトトップへ戻る】
■バグ対策(デバッグテクニック)
(更新:2020/07/26)


バグと言うものは…
「バグが発生しないように頑張って制作していても発生するもの!」
…なのです。

どんなにベテランのツクラーが制作していても、大なり小なり何らかのバグが発生します。

バグが発生した時に最も重要な事は「原因を素早く見つけ、素早くバグを直す事」です。

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


ショートカット
■テストプレーはこまめに
■どこでもセーブ
■ちょっとした設定ミスに注意!
■注釈の活用
■スイッチ・変数の設定
■サンプルを使った時のバグ


  
■テストプレーはこまめに

ある程度イベントを設定しましたら、テストプレーを行いましょう!

「この設定は完璧だ!」
と思っていても、一応テストプレーを行いましょう!

テストプレーを頻繁に行うと作業効率が悪いように思えますが、
たくさんのイベントを設定した後にテストプレーを行ってバグが発生した場合、
どこに原因があるのかを探し出すのに時間がかかってしまう事があります。

特に複雑なイベント処理(自作戦闘システムなど)を設定している時には、
こまめにテストプレーを行った方が良いでしょう。


▲トップへ戻る▲


  
■どこでもセーブ

セーブが指定された場所しかできない場合、バグを見つけるごとに
ゲーム中断 → バグを直す → セーブポイントから再開 → バグが発生した所へ移動
となり、バグが直らない場合は、何度もバグが発生していた所へ移動する手間が発生します。

しかしバグが発生した近くにセーブポイントを設定したり、
ショートカット移動ができる場所移動を設定したりすると、
あとで削除し忘れて、それが新たなトラブルになってしまう可能性があります。

もしもセーブがどこでもできない状態である場合は、
どこでもセーブができるイベントを設定しておくと良いでしょう。

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


▲トップへ戻る▲


  
■ちょっとした設定ミスに注意!

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

設定ミスの例 補足
変数の操作にて代入加算の設定を間違える。 よくあるバグの原因です。
変数の操作にて通常の変数を設定する所を、
間違えて「変数〜の番号の変数」を設定。
またはその逆。
◆変数の操作:[V[0001]]代入,0
のVの表示があるかどうかをちゃんと確認した方が良いです。
【「変数〜の番号の変数」に関する説明ページを開く】
ピクチャー関連の設定で、
ピクチャーの番号を間違えて設定。
コピー&貼り付けで貼り付けした後に、
ピクチャーの番号などを修正し忘れないようにしましょう。
宝箱イベントなどをコピー&貼り付けして、
貼り付け後にスイッチの番号を変更し忘れる。
1ページ目でONにするスイッチの番号の変更だけでなく、
2ページ目のイベント出現条件の変更もお忘れなく!
イベントの一時消去を設定する所に
イベント処理の中断を設定している。
またはその逆。
この2つのイベントコマンドの使い方がよく分からないと、
間違えた設定を行う事があります。
【「イベント処理の中断」と「イベントの一時消去」の違い】

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


▲トップへ戻る▲


  
■バグの原因元の探し方

定期的に並列処理する自動的に始まるを多用する場合、
どこにバグの原因元があるのかが分からない事があります。

そのような時には以下のような作業を行うと良いでしょう。



●まずはバックアップを取ろう!

複雑なイベント設定を行っている場合は、
バグの原因元を探す前にイベントのバックアップを取っておくと良いでしょう。

バックアップを取る事によって、バグを探す時にイベントの追加や削除を行っても、
すぐに元に戻せるようになります。

バックアップは作品データをまるごとバックアップしても良いですが、
マップの場合は、そのマップをコピー&貼り付けしてデバッグ用のマップを作成。
コモンイベントの場合は、コモンイベントをコピー&貼り付けで複製して、バックアップを残す事もできます。

なお、バックアップ元のコモンイベントのイベント開始条件は、全て「呼び出されたときのみ」にしてください。



●出来る限りイベントを止める!

複数の定期的に並列処理するが動いていると、バグの原因元を見つけるのが難しくなる事があります。

意外とバグとは関係さそうな定期的に並列処理するがバグの原因である事もありますので、
関係無さそうな定期的に並列処理するも出来る限り止めた方が良いでしょう。



●文章や効果音を活用!

テストプレーの時に[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の場合は、逆に…
バグを発生させるにはどうしたら良いのか?
を考えます。

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



例えば「主人公が動かないバグ」を意図的に発生させる場合は、以下のような方法が考えられます。

主人公が動かないようにする方法
チップセットによる移動不可
マップイベントによる移動不可
定期的に並列処理する以外でイベントを実行
キャラクターの動作指定による移動不可
指定動作の全実行による移動不可



バグを引き起こす設定方法を思いついたら、
その思いついた設定方法と同じ設定方法があるかどうかを調べます。

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

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



YADOTツクールの仕様のページには、RPGツクール2000のマニュアルには書かれていない隠れた仕様も書かれています。

原因不明なバグが発生した時には、ツクールの仕様も確認した方が良いでしょう。

【ツクールの仕様のページを開く】


▲トップへ戻る▲


  
■注釈の活用

ゲーム制作では、1年以上前に設定したイベントを見直す事があります。

これは「制作期間が長くなったため」と言ったパターンもありますが、それ以外に既に公開している作品で、
公開後に見つかったバグの修正やプレイヤーからの要望などによって、イベント設定を修正する事があります。

単純なイベント設定でしたらすぐに修正などができるかと思いますが、
複雑なイベント設定ではイベントの処理構造を理解するだけでも時間がかかってしまいます。

あまり内容を把握せずに無理にイベントを修正してしまうと、それが原因で新たなバグが発生する場合があります。

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

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



重要な変数の使い道やピクチャーの使い道などを注釈に書いておくのも良いでしょう。

▼設定例
◆注釈:------------------------------------------------------------
:  :敵HPをピクチャーで表示(変数0008の値を表示)
:  :01:百の位
:  :02:十の位
◆注釈:03:一の位
:  : ←2行目が表示されるようにするために、ここには空白の文字を入れておく
〜以降、イベント設定が続く〜



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

YADOTにある絵合わせパズルの注釈の使い方などは、参考になるかと思います。
【絵合わせパズルのページを開く】


▲トップへ戻る▲


  
■スイッチ・変数の設定

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

▼設定例
スイッチ[0001:オープニング終了]
スイッチ[0101:map001の宝箱]


宝箱に設定するスイッチの場合、名前は「宝箱」だけでも良さそうですが、
1年後にその名前を見た時に、どこの宝箱で使われているのかが分かりづらくなります。

そのために「map001の宝箱」のように、どこで使われているスイッチや変数なのかが、
すぐに分かるようにしておいた方が良いでしょう。



名前の付け方だけでなく、
使用するスイッチや変数の番号10番単位に分けて使用すると、より作業効率が上がります。

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


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



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


▲トップへ戻る▲


  
■サンプルを使った時のバグ

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

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

サンプルの中には、単に変数の番号を「+200番」などにしても正常には動かないものがあります。

説明書が付属している場合は、まずは説明書を見てみましょう。
そして必ずイベント構造(1つ1つのイベントコマンドの設定の意味)を理解した上でサンプルを利用しましょう。


▲トップへ戻る▲



◎関連ページ

●ツクールの仕様
●主人公の移動ができない

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