200X共通/バグ

Last-modified: 2020-12-07 (月) 20:49:00

RPGツクール2000・2003共通のバグの一覧です。

 
 

重大なバグ

 

主としてゲームを強制終了させるレベルの危険な不具合。

 

「メモリストリームの拡大中にメモリが足りなくなりました」

多くのプレイヤーを苦しめてきた有名なバグ。Windows2000以降に発生する。
「BGMの演奏」でMIDIを読み込んだ際にメモリの解放に一部失敗してゴミデータが蓄積した結果、
BGMが演奏されなくなる予兆の後、セーブ時に上書きしようとしたデータを消し飛ばしつつ強制終了する。
F12ではゴミデータの解消はされないため、発生させないためにはこまめにゲームを閉じる必要がある。
「BGMの演奏」でMIDIを高速で読み込み続けることで容易に再現が可能。
エディターでも発生する。エディターで発生した場合はゲームファイルの破損につながるため極めて危険。

 

現在では非公式の修正パッチで回避できる他、Steam版2003日本語化パッチにも修正機能が付いている。
また、上記のパッチを利用した もしも俺々仕様のRPGツクールローダーがあったらを使う事でも回避できる。

kwsk

いくつかの事実が合わさることで、セーブデータ破損などの現象が発生する。

  1. Windowsには移動可能なメモリという概念がある(Managing Heap Memory中のThe MOVEABLE Memory Handle Tableを参照)
  2. RPGツクール2000・2003は移動可能メモリを使っている
  3. 大部分の処理では移動可能メモリを正しく処理(確保・解放)しており、移動可能メモリ数の使用数は一定に収まる
  4. しかしMIDI読み込み処理に不備があり、MIDIを読み込むたびに移動可能メモリの使用数が増加していく(詳細)
  5. 1プロセスが使用できる移動可能メモリの上限は65536個である
  6. MIDI読み込みに必要な移動可能メモリが確保できなくなると、MIDI読み込みに失敗する
  7. MIDI含む音声ファイル読み込みに失敗した場合、音声を再生しないだけでありゲームは続行する(→BGMが流れなくなる)
  8. セーブなどのファイル保存処理は、ファイルの内容を0byteに切り詰め→ファイルに内容を少しずつ書き込み、という手順で進む
  9. ファイル保存中に移動可能メモリが確保できなくなると、ファイルの書き込み途中で中断するため、ファイルが破損する

有志によると、MIDI読み込み時の移動可能メモリの増加量は以下の通り。

増加量 = システムエクスクルーシブイベント数 * 3 + メタイベント数 + 4

過去に本バグの対策についての作品が投下されている。

メモリストリームエラー回避(VIPRPG10代目作品保管庫 第23保管庫 ID:2715)


互換性データベースを利用する手法。
この手法で一度データベースをインストールすると、以降RPG_RT.exeという名前のアプリケーションすべてで対策が取れた状態になる。
キー途切れ回避用の処理も入っている。
メモストエラー回避検証(VIPRPG12代目作品保管庫 第2保管庫 ID:247)


移動可能メモリではなく通常のメモリを使うようにすることで、本バグの発生を遅らせる手法。
この手法は、別起動ファイルを経由したRPG_RT.exeのみの対策になる。
ソースコード同梱。RTPのMIDIファイル読み込み時の増加量の資料も同梱。
 

パーティ全滅からのフリーズ

「文章の表示」を行っている最中にパーティ全員のHPが0になるとゲームがフリーズ、もしくは強制終了する。

  • 再現例Ⅰ
    パーティをデフォルトデータベースのアレックスのみにし、マップ上に以下のイベントを置く。
    • EV[1]:自動的に始まる/HPの増減:メンバー全員のHPを20減らす(戦闘不能を許可する)
    • EV[2]:自動的に始まる/文章の表示:「再現例Ⅰ」

   結果:文章ウィンドウを二回閉じた時点でフリーズする。

 
  • 再現例Ⅱ
    再現例Ⅰと同じ状態で、マップ上に以下のイベントを置く。
    • EV[1]:定期的に並列処理する/HPの増減:メンバー全員のHPを1減らす(戦闘不能を許可する)
    • EV[2]:定期的に並列処理する/文章の表示:「再現例Ⅱ」

   結果:ウィンドウが開いてすぐに画面が停止する。F9を押すと画面がフェードイン・アウトを繰り返す。

 

発生すると操作不能になりゲームの続行が不可能になるので、文章表示中にHPの操作はしないこと。
「HPの増減」以外にも「ダメージの処理」でも発生する。

軽度なバグ

 

ゲームの強制終了ほどではないが、プレイヤーないし作者に不利益を与える可能性のある不具合。

 

ループを抜けるのに失敗する

「繰り返し処理の中断」を実行した際、コマンドの並びによっては繰り返しから抜けられないことがある。

◆繰り返し処理
 ◆繰り返し処理の中断
 ◆繰り返し処理
  ◆
 :以上繰り返し
 ◆文章の表示:「ループ内です」
:以上繰り返し
◆文章の表示:「ループを抜けました」

上記のイベントを実行した際、本来なら「ループを抜けました」が表示されるべきだが、
実際にはネストに関係なく「以上繰り返し」を下へと検索していくため、一つネストが深い「以上繰り返し」に
飛んでしまい、ループから抜けることができずに「ループ内です」が繰り返し表示される。

 

キー入力が途切れる

「キー入力の処理」にて、実際にはキーを押している場合でも、キーが押されていない場合の動作をする場合がある。マルチコア環境で発生する。
一定時間キーを押し続ければ起動するような処理を作っても、キー入力途切れにより全然発動しない可能性がある。
詳しくはこちら。 個人ブログ うたかたの夢跡 個人ブログ 骨を盗んで肉を盗まず

  • 作者が取れる対策
    • 短い間隔でキー入力状態が変動する場合は無視するように処理を作る
      うたかたの夢跡にてイベントのサンプルがある。
    • 英語版2000 v1.62以降、英語版2003 v1.12以降で製作する
      英語版ではゲームエンジン側でバグ修正済み。
  • プレイヤーが取れる対策

(エディター)エラーが表示されて保存できない

エディターで編集内容を保存しようとすると、突如以下のようなエラーダイアログが出て保存することができなくなる。
C:\Users\(Windowsユーザ名)\AppData\Local\Temp\RPG_TEMP\MapXXXX.lmu を作成できません」(通常起動時)
C:\Users\(Windowsユーザ名)\AppData\Local\Temp\ULTTMP00\MapXXXX.lmu を作成できません」(2009U経由で起動時)
一度発生してしまうとツクールを再起動するまで治らず、結果として保存していなかったデータが全部パーになる。発生原因は不明。
いつ発生するかも不明なため、長時間保存せずに作成を続けているほど被害は大きい。

  • 暫定対策
    上記のエラーメッセージにある通りのフォルダを進んでいくと、「RPG_TEMP」などのフォルダが存在しないので、手動で作成すると保存できるようになる