ページ 11

【解決】タイトル画面のLoadgameを押してセーブした所からではなく指定したMapIdから始まるようにしたい。

Posted: 2020年4月20日(月) 00:17
by みたしや
タイトル画面のLoadgameを押してセーブした所からではなく指定したMapIdから始まるプラグインを作っています。

理想としては
a0064369_19591155.jpg
a0064369_19591155.jpg (41.2 KiB) 閲覧された回数 2801 回
のような形を目指しています。(画像:DFFのメニュー画面)
上のゲームではタイトル画面でnewname,continueを押すと、この画面から始まりストーリーモードやミュージアムを選択することが出来ます。

これを実現するための仕様としてマップIDを38にセットして自動処理で起こるイベントを作ればいいのかなって考えてソースを作ってみました……。

コード: 全て選択

    Scene_Load.prototype.reloadMapIfUpdated = function() {
      if ($gameSystem.versionId() !== $dataSystem.versionId) {
        // コンテンツセレクト画面に移動
        $gamePlayer.reserveTransfer(38, 7, 6);
        //$gamePlayer.reserveTransfer($gameMap.mapId(), $gamePlayer.x, $gamePlayer.y);
        $gamePlayer.requestMapReload();
      }
}
やってみたところ問題が……。
newgameは、【初期位置の設定】を指定するとして。
continueを押して、昔から残ってたセーブデータを読み込むと指定した場所に飛んでくれるが
新しくセーブデータを作って読み込むとセーブした場所からスタートになる。

continueでどこでセーブしても特定の場所(38)から絶対スタートさせるためには、どこをいじればいいのでしょうか?
ご回答をよろしくお願いします。
SaveLoad.js
(1.24 KiB) ダウンロード数: 5 回
↑ちなみに作成途中のソースも提示しておきます。

Re: タイトル画面のLoadgameを押してセーブした所からではなく指定したMapIdから始まるようにしたい。

Posted: 2020年4月20日(月) 03:40
by Plasma Dark
DFF、やりこんだなあ。

$gameSystem.versionId() はセーブデータに含まれるゲームの内部バージョンIDです。
$dataSystem.versionId はゲームデータに書かれたゲームの内部バージョンIDです。
関数の名前が reloadMapIfUpdated となっている通り、ゲームデータが更新されていたらマップをリロードする、という意味です。

ですので、昔のバージョンで作ったセーブデータでないとその分岐の中には入りません。

ロード成功時にreserveTransferを仕込むアプローチ自体は正しそうに見えます。
以下のように書けばお望みの挙動になるのではないでしょうか。

コード: 全て選択

(function() {
  const CONTINUE_POINT = {
    MAP: 38,
    X: 7,
    Y: 6
  };

  const _Scene_Load_onLoadSuccess = Scene_Load.prototype.onLoadSuccess;
  Scene_Load.prototype.onLoadSuccess = function() {
    _Scene_Load_onLoadSuccess.call(this);
    $gamePlayer.reserveTransfer(CONTINUE_POINT.MAP, CONTINUE_POINT.X, CONTINUE_POINT.Y);
    $gamePlayer.requestMapReload();
  };
})();

Re: タイトル画面のLoadgameを押してセーブした所からではなく指定したMapIdから始まるようにしたい。

Posted: 2020年4月21日(火) 18:13
by みたしや
Plasma Dark様

返信が遅れました。
ご回答していただきありがとうございます。

提供していただいたソースを導入して、無事に動作確認をする事が出来ました。

Plasma Dark様もDFFにはまっていたんですねぇ~
私も学生時代に1000時間くらい費やしました~。

それはさておき。
ゲームの内部にバージョンという物が存在していたとは!!

まだまだ知らない事が沢山あって難しいですねぇ~。