Usar Google Play Games para añadir logros
Una de las características que tenemos en la tienda de apps de Google es la posibilidad de utilizar Google Play Games: resumiéndolo rápido, es el Game Center de iOS. Podemos decir que es una red social dentro de los videojuegos: puedes compartir con amigos juegos, jugar a multijugador, subir de nivel entre todos los juegos y llevar un registro de todos los logros desbloqueados.
Ahora leerás como configurar estos logros desde Google Play para que sea visible desde esta plataforma con el servicio Google Play Games. ¡Al ataque!
Qué tipos de logros hay que crear
Antes de nada, recomiendo la lectura de Andy Makes de como definir unos logros que sean atractivos para tus jugadores. Por ejemplo, estoy de acuerdo que crear un logro diciendo que has superado el tutorial no aparta ningún valor añadido al usuario, así que es mejor evitarlos. Los logros tienen que ofrecer:
- Maneras alternativas de jugar: pasar la misma pantalla sin disparar, sin usar items especiales, etc.
- Conseguir hitos: aunque no sean relevantes en el desarrollo del juego, matar un número determinado de unidades o lograr pasar una pantalla en un determinado tiempo debe premiarse de esta manera.
- Habilidad: pasar un enemigo/monstruo de final de fase o una determinada área es un buen ejemplo. Recordemos que los logros sirven para compartir con los amigos, y una manera de publicitar el juego es compartir cuan lejos llegas jugando con él.
También habla de logros inevitables, que es el ejemplo que he puesto antes con lo del tutorial. Creo que un juego deberái de poder pasarse entero sin conseguir ningún solo logro, de esta manera puedes implicar al jugador, sin llegar a ningún extremo.
Acceder a los logros desde el panel de Google Play
Nos vamos a la dirección https://play.google.com/apps/publish/, dónde tendremos nuestro juego publicado (aunque no sea visible o en versión beta tal y como vimos. Accedemos a nuestro juego y podemos ir al menú de Servicios de Juegos, dónde encontraremos la opción de b. Nos aparecerá un listado, al principio vacío, como es obvio, dónde podemos añadir nuestros logros para este servicio. Vamos a añadir uno para ver los datos que nos piden.
Añadir logros en Google Play
Le damos al botón de Añadir nuevo logro, y nos aparecerá una ventana nueva. Añadiremos estos datos:
- Nombre. Este será el nombre del logro, donde podremos crear un título de máximo 100 caracteres.
- Descripción. Podemos detallar que conseguimos con este logro. Es un dato opcional.
- Icono. Es una imagen de tamañao 512×512.
- Logros incrementales. Nos permite la posibilidad de decir que el logro creado es necesario creando varios pasos, con un valor numérico entre 2 y 10.000. Por ejemplo: podemos tener un logro de matar 1000 enemigos e ir guardando estos enemigos en un logro, y al llegar al número deseado se activaría.
- Estado inicial. Si queremos que el logro siempre esté visible, aunque esté bloqueado, o si está oculto hasta que se desbloquea. A destcar que te marca que este campo y el anterior no se puede modificar a posteriori.
- Puntos. Al igual que en Game Center, podemos asignar puntos diferentes valorando la dificultad del logro, hasta un máximo de 1000 puntos para todo tu juego.
- Orden en la lista. Desde aquí se puede cambiar el orden del logro para que aparezca de manera diferente.
Desde aquí ya podríamos gestionar los textos en diferentes idiomas y guardarlo como borrador o dejar publicado nuestro logro.
Cosas propias de Google Play
Cuando creas un logro, te crea un ID propio con un valor alfanumérico. Este ID es el que tienes que usar en tu código para poder referenciarte a él. Por ejemplo, al crear un logro te crea el IDCgxxxm_YYYYYZZZZZ. Como vemos no es el valor más bonito del mundo, y nos obliga a no poder usar IDs autonuméricos que nos podría facilitar la vida, al menos en Game Maker Studio. Es lo que hay.
Como probar tus logros
Aunque no tengamos publicado nuestros logros, es posible poder testearlos. En el menú de Testing podemos decir que usuarios pueden probarlos, o si queremos que lo prueben el grupo entero de beta o alpha tester. Así podríamos controlar que no salgan publicados si queremos hacer algunos cambios. Se pueden incluso añadir nuevos logros como borrador aunque tengas logros publicados.
Código en Game Maker Studio para tus logros
Ahora que lo tenemos todo configurado, vamos a ver las modificaciones que deberíamos de hacer en un juego para la gestión de esos logros.
Primero de todo, yo prefiero tener los logros guardados en un fichero en local, por ejemplo, en un fichero ini, por seguridad: falla internet, te has equivocado en el código, etc. Por lo tanto, antes hay que hacer toda la codificación de guardar estos logros, como si no existiese Google Play Games. Luego simplemente hay que sincronizar los logros que guardas con la plataforma.
Variable global para usar logros
Yo suelo guardarlo en una array global, así que suelo inicializarlos de esta manera:
ini_open("savedata.ini"); for (i = 1; i <= TOTAL_ACHIEVEMENTS; i++) { global.achievement[i] = ini_read_real("achievement", string(i), false); } ini_close();
Ya tenemos la variable de logros inicializada.
Room para mostrar logros desbloqueados
También es muy recomendable tener una room con todos los logros bloqueados y desbloqueados, leyendo los datos del fichero. Así puedes mostrar en todo momento como va. No es necesario la gestión de puntos que haces al definir el logro, con guardar y mostrar si está bloqueado o no es suficiente. Un ejemplo del fichero ini:
[achievement] 24="1.000000" 1="1.000000" 2="1.000000"
En este caso sólo guardo los logros desbloqueados. ALlmostrarlos en la room, uso un sprite con dos imágenes, una con la imagen bloqueada y otra desbloqueada. En el evento Create digo que image_speed = 0;
para que no haya animación en el sprite. Luego solo hay que poner
image_index = global.achievement[num_achi];
Dónde num_achi es el número de logro.
Como guardar tu logro
Imaginemos que el primer logro es que has hecho el tutorial. Podemos poner cuando se destruya un obbjeto o cuando salimos de la room el siguiente código:
global.achievement[0] = true; ini_open("savedata.ini"); ini_write_real("achievement", 1, global.achievement[0]); ini_close();
De esta manera tan sencilla podríamos poner cada logro y grabarlo. Con todo el código anterior, inicializar variables, mostrar logros, guardar logros, es suficiente para gestionarlos en la unidad de almacenamiento (disco duro, tarjeta SD) del dispositivo.
Configurar Game Maker Studio para Google Play Games
Antes de hablar de las funciones necesarias para grabar los logros en Google Play Games, hay que configurar para que nuestro juego se sincronice correctamente.
Vamos a Global Game Settings, en la pestaña Android/Fire. Aquí dentro vamos a la pestaña Social y activamos el check Google Play Services. Al hacerlo, es posible que nos pida descargar la extensión necesaria, cosa que haremos. Luego debemos rellenar la App ID. Ese dato está dentro de Google Play. Si todavía estamos en la pantalla de logros, el número de unos 12 dígitos que aparece debajo es el que debemos de escribir como App ID.
Funciones para gestionar logros en Game Maker Studio
Ahora hablamos de las funciones propiamente de Google Play Games. Game Maker Studio las ha unificado tanto para Game Center, Google Play y Amazon Circle, así que si tenemos nuestro juego en varias plataformas solo tenemos que hacer ligeros cambios en el código.
Para empezar, lo primero que hay que hacer es loguearse. Es recomendable hacerlo en el primer objeto que ejecuta el juego, ya que puede tardar unos segundos.
achievement_login();
Tenemos el código para guardar un logro, así que sólo hay que añadir la siguiente línea:
if achievement_available() {achievement_post("CgkI49m_XXXXXXXXX", 100);}
El primer parámetro es el código del logro que Google Play nos ha dado, el segundo el porcentaje del logro. Es decir, podemos hacer que vaya grabando un porcentaje para que vea cuanto lo falta para conseguir el logro. Si es un logro sencillo, con poner el 100% es suficiente.
Esto es en el momento de grabar el logro en la plataforma. ¿Y si no está disponible la plataforma para grabar? No podemos dejar el logro sin grabar en Google Play Games y que esté grabado correctamente en el fichero.
La opción más fácil es que una vez estemos en el menú, recorrer toda la array global, comprobar si estamos conectados y actualizar el logro por si las moscas.
//Logro 1 if global.achievement[0] == true { achievement_post("CgkI49m_XXXXXXXXX", 100); } //Logro 2 if global.achievement[1] == true { achievement_post("CgkI49m_BBBBBBBBBB", 100); }
Como el identificador del logro nos lo ha dado Google Play Games, no podríamos hacer un bucle para recorrerlo, a no ser que hagamos un switch() por cada logro:
for (i = 1; i <= TOTAL_ACHIEVEMENTS; i++) { if global.achievement[i] == true { switch (i) { case 1: achievement_post("CgkI49m_XXXXXXXXX", 100); break; case 2: achievement_post("CgkI49m_BBBBBBBBBB", 100); break; case 3://Resto del código } } } }
Como vemos, poco código nos ahorramos con el bucle for
.
Conclusión
Crear logros desde Google Play es bastante sencillo, todos los pasos son intuitivos y ofrece la posibilidad de probarlos sin que estén publicados. También hemos visto un código básico necesario para guardar estos logros.
¿Os parece sencillo de usar?
Saben como puedo obtener el DisplayName que da Google Services???
Osea como quien dice tu nick de google games?
Hola Erick,
en el post no he puesto todas las funciones del tema de logros, al igua que con otras funciones puedes gestionar tablas de clasificación, enviar retos a tus amigos, etc.
En la ayuda de achievement_login() te comenta que si añades un Evento asíncrono, que se desencadena una vez has llamado a la función, puedes recoger una serie de datos como puede ser:
Que creo que son los datos que necesitas. Copia el código de este enlace
Ayuda YoYoGames achievement_login
David