La idea principal de Hypnogogia llegó una noche luego de un montón de cosas locas que pasaron durante principios del 2021, la inspiración y el origen del juego son un tanto oscuros. Todo comenzó cuando mi esposo se contagió de COVID en una clínica privada en la que estaba trabajando cuidando pacientes críticos, luego de hacerse una prueba nasal que dio positivo, la clínica le cobró la prueba y lo despidió. Él está acostumbrado a ese trato, después de todo, es un médico boliviano, fuera de la emergencia del COVID es imposible conseguir trabajo en esa profesión, y los estándares para entrar a las pocas plazas que hay suelen ser muy elevados o requerir “amigos” para que hagan “el charle”. Incluso así, el pago llega a ser de 1$/hr. cubriendo turnos día por medio sin derecho a fines de semana. Hasta entonces yo estaba trabajando 12 horas al día para cubrir los gastos, y fue entonces cuando mi esposo mejoró de salud, consiguió un buen trabajo y pude reducir mis horas laborales a 8 y luego a 4, dejándonos con tiempo libre luego de 2 años seguidos de overburn… entonces me pregunté: ¿Será esto un sueño? tal vez, en realidad, morimos y esto es el paraíso. Y bueno, así nació Hypnogogia.
Ok… pero ¿qué es hypnogogia?
En Hypnogogia juegas una y otra vez el mismo día en la vida de Rafa: un doctor tercermundista, pero no importa cuánto intentes sabotearlo todo se arregla mágicamente al final del día. La jugabilidad es un poco como Surgeon Simulator, porque manejas las manos de Rafa con el mouse (o con el joystick) para agarrar y usar cosas, pero tiene gráficas parecidas a Night in the Woods.
Algunos detalles técnicos…
Una de las primeras cosas que hice fue el cielo, y es que quería que los amaneceres y atardeceres fueran casi tan bonitos como los reales. Para hacerlo, hice un shader para UnlitSprites con el ShaderGraph que, dependiendo de la hora del día, cambiara de color de acuerdo a dos gradientes: uno para la parte de arriba y otro para la parte de abajo.

También hice algunas nubes con el mismo shader, se trata de un sistema de partículas que se mueven muy lentamente y además tiene un shader también con dos gradientes diferentes para que las nubes adquieran ese colorcillo rojizo/violeta durante el amanecer y el atardecer.

Luego solo quedaba implementar algún script que proveyera al juego de la noción del tiempo. Suelen decir que hacer Singletons es una mala práctica, pero yo no lo veo así, al menos en este caso, todos mis scripts van a querer tener acceso a “qué hora del día es?”. La hora del día está en en un script singleton llamado Sky, en la propiedad hour que da un número de punto flotante indicando la hora del día, así si hour = 21.75
entonces son las 9:45 pm. De este mismo script dependen otros como Clock.cs, que es un reloj de manecillas, ModifiableClock.cs que permite que Rafa viaje en el tiempo al ajustar la hora del reloj de manecillas, GlobalLight.cs que permite que la intensidad y color de la luz varíe dependiendo de la hora del día y otros muchos más.

Odio admitirlo, pero una de las cosas que más me costó lograr fue el parallax, y eso es porque tengo más experiencia haciendo 2D que 3D. Creí que iba a ser tan fácil como poner la cámara en perspectiva y dejar que la matemática hiciera la magia, pero… ¡oh, qué equivocada que estaba!. Comenzar con una cámara en perspectiva y colisiones en 3D hicieron del desarrollo un infierno, porque a veces, cuando la mano de Rafa se veía como si estuviera sobre una cosa, en realidad no lo estaba, así que había que considerar cierto ángulo, o poner un collider súper largo ¿el resultado? ¡ESPAGUETI!
Al final terminé reconfigurando todos mis colliders y rigidbodies para que fueran 2D, y ocultando la tarea del parallax debajo de la alfombra. Pero el día llegó, tuve que alzar la alfombra y encarar la tarea.
Hay varias formas de hacer parallax, la forma en la que yo lo implementé fue manejando el stack de cámaras.

Sin URP se puede lograr esto de forma más intuitiva, con el URP la lógica es un tanto distinta. Tengo una cámara como base que renderiza el cielo, esa cámara se queda quieta. Allí están la luna, las estrellas y, por supuesto, el gran sprite gradiente que es el color de fondo; sobre esa cámara se renderiza la ciudad, que es una cámara en modo perspectiva que sigue a la cámara del Gameplay con el PositionConstraint.cs
, allí están las nubes, los edificios y los carros, todo lo que necesite parallax. Sobre eso renderizo el gameplay, que es la casita de Rafa con sus huevitos, su estufa, la clínica y, por supuesto, Keyla, durmiendo como siempre :3. Y por último renderizo los overlays, que contiene los diálogos y los textos de los tutoriales.
¿Qué planes hay para Hypnogogia?
Es increíble la cantidad de apoyo que ha recibido Hypnogogia. Cuando comencé a desarrollarlo, esperaba que tuviera 5 finales y esperaba terminarlo en 3 meses, pero luego de ganar el Investor Pitch Panel organizado por Latinxs In Gaming y de recibir muy buen feedback de sus jurados, decidí llevarlo a un nivel mayor.

A la izquierda, yo súper nerviosa pitcheando por primera vez O__O
Lo primero que necesito hacer es sacar un demo, ya que hasta ahora, el loop del juego aún no está implementado, luego de tener el demo debo trabajar en un vertical slice, y ya con el vertical slice comenzar a buscar un inversor o publisher. Si lo consigo, tendría que ampliar el equipo de desarrollo (que por el momento consiste de un músico y yo, que hago todo lo demás), para lograr sacar un juego más grande y en menos tiempo.
Si no consigo inversor, al menos espero conseguir un publisher porque voy a continuar con el desarrollo por mi cuenta, y cuando lo termine no quiero que este jueguito se quede en la oscuridad así que aún voy a estar buscando publisher.