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 principal se llama Game.rxdata. La base lo guarda dentro de System.data_directory cuando esa carpeta existe; de lo contrario usa ./Game.rxdata. Consulta SaveData::FILE_PATH para obtener la ruta efectiva.
| Archivo | Descripción |
|---|---|
Game.rxdata |
Archivo principal de guardado |
Game.rxdata.bak |
Copia del guardado anterior. El guardado de emergencia y las conversiones de versión crean este archivo auxiliar. |
La ruta se define en SaveData::FILE_PATH dentro de Data/Scripts/007_Save data/002_SaveData.rb. No supongas que siempre está junto al ejecutable.
La ubicación se puede consultar 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:
- Nombre del jugador
- Número de medallas
- Número de Pokémon en la Pokédex
- Tiempo de juego
- Ubicación actual
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) |
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
Bloqueo por mapa o situación
La pantalla del menú de pausa oculta la opción de guardar cuando $game_system.save_disabled está activo, durante la Zona Safari o durante el Concurso de Insectos. El sistema no define en map_metadata.txt una propiedad general de "no guardar" por mapa; si quieres bloquearlo en una zona, activa y desactiva save_disabled desde los eventos apropiados.
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
}
})
Convertir partidas antiguas
Si un cambio de versión modifica la estructura de datos guardada, registra una conversión con SaveData.register_conversion. La conversión se ejecuta al leer una partida cuya versión sea anterior a la indicada. Se puede actualizar un valor concreto con to_value o manipular el hash completo con to_all.
SaveData.register_conversion(:mi_conversion) do
game_version "1.1.0"
display_title "Actualizando datos de partida"
to_value :player do |player|
# Ajusta aquí el objeto del jugador a la nueva estructura.
end
to_all do |save_data|
# Añade o transforma claves globales si hace falta.
end
end
Para conversiones de la propia base también existe el criterio lbds_version; el sistema distingue conversiones de Essentials, del juego y de La Base de Sky. El código crea Game.rxdata.bak antes de ejecutar conversiones y vuelve a escribir el archivo tras convertirlo.
Manejo de errores al cargar
Al cargar, si el archivo principal no supera la validación y existe el archivo .bak, la pantalla de carga intenta usar ese respaldo. El guardado de emergencia copia el archivo previo antes de escribir el nuevo, y las conversiones también crean una copia antes de modificar datos. Mantén copias externas si necesitas conservar versiones anteriores a ese único respaldo.
# 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 |
SaveData.register_conversion para convertir datos
viejos al nuevo formato al cargar partidas antiguas.