¡Beta publicada!

Justo a tiempo para el comienzo de la fase de evaluación del concurso, ¡la beta de Solaria ya está lista!

Se puede descargar desde el repositorio del juego, en el apartado de “Downloads”.

Si encontráis algún problema o tenéis algún tipo de sugerencia, no dudéis en abrir un issue.

En las próximas semanas, nos gustaría añadir cosas que se han quedado fuera por falta de tiempo: generador de nombres, notificaciones nativas, iconos de plantas por fase… veremos qué tal la recepción (y cuantos bugs aparecen antes :p).

Anuncios

Séptima semana

Nos acercamos al final del desarrollo. La interfaz gráfica ya está prácticamente acabada, solo hace falta seleccionar la fuente. También están seleccionados ya los efectos de sonido y las pistas de música (gracias a OpenGameArt.org, donde hay assets libres de todo tipo). Aquí el tema principal de Solaria.

Los modelos también progresan adecuadamente. Casi todas las macetas están listas, e igual con las plantas. No queremos mostrarlas todas porque hay unas cuantas que son sorpresa 😛

En cuanto al sistema de guardado, observé un fallo en la documentación de Godot que corregí mediante esta PR. Igualmente, hice otra aportación a la documentación de shaders.

He preparado un shader para plantas que, desgraciadamente, hayan muerto:

photo_2018-03-30_22-41-15

photo_2018-03-30_22-41-22

 

 

 

 

 

 

 

 

 

 

Os dejo con una foto del bonsai shakan con la maceta plana típica de los bonsáis 🙂

image_2018-03-28_17-03-25

 

Nos vamos acercando al final del desarrollo. Dado que la fase de evaluación comienza el próximo jueves, no nos queda mucho tiempo para implementar las cosas restantes. Por ejemplo, el uso de notificaciones nativas del sistema no será posible. Igualmente, aún no ha sido lanzado Godot 3.1 con el renderer GLES2, de modo que móviles con GPUs Adreno, entre otras, no podrán cargar el juego correctamente. 😦

Sexta semana

El desarrollo progresa adecuadamente. Durante esta semana he implementado el sistema de guardado de partida. Para ello he usado varios ficheros JSON, que son parseados/escritos cuando se abre/cierra la aplicación. Godot tiene un sistema de notificaciones que gestiona todas las acciones que se hacen sobre la ventana del juego (abrir, cerrar, quitar focus, quitarle focus, etc). Una de las ventajas de mantener la información en varios ficheros es la de que solo se carga lo que es necesario en cada momento. Los datos generales se cargan y guardan en el mismo momento, aunque se guarden en distintos ficheros. El fichero de los timers, por ejemplo, no se puede hacer así. Cuando se quita el focus de una app en android (se deja en segundo plano) la aplicación deja de procesar. Esto tiene la complicación de que los timers dejan de contar el tiempo que pasa. Por eso, es necesario guardar los segundos del sistema a la hora de cerrar la aplicación, para poder calcular el tiempo transcurrido desde que la app entró en segundo plano una vez se vuelva a abrir. A la hora de cargar, se podría hacer una resta directamente, pero teniendo cuidado con que los valores no pasen de 0 (se puede colocar una cota inferior fácilmente haciendo uso de la directiva “max”).

Otra de las ventajas de mantener los datos en varios ficheros en texto plano es que el juego es fácilmente hackeable. Evidentemente no recomiendo que se haga esto (al menos la primera vez que se juega, ya que se pierde la gracia del juego) pero si alguien quiere modificar su partida, no existe ningún problema con que lo haga. Estos ficheros podrían estar fácilmente cifrados, pero dado que no almacenan información confidencial y que se trata de un juego que no tiene multijugador, no existe ningún problema en usar trucos (aunque se pueda perder la gracia del juego, pero eso ya depende de cada uno).

La creación de los assets también va perfectamente. Aquí una imagen del girasol:

wakba1b

 

Dado que tanto las mecánicas como el sistema de guardado están completados, ahora el juego es jugable enteramente. En los próximos días trabajaré en actualizar la interfaz gráfica para hacerla agradable a la vista. He seleccionado un pack de UI, licenciado bajo CC-0, y la he modificado ligeramente para que se adapte mejor al estilo del juego. El resultado:

paneles

 

Después de colocar estos paneles en todo el juego, tendré que añadirles animaciones (como mínimo, de fade-in y de fade-out). Tras ello, quiero investigar cosas que integrar, como por ejemplo, la manera más eficiente de integrar el ciclo día-noche, incluida la variación de la tonalidad del foco principal de iluminación y del fondo.

Dado que nos gustaría testear el juego todo lo posible, estamos barajando la posibilidad de hacer una beta dentro de 2-3 semanas para que se reporten posibles fallos y recibir feedback. Sin embargo, aún no está completado el renderer de GLES2, así que no sé cómo será la compatibilidad… habrá que probar 🙂

 

Quinta semana

Durante esta semana, he implementado la totalidad de la tienda de objetos, el sistema de dinero,  los menús de desbloqueo de objetos… en resumidas cuentas, todas las mecánicas planteadas. Eso quiere decir que a partir de ahora, tras poco más de un mes, Solaria es perfectamente jugable (siempre que no quieras guardar partida, jugar con menús feotes y tener poco contenido).

Por tanto, a partir de ahora llega una etapa del desarrollo mucho más creativa que hasta ahora: con el core ya listo, es hora de pulir todos los aspectos (creo que empezaré por los menús) y comenzar a añadir cosas más interesantes que espero que hagan el juego mucho más interesante y, sobre todo, bonito.

La creación de modelos sigue viento en popa: esta semana hemos recibido los modelos del girasol, del bonsái (estilo moyogi) y también varias macetas, como por ejemplo la genial copa de oro:

trophy

En la semana próxima comenzaré por trabajar en lo primordial ahora: el sistema de guardado de datos. Dado que hay que guardar el valor de los timers por separado, será un poco diferente de un sistema de guardado convencional, pero está medianamente planteado en mi cabeza. Tras eso, haré bonitos todos los menús (ya tengo planteado el diseño), añadiré animaciones, sonidos, shaders, iluminación…

Cuarta semana

El desarrollo continúa. La entrada de esta semana se va a centrar en el apartado artístico, ya que Jaime ha hecho varios modelos super chulos 🙂

Para empezar, la fase evolutiva del tulipán:

tulipevolution

 

También tenemos una nueva maceta:

photo5839253741562342729

 

Os habréis fijado que las imágenes tienen unos bordes de sierra horribles… por suerte, habilitar el suavizado de bordes (MSAA) en Godot es algo trivial. Aquí una comparativa entre el MSAA x16 y deshabilitado:

suavizado

Mucho mejor, ¿no? No obstante, creo que en móvil con un filtrado MSAA x2 será suficiente.

Por otro lado, la lógica de las mécanicas está casi implementada: en los próximos días estará finalizada. Tras eso, añadiré el sistema de savedata (no lo he hecho aún porque quería conocer qué guardar exactamente), y añadir features más avanzadas. También quitaré ese azul de fondo horrible y lo sustituiré por un fondo dinámico en función de la hora del día. Además de eso, quiero añadir Global Illumination y, en resumen, hacerlo todo más bonito (hay que añadir animaciones, fuentes, etc).

Aún quedan muchas cosas por hacer, pero afortunadamente vamos bastante bien de tiempo 🙂

Tercera semana

Esta semana el avance se ha visto un poco reducido a causa del HashCode… pero ha sido una experiencia muy interesante, así que no hay problema 🙂

Conseguí implementar el avance de los timers. En teoría esto es fácil, pero había algunos retos. Por ejemplo, el proceso de los timers funciona diferente en escritorio y en android. En escritorio, se procesan solo con estar el programa en ejecución, en android, se procesan únicamente si están en la activity principal. Dado que la idea es que el avance no se corte si se cierra o se coloca en segundo plano la app, he tenido que buscar la manera de guardar el avance de los timers.

Mirando en la documentación de Godot, llegué a conocer sobre las notificaciones del MainLoop. Haciendo uso de esto, es tan fácil como sobreescribir una función de Godot y decidir qué hacer con cada notificación que se recoge. De esta manera, cuando se recoge la notificación de fuera de focus en android, guardo el progreso de los timers, y cuando se recibe la notificación de focus dentro, cargo el valor de los timers. Dado que durante el tiempo que la app está en segundo plano los timers no avanzan, es necesario guardar el momento en el que se puso en segundo plano (los system_secs) para poder hacer la diferencia a la hora de cargar los valores de nuevo.

A raíz de esto, he estado pensando en mejores maneras de guardar los datos de forma más eficaz. He descargado el script Global y lo he asignado a unos cuantos nodos hijos del singleton Global dado que así es más fácil seguir la filosofía de Godot.

También he hecho el popup que aparece al seleccionar el botón de abono… los iconos, evidentemente, son placeholder :p

screenshotpopup

 

Ahora mismo los menús son feísimos, pero quiero definir primero la lógica y luego pasaremos a hacerlo bonito. Igual con el fondo del mundo, que es el que venía por defecto.

Por otro lado, Jaime continúa haciendo modelos. A continuación, la tercera fase del cactus.

Modelado:

captura

Renderizado:

captura_1

Han quedado bastante bien, ¿no?

Segunda semana

¡El desarrollo va viento en popa! Ha habido mucho avance esta semana 🙂

Primero, añadí la fuente al centro del jardín, incluida el agua con su animación. Queda bastante bien, ¿no?

screenshot

Además de la fuente, también están las plataformas donde irán las plantas de nuestro jardín. Tras esto, era hora de comenzar a programar la mecánica de colocar plantas. Hice una escena placeholder que me sirve mientras los modelos son producidos.

screenshot_1

De hecho, aunque la planta en sí sea placeholder, la maceta en la que está colocada es uno de los modelos del juego, la maceta por defecto 🙂

Además de las mejoras gráficas, también hay muchas cosas por detrás: (casi) todo el handling de experiencia/tiempo de las plantas está diseñado, así como las variables globales.

Pensé que era hora de comenzar a programar la UI. Por ahora sólo he hecho la estructura del menú que muestra la información sobre cada planta del jardín. Aún quedan muchas cositas, pero la estructura principal está definida y casi muestra toda la información de la planta. Afortunadamente, las herramientas de Godot para UI son muy cómodas de usar.

screenshot_2

Todavía los botones no tienen funcionamiento (aunque algunas de las funciones ya están programadas, no las he conectado con la UI aún) porque aún no he terminado las funciones para rellenar las barras de abono/agua (las de arriba a la derecha).

Dado que comencé a trabajar con strings, consideré que era un buen momento para comenzar con el archivo de traducción.

screenshot_3

Y aplicándolo al proyecto…

translations

En principio estará en español e inglés, pero si alguien quiere contribuir con las traducciones, las PR están abiertas 🙂

Quizás os hayáis fijado en que en la anterior captura pone “Sunflower” tanto en español como en inglés. Esto es porque ese es el campo de “nickname” de la planta (por eso tiene un botón de editar a su lado) y, por ahora, coloco como nickname el propio nombre de la planta. Me gustaría añadir nicknames procedurales usando el genial módulo para Godot en las próximas semanas.

Lo siguiente que toca es programar el comportamiento de los timers, integrar sistema de savedata y terminar la UI. Tras esto, quiero añadir el ciclo día/noche al fondo y pulir animaciones, efectos especiales, etc… también hay que producir todos los assets, ¡pero vamos bien de tiempo!