[Bugfix希望]プレイヤーが一人残らずスキルで逃げるとフリーズ

アバター
くらむぼん
記事: 62
登録日時: 2016年6月26日(日) 12:22

[Bugfix希望]プレイヤーが一人残らずスキルで逃げるとフリーズ

投稿記事by くらむぼん » 2016年8月25日(木) 16:19

正直ここまで普通の操作で、しかも発売から何ヶ月も経って
未だにこんなバグが起こるなんて信じられないのですが…

表題の通り、戦闘でプレイヤー(アクター側)の最後に残った一人を
「逃げる」効果のスキルで逃がすと問答無用でフリーズします。

  • 「逃げる」を習得したアクターがそれを使って逃げるとフリーズ
  • 「戦闘行動の強制:最後のアクター、逃げる、ラストターゲット」でフリーズ
  • 標的を「敵単体」に変更した「逃がす」を敵に使われてもフリーズ
  • 戦闘テストでも実際のプレイでもフリーズ

→とにかく最後の一人のアクターがスキルで逃げるとフリーズ!!

作ってる作品にも関わってくるのでもしよろしければBugfixプラグインの作成をお願いします。
それから…ツクール開発部の方とコネクションが取れる方は
ぜひ次バージョンで直して頂けるようご連絡頂ければ幸いです。どうかよろしくお願いします!

アバター
yamachan
記事: 107
登録日時: 2016年6月19日(日) 22:34

Re: [Bugfix希望]プレイヤーが一人残らずスキルで逃げるとフリーズ

投稿記事by yamachan » 2016年8月25日(木) 17:17

こんにちは! :D

ver1.3.1 で試しましたが、フリーズしました。
rpg_managers.js に以下のような定義がありますが

コード: 全て選択

BattleManager.update = function() {
    if (!this.isBusy() && !this.updateEvent()) {
        switch (this._phase) {
        case 'start':
            this.startInput();
            break;
        case 'turn':
            this.updateTurn();
            break;
        case 'action':
            this.updateAction();
            break;
        case 'turnEnd':
            this.updateTurnEnd();
            break;
        case 'battleEnd':
            this.updateBattleEnd();
            break;
        }
    }
};

ここで this._phase == 'battleEnd' のとき、this.updateEvent() が true を返すので、無限ループに陥っているようにみえます。
他に影響が出にくいように、また行数を変えないように、とりあえず以下のように対応コードを追加してみました。

コード: 全て選択

        case 'battleEnd':
            this.updateBattleEnd();
            break;
        }
    } else if (!this.isBusy() && this._phase == 'battleEnd') {this.updateBattleEnd();}
};

これで無限ループにはならないのですが… 全員逃げると、戦闘に負けてゲームオーバーになります。
ざっとコードをみたところでは、スキルで全員がエスケープするのは、想定外のような気がします…

ちゃんと対応するには、エスケープ可能かどうか判断したうえで、エスケープ処理を実施する必要がありそうですね。
(this._preemptive = true にしてBattleManager.processEscape()を呼べばいいかな?)
エスケープ不可のボス戦では… さて、どうすべきなんでしょうか… エスケープのスキル効果自体を無効にすべき???

中途半端ですみませんが、とりいそぎ報告させていただきました。

ではでは。
Toshio Yamashita (yamachan)
Plugin https://github.com/yamachan/jgss-hack/blob/master/README.ja.md
Twitter https://twitter.com/yamachan360

私が作成して本サイトに投稿したコードは著作権を放棄し、利用・改変・配布など全て自由です。
ただし同じ投降内に制限を明記している場合はそちらが優先します。
アバター
くらむぼん
記事: 62
登録日時: 2016年6月26日(日) 12:22

Re: [Bugfix希望]プレイヤーが一人残らずスキルで逃げるとフリーズ

投稿記事by くらむぼん » 2016年8月25日(木) 20:27

検証ありがとうございます!
確かに、ソースコードの流れや逃走不可戦の処理から考えても
「スキルでアクターが全員逃げる」こと自体が想定外のようですね。

しかしまあ想定外の現象がそのままフリーズに繋がるのは問題なので
開発部側が何らかの対応をすべきなのは間違いないでしょう。


個人的には公式が(本体修正で)スキル逃げに対応してくれたら嬉しいですね。
私からすると「逃走不可戦でも逃げられる」というような「仕様の穴」問題は
ツクラー側が気をつければいいと思ってるので、フリーズという大問題よりは気になりませんし。

まあそこまでの大規模改変が嫌なら最低でも「最後のアクターの逃げるは必ず失敗させる」辺りが落とし所かな…
(その場合はスキル逃げ実装はプラグインに任せる)
…ここに書いても開発部には伝わらないでしょうか(笑)

“MV:プラグイン素材のリクエスト” へ戻る