Guardar y Cargar

El sistema de guardado de Pokémon Essentials permite al jugador guardar su progreso y cargarlo posteriormente. Este artículo cubre el funcionamiento del sistema de guardado, la ubicación de los archivos, el autoguardado y cómo personalizar el comportamiento.

Sistema de Guardado

Cuando el jugador selecciona "Guardar" en el menú de pausa, se ejecuta el proceso de guardado que serializa todos los datos del juego en un archivo.

Funciones principales

Función Descripción
pbSave Guarda la partida normalmente (con confirmación al jugador)
pbEmergencySave Guarda la partida de emergencia (sin confirmación, usado ante errores)
Game.save Método interno que realiza la escritura del archivo de guardado

Guardar por script

# Guardar la partida (muestra la pantalla de guardado al jugador)
pbSave

# Guardar silenciosamente (sin interfaz)
Game.save

# Guardado de emergencia (ante un error crítico)
pbEmergencySave

Ubicación del archivo de guardado

El archivo de guardado se almacena en la carpeta del juego por defecto:

Archivo Descripción
Game.rxdata Archivo principal de guardado
Game_backup.rxdata Copia de seguridad del último guardado

La ubicación se puede consultar y cambiar con:

# Obtener la ruta del archivo de guardado actual
ruta = SaveData::FILE_PATH

# Por defecto es:
# "Game.rxdata" (en la carpeta raíz del juego)

Datos que se guardan

El sistema de guardado serializa los siguientes datos globales:

Dato Variable global Contenido
Jugador $player Nombre, ID, equipo Pokémon, medallas, objetos clave, dinero
Sistema del juego $game_system Música actual, sonidos, temporizadores
Mapa $game_map ID del mapa actual, posición del jugador, eventos del mapa
Pantalla $game_screen Tono de pantalla, clima, flash
Switches $game_switches Estado de todos los interruptores del juego
Variables $game_variables Todas las variables del juego
Self Switches $game_self_switches Interruptores locales de cada evento
Opciones $PokemonSystem Preferencias del jugador (velocidad de texto, volumen, etc.)
Mochila $bag Inventario completo con cantidades
PC $PokemonStorage Pokémon almacenados en las cajas del PC
Estadísticas $stats Tiempo de juego, pasos, combates ganados, etc.

Pantalla de Carga

La pantalla de carga (Load Screen) aparece al iniciar el juego si existe un archivo de guardado. Muestra información básica de la partida guardada:

Opciones de la pantalla de carga

Opción Descripción
Continuar Carga la partida guardada
Nueva Partida Comienza una partida nueva (pide confirmación si hay partida guardada)
Opciones Abre la pantalla de opciones
Regalo Misterioso Acceso a regalos misteriosos (si está habilitado)
Debug Modo depuración (solo si $DEBUG es true)

Autoguardado

Pokémon Essentials v21.1 soporta un sistema de autoguardado que puede guardar automáticamente en ciertos momentos:

# Activar el autoguardado
Settings::AUTOSAVE_ENABLED = true

# El autoguardado ocurre:
# - Al entrar a un nuevo mapa
# - Después de un combate importante
# - En intervalos definidos
Nota: El autoguardado no reemplaza al guardado manual. Usa un slot separado y el jugador puede desactivarlo en las opciones.

Múltiples archivos de guardado

Para implementar múltiples ranuras de guardado, puedes cambiar la ruta del archivo de guardado dinámicamente:

# Ejemplo: Sistema de 3 ranuras de guardado
def pbSaveToSlot(slot_number)
  # Cambia la ruta del archivo de guardado
  file = "Game_Slot#{slot_number}.rxdata"
  SaveData.set_file_path(file)
  Game.save
end

def pbLoadFromSlot(slot_number)
  file = "Game_Slot#{slot_number}.rxdata"
  SaveData.set_file_path(file)
  Game.load
end

Prevenir guardado en ciertas áreas

Puedes desactivar el guardado en mapas específicos o situaciones especiales:

Método 1: Desactivar desde un evento

# Desactivar el guardado
$game_system.save_disabled = true

# Volver a activar el guardado
$game_system.save_disabled = false

Método 2: Por metadatos de mapa

Puedes configurar un mapa para que no permita guardar estableciendo sus metadatos:

# En los metadatos del mapa, se puede marcar como "no guardar"
# Esto se configura en el editor de mapas o en map_metadata.txt

Método 3: Condicional en el menú

# Modificar la condición del botón Guardar en el menú de pausa
MenuHandlers.add(:pause_menu, :save, {
  "name"      => _INTL("Guardar"),
  "order"     => 60,
  "condition" => proc {
    # No permitir guardar si el interruptor 50 está activado
    # o si el guardado está desactivado globalmente
    next !$game_system.save_disabled && !$game_switches[50]
  },
  "effect"    => proc { |menu|
    scene = PokemonSave_Scene.new
    screen = PokemonSaveScreen.new(scene)
    screen.pbSaveScreen
    next false
  }
})

Manejo de errores al cargar

Si el archivo de guardado se corrompe, Essentials intentará cargar la copia de seguridad (Game_backup.rxdata). Si tampoco funciona, se muestra un mensaje de error y se ofrece iniciar una nueva partida.

# Verificar si existe un archivo de guardado
if SaveData.exists?
  pbMessage(_INTL("Se encontró una partida guardada."))
else
  pbMessage(_INTL("No hay partida guardada."))
end

# Borrar la partida guardada (¡con confirmación!)
if pbConfirmMessage(_INTL("¿Borrar la partida guardada? Esto no se puede deshacer."))
  SaveData.delete_file
  pbMessage(_INTL("Partida borrada."))
end

Pantalla de guardado

La pantalla de guardado muestra información de la partida actual antes de confirmar:

# Abrir la pantalla de guardado directamente
scene = PokemonSave_Scene.new
screen = PokemonSaveScreen.new(scene)
screen.pbSaveScreen

Gráficos

Los gráficos de las pantallas de guardado y carga se encuentran en Graphics/UI/Save/ y Graphics/UI/Load/:

Archivo Ubicación Descripción
bg.png Graphics/UI/Save/ Fondo de la pantalla de guardado
bg.png Graphics/UI/Load/ Fondo de la pantalla de carga
panels.png Graphics/UI/Load/ Paneles de información de la partida
Importante: Nunca modifiques la estructura de los datos guardados sin proporcionar un mecanismo de migración. Essentials incluye un sistema de SaveData.register_conversion para convertir datos viejos al nuevo formato al cargar partidas antiguas.