Enrique AM

#1: Com cuinàrem Brunyols

> Índex

> Intro

Hola! En aquest devlog compartiré el procés de creació de Brunyols per a la Sant Jordi Jam. Aquest article està basat en la presentació que vam fer en l'esdeveniment presencial, però prou més detallada i en format relativament accessible. Si voleu mirar les diapositives que vam ficar allí, amb imatges extra que no hi haurà a l'article, cliqueu ací. Dit això, anem enllà!

> Idea principal i inspiracions

Després de desenvolupar algunes idees amb un equip més extens que no van arribar a fer-se, vaig parlar amb Ely per trobar quin tipus de joc ens interessava fer. Ella i jo fa ja molt de temps que fem jocs, però normalment sempre fem jocs d'estil arcade, ja que la forma de planificar el game loop funciona molt bé per jams; enfocant-se a fer una sola mecànica que funcione bé acompanya bé amb les limitacions de temps de les jams.

Pel fet que el tema de la jam era "LLEGENDA & DIADA", a més obert a interpretació, vam pensar que estaria molt bé crear algun tipus d'experiència on la gent tingués la possibilitat de celebrar la diada de Sant Jordi en companyia; en resum, fer algun tipus de joc multijugador. Vam optar per l'online en aquest cas, ja que ens interessava veure com funcionava amb Godot i amb Itch.

La nostra principal inspiració va ser The Annual Ghost Town Pumpkin Festival, de l'Adam Gryu. Si no heu provat aquest joc, apunteu la data en el calendari, perquè quan siga la Castanyada o Halloween és obligatori entrar a provar-lo. Cada any obrin el servidor en aquelles dates i pots entrar a gaudir de la celebració configurant el teu personatge, interactuant amb els altres fantasmes i exposant les teues pròpies creacions amb carabasses, entre altres coses.

Ja que fer un joc multijugador online ens suposava una dificultat extra, per compatibilitats, infraestructura, noves funcionalitats i patrons que aprendre, vam decidir limitar la nostra idea a les interaccions més bàsiques: agafar i llençar objectes, moure's per la pantalla, controlar la càmera. També convenia tindre feta la part de personalització del personatge. Fet el tauler kanban amb els tiquets necessaris, vam començar a treballar!

> Descripció del joc

Brunyols és un videojoc multijugador social online. Té alguns components que el fan beure un poc del gènere sandbox, com els personatges amb físiques i objectes llençables, però en general es podria catalogar més com a un videojoc social, ja que el propòsit i jugabilitat principal no té cap objectiu més que el de relacionar-se amb la gent que està connectada al moment.

Ferran Popet i Sergi Popet mirant-se l'un a l'altre.

En aquest joc ets un vilatà, que apareix amb un nom i cognom aleatori, a més d'una vestimenta aleatòria. Una vegada entres a Brunyolet, pots passejar pel poble, agafar els distints llibres i roses i llençar-los, a terra o a altra gent.

Vilatà regalant un llibre a dos altres vilatans. El terra està ple de llibres i roses.

També pots interactuar amb la gent mitjançant distints emotes. Va ser una decisió totalment conscient no ficar xat de text, encara que fos possible, per evitar la necessitat de moderació.

Es poden veure diversos vilatans en la pantalla i un d'ells s'està expressant amb una cara divertida mitjançant l'opció dels emotes.

Entre altres coses, es pot girar la càmera amb el ratolí i mantindre les tecles Alt o Clic Central per girar-la al voltant del personatge. Es pot prémer el botó Espai per botar i Escape per visualitzar el menú principal.

> Desenvolupament

Com sempre, hem fet usar Godot Engine 4.2.2 per desenvolupar el videojoc. Ha sigut molt ràpid prototipar el videojoc i fer-lo online, però no ha sigut tan senzill fer altre tipus d'interaccions, com mostrar un llibre a les mans del jugador que l'ha agafat, per exemple: s'ha de notificar des de servidor que X jugador ha agafat Y objecte i mostrar-lo sols en aquest node en compte d'en el node de jugador que està fent servir cada jugador. Encara hi ha codi online que no funciona correctament i no sabem com solucionar-ho, però ara podrem anar comprovant-ho amb més temps.

Ens vam bloquejar un poc intentant que l'export web de Itch es connectés a aquest VPS. Finalment, va ser tan simple com substituir ENetMultiplayerPeer WebSocketMultiplayerPeer. Una vegada canviat, s'han de substituir els mètodes per crear servidor i client, a més d'alguna signal. Però molt resumidament, sols fent això i configurant Nginx en el VPS per redirigir les peticions de WebSocket al port correcte ja ho va fer funcionar. Tindre a més en compte que Itch no deixa fer connexions insegures a altres webs, però no hauria de ser massa problemàtic si ja tens un certificat generat amb certbot, per exemple.

Per la part d'Ely, es va encarregar de tota la direcció d'art per ajudar a transmetre la sensació de celebrar un Sant Jordi virtual. El poble està ple de detalls per observar, el que acompanya perfectament a la naturalesa sense objectius del joc.

Crec que a partir de poder provar-lo amb gent, vam poder fer playtesting amb les nostres amistats, i encara que va ser de forma remota, vam obtindre moltíssim feedback per continuar fent la feina bé i prioritzar el que creiem convenient.

> Què ha sortit bé

Crec que primera i principal: ens hem divertit molt. Ha estat genial fer un joc multijugador online per primera vegada. El fet de fer un videojoc on es pogués compartir l'experiència amb més gent, més en una temàtica tan oberta com un sandbox, sense cap mena d'objectiu concret, ha creat una quantitat gran de situacions divertides i inesperades amb la gent que ha jugat.

Crec que ha sigut molt encertat invertir el temps a compatibilitzar el servidor amb Itch, ja que per experiència d'altres jams, com més fàcil és jugar al joc, més gent el provarà.

El fet que el joc tingués físiques bàsiques i per defecte donava lloc a alguns errors amb col·lisions i altres situacions que en jocs seriosos o competitius podrien ser frustrants, però ací han donat lloc a moltes rialles i situacions inesperades, com per exemple:

  • Connectant dues persones alhora sense moure's provoca que els dos personatges volen de forma indefinida cap al cel, fins que algú dels dos es mou.
  • A l'hora de fer castells amb altres jugadors, si sols sou dos, pots caminar amb una persona en el cap.
  • Pots botar damunt d'una persona que està en l'aire, arribant a distàncies superiors. Es pot encadenar amb més persones.
  • Quan algú et bota damunt, pots botar en un moment concret per enviar a l'altre jugador molt lluny al cel. Es pot combinar girant la càmera de forma molt ràpid, estil Crash Bandicoot, per potenciar-ho.
  • Un dels assistents a una de les quedades va fer de venedor de llibres. Va anar molt bé.
  • Un amic va usar un llibre per a jugar a voleibol, usant de xarxa la zona de fotos del drac. Això em va fer en part pensar a implementar la pilota que rebota.
  • Fer castells va ser una funcionalitat que pensàvem implementar, però no amb físiques. Va sorgir sense més ni més a l'aplicar col·lisions als personatges.

Donar un espai obert amb físiques, on es pot interactuar amb l'entorn i socialitzar, va crear una sèrie de situacions noves en les quals Ely i jo ni havíem pensat; situacions que tan sols serien possibles en jocs d'un jugador. Així que tenim clar que més avant farem més jocs multijugador online, per descomptat.

Sortir de la zona de confort fent un gènere de joc que no havíem intentat mai crec que també ens ha ajudat a trobar millor el nostre estil i fixar-nos en coses noves.

> Fem país

Crec que vam desaprofitar molt la possibilitat de conéixer a la comunitat que va formar Sant Jordi Jam i als organitzadors de l'esdeveniment. No vam llegir les normes de la jam completament fins al moment de l'entrega (mala idea). Per sort, no vam incomplir les normes, però sí que vam passar per alt que el joc tenia una comunitat de Discord.

Personalment, cada vegada estic més a favor de fer comunitats de qualsevol mena, per mínim que siga l'objectiu. Les jams no competitives ens agraden perquè fomenten fer país, al contrari de l'individualisme que en la meua opinió promouen les competitives. Crear espais, unir a gent amb objectius comuns pot crear resultats molt més interessants que no podrien haver aparegut de forma individual o no diversa. Qui aspire a formar part de qualsevol projecte més gran i no aspire a ser una simple estrela de rock, pot trobar en les jams no competitives una forma d'actuar i aprendre a col·laborar en societat.

A causa de l'error, vam buscar una forma de remeiar-ho, potser no fantàstica, però és el millor que vam poder improvisar amb les poques hores de son que teníem damunt: vam organitzar una quedada popular en Brunyolet. Ely es va currar un cartell fantàstic per convidar la gent a vindre allí el capde:

En assistir a l'esdeveniment, vaig presentar el joc a la resta de gent d'allí. Em vaig ficar dels nervis perquè se'm feia molt estrany escoltar-me TAN fort, no sé usar un micro, havia dormit molt poc i a més se'm va fer complicat resumir tot el que volia dir en tres minuts. Siga com siga, vaig aprendre molt fent-ho. Estic acostumat a fer presentacions online, però no en persona. Per l'altra part, vam poder estar parlant amb la gent que va assistir, tant del nostre joc com dels seus jocs. Tant de bo trobàrem els perfils online de tota la gent amb la qual vam coincidir! En fi, que molt bé i la següent encara millor!

En les últimes diapositives, vam convidar la gent a vindre a l'esdeveniment i vam tindre alguns assistents aquell dissabte! En la meua opinió, va haver-hi més gent de la que esperàvem per a la publicitat i comunitat que vam intentar fer de primeres. Estem molt contents de com es va desenvolupar l'esdeveniment, però a la pròxima crec que estarem més atents a unir-nos i veure com desenvolupen els seus projectes els altres grups, parlar i relacionar-se, ja que és una part important en aquest tipus de comunitats.

> Lliçons apreses

A mesura que s'apropava la data d'entrega, vam haver de tallar idees i contingut per poder arribar a temps. El desenvolupament en general ha anat bé. Vam començar a treballar en el joc el 17 d'abril, aproximadament una setmana abans que tanqués la jam. És destacable que no vam aprofitar les dues primeres setmanes i podríem haver treballat més tranquils (i dormir molt més). Molt important cuidar-nos més i millor a la pròxima.

Una de les coses que ha destacat com a lliçó apresa és que el dimoni està en els detalls. Ens hem encallat en molts moments per voler intentar perfeccionar el joc i sempre ens ha desbloquejat dir "és igual, millor deixar-ho i continuar amb la llista de prioritats". A vegades és un procés d'acceptació que costa decidir al moment. Una forma de pensar-ho, seria: "Si aquesta última part que no funciona al 100% ho escrivim en un tiquet a part, seria aquest tiquet el que començaria si no estigués fent res?"; si la resposta és no, doncs a un altre tema.

Tota la resta de coses són detalls específics que hem aprés del motor Godot, de Blender i altres formes d'optimitzar el nostre pipeline intern. És increïble com fer jams i tindre un temps d'entrega curt aguditza l'enginy i genera tantes situacions per a aprendre coses. No aplicable a treballar en empresa perquè en compte d'autoexplotació seria explotació a seques. Respecte a aquest punt, igual que amb el primer: cal saber quan parar. Cuidar-se és important.

> Següents passos

Hem deixat coses pendents per falta de temps. Hi ha moltes idees que van quedar fora també per aquest motiu. Volem centrar l'esforç en coses simples que tinguen sentit dins del joc que actualment és ara Brunyols, i més avant decidir (abans de la Diada de Catalunya, potser) per quina direcció seguir.

Les millores bàsiques pensades serien aquestes, que no significa que totes acaben en el joc:

  • Arreglar el bug que fa que les portades de llibres a vegades canvien en agafar-los o llençar-los.
  • Netejar codi. És un desastre, soc un desastre amb jams, sort que de normal programe sol. 🙂
  • Millores gràfiques, com arreglar el model 3D del mapa, ficar algun shader compatible amb l'export web i canviar un poc les il·luminacions.
  • Afegir la possibilitat de descarregar una versió d'escriptori del joc, que funcionarà més fluida que web.
  • Afegir la possibilitat d'usar aquest mateix executable descarregable com a servidor, per si algú vol fer el seu servidor privat. Això farà incloure una caixa de text per ficar un servidor alternatiu al que connectar-se.
  • Finalment, afegir un petit calendari, si és possible, perquè la gent puga firmar, no sols amb la data actual, sinó firmar com que assistira X dia, per fer fàcil de saber a gent random quan entraran.
  • Afegir la possibilitat d'afegir noms dins d'un llistat.
  • Afegir gravetat baixa en obtindre el casc d'astronauta.

> Agraïments i fi!

Això seria tot, adéu-siau! Un plaer haver fet aquest joc, haver-nos presentat i haver intentat estar tant com hem pogut. Tenim que donar les gràcies a:

  • Américo, Ari, Laia, Paco i Víctor per organitzar la Sant Jordi Jam. Ha sigut molt agradable la rebuda i l'espai que heu creat! Si ens és possible, ens tornarem a unir a l'any que ve i intentarem estar més presents, sobre tot abans de l'entrega.
  • Jacob Ibáñez, per haver-nos motivat a participar en la jam. Queda pendent fer el joc que vam parlar de fer!
  • toaflo, per ajudar-nos a trobar com fer el codi del joc compatible amb Itch!
  • MrDev023, per l'add-on d'Orbit Camera de Godot.
  • tavurth, per l'add-on de Radial Menu de Godot.
  • Àngel Guimerà i Enric Morera per fer La Santa Espina, que vam estar cantant durant tot el desenvolupament del joc i també els dies posteriors (i els anteriors).
  • A les fundacions Godot i Blender per motius obvis.
  • A Castelló d'Empúries i a la seua Plaça dels Homes per ser la inspiració per fer Brunyolet.

Escrit per Quique (ho fique perquè ho tingueu en compte quan llegiu les opinions personals). Firmat: Ely i Quique.

>> Versions de l'article

  • 1.1 - Correcció de faltes.
  • 1.0 - Primera versió pública! Probablement, queda algun detall o foto per afegir als apartats finals. I passar el corrector.
  • 0.3 - Tercera versió, amb probablement totes les imatges i explicacions.
  • 0.2 - Segona versió, amb algunes imatges, sense explicació de la game jam i la nostra interacció amb la comunitat.
  • 0.1 - Primera versió, sense imatges, sense l'explicació de la game jam i la nostra interacció amb la comunitat.