Como guardar un juego en game maker
Hoy vamos a empezar una serie de artículos para hablar como guardar un juego en Game Maker. Sabemos que en Game Maker Studio tenemos dos acciones para guardar y rescatar partidas: Save Game y Load Game. Pero con estas acciones, tenemos un gran problema: no guarda cosas como las variables que hemos creado, si hemos utilizado estructuras de datos, el sonido que se está reproduciendo… Así que, si tienes un juego sencillo, te puede servir, pero si no es así, toca saber como guardar las partidas en Game Maker. Vamos a verlo.
Que hay que saber para empezar: los límites del sistema de ficheros
Antes de empezar a hablar de ficheros y tipos de datos, es necesario saber los límites que tenemos a la hora de gestionar archivos.
Para empezar, desde Game Maker no se puede leer o grabar desde cualquier parte del dispositivo/ordenador. Por ejemplo, si hacemos un juego de Windows, no podríamos acceder a la carpeta Mis Documentos. Ya no hablemos si el juego está pensado para móviles y tablets. Parece lógico, ¿verdad?
Entonces, solo podemos acceder a:
- Dónde se instala el juego. Aquí estarán todos los recursos que hemos añadido: sprites, sonidos, fondos, etc. Pero también puede haber ficheros externos, los que estarían en la carpeta Included Files y añadimos nosotros.
- El área de guardado. Es la carpeta o ruta donde podemos guardar ficheros de texto, paquetes descargados desde internet, etc. Sabemos que esta carpeta es un área segura (que no intervienen otras aplicaciones), y también se garantiza que se puede escribir sin tener porblemas (que no sea una carpeta de solo lectura).
Y todo esto, siendo transparente para nosotros. Es decir, si haces un juego para Windows, Mac o Android, siempre tenemos estas dos rutas para nosotros. Obviamente, cambiará dependiendo del sistema operativo que usemos, pero no tenemos porque saberlas. Lo único que tenemos que saber es que existe la variable working_directory
.
¿Qué es la variable working_directory
?
En la variable working_directory
, podremos acceder a las dos áreas: depende de si estamos leyendo o escribiendo. Por ejemplo, imaginad que queremos leer un dato de un fichero. Internamente, Game Maker primero irá al área de guardado para leerlo. Si no encuentra ese fichero, irá al área de instalación, por si lo hemos incluido nosotros en Included Files. Si intentamos guardar un dato, solo irá al área de guardado.
Gestión de directorios
Una vez tenemos claro el área dónde estamos trabajando y el uso de la variable working_directory
, es posible que nos interese gestionar el uso de carpetas. Por ejemplo, queremos que las partidas se graben en la ruta working_directory + “\savedata\”, pero debemos crear antes ese directorio. Para el uso de directorios, Game Maker nos aporta algunas funciones más:
- Con la función
directory_exists()
podemos pasarle por parámetro la ruta completa para saber si el directorio existe. - Con
directory_create()
podemos crear una carpeta. Por ejemplo.if !directory_exists("Games") { directory_create("Games"); }
- También existe la variable
temp_directory
, que podemos almacenar ficheros de todo tipo para que se eliminen una vez cerremos nuestro juego.
Conclusiones finales
Así que yo tendría muy claro que si queremos solo leer, podemos incluir un fichero en nuestro proyecto. Un ejemplo clarísimo sería un fichero con textos de traducciones de nuestro juego.
Pero si queremos guardar y leer puntuaciones, variables, vida inventario, etc, es mejor crear el fichero, en el área de guardado, y a partir de ahí operar.
¿Y una mezcla de ambos? Por ejemplo, tenemos un personaje con un inventario a gestionar. Pero decidimos que inicialmente empieza siempre con 3 elementos del inventario. Podríamos incluir al proyecto un fichero de texto con la estructura que nos interesa, más esos tres elementos.
¿Y cuando se amplíe? Se guardará el fichero en el área de guardado.
¿Y qué pasa con esos tres elementos? ¿Están en el fichero del área de guardado? ¿Y si decido en una nueva versión que empiezan con 4 elementos? Si empiezan a surgir esas dudas, es mucho mejor programar que cuando empezamos el juego, si no encuentra ningún fichero, que cree uno con los datos básicos.
Si estamos testeando nuestro juego, es bueno saber que la ruta para localizar el fichero creado es en %localappdata%/nombre_del_juego. Es decir, desde el explorador de Windows podemos escribir %localappdata% (la ruta definitiva que muestra cambia dependiendo del sistema operativo), y a partir de ahí buscar la carpeta del juego.
Como último dato, destacar que en juegos para HTML5 y Windows 8 hay un límite de almacenamiento, que puede ser entre 1Mb y 5Mb, dependiendo del navegador que utilicemos. Es decir, nada aconsejable guardar capturas de pantalla, sprites grandes, etc…
En el próximo post, hablaré de un tipo especial de fichero de texto que nos será muy útil para guardar partidas.
Es muy interesante todo lo que dices… me parece todo genial. Pero en el caso hipoteco de que yo creo un juego y quiero almacenar como tu dices por ejemplo, la lista de ganadores, monedas del juego etc. Según tu comentas esto queda almacenado en un archivo *.ini, que me parece genial, pero si alguien quiere cambiar la información por ejemplo me pongo 5000000 de monedas y hago trampas… el juego pierde sentido y lógica, pregunto… hay alguna forma de almacenar esos datos y que estén protegidos? debo de crear un scritp con algún algoritmo para encriptar los datos? esa seria la solución ? hay algo mas que no sepa me explicas una solución. SAludos
Si usas un fichero ini, debes usar una función de encriptar y desencriptar en cada información. Si usas un mapa, ya tiene una función para grabar y leer de esta manera. Mira en el siguiente enlace.
Gestión de mapas