Een eiland in de oceaan van weblogs

Tag: game-dev (pagina 2 van 4)

Aanloop

Over 1 week begint een nieuwe game jam, de GMTK (Game Maker Toolkit) Jam. Deze jam wordt georganiseerd door een populair gamedev Youtube kanaal en is dit jaar (waarschijnlijk mede door Corona) zo populair dat er inmiddels al meer dan 13.000 mensen zich hebben aangemeld.

Na de vorige game jam (en tevens m’n eerste jam ervaring) had ik genoeg zelfvertrouwen om me aan te melden voor deze GMTK Jam. Afgelopen week dan ook bezig geweest met de ‘voorbereidingen’.

Beetje me gaan inlezen weer in game design, inzendingen van voorgaande jaren bekeken, weer meer gaan experimenteren met Godot – nu een Snake kloon gemaakt en ook een boilerplate opgezet zodat ik snel nieuwe games up-and-running heb.

Aankomende week zal ik ook nog verdere voorbereidingen gaan treffen, zeker omdat ik het deze keer alleen wil gaan doen. Dus wil me nog even wat plekken vinden waar gratis assets (afbeeldingen, animaties, muziek en soundeffect) te vinden zijn en ook nog 1 of 2 korte snelle spelletjes maken – net als Snake.

Gewoon beetje als warming up.

Vind het ook wel spannend, zeker omdat het een game jam is met 48 uur doorloop.

Het begint volgende week vrijdagavond om 20u en eindigt de zondag erop om 20u.

Dus heb het weekend gereserveerd, zodat ik me helemaal kan focussen op de game jam. En donderdag en vrijdag ’s middags vrijgenomen, om toch nog wat samen te doen met m’n gezin.

Maar we gaan het zien. De vorige game jam eindigde ons spel op de 24e plek – van de 75 inzendingen. En heb ik super veel geleerd.

Jam post-mortem

Allereerst het belangrijkste, welke game hebben we nou gemaakt:

Ratvolution

We zijn inmiddels 2 dagen verder, dus mooi om even terug te kijken op de game jam. Doe het maar ff puntsgewijs, gewoon ff een lijstje:

  • heb super veel geleerd. Voor de jam had ik nog maar weinig met Godot gedaan en nu heb ik dus animaties gemaakt, animaties aangestuurd vanuit code, dialoog-systeem geschreven die ingeladen JSON-bestanden parsed en gebruikt, een hele game geschreven die goed functioneert, tilemap gebruikt en nog heel veel meer. Had dit alles niet geleerd (of tenminste niet zo snel) als ik de jam niet had gejoined
  • ook heb ik veel geleerd over het samenwerken met andere mensen – vind ik toch wel heel erg lastig. Vooral dan het loslaten en niet overal de controle over hebben.
  • maar ook het middelen van een game-idee is iets wat ik moet leren en/of anders moet doen, vond het lastig om m’n eigen ideeΓ«n los te laten en te gaan waar de meerderheid voor wilde gaan – ben zelf meer van abstracte games en dit werd er eentje met duidelijke graphics en een verhaallijn enzo
  • wat ik sowieso geleerd heb is dat ik veel (!!!) kieskeurig ga zijn met wie ik wil gaan samenwerken. Heeft me heel veel energie gekost om te kunnen verkroppen dat die collega-developer eigenlijk weinig heeft bijgedragen en wel lange tijd de schijn heeft opgehouden. Kan me er nog over opvreten als ik de chats teruglees met alle grote uitspraken waar dan later weer op teruggekomen werd. Constant.
  • denk ook dat ik heb geleerd om heel snel het prototype van een spel te moeten maken en dan daarna verder te gaan verbeteren. Wist al wel dat dat zo zou moeten werken, maar we hebben bijna de hele eerste week alleen maar onderdelen (graphics, animaties etc) lopen maken en pas op de laatste dag (!) ben ik levels gaan maken. Heb zelfs voordat ik het submitten niet eens de game helemaal gespeeld. Kwam er later dus ook achter dat heel veel dialogen niet eens goed pasten of nog bijzondere tekens bevatten πŸ™
  • ben heel blij dat ik heb meegedaan. Was een mooie ervaring, veel geleerd en ga het zeker nog wel eens doen. Maar denk dat ik het dan solo ga doen … en ook minder van m’n vrije tijd erin ga stoppen. Heb er nu wel iets van 40+ uur ingestoken. Ben dan ook heel dankbaar dat Lies me de kans gegeven heeft de afgelopen week.
  • en nog een laatste leuke dingetjes. Tobias is super trots dat zijn papa een game gemaakt heeft, zelfs eentje die op internet staat! Hij heeft het vol trots verteld in de klas en gaat hem morgen delen met z’n vriendjes.

    Dus vind het eigenlijk nu beetje jammer dat ik niet een simpel abstract spel gemaakt heb, maar eentje waarin tekst heel belangrijk is – en ook nog eens in het Engels πŸ˜›

Jam update #9

[09:35]
Laatste dag. Deadline-day.

Vanavond om middernacht moet het spel klaar zijn. Er moeten nog 3 levels gebouwd worden en het is ook nog eens vaderdag, dus ik kan niet de hele dag hieraan werken.

Kan gewoon niet loslaten dat dit ‘maar’ een game jam is, ik wil gewoon iets moois opleveren. Iets waar we allemaal trots op kunnen zijn.

[16:49]
Vanmiddag toch wat dingetjes kunnen doen. Beetje de splash-animatie zitten tweaken en uiteindelijk het eerste echte level gemaakt. Eerst in de woonkamer wat level-ideeΔ“n zitten schetsen op papier en daarna het eerste level echt gaan maken.

Maar ik verslikte me een beetje – mede door m’n eigen enthousiasme – en maakte het eerste level heel erg groot. De speler moest heel veel rondlopen en het was eigenlijk heel lastig om je weg te vinden.

Maar een teamgenoot vond de schaal juist wel fijn werken en ik heb uiteindelijkd is maar met de breedte van de weg zitten spelen om het allemaal maar beetje werkend te houden.

Lastige was alleen dat ik de enige was die echt nog aan het werk was aan de game. De muziek-gast heeft vanochtend z’n muziek toegevoegd en daarna heb ik weinig van hem meer gehoord. De schrijver was klaar met z’n werk en had ’s avonds andere plannen. En de beide tekenaars (artists) reageerden alleen heel reactief op zaken wanneer ik het nodig had.

Dit was iets anders dan ik het me had voorgesteld. Voelde me beetje op een eilandje zitten. Prima als je solo een spel maakt, maar nu hadden we een groep van 6 mensen – maar ik zit als enige nog keihard te werken.

Nu eerst even avondeten en dan straks nog eventjes paar uur door.

[19:57]
Het eerste level is “af”. Heb alle layout gefixed, vijanden posities staan vast, de items liggen op hun plek.

Nu verder naar het volgende level. Heb ook de credits-pagina al afgemaakt. Leuke daaraan – al zeg ik het zelf – is dat de namen in willekeurige volgorde gesorteerd staan. Leek me wel zo eerlijk. Heb nog even overwogen om m’n collega-developer niet toe te voegen of altijd als laatste te plaatsen. Maar uiteindelijk maar de eer aan mezelf gehouden.

[21:50]
En het tweede level is qua layout “klaar”. Heb ook de (awesome) animatie in het hoofdmenu afgerond. Was weer eventjes leuk spelen met verschillende sprite-animaties combineren enzo. Maar het werkt nu – super gaaf.

Heb nog maar 2 uur voordat alles klaar moet zijn en nog steeds is niemand anders online. Alleen de designer is er, maar die zit lekker te gamen en reageert soms als ik iets vraag.

[23:07]
Nog minder dan een uur. Ben er bijna, maar nog niet helemaal happy met de levels. En moet nog een scherm toevoegen die getoond wordt als je het spel wint.

[23:53]
En heb het spel gesubmit. Heb uiteindelijk weinig / geen aankleding meer in de levels kunnen doen. Beetje jammer, want nu zijn de levels helemaal leeg en verlaten. Er waren zoveel achtergrond sprites gemaakt door de pixel artist, maar had ik geen tijd meer voor om toe te voegen. En niemand kwam helpen.

Beetje jammer.

Nu ook geen zin meer om er dingen aan te gaan doen. Tijd om te gaan slapen. Ben bekaf.

Jam update #8

Laatste dag voor de deadline.

En nog super veel te doen.

Gisteravond hadden we een overleg met het team om te bepalen wat we nou precies gingen doen en wat iedereen nog moest gaan maken. Uiteindelijk nog best veel om te doen, waaronder 3 levels om te bouwen. Maar ook allerlei condities die nog gecheckt moeten gaan worden, verschillende schermen (zoals game-over of victory) die gemaakt / getoond moeten worden. En veel ligt bij mij – want m’n collega-developer was ineens weer terug, met als enige melding dat hij niet precies snapte wat we nu aan het bouwen waren. Waar waren de dingen die hij had opgezet in het begin? Waarom was dat ineens weg? Heb maar rustig gereageerd dat we gezien de tijd besloten hadden om de omvang van de game iets kleiner te maken, omdat er nu al genoeg te doen is. Heb maar niet gezegd dat zijn bijdrage 4 dagen geleden was en dat hij dus weinig recht van spreken had in mijn ogen.

Paar uur later reageerde hij nog een keer met de oproep dat hij niet snapte wat er nog allemaal gedaan moest worden en of we precies konden aangeven wat er verwijderd was en waarom. Dus heb toen nogmaals heel duidelijk uitgelegd wat er nog allemaal gedaan moest worden … en dat was de laatste keer dat we iets van hem hebben gehoord.

Opgeruimd staat netjes.

Heb hem uiteindelijk nog wel een plekje in de credits gegeven – maar kostte me wel veel moeite.

Maar ok. Vandaag dus veel kleine dingen lopen fixen. Heb de enemy-movement gefixed, hoofdmenu afgemaakt, een game-over scherm toegevoegd, de custom achtergronden per npc toegevoegd in de dialoog-schermen en nog veel meer.

Merk dat vooral het gedrag van m’n collega-developer me heel erg dwars zit. Er moet super veel gebeuren en ik heb dan ook een grote hekel aan mensen die van alles roepen, maar weinig doen. Bij hem had ik al snel dit gevoel, maar duurt toch even voordat het duidelijk is dat het gevoel klopt.

Helaas.

En we hebben nog maar 1 dag en morgen is het vaderdag. Dus wordt nog hard eraan trekken om iets fatsoenlijks af te leveren.

Jam update #7

Vandaag had ik de dag vrijgenomen van werk, speciaal om aan de game jam te werken. Dus ben weer een heel eind verder gekomen. Heb een level gemaakt, een font toegevoegd, de animatie toegevoegd waarmee de vijand naar de speler toeloopt en nog allemaal andere zaken welke nodig waren.

M’n eerste level

Jam update #6

Vanochtend begon al goed met de mededeling van m’n collega-developer die meldde dat hij het heel druk had met ‘real world issues’ en dat hij dus de komende 2 dagen niks kon doen.

What else is new?

Maar ok. Heb er steeds meer vrede mee, geeft mij namelijk steeds minder zorgen om te moeten samenwerken met zo’n iemand. En ik kan dus prima gewoon alles doen zoals ik het wil.

Vanavond vooral bezig geweest met dingen uitzoeken en voorbereiden. Heb morgen de dag vrijgenomen van werk (dacht initieel dat de game jam morgen zou aflopen, vandaar), dus kan dan me heel de dag focussen op de game jam.

Jam update #5

Vandaag gebeurde er niet zoveel. Het was beetje stil. M’n collega-developer liet niets meer horen. Had eerlijk gezegd ook niet anders verwacht. Maar ook de muziek-gast en de artists waren stil.

Begon me beetje af te vragen of ik de enige was die nog enthousiast was voor deze game jam.

Zelf ’s avonds ook niet zoveel motivatie om iets te doen. Was beetje gaar van gisternacht.

Jam update #4

Gaaaaaaaaaaaaaaap!

Ik vanochtend na 4 uur slaap

Gisteravond beetje tot te laat doorgegaan. Ik had ’s middags (tussen allerlei meetings door) al aan het inventory-systeem gewerkt.

De player kon nu items oppakken en er werd een inventory getoond wat hij dus in z’n broekzakken had zitten.

Onze rat kan items oppakken πŸŽ‰

Toen ’s avonds wilde ik aan de slag met het quest-syteem. Doel was dat de player naar een npc (non-player character) kon lopen, met hem/haar kon praten, dan een quest kreeg (een opdracht om een item te zoeken/halen) en die dan terug kon brengen.

Lastige vond ik dat m’n collega-developer had aangegeven dat hij wel eventjes dat dialoog-systeem zou bouwen. Maar ik had het gevoel dat ik een goed idee had hoe dit te moeten bouwen … en hij deed constant maar 1-2 uurtjes werk en haakte daarna weer af onder het mom van allerlei smoesjes. Dus ik besloot om (wederom) de stoute schoenen aan te trekken en gewoon het dialoog-systeem te bouwen.

Enige probleem was dat het inmiddels al 23:00 was en ik nog moest beginnen.

Maar ik zag het helemaal voor me. Had de JSON-file al helemaal opgezet hoe ik het voor me zag, dus hoefde nu ‘alleen nog maar’ de code te typen.

En dat ging wonderwel zo eenvoudig als het klonk. Juist omdat ik de hele JSON-structuur al klaar had, kon ik vrijwel in een constante stroom alle benodigde code schrijven en had uiteindelijk om 02:30 (’s nachts ja) een super gaaf dialoog-systeem.

Waarbij de player dus bepaalde quests kon doen, daarbij werd bijgehouden of hij die quest al geaccepteerd had en bepaalde reacties werden zelfs pas actief wanneer de speler de benodigde item in z’n inventory had.

Voelde echt super gaaf – ondanks het late tijdstip. En ik had heel veel geleerd en was nu vol zelfvertrouwen hoe ik bepaalde dingen in Godot moest gaan doen.

De demo van m’n dialog-systeem, welke ik vol trots aan m’n teamgenoten stuurde

Enige nadeel (en klein beetje voordeel) was dat m’n collega-developer (die dus vrijwel niks had gedaan de afgelopen 2 dagen) me vanochtend een berichtje stuurde: “Wow, de development gaat wel heel hard. Weet even niet wat ik moet doen nu”

Dus heb hem keurig een lijstje gestuurd met alles wat er gedaan moet worden; dingen als animaties, menu, navigatie etc. En zeker de levels, want zonder levels hebben we niks.

En nu gaat hij zich dus richten op het level-design. En kan ik me dus op de randzaken gaan richten als animaties, overall game-flow etc.

Er is nog genoeg te doen voordat het aanstaande zondag klaar moet zijn.

Jam update #3

Vandaag bezig geweest met overdenken hoe de game er nou globaal uit moest komen te zien, qua flow en verschillende ‘states’.

Verschillende flows van de game

Daaruit volgde dat ik bepaalde zaken ergens moest gaan bijhouden, maar was niet helemaal tevreden met de voorgestelde mappen-structuur van m’n collega-developer.

Aangezien hij meer ervaring had met Godot ben ik de eerste dagen hem gevolgd met z’n voorgestelde mappenstructuur, maar hoe meer ik in Godot werkte, hoe meer ik een hekel kreeg aan de opgezette mappenstructuur. Het werkte allemaal niet fijn, zat teveel theoretisch bij elkaar, maar niet logisch.

Ter voorbeeld, zo zat alle animaties in een mapje animations en de code in movable_objects – maar als ik dan iets met de player wilde doen, moest ik in 2/3 verschillende mappen zijn. Veels te veel gedoe.

En aangezien m’n collega-developer vandaag ineens aangaf dat hij examens had op z’n school en dus weinig kon doen (verrassing!), besloot ik om de stoute schoenen aan te trekken en gewoon de boel helemaal om te gooien naar een (voor mij) logischere indeling.

Deze indeling was ongeveer als volgt:

.
β”œβ”€β”€ assets
β”œβ”€β”€ data
β”œβ”€β”€ entities
β”œβ”€β”€ global
β”œβ”€β”€ gui
β”œβ”€β”€ levels
β”œβ”€β”€ menu
β”œβ”€β”€ sound
β”œβ”€β”€ splash
β”œβ”€β”€ tilesets
└── zzzz_deprecated
  • assets – alle sounds en sprites, onderverdeeld in verschillende mappen, per entiteit of domein:
β”œβ”€β”€ assets
β”‚Β Β  β”œβ”€β”€ Sound
β”‚Β Β  β”œβ”€β”€ fonts
β”‚Β Β  └── images
β”‚Β Β      β”œβ”€β”€ enemies
β”‚Β Β      β”œβ”€β”€ items
β”‚Β Β      β”œβ”€β”€ menu_animation
β”‚Β Β      β”œβ”€β”€ misc
β”‚Β Β      β”œβ”€β”€ npcs
β”‚Β Β      β”œβ”€β”€ player
β”‚Β Β      β”œβ”€β”€ ui
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ main
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ npc_dialog
β”‚Β Β      β”‚Β Β  └── splash
β”‚Β Β      └── world
β”‚Β Β          β”œβ”€β”€ floor
β”‚Β Β          β”œβ”€β”€ props
β”‚Β Β          └── walls
  • entities – alle verschillende entiteiten, zoals een mapje voor de player, een ander mapje voor een enemy en dan weer een ander mapje voor een item of een npc. Zo staat alles wat bij elkaar hoort bij elkaar, code en animaties:
β”œβ”€β”€ entities
β”‚Β Β  β”œβ”€β”€ enemies
β”‚Β Β  β”œβ”€β”€ items
β”‚Β Β  β”œβ”€β”€ player
β”‚Β Β  β”œβ”€β”€ villagers
β”‚Β Β  └── world
  • global – alle globale scripts – bijvoorbeeld om de game-state bij te houden of om muziek af te spelen. Maar ook zaken om globaal de dialogen bij te houden
  • gui – alle UI gerelateerde zaken
  • level – de verschillende levels die gemaakt waren
  • tilesets – de verschillende tilemaps voor de levels

Een aantal mappen had ik achteraf gezien ergens anders willen onderbrengen:

  • sound waarin de code stond voor het aansturen van de muziek, had eigenlijk als submap in global gemoeten
  • menu had als submap van gui gemoeten
  • net als splash wat ook een submap van gui had moeten zijn

Maar al-met-al was ik wel heel happy met hoe ik de overall structuur opgezet had. Voelde heel intuitief aan en wordt ook door Godot niet afgedwongen ofzo – dus kon zelf gewoon lekker m’n eigen weg erin vinden.

En nu dus morgen lekker aan de slag met het quest-systeem, waarbij een npc dus een bepaald item kan requesten, de player dit item dus moet kunnen oppakken en kunnen afleveren.

Heb al wel beetje een idee, maar eens zien hoe we dat gaan aanpakken dan.

Godot – het vervolg

Afgelopen weekend ben ik begonnen met het opnieuw maken van m’n eerste Unity game, Asteroids.

Voornamelijk om te zien hoe ik in Godot een echt spel moest maken en daarnaast omdat het me een mooie vergelijking leek, eens kijken hoe makkelijk/moeilijk dit gaat verlopen.

Maar al snel had ik de assets erin zitten, had ik de juiste instellingen en kon ik m’n schip bewegen door het scherm.

Volgende stap was het toevoegen van asteroiden. En nu – 2 dagen later – heb ik al een werkend prototype:

Het begin is er ^^

Om tot dit prototype te komen was eigenlijk niet zoveel gepuzzel nodig, vooral logische zaken. Weinig (tot geen) gedoe met uitzoeken hoe ik iets nou precies in Godot moest doen (zoals wel moest bij Unity) – maar vooral nadenken over game-design.

Maar nu ik dit heb, beginnen de ideeΓ«n weer te borrelen. Zomaar Asteroids weer opnieuw maken is beetje suf. Dus we gaan een iets andere richting op – later meer hierover (wil niks spoilen ^^)

Maar tot nu toe heb ik Godot nog steeds super hoog zitten, het werken ermee is super leuk en ga nu gewoon weer lekker verder.