エネミー名変更の仕方

hrmt
記事: 3
登録日時: 2022年7月09日(土) 21:44

エネミー名変更の仕方

投稿記事by hrmt » 2022年8月03日(水) 21:45

ボスとして登場するようなエネミーの名前をゲーム中の任意のタイミングで変更できる方法を探しています.
(例:「???」や「謎の男」といったぼかした名前から本当の名前に変更)

条件としては
・ゲーム終了後にも変更が維持される
・変更された、ということがセーブデータ間で共通されない
・「変身」機能を用いない(バトルで戦うエネミーをID05→ID06に変えて名前が変わったように見せる、という方法ではない)

dataEnemies.name='...'で出来るのかと思っていたのですが、ゲーム終了後に維持されないということで、
自分では解決策が分からずにいます.
教えていただけると幸いです.

名無し蛙
記事: 302
登録日時: 2015年11月23日(月) 02:46

Re: エネミー名変更の仕方

投稿記事by 名無し蛙 » 2022年8月03日(水) 23:49

セーブ内容に含まれるゲームオブジェクトの中に記録用ハッシュを作るのが適当じゃないですか
MVなら$gameSystemあたりがマシですかね

コード: 全て選択

(() => {
    'use strict'

    const _Game_System_initialize = Game_System.prototype.initialize;
    Game_System.prototype.initialize = function() {
        _Game_System_initialize.apply(this, arguments);
        this._enemyNameHash = {};
    };

    Game_System.prototype.setEnemyName = function(enemyId, enemyName) {
        this._enemyNameHash[enemyId] = enemyName;
    };

    Game_System.prototype.cancelEnemyName = function(enemyId) {
        delete this._enemyNameHash[enemyId];
    };

    Game_System.prototype.enemyName = function(enemyId) {
        return this._enemyNameHash[enemyId];
    };

    const _Game_Enemy_originalName = Game_Enemy.prototype.originalName;
    Game_Enemy.prototype.originalName = function() {
        return return $gameSystem.enemyName(this._enemyId) || _Game_Enemy_originalName.apply(this, arguments);
    };
})();

$gameSystem.setEnemyName(enemyId, "新しい名前");で名前の設定。
$gameSystem.cancelEnemyName(enemyId);で設定した名前の取り消しを可能にします。

※少し気になるところがあったのでコードをリファクタリング。機能に変更はないです。
最後に編集したユーザー 名無し蛙 on 2022年8月04日(木) 00:55 [ 編集 1 回目 ]
hrmt
記事: 3
登録日時: 2022年7月09日(土) 21:44

Re: エネミー名変更の仕方

投稿記事by hrmt » 2022年8月04日(木) 00:44

一発で解決してくださって誠にありがとうございます!
欲しかった機能ドンピシャで本当に助かりました!

“MV:質問” へ戻る