【ツクールMV】Doodadsでマップが真っ黒

MV雑談

困ったことになりましたが解決できました、という記事です。

ツクール本体アップデートで1.5から1.6にしたらマップが真っ黒になりました。プレイヤーキャラはいますし移動もできます。で、メニューを開いて閉じるとなぜかマップが表示されるという不思議な現象。

プラグインON/OFFを切り替えてみると、YEP_GridFreeDoodads.js(v1.09)がONだと発生することが分かりました。

いつくるか分からない本体アップデート。そのたびにプラグイン作者が対応するのは不可能です。プラグイン利用者側でできるだけ対応したいものです。

ということで、プラグインを直接変更して解決しました。 解決しましたが、謎は残りました。どういう謎かというと、「バージョン1.5から真っ黒になってるはずでは?」というものです。
さらには「いや、オイラは1.6.1で普通に動いてるよ」なんて声も聞こえてくるではありませんか。

……じゃあ私のはなぜ真っ黒に?

永遠の謎ということで気にしないことにします。

とりあえず、「真っ黒になって困ってるよ」という紳士淑女向けに手順を書いておきます。

■手順

  • YEP_GridFreeDoodads.jsのバックアップをとる(コピーして別のフォルダに貼り付け)
  • a,bのソフトのどちらかを使用するので、なければインストールする。
     a.SakuraEditor、EmEditorなど(テキストエディタ)
     b.Brackets(おすすめ)
  • ↑のソフトでYEP_GridFreeDoodads.js (pluginフォルダにある本物)を開く。
  • 428行のコードを追加・変更する。

(変更前)バージョン1.3.0以降なら、の条件部分

if (Utils.RPGMAKER_VERSION && Utils.RPGMAKER_VERSION >= '1.3.0') {

ImageManager.isReady = function() {
    for (var key in this.cache._inner) {
        var bitmap = this.cache._inner[key].item;
        if (bitmap.isError()) {
          console.log('Failed to load: ' + decodeURIComponent(bitmap.url));
          this.cache._inner[key].item = this.loadEmptyBitmap();
          bitmap = this.cache._inner[key].item;
        }
        if (!bitmap.isReady()) {
            return false;
        }
    }
    return true;
};

} else { // Version 1.2.0 and Under

(変更後) バージョン1.5.0以降なら、の条件を追加

if (Utils.RPGMAKER_VERSION && Utils.RPGMAKER_VERSION >= '1.5.0') {
    //基底処理で問題なし
} else if (Utils.RPGMAKER_VERSION && Utils.RPGMAKER_VERSION >= '1.3.0') {
ImageManager.isReady = function() {
    for (var key in this.cache._inner) {
        var bitmap = this.cache._inner[key].item;
        if (bitmap.isError()) {
          console.log('Failed to load: ' + decodeURIComponent(bitmap.url));
          this.cache._inner[key].item = this.loadEmptyBitmap();
          bitmap = this.cache._inner[key].item;
        }
        if (!bitmap.isReady()) {
            return false;
        }
    }
    return true;
};

} else { // Version 1.2.0 and Under

上記のように変更することで、「バージョンが1.5.0以降なら isReady()を再定義しない 」となります。基底のisReady()が実行されます。

ちなみに変更前の場合だと、isReady()を再定義していました。再定義の内容は、バージョン1.3の処理内容とほぼ同じです。
「本体の処理内容がいつ変わるか分からない。それなら今のバージョンの処理内容が実行されるように定義してしまおう」という考え方でしょう。

現行バージョンのisReady()では、this.cacheではなくthis._imageCacheを処理しています。「どこかのバージョン」で作りが大きく変わったようです。
これにより本来実行されるべきisReady()がされない→マップ画像の準備完了を待たずに画面表示→真っ黒ということでした。

なお変更後の条件文では、その「どこかのバージョン」を1.5.0としました。
理由は、1.3.5を元にしてスタートしたアツマール版コアスクリプトで、早くから_imageCacheを使うように変更されており、これが本家に正式に取り込まれたのが1.5.0だからです。
もしかしたら1.4.0とかでしれっと取り込まれているかもしれませんが、確かめようがないので1.5.0としました。

ということで、なんで1.5でDoodadsを使ってる時は真っ黒にならなかったんだろう、という謎が残りましたとさ。めでたしめでたし。

RPGツクール
マップスクロール禁止プラグイン

ツクールMV向け。改造自由、クレジット表記不要です。 ↓右クリックして対象を保存SNH_MapScr …

RPGツクール
プラグインコマンド集

ツクールMV向け。 改造自由、クレジット表記不要です。 ↓右クリックして対象を保存 SNH_Plug …

RPGツクール
移動距離でエンカウントプラグイン

ツクールMV向け。改造自由、クレジット表記不要です。 ↓右クリックして対象を保存SNH_Distan …