Cyg: Sistema de guardado asíncrono y robusto para GameMaker
Uno de los mayores dolores de cabeza al desarrollar en GameMaker suele ser el sistema de guardado. Históricamente, GML no lo ponía fácil: gestionar la serialización, evitar que el juego se congele al escribir archivos grandes y asegurar que los datos no se corrompan es una tarea que consume horas de documentación.
Últimamente, GameMaker ha mejorado mucho sus funciones de archivos y estructuras, pero todavía falta esa "capa" de robustez que te dé tranquilidad. Por eso, he estado trabajando en Cyg, una librería propia que automatiza estas tareas pesadas.
¿Qué hace a Cyg diferente?
No quería simplemente "escribir un JSON". Quería algo que aguantara el flujo de trabajo de un proyecto real:
- I/O Asíncrono por defecto: Fundamental para evitar tirones de frames (stuttering) y asegurar compatibilidad con plataformas más allá de Desktop, como consolas o navegadores.
- Gestión de Backups y Compresión: Reduce el peso de los archivos y, más importante, genera automáticamente un archivo
.bakde respaldo. Si algo falla durante la escritura, el progreso del jugador no se pierde. - Seguridad y Verificación: Incluye cifrado RC4 opcional y verificación de integridad mediante checksums para evitar manipulaciones externas simples.
- Sistema de "Fixers" (Migraciones): Quizás mi parte favorita. Si actualizas tu juego y cambias la estructura de los datos, puedes registrar un fixer para que los archivos antiguos se transformen automáticamente a la nueva versión sin romper nada.
Un ejemplo rápido de uso
La idea es que sea una API estática y sencilla de implementar:
// Guardar datos del jugador de forma asíncrona
Cyg.Add("player", { name: "Hero", level: 10 });
Cyg.Export("save/slot1.sav", "player", false, function(_success) {
if (_success) show_debug_message("¡Partida guardada!");
});
// Cargar datos con un callback
Cyg.Import("save/slot1.sav", "player", false, function(_success, _data) {
if (_success) {
var _hero = Cyg.Get("player", undefined);
}
});
Espero que esta herramienta les sirva para sus proyectos tanto como me está sirviendo a mí. Pueden revisar el repositorio y la documentación completa en el siguiente enlace:
Comentarios
Publicar un comentario