LoginSignup
0
0

More than 3 years have passed since last update.

[RPGツクールMV]データベースでアクターの名前を変えてもセーブデータには反映されない

Posted at

概要

RPGツクールMVのデータベースとセーブデータに関する話

例えばアップデートでキャラクタの名前を「ハロルド」から「アレックス」に変更したい!
となった場合、データベースの名前を「アレックス」に変えても、既にプレイしている人のセーブデータから読み込むと「ハロルド」のままになってしまいます

RPGアツマールなどに投稿して継続してアップデートしていくようなゲームの場合、これだと困る場合があります

なぜか

  • データベースに入力したアクターの名前はGame_Actor_nameに入る
  • セーブデータにはGame_Actorがまるごと保存される
  • 続きから遊ぶ場合、Game_Actorにはセーブデータの情報が入る

イベントから名前を変更できるようにするためと思いますが、ゲーム中に名前を変える必要がない場合にはセーブデータで持っていない方が都合が良いです

実装を変更する

プラグインとして実装して以下のように挙動を変更します

(function() {

// ===============================================================
// 名前(name)は$dataActorsを参照して自身で持たないように
// ※ゲーム中での書き換えはできないので注意
// ===============================================================

// ---------------------------------------------------------------
// internal定義
// ---------------------------------------------------------------

var internal = {}
// 不要な情報を削除
internal.lightenGameActor_ = function(actor)
{
    delete this._name
}

// ---------------------------------------------------------------
// Game_Actor上書き
// ---------------------------------------------------------------

// Game_Actorで持たない情報を削除
var _GameActor_initMembers = Game_Actor.prototype.initMembers
Game_Actor.prototype.initMembers = function() {
    _GameActor_initMembers.call(this)
    internal.lightenGameActor_(this)
};

var _GameActor_setup = Game_Actor.prototype.setup
Game_Actor.prototype.setup = function(actorId) {
    _GameActor_setup.call(this,actorId)
    internal.lightenGameActor_(this)
};

// name
Game_Actor.prototype.name = function() {
    return $dataActors[this.actorId()].name;
};

Game_Actor.prototype.setName = function(name) {
    // 何もしない
};

})();
  • 元々メンバで持っていたものを削除する
  • name()$dataActorsから取得するようにする
    • データベースで入力したものが参照されます
  • setName()では何もしないように変更する

名前_name 以外に下記のメンバに対しても同様の実装を入れておくと、
これらもセーブデータに入ったものでなくデータベースの方を参照するようになります

  • プロフィール _profile
  • 2つ名 _nickname
  • 歩行キャラ _characterName _characterIndex
  • _faceName _characterIndex
  • [SV]戦闘キャラ _battlerName

注意点

  • Game_Actor.prototype.setName で何もしなくなるため、イベントから「名前の変更」を行えなくなります
    • 「名前」以外のメンバに対しても同様の実装を入れると、これらもイベントからの変更ができなくなります

おわりに

継続してアップデートするゲームというのも多くなってきていると思います。その時に、プロフィールにちょっと誤字があった…とかの不具合を治そうとすると、ゲームからはデータベースを参照してもらう形の方が良かったりします
ただしそれらを変更するイベントのコマンドは使えなくなりますので、どちらの形がよいかはゲームの仕様次第になると思います

0
0
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
0
0