Guardado, versionado y replay¶
El sistema de guardado necesita representar el mundo suficiente para continuar después de cerrar el juego. Un replay, en cambio, puede buscar reproducir acciones o permitir depurar la divergencia entre dos ejecuciones. Son problemas relacionados pero distintos.
Definir el contrato de persistencia¶
Persistí IDs estables, estado mutable, relaciones y progreso relevantes. No guardes referencias directas a objetos de UI, handles de motor, punteros o sockets. Guardá la identidad que permita reconstruirlos cuando sea apropiado.
SaveHeader:
schema_version
game_content_version
world_id
timestamp
WorldSnapshot:
entities
inventories
quests
relationships
simulation_clock
La estructura es ilustrativa. Cada proyecto debe decidir atomicidad, integridad, compresión y políticas para contenido eliminado o modificado.
Snapshots y event log¶
Snapshot: captura un estado que permite restaurar. Action log: registra intenciones para reproducir una secuencia cuando la simulación es suficientemente controlable. Event sourcing: persiste cambios como hechos; ofrece auditoría en algunos sistemas, pero no debería convertirse en obligación universal para todo el juego.
Una combinación práctica es guardar snapshots periódicos y registrar información diagnóstica entre ellos cuando sea útil. Para replay exacto no basta con guardar inputs si la simulación usa física no determinista, RNG no controlado o tareas concurrentes con distinto orden.
Migración¶
Asigná versiones a los esquemas. Probar una migración desde una versión antigua es más importante que prometer compatibilidad universal. Si se renombra una definición YAML, usá IDs estables y una estrategia de alias o migración.
Qué verificar¶
Guardar/cargar un mundo con entidades enlazadas, restaurar IDs y relaciones, simular después de cargar, rechazar archivos corruptos de forma controlada, y detectar el primer tick divergente cuando se usa un replay determinista.
Relacionado: Estado del mundo, definiciones e identidad, Intenciones, acciones y eventos, Núcleo de simulación y scheduler, Probar la simulación y medir antes de optimizar.
Fuente: Unreal Replay System.