RPGツクールMV - JGSS ver1.5.2 から ver1.6.2 への更新メモ

いつの間にか RPGツクールMV アップデート ver.1.6.2 が配布されていたので、ver1.5.2 からの更新点のまとめ。

[ver1.5.2 への更新メモ](https://qiita.com/yamachan360/items/117df542ce0fd9ae723e) からの続きです。[RPGツクールMV JGSS 技術メモ](https://github.com/yamachan/jgss-hack/blob/master/memo.ja/index.md) もよろしければどうぞ。

# rpg_core.js

[NW.js](https://nwjs.io/) の引数も見るよう修正された模様。

```javascript
Utils.isOptionValid = function(name) {
    if (location.search.slice(1).split('&').contains(name)) {return 1;};
    if (typeof nw !== "undefined" && nw.App.argv.length > 0 && nw.App.argv[0].split('&').contains(name)) {return 1;}; // 追加
    return 0;
};
```

また画面比率の計算で 1.00～1.01 の範囲の値を 1.00 に固定する処理が追加されています。何らかの実行環境で計算誤差が生じて表示に影響が出ていたのかもしれませんね。

```javascript
Graphics._updateRealScale = function() {
    if (this._stretchEnabled) {
        var h = window.innerWidth / this._width;
        var v = window.innerHeight / this._height;
        if (h >= 1 && h - 0.01 <= 1) h = 1; // 追加
        if (v >= 1 && v - 0.01 <= 1) v = 1; // 追加
        this._realScale = Math.min(h, v);
    } else {
        this._realScale = this._scale;
    }
};
```

音楽の再生部分で、ループの指定より開始位置が後の場合は、ループ内に収まるようにロジックが追加された模様。バグ修正ですかね。

```javascript
WebAudio.prototype._startPlaying = function(loop, offset) {
    if (this._loopLength > 0) {                             // 追加
     while (offset >= this._loopStart + this._loopLength) { // 追加
       offset -= this._loopLength;                          // 追加
     }                                                      // 追加
    }                                                       // 追加
    this._removeEndTimer();
    this._removeNodes();
    this._createNodes();
    this._connectNodes();
    this._sourceNode.loop = loop;
    this._sourceNode.start(0, offset);
    this._startTime = WebAudio._context.currentTime - offset / this._pitch;
    this._createEndTimer();
};
```

rpg_core.js の変更はこれぐらいかな。特に目立った変更は無いようですね。

# rpg_objects.js

ver1.5.2 の時に気になっていた [エンバグではないか？](https://qiita.com/yamachan360/items/117df542ce0fd9ae723e#%E3%82%A8%E3%83%B3%E3%83%90%E3%82%B0%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84%E3%81%8B) が対応された模様。

code == 112 の時に無条件に depth++ している部分にあわせ、そのあとの code == 413 のときの処理を変更したようです。これで多重ループ時の「ループの中断」がちゃんと動作するでしょう。

```javascript
// Break Loop
Game_Interpreter.prototype.command113 = function () {
    var depth = 0;
    while (this._index < this._list.length - 1) {
        this._index++;
        var command = this.currentCommand();

        if (command.code === 112)
            depth++;

        if (command.code === 413 && command.indent < this._indent) { // ver1.5.2
        if (command.code === 413) {                                  // ver1.6.2
            if (depth > 0)
                depth--;
            else
                break;
        }
    }
    return true;
};
```

rpg_objects.js の修正もこれぐらいかな？バグが減って良かったですよね。

# rpg_managers.js

rpg_managers.js も変更は少なくて、以下の部分に `decodeURIComponent()` を追加しただけの模様。

```javascript
ImageManager.loadNormalBitmap = function(path, hue) {
    var key = this._generateCacheKey(path, hue);
    var bitmap = this._imageCache.get(key);
    if (!bitmap) {
        bitmap = Bitmap.load(path);                     // ver1.5.2
        bitmap = Bitmap.load(decodeURIComponent(path)); // ver1.6.2
        bitmap.addLoadListener(function() {
            bitmap.rotateHue(hue);
        });
        this._imageCache.add(key, bitmap);
    }else if(!bitmap.isReady()){
        bitmap.decode();
    }

    return bitmap;
};
```

でもこういった細かなブラッシュアップの積み重ねって、大事だったりするんですよね。

# rpg_windows.js

以下のように `setXXXXWindow()` 系の関数から `update()` 関数の呼び出しが削除されたようです。

```javascript
Window_ItemCategory.prototype.setItemWindow = function(itemWindow) {
    this._itemWindow = itemWindow;
    this.update(); // 削除
};
```

まあ Scene のほうで結局は `update()` はされるので、無駄が省かれて少しですが高速化したと言って良いのではないでしょうか。

```javascript
Scene_Base.prototype.update = function() {
    this.updateFade();
    this.updateChildren();
};
Scene_Base.prototype.updateChildren = function() {
    this.children.forEach(function(child) {
        if (child.update) {
            child.update();
        }
    });
};
```

ただし `update()` が呼ばれるタイミングが遅くなるし、呼ばれる位置もだいぶ後になるので、Window 系の拡張で初期化のためこの関数をフックしていた方はちょっと注意が必要かもしれません。

そして名前入力の際に、LATIN2 文字がちゃんと定義されたようです！また地味に平仮名の `ゔ` もちゃんと定義されたようです。ゲームプレイヤーにとって嬉しい改良かもしれませんね！

```javascript
Window_NameInput.LATIN2 =
        [ 'Á','É','Í','Ó','Ú',  'á','é','í','ó','ú',
          'À','È','Ì','Ò','Ù',  'à','è','ì','ò','ù',
          'Â','Ê','Î','Ô','Û',  'â','ê','î','ô','û',
          'Ä','Ë','Ï','Ö','Ü',  'ä','ë','ï','ö','ü',
          'Ā','Ē','Ī','Ō','Ū',  'ā','ē','ī','ō','ū',
          'Ã','Å','Æ','Ç','Ð',  'ã','å','æ','ç','ð',
          'Ñ','Õ','Ø','Š','Ŵ',  'ñ','õ','ø','š','ŵ',
          'Ý','Ŷ','Ÿ','Ž','Þ',  'ý','ÿ','ŷ','ž','þ',
          'Ĳ','Œ','ĳ','œ','ß',  '«','»',' ','Page','OK' ];
```

rpg_windows.js の修正はこんなところかな。このファイルの一番変更が多かった気がします。

# 変更なし

以下のファイルは今回は特に変更がない模様。

* main.js
* plugins.js
* rpg_scenes.js
* rpg_sprites.js

# NW.js の更新

今回はコードの変更はバグ潰し程度でしたが、実行環境 NW.js の更新は影響が大きいかもしれませんね。NW 自体のバージョンは 0.29.4 で、node のバージョンは 9.11.1 のようですよ。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/f81504fc-f65c-f058-e7e1-bbe1e0dd255c.png)
それではまた！