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 .bak de 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:

https://github.com/Totobal5/Cyg

Comentarios

Cargando menciones...

Entradas más populares de este blog

Cimplicity: Cambiar texto de un botón según el estado de un punto

Cimplicity: Un problema de región

RISH LM-1360: No muestra el menú de IP