メインコンテンツまでスキップ

GlobalGameData

プレイセッションのセーブ可能な主状態コンテナです。難易度、バッジ、訪問済みシーン、最後の 回復/プレイヤー位置、歩数、そして追加システム(フォロワー、シークレットベース、プレイヤージム、 タワーラン)の永続状態を保持します。Zenject で注入される ScriptableObject アセットで、 セーブ用のミラー SavableGlobalGameData を通じてディスクへ シリアライズされます。

Namespace: OpenMon.MCE.Player

一部のフィールドはセーブプレビュー専用

GlobalGameData の Money、DexNumber、RosterPreview は、セーブスロットのプレビュー UI 専用で、セーブ時にスナップショットされます。実際の値は別の場所にあります。お金はプレイヤーの Bag、実際のパーティは Roster(PlayerCharacter.PlayerRoster)です。 ゲームロジックにはここのプレビューフィールドではなく、それらを読んでください。

定義​

[CreateAssetMenu(menuName = "MCE/Player/GlobalGameData", fileName = "GlobalGameData")]
public class GlobalGameData : GameVariableHolder
{
// バージョニング(セーブ時に書き込み)
public string LastSaveDate;
public string LastGameVersion;
public string LastMCEVersion;
public string LastMCEAssetsVersion;

// オプション
public GameDifficulty GameDifficulty;
public CatchDifficulty CatchDifficulty;

// 一般
public bool HasDex;
public SceneLocation LastHealLocation;
public uint StepsTaken;
public SerializableDictionary<Region, List<Badge>> ObtainedBadges;
public List<SceneInfoAsset> VisitedScenes;
public Ball LastUsedBall;

// プレイヤー位置
public SceneLocation LastPlayerLocation;
public bool WasPlayerOnBridgeOnLastLocation;

// セーブプレビュー専用
public uint DexNumber;
public uint Money;
public List<MonsterPreview> RosterPreview;

// 追加システム状態(旧セーブに対して null 許容)
public FollowerSaveData FollowerData;
public SecretBaseData SecretBase;
public SceneLocation SecretBaseReturn;
public PlayerGymData PlayerGym;
public List<string> EarnedGymBadges;
public TowerRunState TowerRun;

public void AddBadge(Badge badge, Region region);
public bool HasBadge(Badge badge, Region region);
public List<Badge> GetBadges(Region region);
public int GetTotalNumberOfBadges();
public float GetCatchDifficultyMultiplier();

public override string SaveToText(ISerializer<string> serializer, PlayerCharacter playerCharacter);
public override IEnumerator LoadFromText(ISerializer<string> serializer, string data,
MCESettings mceSettings, MonsterDatabaseInstance monsterDatabase);
public override IEnumerator ResetSave();
}

フィールドとプロパティ​

GameDifficulty​

プレイスルーの難易度。

型: GameDifficulty

CatchDifficulty​

捕獲の難易度。GetCatchDifficultyMultiplier() に供給されます。

型: CatchDifficulty

HasDex​

プレイヤーが図鑑を入手したか。

型: bool

LastHealLocation​

プレイヤーが最後に回復した場所 — 敗北後のリスポーン地点。

型: SceneLocation

LastPlayerLocation​

セーブ時に書き込まれた、プレイヤーの最後の既知位置。

型: SceneLocation

WasPlayerOnBridgeOnLastLocation​

最後の位置でプレイヤーが橋の上に立っていたか(ロード時に復元)。

型: bool

StepsTaken​

プレイヤーが歩いた総歩数(タマゴ孵化、徘徊などを駆動)。

型: uint

ObtainedBadges​

Region ごとにキー付けされた獲得バッジ。直接変更するのではなく、AddBadge / HasBadge / GetBadges を通じて操作してください。

型: SerializableDictionary<Region, List<Badge>>

VisitedScenes​

プレイヤーが訪れたシーン(「ここに来たことがあるか」の見た目上のパンくず)。

型: List<SceneInfoAsset>

LastUsedBall​

プレイヤーが最後に投げたボール(バトルでの事前選択に使用)。

型: Ball

Money​

セーブプレビュー用のお金スナップショット(実際の財布ではありません。上記の注記参照)。

型: uint

DexNumber​

捕獲済み種数のセーブプレビュー用カウント(プレビュー専用)。

型: uint

RosterPreview​

パーティのセーブプレビュー用スナップショット(種/フォルム/性別/タマゴ)。スロットごとに 1 つの MonsterPreview。セーブ時にライブロスターから構築されます。

型: List<MonsterPreview>

FollowerData​

アクティブなオーバーワールドフォロワーの永続状態。

型: FollowerSaveData(OpenMon.MCE.Characters.Followers)

SecretBase​

プレイヤーのシークレットベース(配置済み装飾)の永続状態。旧セーブに対して null 許容。

型: SecretBaseData(OpenMon.MCE.World.SecretBase)

SecretBaseReturn​

プレイヤーがシークレットベース内部に入る際に離れたオーバーワールド位置。内部の出口ワープが 元の場所へ正確に戻せるようにします。Scene が null/空の場合は「戻り先の保留なし」を意味し、 出口は LastHealLocation にフォールバックします。

型: SceneLocation

PlayerGym​

プレイヤー自身のカスタムジム: 装飾された内部ルーム、リーダーチームスロット、カスタムバッジ、 会話。旧セーブに対して null 許容。

型: PlayerGymData(OpenMon.MCE.World.Gym)

EarnedGymBadges​

このプレイヤーが他のプレイヤーのジムを倒して獲得したカスタムジムバッジの不透明 ID (一度のみ、重複排除)。地域のジムリーダー Badge アセットを保持する ObtainedBadges とは別物です。

型: List<string>

TowerRun​

進行中のバトルタワーランの永続状態。

型: TowerRunState(OpenMon.MCE.Battle.Tower)

メソッド​

AddBadge(Badge badge, Region region)​

地域にバッジを追加します(必要なら地域のリストを作成)。

HasBadge(Badge badge, Region region)​

プレイヤーが地域で特定のバッジを所有しているか。

戻り値: bool。

GetBadges(Region region)​

プレイヤーが地域で所有する全バッジ(なければ空リスト)。

戻り値: List<Badge>。

GetTotalNumberOfBadges()​

全地域を通じたバッジの総数。

戻り値: int。

GetCatchDifficultyMultiplier()​

現在の CatchDifficulty に対する捕獲率倍率(Guaranteed → -1、Easy → 1.5、 Normal → 1、Hard → 0.5)。

戻り値: float。

SaveToText(ISerializer<string> serializer, PlayerCharacter playerCharacter)​

ライブのプレイヤー状態(位置、お金、図鑑数、ロスタープレビュー)をスナップショットし、 バージョンをスタンプして SavableGlobalGameData 文字列にシリアライズします。

戻り値: string。

LoadFromText(ISerializer<string> serializer, string data, MCESettings mceSettings, MonsterDatabaseInstance monsterDatabase)​

SavableGlobalGameData をデシリアライズし、このアセットへ適用し直すコルーチン (先にセーブマイグレーションを実行)。

戻り値: IEnumerator。

ResetSave()​

新規ゲーム状態(Normal 難易度、図鑑なし、初期回復位置、バッジ/シーンをクリア、追加システムを リセット)へリセットするコルーチン。

戻り値: IEnumerator。

SavableGlobalGameData​

GlobalGameData のシリアライズ向けミラー。参照型の Unity オブジェクト(シーン、バッジ、 ボール、種)は実行環境間でセーブが安定するよう名前で保存され、SaveFormatVersion スタンプが ロード時のマイグレーションを駆動します。

[Serializable]
public class SavableGlobalGameData
{
public int SaveFormatVersion;

public string LastSaveDate;
public string LastGameVersion;
public string LastMCEVersion;
public string LastMCEAssetsVersion;

public GameDifficulty GameDifficulty;
public bool HasDex;
public SavableSceneLocation LastHealLocation;
public SavableSceneLocation LastPlayerLocation;
public uint StepsTaken;
public List<ObjectPair<string, string>> ObtainedBadges; // (地域名, バッジ名)
public List<string> VisitedScenes; // シーン名
public string LastUsedBallName; // 正規 ID
public uint DexNumber;
public uint Money;
public List<SavableMonsterPreview> RosterPreview;
public GameVariables GameVariables;
public FollowerSaveData FollowerData;
public SecretBaseData SecretBase;
public SavableSceneLocation SecretBaseReturn;
public PlayerGymData PlayerGym;
public List<string> EarnedGymBadges;
public TowerRunState TowerRun;

public SavableGlobalGameData(GlobalGameData globalGameData);
public void LoadGlobalGameData(GlobalGameData globalGameData,
MonsterDatabaseInstance monsterDatabase,
WorldDatabase worldDatabase);
}

SaveFormatVersion​

セーブ書き込み時にスタンプされたセーブフォーマットバージョン。ロード時、LoadGlobalGameData がこれを現在バージョンと比較し、データ適用前に保留中のマイグレーションを実行します。スタンプより 古いセーブはこれを 0 としてデシリアライズします。

型: int

LoadGlobalGameData(GlobalGameData globalGameData, MonsterDatabaseInstance monsterDatabase, WorldDatabase worldDatabase)​

各名前をライブアセットへ解決し直し、データを GlobalGameData へ適用します。見た目上の参照 (バッジ、訪問済みシーン)は許容的で、削除/改名されたアセットはロード全体を失敗させず、 その 1 エントリだけを破棄します。

使用例​

using OpenMon.MCE.Player;
using OpenMon.MCE.Badges;
using OpenMon.MCE.World;
using Zenject;

public class BadgeCounter : MonoBehaviour
{
[Inject] private GlobalGameData gameData;

private void Start()
{
Debug.Log($"Steps walked : {gameData.StepsTaken}");
Debug.Log($"Total badges : {gameData.GetTotalNumberOfBadges()}");
Debug.Log($"Has Dex : {gameData.HasDex}");
Debug.Log($"Catch mult. : {gameData.GetCatchDifficultyMultiplier()}");
}
}