lunes, 30 de julio de 2018

ZGBJAM 2018

Wow this one has been really fun! I feel extremely happy about the outcome of this jam! Almost everything in its organization was improvised, but good friends always heed the call :)



We got very different kinds of games: Zalo made a game in which you had to push a ball using a shield, Dani Márquez made a little mini-golf, David Erosa made a mix of basketball and puzzle, Ulises a card based game and Tatos a Downwell demake. Some are more polished than others, but I feel like all of them are great and fun prototypes.

Other friends joined the jam online: Maikel made his game in just 24h. It's simple but it has very nice graphics! Deebrol made an excellent work too with a very polished game. I would have liked to have more devs online, but it's summertime and a very niche engine... so I guess I should be happy for getting eight entries.






My previous experience as a one man band in a game jam using ZGB wasn't very good. I couldn't finish my game and ended extremely stressed and tired. C programming is a bit hard for me and I didn't have much of help, as the rest of the jammers were using Game Maker or Unity3D. In addition, I didn't really have a solid concept for my game...

This time I tried to focus on a simple idea, trying to recycle some code and adding something new to the game. The output has basically been a platformer in which the main character (a ball) is bouncing all the time. I (kind of) completed my game, Dungeon Ball, featuring:
  • good controls
  • good and simple core gameplay
  • four levels (I still have to work on levels a lot)
  • working screen flow (press start, levels, game over, victory, etc.)
  • winning and losing conditions
  • music and sound effects (crappy and fast made, but hey...)
Zalo had to help me with the physics, as I'm not still sure about how to use (unsigned) fixed type variables haha. Using Visual Studio instead of Notepad++ was a huge step ahead too. Viewing the list of parameters for each function is essential.

I guess it's a good time to note down the problems we all had during the development time (and installation time!) and try to improve the wiki, the docs and tutorials to make it friendlier and easier.

It's been an awesome weekend. Thanks everybody for sharing the work and the time! Special thanks to Genera Games for sharing their facilities with us!

martes, 24 de julio de 2018

ZGBJAM Is Coming Next Weekend!

So we've got a little 48h game jam featuring the ZGB engine. Here's the itch.io site with all the rules and resources you need to start making Game Boy games!!

We'll get together on-site with a couple of friends to test what we are able to do in such a short amount of time. I'll be blogging the evolution of the event :)





miércoles, 27 de junio de 2018

#WeekendSimulator 2018

Este pasado fin de semana, Jorge "Deebrol" Pedraza ha organizado un evento que de alguna forma ha tomado el relevo de nuestro querido NexoIndie Resort, o sea, una especie de Freakend sureño. Básicamente se trataba de reunir a un puñado (pocos más de 30) desarrolladores de juegos durante dos días en un ambiente rural (Venta del Charco), con algunas charlas y tiempo para compartir con cervecitas y piscina. La intención es disponer de un ambiente lúdico en el que haya hueco para desarrollar un poquito algunos temas mediante charlas y el uso del formato open space.

El evento desde mi punto de vista ha estado súper bien: no sólo ha sido el marco de un montón de conversaciones interesantes, sino que he tenido la oportunidad de conocer a muchos colegas de trabajo a los que no ponía cara... ¡Con algunos incluso había trabajado en algún título!


En esta primera edición estaban planteadas cuatro charlas más una mesa redonda, pero al final la cosa quedó en tres charlas más una sesión de open space y mucho piscineo :) La primera charla fue de Igor de Monster's Pit, que nos estuvo hablando sobre el concept art de un juego muy conocido. Brutalísimo arte que a veces, por ajustes de producción se queda fuera... La segunda fue de Lucas, que nos contó un montón de cosas sobre el proceso industrial que hay detrás de los lanzamientos F2P que están haciendo desde Genera Indie.

El domingo tras el desayuno me tocó a mi hablar, y me había preparado algo un poco diferente. Tras empezar a preparar unas slides sobre diseño de sonido, pensé que quizás no iba a ser suficientemente interesante para los asistentes, así que le di un giro y al final me centré en un tema bien diferente: la identidad de los desarrolladores de videojuegos como grupo y como individuos, sueños y miedos. Mi intención era abordar un poco el imaginario que todos tenemos en la cabeza, sacarlo a relucir, compartirlo y ponerlo un poco en perspectiva para ver si podemos plantearnos un discurso interno más positivo.

La verdad que tenía muchas dudas sobre el contenido de la charla, sobre todo porque nunca había estado en ninguna parecida, pero el día anterior, Lucas propuso un open space sobre el Síndrome del impostor y me flipó que la gente se abriera tanto y fuera tan honesta compartiendo sus ideas y sentimientos. Siempre defenderé los eventos pequeños por momentos como ese: con pinceladas de sinceridad y franqueza, y con gente escuchando respetuosa y activamente. Hacer algo así hubiera sido imposible en un ambiente masificado y formal. ¡Así da gusto!



La recepción del contenido finalmente fue bastante positiva, aunque el final quizás se hizo un poco largo (creí que me iba a quedar corto y me pasé casi una hora). Algunos compis me han pedido el pdf, pero como es excesivamente informal, he pensado que es mejor compartir algunas de las fuentes "serias" a partir de las cuales le di forma. A lo mejor los enlaces que os pongo aquí no son los mejores, pero podéis seguir la pista gracias a Google :)
En principio eso es todo. ¡Me gustaría repetir el año que viene! Muchísimas gracias a todos los participantes y a Jorge por montar el sarao. Aquí podéis visitar el momento de Twitter, con algunas fotos y anécdotas :)

viernes, 20 de abril de 2018

Roland JV-1080 via Ctrlr

¡Actualmente estoy trabajando en la música de un juego que pinta bastante bien! Está ambientado en el espacio y la referencia era... la banda sonora de Interestellar :) En general el concepto tiene que ser algo ambiental, que esté de fondo y que no se haga repetitivo.

Como me apetecía dejar un poco de lado las librerías orquestales y alejarme un poquito del rollo que me habían propuesto (no soy muy fan del autor de la OST), decidí partir del diseño sonoro desde cero y hacer una especie de mock-up con el Roland JV1080. "¿Por qué utilizas un cacharro de hace veinte años?" Porque MOLA. Desde siempre me ha encantado la idea de hacer música únicamente con un aparato o programa (trackers...) y de vez en cuando viene bien un chute de inspiración. La posibilidad de añadir capas o librerías está ahí para más tarde. El detonador de este ansia por programar patches viene del reciente lanzamiento de este panel de Ctrlr. Todavía tiene algunos fallos, pero supone un salto brutal con respecto a editar todo desde la pantalla de cristal líquido. Con un poco de paciencia es perfectamente usable.

He descubierto un par de cosas sobre la configuración de MIDI en Cubase en Windows. El panel tiene dos modos, vst y stand-alone. Utilizarlo en modo stand-alone es bastante sencillo: simplemente configuras los puertos IN/OUT y poco más.

Utilizarlo en modo vst tiene un poco más de miga, en parte por un fallo muy loco que tiene el software basado en Ctrlr de base: una vez que configures un puerto MIDI como IN o OUT, Ctrlr no para de intentar acceder a él aunque el puerto esté ocupado. ¿Puerto ocupado? Sí. En Windows, los puertos MIDI no suelen ser multicliente, por lo que sólo una aplicación puede acceder a un puerto determinado. Esto implica que un puerto puede estar "bloqueado" por el DAW (Cubase en mi caso) y no puede ser accesible desde el plug-in. Hay drivers que permiten que ciertas interfaces MIDI funcionen en modo multicliente, pero de los que he probado, no ha funcionado ninguno. Los infinitos intentos de Ctrlr por conectarse han desembocado, a menudo, en tener que hacer un hard reset del equipo :(

He encontrado dos soluciones para este tipo de problemas.
  1. Instalar un dispositivo MIDI virtual, como LoopBe y utilizarlo en conjunción al modo stand-alone. Esta solución funciona bastante bien, pero he experimentado un poco de latencia extra que puede llegar a ser un problema. No lo he medido exactamente, pero creo que el problema se acentúa si mandas muchos datos (me lo imagino algo parecido al problema que tenían en modo multi los Motif originales).
  2. Configurar los puertos como no visibles para el DAW. Cubase tiene una opción para hacer no visibles ciertos puertos MIDI (algo que había visto pero cuya utilidad desconocía). En la sección MIDI PORT SETUP puedes hacer que tu proyecto no "vea" esos puertos y le deje el camino libre al plug-in. Sin duda es la solución óptima, ya que no tiene problemas de latencia y no necesita software extra.
El enrutado de audio es exactamente igual en ambos casos.

Me fastidia un poco que el nivel de salida del JV sea un poco bajo en comparación a otros sintes, y eso que he intentado apretar +12dB en todas las formas de onda por patch...

Me parece brutal lo bien que suena con unas formas de onda tan sumamente pequeñas... Puedes hacer un patch de cuerdas superconvincente combinando cuatro pequeñas muestras de apenas unos cuantos kbs de peso. Quizás no sea realista, pero suena genial. Lo mismo para cualquier cosa parecida a pads o recrear sonidos de sintetizadores analógicos clásicos.

La matriz de modulación que tiene es bastante loca: dos LFOs por tono... y cada patch tiene cuatro tonos. Eso nos permite crear texturas cambiantes con muchísima variación, ya que además cada oscilador tiene un montón de tipos de onda diferente (incluyendo S&H). Lo que está un poco más corto es el apartado de efectos ya que en el JV2080 tiene tres módulos de efectos, vs una única unidad en el JV1080. Hay muchas combinaciones EFX y con algo de maña se pueden conseguir resultados muy interesantes. Sacrificar polifonía para emular reverb o secuenciar los delays a mano como en un tracker es todo un clásico...

Gracias a la gestión de mensajes SysEx, desde el editor se pueden automatizar un montón de parámetros que no son accesibles mediante CC (el volumen independiente de cada tono por ejemplo), por lo que se tiene un control extremo sobre la máquina.

La verdad que el precio de los sintes es una auténtica ganga. Están a menos de 200€ hoy en día (expansiones aparte) y son capaces de hacer de muchísimas cosas. La versión de Roland Cloud está ahí, pero está basada en el motor del XV por lo que he leído y... el modelo de suscripción la verdad es que no me acaba de gustar. El programa YOURS es insuficiente.

Todavía está lejos de estar terminado, pero he subido alguna cosilla por aquí. ¡Espero que os guste!

viernes, 23 de marzo de 2018

Integración de Wwise en proyectos de Unity

No suelo escribir este tipo de cosas técnicas en este blog, pero como es una información que suelo repetir unas cuantas veces al año, he decidido recogerla aquí de forma resumida.

Wwise es un middleware de audio que te permite englobar todo los assets y lógica relativos a música, diálogos y efectos de sonido de tu proyecto. Esto permite que los diseñadores de sonido y los músicos (o la única persona que se encargue de todo el apartado sonoro, como es habitual en los proyectos en los que participo) trabajen de forma independiente, sin tener que tocar en exceso prefabs, escenas, etc. Además permite tener un proyecto de sonido en el que se recoja todo el material de forma muy versátil, ofreciendo un marco de organización de assets bastante eficaz. Wwise puede integrarse con gran diversidad de motores de juego, pero me centraré en su integración con Unity en este post.

Con respecto al uso de Wwise en Unity diferenciaremos tres elementos:
  • Wwise launcher: es una herramienta tipo hub en la que podremos realizar tareas como:
    • Gestionar las diferentes versiones de la herramienta de authoring que tengamos o que queramos tener instaladas.
    • Gestionar la integración de Wwise en diferentes proyectos de Unity: instalar, actualizar, etc.
    • Conocer las últimas novedades relativas a este software.
    • Como Unity Hub no me funciona, yo también la utilizo para abrir directamente todos los proyectos de Unity que tengo con su versión específica :)
  • Herramienta de authoring: es el software en el que trabajan los diseñadores de sonido y desde el que se generan los bancos de sonido.
  • Plug-in para Unity: es el conjunto de librerías y funcionalidades que se integran en Unity.
Aquí está la información oficial que ofrece Audiokinetic con respecto a la instalación. A continuación una guía rápida y resumida de integración en Unity:
  1. Lo primero que tenemos que hacer es instalar precisamente el launcher desde esta página
  2. Hacemos una rama estable del proyecto para realizar todo el proceso de integración (ej: feature/wwise).
  3. Abrimos el launcher (puede ser buena idea hacerse una cuenta en audiokinetic) y en la pestaña "Wwise" elegimos una versión y presionamos "install". Suele ser bastante acertado instalar la última disponible. En este momento tendremos que elegir una ruta y tendremos que elegir las plataformas para las cuales queremos desplegar nuestro proyecto (ej: Android, Windows, etc.). Si se te olvida alguna plataforma, no te preocupes, podrás instalarla más adelante.
  4. En el siguiente paso nos darán la opción de instalar algunos plug-ins. Mi consejo aquí es que, si piensas utilizar la versión gratuita de Wwise o simplemente estás empezando, los desmarques todos. Al final de esa página puedes volver a hacer click en "install".
  5. En este punto ya tenemos instalada la herramienta de authoring. A continuación la abriremos y crearemos un nuevo proyecto, que utilizaremos en nuestro juego de Unity. La ruta que yo utilizo normalmente es una carpeta llamada "WwiseProject" dentro de la carpeta del proyecto de Unity. Puede que te salga algún mensaje relativo a la licencia del software, que de momento ignoraremos. Con el proyecto creado, lo guardamos vacío y salimos de la herramienta. En este momento podemos subir a nuestra rama nuestros cambios, porque no debería haberse roto nada todavía :)
  6. Comenzamos con la instalación del plug-in. Volvemos al launcher y en la pestaña "Unity" debería aparecernos nuestro proyecto. Si no aparece, puedes hacer click en el icono que aparece junto a "Recent Unity Projects" y buscar utilizando "Browse for project...". Cuando aparezca podemos presionar "Integrate Wwise into Project". Es obligatorio tener Unity cerrado en este paso.
  7. En las opciones de integración, de nuevo dejamos todas las opciones por defecto, marcando las plataformas que nos interesen. En "Wwise Project Path" ponemos la ruta en la que hemos colocado nuestro proyecto de Wwise (paso 5). El instalador ofrece dos opciones: "Install files into a copy of the Unity project directory, then apply changes if succesful (recommended)" y "Install files directly into the Unity project directory". A mi siempre me ha dado mejor resultado la opción no recomendada y es la que utilizo. A fin de cuentas, al tenerlo todo versionado, tampoco se pierde nada si hubiera algún problema. Hacemos click en "Integrate".
  8. Este proceso tardará más o menos dependiendo del tamaño de tu proyecto.
  9. Wwise está integrado en tu proyecto.
Notas adicionales:
  • El paso intermedio de crear el proyecto ANTES de instalar el plug-in ha sido el movimiento preventivo necesario para evitar algunos fallos que hemos tenido en algunos juegos. Quizás en las últimas versiones no sea necesario.
  • De cara a actualizar la versión de Wwise, se recomienda igualmente actualizar primero el proyecto, abriéndolo desde la versión correspondiente, y luego el plug-in de Unity.
  • Puedes solicitar una licencia gratuita para proyectos con ciertas características en la página de Audiokinetic (con la limitación de que hay un máximo de 500 assets por proyecto). 
  • Es recomendable que incluso los programadores del proyecto tengan instalada la herramienta de authoring, para poder regenerar los soundbanks desde Unity usando el Wwise Picker (Window/WwisePicker).
  • Si no has creado ningún Soundbank al crear el proyecto, Unity te dará un error del tipo "Failed to set soundbanks base path", pero es normal. Con que la persona responsable cree un soundbank de prueba, será suficiente para arreglarlo.
  • Has de solicitar las licencias mediante la plataforma de audiokinetic.
Eso es todo: es un proceso muy sencillo, pero espero que este texto pueda servirle a alguien que esté un poco perdido.