Saltar al contenido principal

GlobalGameData

El contenedor principal de estado guardable de una sesion de juego: dificultad, medallas, escenas visitadas, ultima ubicacion de curado/jugador, conteo de pasos, y el estado persistente de sistemas adicionales (seguidores, Base Secreta, gimnasio del jugador, corridas de torre). Es un asset ScriptableObject inyectado via Zenject, y se serializa a disco a traves de su espejo guardable, SavableGlobalGameData.

Namespace: OpenMon.MCE.Player

Algunos campos son solo para la vista previa del guardado

Money, DexNumber y RosterPreview en GlobalGameData existen solo para la UI de vista previa de ranura de guardado: se toman como snapshot al guardar. Los valores vivos estan en otro lado: el dinero en el Bag del jugador, el equipo real en Roster (PlayerCharacter.PlayerRoster). Lee esos para la logica de juego, no los campos de vista previa de aqui.

Definicion​

[CreateAssetMenu(menuName = "MCE/Player/GlobalGameData", fileName = "GlobalGameData")]
public class GlobalGameData : GameVariableHolder
{
// Versionado (escrito al guardar)
public string LastSaveDate;
public string LastGameVersion;
public string LastMCEVersion;
public string LastMCEAssetsVersion;

// Opciones
public GameDifficulty GameDifficulty;
public CatchDifficulty CatchDifficulty;

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

// Ubicacion del jugador
public SceneLocation LastPlayerLocation;
public bool WasPlayerOnBridgeOnLastLocation;

// Solo vista previa del guardado
public uint DexNumber;
public uint Money;
public List<MonsterPreview> RosterPreview;

// Estado de sistemas adicionales (tolerante a null para saves viejos)
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();
}

Campos y propiedades​

GameDifficulty​

La dificultad de la partida.

Tipo: GameDifficulty

CatchDifficulty​

La dificultad de captura. Alimenta a GetCatchDifficultyMultiplier().

Tipo: CatchDifficulty

HasDex​

Si el jugador obtuvo la Dex.

Tipo: bool

LastHealLocation​

El ultimo lugar donde el jugador se curo: el punto de reaparicion tras una derrota.

Tipo: SceneLocation

LastPlayerLocation​

La ultima ubicacion conocida del jugador, escrita al guardar.

Tipo: SceneLocation

WasPlayerOnBridgeOnLastLocation​

Si el jugador estaba sobre un puente en su ultima ubicacion (restaurado al cargar).

Tipo: bool

StepsTaken​

Total de pasos caminados por el jugador (impulsa eclosion de huevos, roaming, etc.).

Tipo: uint

ObtainedBadges​

Medallas obtenidas, indexadas por Region. Manipula via AddBadge / HasBadge / GetBadges en lugar de mutar directamente.

Tipo: SerializableDictionary<Region, List<Badge>>

VisitedScenes​

Escenas que el jugador ha visitado (una miga cosmetica de "ya estuve aqui").

Tipo: List<SceneInfoAsset>

LastUsedBall​

La ultima ball que el jugador lanzo (usada para preseleccionarla en combate).

Tipo: Ball

Money​

Snapshot de dinero para la vista previa del guardado (no la billetera viva, ver la nota de arriba).

Tipo: uint

DexNumber​

Conteo de especies capturadas para la vista previa (solo vista previa).

Tipo: uint

RosterPreview​

Snapshot del equipo para la vista previa (especie/forma/genero/huevo), un MonsterPreview por ranura. Se construye al guardar a partir del roster vivo.

Tipo: List<MonsterPreview>

FollowerData​

Estado persistente del seguidor activo en el mundo.

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

SecretBase​

Estado persistente de la Base Secreta del jugador (decoracion colocada). Tolerante a null para saves viejos.

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

SecretBaseReturn​

La ubicacion en el mundo que el jugador dejo al entrar al interior de su Base Secreta, para que el warp de salida lo devuelva exactamente de donde vino. Un Scene nulo/vacio significa "sin retorno pendiente" y la salida recurre a LastHealLocation.

Tipo: SceneLocation

PlayerGym​

El gimnasio personalizado del jugador: sala interior decorada, ranuras de equipo lider, medalla propia y dialogos. Tolerante a null para saves viejos.

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

EarnedGymBadges​

Ids opacos de las medallas de gimnasio personalizadas que este jugador gano al derrotar gimnasios de otros jugadores (una sola vez, deduplicado). Distinto de ObtainedBadges, que guarda assets Badge de lideres de gimnasio de region.

Tipo: List<string>

TowerRun​

Estado persistente de una corrida de torre de combate en curso.

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

Metodos​

AddBadge(Badge badge, Region region)​

Agrega una medalla a una region (creando la lista de la region si hace falta).

HasBadge(Badge badge, Region region)​

Si el jugador posee una medalla especifica en una region.

Devuelve: bool.

GetBadges(Region region)​

Todas las medallas que el jugador posee en una region (lista vacia si ninguna).

Devuelve: List<Badge>.

GetTotalNumberOfBadges()​

Conteo total de medallas en todas las regiones.

Devuelve: int.

GetCatchDifficultyMultiplier()​

El multiplicador de tasa de captura para la CatchDifficulty actual (Guaranteed → -1, Easy → 1.5, Normal → 1, Hard → 0.5).

Devuelve: float.

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

Toma un snapshot del estado vivo del jugador (ubicacion, dinero, dex number, vista previa del roster), estampa las versiones y serializa a un string SavableGlobalGameData.

Devuelve: string.

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

Corrutina que deserializa un SavableGlobalGameData y lo aplica de vuelta sobre este asset (corriendo antes las migraciones de guardado).

Devuelve: IEnumerator.

ResetSave()​

Corrutina que restablece a un estado de partida nueva (dificultades Normales, sin dex, ubicacion de curado inicial, medallas/escenas limpias, sistemas adicionales reseteados).

Devuelve: IEnumerator.

SavableGlobalGameData​

El espejo apto para serializacion de GlobalGameData. Los objetos Unity por referencia (escenas, medallas, balls, especies) se guardan por nombre para que los saves sean estables entre ejecuciones, y un sello SaveFormatVersion impulsa las migraciones al cargar.

[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; // (nombre region, nombre medalla)
public List<string> VisitedScenes; // nombres de escenas
public string LastUsedBallName; // id canonico
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​

La version del formato de guardado estampada cuando se escribio el save. Al cargar, LoadGlobalGameData la compara contra la version actual y corre las migraciones pendientes antes de aplicar los datos. Los saves anteriores al sello deserializan esto como 0.

Tipo: int

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

Resuelve cada nombre de vuelta a su asset vivo y aplica los datos sobre un GlobalGameData. Las referencias cosmeticas (medallas, escenas visitadas) son tolerantes: un asset removido/renombrado descarta esa unica entrada en lugar de fallar toda la carga.

Ejemplo de uso​

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()}");
}
}