2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【メモ】ツクールMZ コアスクリプト v1.0.0 ~ v1.3.2 までの差分

Last updated at Posted at 2020-12-23

コアスクリプトのバージョンが上がるのはいいけど、
結局のところ、どの辺が変わったのかが分からなかったので、
各バージョンの差分を取ってみた。

プラグイン制作者と、俺用です。

あと、バージョンが変わるごとに、
ファイル先頭のバージョン表示とUtils.RPGMAKER_VERSIONも変わりますが、
あまり処理系に支障がないので、ここでは省きます。

Diff 表示に慣れてない人のために書いておきますが、
赤い部分が古いコードで、緑の部分が新しいコードです。

v1.0.0 → v1.0.2

1.RPGツクールMZ上の表示とEffekseer上の表示で見た目が異なる不具合を修正
2.エネミーの行動前後で色味が変化する不具合を修正
3.一部音楽素材でループが設定通りに動作しない不具合を修正
4.状態異常などでアイテムを使用可能なパーティーメンバーが一人もいない状態でアイテムを使用するとエラーになる不具合を修正
5.characters/Actor2.pngの不具合を修正
6.tilesets/Outside_A4.pngの不具合を修正
7.キャラクタージェネレーターの男性Face,女性Faceパーツの一部を修正
8.プラグイン名が長い場合、説明文にかかって表示される不具合を修正
9.稀に画像の選択でリストに何も表示されなくなる場合がある不具合を修正
10.職業の特徴から装備タイプを削除して、装備を変更しても戦闘テストのステータスに反映されない不具合を修正
11.ヘルプを更新。簡体字版を追加

引用元: https://rpgtkool.hatenablog.com/entry/2020/09/10

js/libs/effekseer.min.js

v1.52k → v1.52n にバージョン変更

js/libs/effekseer.wasm

v1.52k → v1.52n にバージョン変更

js/rmmz_core.js

WebAudio.prototype._readLoopComments

             while (segments[0] === 255) {
                 packetSize += segments.shift();
             }
-            packetSize += segments.shift();
+            if (segments.length > 0) {
+                packetSize += segments.shift();
+            }
             packets.push(packetSize);
         }
         let vorbisHeaderFound = false;

js/rmmz_scenes.js

Scene_ItemBase.prototype.canUse

 Scene_ItemBase.prototype.canUse = function() {
-    return this.user().canUse(this.item()) && this.isItemEffectsValid();
+    const user = this.user();
+    return user && user.canUse(this.item()) && this.isItemEffectsValid();
 };

js/rmmz_sprites.js

Sprite_Enemy.prototype.updateWhiten

 Sprite_Enemy.prototype.updateWhiten = function() {
-    const alpha = 128 - (16 - this._effectDuration) * 10;
+    const alpha = 128 - (16 - this._effectDuration) * 8;
     this.setBlendColor([255, 255, 255, alpha]);
 };

v1.0.2 → v1.1.0

・ジェネレーターのFace画像を中央合わせに変更。キャラクタージェネレーター素材も上下左右の表示に対応
・アニメーションに「下揃え」オプション追加
・エディタから「RPGアツマール」への直接投稿機能を追加(日本語版のみ)※別途niconicoアカウントの設定が必要です
・Aタイル(A1,A2,A3,A4,A5)に対して☆設定を可能に
・エフェクト再生に失敗時、適切なエラーメッセージの出力機能を追加
・StorageManagerの非同期処理が一部正しくない不具合を修正
・tilesets/Outside_B.pngの大型窓AとCが同じであった不具合を修正
・サイドビューバトルでスキルID2の「防御」選択時、行動時のログと同時に別のモーションが一瞬入る不具合を修正
・画面の幅変更時にアクター、イベント、マップの表示位置がずれる不具合を修正
・データベースの基本ステータスHP、MP、TPの名称が2文字を越える場合、文字がゲージにかかる問題を改善
・ダメージを与える手段がない場合、特徴「自動戦闘」のアクターが行動しない不具合を修正
・デプロイメント画面の「ウェブブラウザ」表記を「ウェブブラウザ / Android / iOS」に変更
・「ウェブブラウザ / Android / iOS」でデプロイメントした際、「www」フォルダを生成せず、指定フォルダに出力するように変更
・キャラクタージェネレーターの眉パーツが肌色に対応しない不具合を修正
・デプロイメント時にatsumaru_id.txt、workshop.json、workshop.pngをコピーしないように改善
 ※atsumaru_id.txtは「RPGアツマールへアップロード」機能を使用したプロジェクトに生成
 ※workshop.json、workshop.pngは「ワークショップにアップロード」機能を使用したプロジェクトに生成
 ※プロジェクトを更新する際は、バックアップをお取りのうえ、「ゲーム」→「コアスクリプトの更新」をご活用ください。

引用元: https://forum.tkool.jp/index.php?threads/4528/

js/rmmz_managers.js

StorageManager.saveToForage

     setTimeout(() => localforage.removeItem(testKey));
     return localforage
         .setItem(testKey, zip)
-        .then(localforage.setItem(key, zip))
-        .then(this.updateForageKeys());
+        .then(() => localforage.setItem(key, zip))
+        .then(() => this.updateForageKeys());
 };

StorageManager.removeForage

 StorageManager.removeForage = function(saveName) {
     const key = this.forageKey(saveName);
-    return localforage.removeItem(key).then(this.updateForageKeys());
+    return localforage.removeItem(key).then(() => this.updateForageKeys());
 };

EffectManager.startLoading

 EffectManager.startLoading = function(url) {
     const onLoad = () => this.onLoad(url);
-    const onError = () => this.onError(url);
+    const onError = (message, url) => this.onError(url);
     const effect = Graphics.effekseer.loadEffect(url, 1, onLoad, onError);
     this._cache[url] = effect;
     return effect;

BattleManager.startAction

     this._phase = "action";
     this._action = action;
     this._targets = targets;
+    subject.cancelMotionRefresh();
     subject.useItem(action.item());
     this._action.applyGlobal();
     this._logWindow.startAction(subject, action, targets);

js/rmmz_objects.js

Game_Battler.prototype.cancelMotionRefresh (ADD)

+ Game_Battler.prototype.cancelMotionRefresh = function() {
+     this._motionRefresh = false;
+ };

Game_Actor.prototype.makeAutoBattleActions

 Game_Actor.prototype.makeAutoBattleActions = function() {
     for (let i = 0; i < this.numActions(); i++) {
         const list = this.makeActionList();
-        let maxValue = Number.MIN_VALUE;
+        let maxValue = -Number.MAX_VALUE;
         for (const action of list) {
             const value = action.evaluate();
             if (value > maxValue) {

Game_Map.prototype.screenTile{X,Y}

 Game_Map.prototype.screenTileX = function() {
-    return Graphics.width / this.tileWidth();
+    return Math.round((Graphics.width / this.tileWidth()) * 16) / 16;
 };

 Game_Map.prototype.screenTileY = function() {
-    return Graphics.height / this.tileHeight();
+    return Math.round((Graphics.height / this.tileHeight()) * 16) / 16;
 };

Game_Player.prototype.center{X,Y}

 Game_Player.prototype.centerX = function() {
-    return (Graphics.width / $gameMap.tileWidth() - 1) / 2.0;
+    return ($gameMap.screenTileX() - 1) / 2;
 };

 Game_Player.prototype.centerY = function() {
-    return (Graphics.height / $gameMap.tileHeight() - 1) / 2.0;
+    return ($gameMap.screenTileY() - 1) / 2;
 };

js/rmmz_sprites.js

Sprite_Animation.prototype.targetSpritePosition

 Sprite_Animation.prototype.targetSpritePosition = function(sprite) {
     const point = new Point(0, -sprite.height / 2);
+    if (this._animation.alignBottom) {
+        point.y = 0;
+    }
     sprite.updateTransform();
     return sprite.worldTransform.apply(point);
 };

Sprite_Gauge.prototype.gaugeX

 Sprite_Gauge.prototype.gaugeX = function() {
-    return this._statusType === "time" ? 0 : 30;
+    if (this._statusType === "time") {
+        return 0;
+    } else {
+        return this.measureLabelWidth() + 6;
+    }
 };

Sprite_Gauge.prototype.measureLabelWidth (ADD)

+ Sprite_Gauge.prototype.measureLabelWidth = function() {
+     this.setupLabelFont();
+     return this.bitmap.measureTextWidth(this.label());
+ };

v1.1.0 → v1.1.1

・「ラベルジャンプ」利用時に1フレーム消費しないようにパフォーマンスを改善
・efkefc形式のファイル名に ' が含まれているとアニメーションエディタのプレビューが再生されない不具合を修正
・複数並列処理のアニメーション中断後にイベントコマンドが実行されなくなる不具合を修正
・「文章のスクロール表示」で文章を空にすると操作不能となる不具合を修正
・画面の幅、UIエリアの高さを規定より大きい値にすると、メニュー画面にて文字、フェイスの描画がぼやける不具合を修正

引用元: https://forum.tkool.jp/index.php?threads/4646/

js/rmmz_core.js

Bitmap.prototype.measureTextWidth

     context.font = this._makeFontNameText();
     const width = context.measureText(text).width;
     context.restore();
-    return width;
+    return Math.ceil(width);
 };

js/rmmz_objects.js

Game_Interpreter.prototype.command119

         const command = this._list[i];
         if (command.code === 118 && command.parameters[0] === labelName) {
             this.jumpTo(i);
-            return;
+            break;
         }
     }
     return true;

js/rmmz_sprites.js

Spriteset_Base.prototype.removeAllAnimations

 Spriteset_Base.prototype.removeAllAnimations = function() {
-    for (const sprite of this._animationSprites) {
+    for (const sprite of this._animationSprites.clone()) {
         this.removeAnimation(sprite);
     }
 };

Spriteset_Map.prototype.removeAllBalloons

 Spriteset_Map.prototype.removeAllBalloons = function() {
-    for (const sprite of this._balloonSprites) {
+    for (const sprite of this._balloonSprites.clone()) {
         this.removeBalloon(sprite);
     }
 };

js/rmmz_windows.js

Window_Base.prototype.drawFace

     const sh = Math.min(height, ph);
     const dx = Math.floor(x + Math.max(width - pw, 0) / 2);
     const dy = Math.floor(y + Math.max(height - ph, 0) / 2);
-    const sx = (faceIndex % 4) * pw + (pw - sw) / 2;
-    const sy = Math.floor(faceIndex / 4) * ph + (ph - sh) / 2;
+    const sx = Math.floor((faceIndex % 4) * pw + (pw - sw) / 2);
+    const sy = Math.floor(Math.floor(faceIndex / 4) * ph + (ph - sh) / 2);
     this.contents.blt(bitmap, sx, sy, sw, sh, dx, dy);
 };

Window_MenuStatus.prototype.drawItemStatus

     const actor = this.actor(index);
     const rect = this.itemRect(index);
     const x = rect.x + 180;
-    const y = rect.y + rect.height / 2 - this.lineHeight() * 1.5;
+    const y = rect.y + Math.floor(rect.height / 2 - this.lineHeight() * 1.5);
     this.drawActorSimpleStatus(actor, x, y);
 };

Window_ScrollText.prototype.startMessage

 Window_ScrollText.prototype.startMessage = function() {
     this._text = $gameMessage.allText();
-    this.updatePlacement();
-    this.refresh();
-    this.show();
+    if (this._text) {
+        this.updatePlacement();
+        this.refresh();
+        this.show();
+    } else {
+        $gameMessage.clear();
+    }
 };

v1.1.1 → v1.2.0

・Effekseer 1.53bに対応。これによりパフォーマンスが向上(環境によっては2倍以上の処理速度アップ)
・NW.jsをv0.51.0に更新。これにより、(1) M1チップ搭載のMac機種にて強制終了する不具合、(2) Big Surにて画面が表示されなくなる不具合を解消
・ヘルプ、サイドビューキャラ規格)画像2枚目の左下の文字を修正
・バトル中、4人目のアクターウィンドウの右端がぼやける不具合を修正
・可変幅フォントを用いた場合、メニュー、バトルの各ゲージがずれる問題を修正
・システム2でアイテムカテゴリーが1つだけの場合、メニューからアイテムを開いた直後の状態でカーソルターゲットの説明文が表示されない不具合を修正
・プロジェクト名に日本語が含まれるとき、RPGアツマールに投稿できない不具合を修正
・自律移動→カスタムの移動ルートにて、プレビューのマップが更新されない不具合を修正
・Windows版Firefoxにてアニメーション再生時にメモリリークが発生する不具合を修正
・@commandのあとに@descがないと、初回入力時にパラメーター設定できない不具合を修正
・プラグインコマンドでファイルを指定した場合、「未使用ファイルを除外する」で削除される不具合を修正
・全画面表示の状態からヘルプ>チュートリアルを選択した際、Macのホーム画面へ画面遷移する不具合を修正
・パラメータの制約条件が設定されていない場合に、直前に開いたパラメータの設定を引き継いでいる不具合を修正
・プラグイン管理にて、パラメータの制約条件が設定されていない場合に、直前に開いたパラメータの設定を引き継いでいる不具合を修正

引用元: https://forum.tkool.jp/index.php?threads/4863/

js/libs/effekseer.min.js

v1.52n → v1.53b にバージョン変更

js/libs/effekseer.wasm

v1.52n → v1.53b にバージョン変更

js/rmmz_core.js

Graphics._createEffekseerContext

            this._effekseer = effekseer.createContext();
            if (this._effekseer) {
                this._effekseer.init(this._app.renderer.gl);
+               this._effekseer.setRestorationOfStatesFlag(false);
            }
        } catch (e) {
            this._app = null;

Window.prototype._refreshBack

    const h = Math.max(0, this._height - m * 2);
    const sprite = this._backSprite;
    const tilingSprite = sprite.children[0];
+   // [Note] We use 95 instead of 96 here to avoid blurring edges.
    sprite.bitmap = this._windowskin;
-   sprite.setFrame(0, 0, 96, 96);
+   sprite.setFrame(0, 0, 95, 95);
    sprite.move(m, m);
-   sprite.scale.x = w / 96;
-   sprite.scale.y = h / 96;
+   sprite.scale.x = w / 95;
+   sprite.scale.y = h / 95;
    tilingSprite.bitmap = this._windowskin;
    tilingSprite.setFrame(0, 96, 96, 96);
    tilingSprite.move(0, 0, w, h);

js/rmmz_scenes.js

Scene_Item.prototype.createItemWindow

    if (!this._categoryWindow.needsSelection()) {
        this._itemWindow.y -= this._categoryWindow.height;
        this._itemWindow.height += this._categoryWindow.height;
+       this._categoryWindow.update();
        this._categoryWindow.hide();
        this._categoryWindow.deactivate();
        this.onCategoryOk();

js/rmmz_sprites.js

Sprite_Animation.prototype.onAfterRender

 Sprite_Animation.prototype.onAfterRender = function(renderer) {
-    renderer.texture.contextChange();
     renderer.texture.reset();
     renderer.geometry.reset();
     renderer.state.reset();

Sprite_Gauge.prototype.measureLabelWidth

 Sprite_Gauge.prototype.measureLabelWidth = function() {
     this.setupLabelFont();
-    return this.bitmap.measureTextWidth(this.label());
+    const labels = [TextManager.hpA, TextManager.mpA, TextManager.tpA];
+    const widths = labels.map(str => this.bitmap.measureTextWidth(str));
+    return Math.max(...widths);
 };

v1.2.0 → v1.2.1

・Windows版のNW.jsをv0.51.0からv0.48.4に変更。これにより、デベロッパーツールの表示およびタスク管理に関する不具合を解消
・画像のプレビューを含むイベントコマンドの開閉を繰り返すと、エディターが強制終了することがある不具合を修正
・戦闘中「メンバーの入れ替え」にてパーティーメンバーを外し、同一アクターを再度加えるとグラフィックが消える不具合を修正
・iOSでサンプルレート22050Hz未満の音声素材が再生できない不具合を修正
・自律移動「カスタム」に設定したイベントを「移動ルートの設定」で動かすと、元の移動ルートの実行位置がずれる不具合を修正
・Steam版にてRPGツクールMZを複数起動できない不具合を修正
・rmmzproject から起動を試みると、ゲームの許可を求める警告が表示される不具合を修正
・「選択肢の表示」で「デフォルト」をなしに設定すると選択肢ウィンドウのスクロール位置が初期化されない不具合を修正
・「文章の表示」で文章の末尾に制御文字でウェイトを設定した場合、ウェイトが機能しない不具合を修正
・歩行グラフィック「People2」右下のゴーグルをかけた女性の後頭部にゴーグルのベルトがない不具合を修正
・EffekseerForRPGMakerMZ_Ex.jsを2021/3/6リリース版に更新
・ヘルプページの誤字「公式プラグインの使い方」ページのプラグイン名を「UniqueDataLoading」→「UniqueDataLoader」に修正
・pixi.jsをより新しい版に更新すると正しく動作しない不具合を修正

引用元: https://forum.tkool.jp/index.php?threads/4951/

js/libs/vorbisdecoder.js

v1.0.0 → v1.0.1 にバージョン変更

js/rmmz_core.js

Graphics.resize

 Graphics.resize = function(width, height) {
     this._width = width;
     this._height = height;
+    this._app.renderer.resize(width, height);
     this._updateAllElements();
 };

Tilemap.Renderer.prototype._createShader

     return new PIXI.Shader(PIXI.Program.from(vertexSrc, fragmentSrc), {
         uSampler0: 0,
-        uSampler1: 1,
-        uSampler2: 2,
+        uSampler1: 0,
+        uSampler2: 0,
         uProjectionMatrix: new PIXI.Matrix()
     });
 };

js/rmmz_objects.js

Game_Character.prototype.processRouteEnd

     } else if (this._moveRouteForcing) {
         this._moveRouteForcing = false;
         this.restoreMoveRoute();
+        this.setMovementSuccess(false);
     }
 };

js/rmmz_sprites.js

Sprite_Actor.prototype.setBattler

            this.setActorHome(battler.index());
        } else {
            this._mainSprite.bitmap = null;
+           this._battlerName = "";
        }
        this.startEntryMotion();
        this._stateSprite.setup(battler);

js/rmmz_windows.js

Window_ChoiceList.prototype.start

    this.placeCancelButton();
    this.createContents();
    this.refresh();
+   this.scrollTo(0, 0);
    this.selectDefault();
    this.open();
    this.activate();

Window_Message.prototype.updateMessage

            }
        }
        this.flushTextState(textState);
-       if (this.isEndOfText(textState) && !this.pause) {
+       if (this.isEndOfText(textState) && !this.isWaiting()) {
            this.onEndOfText();
        }
        return true;

Window_Message.prototype.shouldBreakHere

        if (!this._showFast && !this._lineShowFast) {
            return true;
        }
-       if (this.pause || this._waitCount > 0) {
+       if (this.isWaiting()) {
            return true;
        }
    }

Window_Message.prototype.isWaiting (ADD)

+ Window_Message.prototype.isWaiting = function() {
+     return this.pause || this._waitCount > 0;
+ }; 

v1.2.1 → v1.3.0

・メニューバーにレイヤー切り替え機能ボタンを追加
・プラグインヘルプに検索機能を追加
・Effekseerバージョンについてjs/libs/effekseer.min.jsとjs/libs/effekseer.wasmをエディタから読み込むように変更し、入れ替え可能に
・audio,img,plugins配下にサブフォルダを許可し、エディタから参照できるように
※pluginによってはサブフォルダに格納した場合、動作が変化する場合があります
・"文章の表示のポップアップヘルプにMZで追加された制御文字を追記
\px、\py、\fs \px:x座標、\py:y座標、\fs:フォントサイズ"
・システム2の画面の幅/高さを変更時、敵グループの敵キャラ座標位置を比率にあわせて自動調整可能に
・システム2にウィンドウ不透明度の設定値項目を追加
・イベントコマンド「スクリプト」の入力行、ウィンドウサイズを大きくし、スクロールバーを追加
・音楽素材、ファンタジーテーマのBGMを2曲追加(DLCフォルダFantasyResourcePackパック内)
・「職業の変更」のオプション「レベルの保存」を仕様にあわせて「経験値の保存」に変更
・(日本語の場合のみ)サービス名変更に伴い、「RPGアツマール」文言の使用箇所を「ゲームアツマール」に変更
・サンプルマップの呼び出しを「ロード」→「サンプルマップのロード」に名称を変更
・素材更新:
-タイルセット「泡」を透過素材に変更
-キャラクタージェネレーター「バリエーション」欄に表示される男性の口の16番目を分かりやすく強調
-公式プラグインの使い方のプラグイン名『UniqueDataLoading』の記載を『UniqueDataLoader』に修正
-オプションで設定した透明色が、データベースやイベントエディタの一部画像の背景に反映されない問題を修正
・一部のウィンドウにてウィンドウ右端を越えて、ウィンドウの背景色が描画される問題を修正
・Officialプラグイン「ExtraImage.js」、「ExtraWindow.js」、「PluginCommonBase.js」更新
・launchプラグイン「EffekseerForRPGMakerMZ_Ex.js」更新
・Steamアプリを起動していない状態で、game.rmmzprojectから起動できない問題を修正

引用元: https://forum.tkool.jp/index.php?threads/4951/

js/rmmz_core.js

Window.prototype._refreshBack

     tilingSprite.bitmap = this._windowskin;
     tilingSprite.setFrame(0, 96, 96, 96);
     tilingSprite.move(0, 0, w, h);
-    tilingSprite.scale.x = 96 / w;
-    tilingSprite.scale.y = 96 / h;
+    tilingSprite.scale.x = 1 / sprite.scale.x;
+    tilingSprite.scale.y = 1 / sprite.scale.y;
     sprite.setColorTone(this._colorTone);
 };

js/rmmz_objects.js

Game_System.prototype.windowOpacity (ADD)

+Game_System.prototype.windowOpacity = function() {
+    if ("windowOpacity" in $dataSystem.advanced) {
+        return $dataSystem.advanced.windowOpacity;
+    } else {
+        return 192;
+    }
+};

js/rmmz_windows.js

Window_Base.prototype.updateBackOpacity

 Window_Base.prototype.updateBackOpacity = function() {
-    this.backOpacity = 192;
+    this.backOpacity = $gameSystem.windowOpacity();
 };

v1.3.0 → v1.3.2

・同名のプラグインが別フォルダに存在した場合に重複登録の警告を表示するように
・サブフォルダ内でファイル名接頭辞"!""$"の判定機能が利用できない問題を修正
・「プラグインパラメータ」と「プラグインコマンド」は『プラグインのファイル名』をキーにして取得できるように修正

引用元: https://forum.tkool.jp/index.php?threads/4951/

js/rmmz_core.js

Utils.extractFileName (ADD)

+Utils.extractFileName = function(filename) {
+    return filename.split("/").pop();
+};

js/rmmz_managers.js

ImageManager.isObjectCharacter

 ImageManager.isObjectCharacter = function(filename) {
-    const sign = filename.match(/^[!$]+/);
+    const sign = Utils.extractFileName(filename).match(/^[!$]+/);
     return sign && sign[0].includes("!");
 };

ImageManager.isBigCharacter

 ImageManager.isBigCharacter = function(filename) {
-    const sign = filename.match(/^[!$]+/);
+    const sign = Utils.extractFileName(filename).match(/^[!$]+/);
     return sign && sign[0].includes("$");
 };

ImageManager.isZeroParallax

 ImageManager.isZeroParallax = function(filename) {
-    return filename.charAt(0) === "!";
+    return Utils.extractFileName(filename).charAt(0) === "!";
 };

PluginManager.setup

 PluginManager.setup = function(plugins) {
     for (const plugin of plugins) {
-        if (plugin.status && !this._scripts.includes(plugin.name)) {
-            this.setParameters(plugin.name, plugin.parameters);
+        const pluginName = Utils.extractFileName(plugin.name);
+        if (plugin.status && !this._scripts.includes(pluginName)) {
+            this.setParameters(pluginName, plugin.parameters);
             this.loadScript(plugin.name);
-            this._scripts.push(plugin.name);
+            this._scripts.push(pluginName);
         }
     }
 };

js/rmmz_objects.js

Game_Interpreter.prototype.command357

 Game_Interpreter.prototype.command357 = function(params) {
-    PluginManager.callCommand(this, params[0], params[1], params[3]);
+    const pluginName = Utils.extractFileName(params[0]);
+    PluginManager.callCommand(this, pluginName, params[1], params[3]);
     return true;
 };
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?