PU.nl bouwt een Top Down ShooterDeel 7 

PU.nl bouwt een Top Down Shooter – Deel 7 2019-02-15T15:31:23
In deze serial gaat Johan iets doen wat nog nooit eerder gedaan is… Met de PUmunity een game in elkaar schroeven! We slaan de handen ineen om samen een vette top down shooter maken, dus schuif aan, zet je creatieve pet op en doe mee met dit ambitieuze project!

Heya! Welkom bij alweer het zevende deel van deze serial. We gaan weer verder waar we de vorige keer gebleven waren, dus check vooral de vorige delen (1, 2, 3, 4, 5, 6) voordat je deze leest! In deze editie van pu.nl bouwt een Top Down Shooter werken we verder aan de eindbaas, ruilen we de bruingele achtergrond in voor een lichtgroene, fixen we wat bugs en voegen we wat sound effects toe.
   

Eindbaas bugje

Vorige maand waren we dus begonnen aan de allereerste eindbaas. Hij deed nog niet veel in de game, buiten op je af rennen. Misschien is het daarom dat ik pas zag dat z'n draai van links naar rechts er wel een beetje raar uit ziet.

graddus-verspring  
Ik heb geen animatie voor zijn draai van links naar rechts - de sprite flipt gewoon horizontaal. Het ziet er alleen een beetje raar uit omdat ik in beide sprites het hoofd als "center" heb aangegeven, wat er dus voor zorgt dat de rest van zijn lichaam vreemd beweegt. Vrij makkelijk te fixen:

graddus-verspring-fix  
Dat ziet er beter uit! Het "center" van de sprite zit nu tussen zijn voeten in.
    

Angstaanjagende aanvallen

Goed, nu dat uit de weg is kunnen we verder met de bossfight zelf. De vorige keer stormde hij dus alleen nog maar op je af en kreeg je schade als je hem aanraakte. Niet zo heel spannend. Ik heb natuurlijk niet voor niets al die sprites zitten maken, tijd om ze te implementeren!

Ik gooi de sprites in het programma en verbind ze aan bepaalde "states". Als ik dan dus bijvoorbeeld in de code "kick" opvraag, weet het spel gelijk dat ik spr_boss_graddus_kick bedoel. Vervolgens programmeer ik een alarmpje dat begint af te tellen als je bij de eindbaas in de buurt bent. De code krijgt dan drie keuzes: Bewegen, stilstaan of aanvallen. Er is een kans van ongeveer 10% dat de eindbaas twee seconden stil blijft staan en een kans van 30% dat hij achter de speler aan gaat rennen. Als hij geen van beide doet valt hij aan - dat is dus ongeveer 60% van de gevallen.

Als hij besluit aan te vallen kijkt hij eerst of de speler een beetje in de buurt is. Als hij dichtbij genoeg is kiest hij willekeurig een van de twee melee aanvallen en als de speler iets te ver weg is een van de twee ranged attacks.

graddus-aanvallen-timing  
Het werkt! Ik moet er alleen nog wel even voor zorgen dat de ranged aanvallen daadwerkelijk een projectiel gaan afvuren. Voor de zeikaanval zorg ik ervoor dat er zolang Graddus de aanval doet elke frame een klein geel projectiel gespawned wordt die in de richting van de speler vliegt. Met een kleine afwijking van een paar pixels natuurlijk...

gif-graddus-pis  
Eh... Die combinatie van die animatie met die lachende powerkid is een beetje disturbing, maar het werkt! Graddus is nu fully functional. Hij is natuurlijk verre van perfect - het is nog steeds vrij makkelijk om hem te verslaan. De ranged aanvallen moeten misschien wat sterker zijn en de melee attacks hebben waarschijnlijk een groter raakvlak nodig, maar dat is precies waarom ik niet gelijk complete animaties heb gemaakt. Eerst even kijken of alles technisch lekker loopt en dan pas mooi maken. Voor nu laten we het hier bij en pakken we het volgende keer weer op!
   

Trieste Tileset

Het is eindelijk zover! We gaan de bruingele tegels eruit slopen. Het is sowieso niet een heel lekker kleurtje, maar eigenlijk was mijn voornaamste probleem dat Powerkid met zijn hoofd tegen de blokjes kon stoten. De game is top-down, maar we gebruiken een vogelperspectief - we kijken schuin naar beneden tegen de characters aan.

muur-collision  
Kijk, zo hoort het! In plaats van dat Powerkid gestopt wordt als hij met zijn knar tegen de onderkant van de muur tikt, kan hij er nu gewoon tegenaan lopen. Dat ziet er beter uit! Ik kwam jammergenoeg wel gelijk een bugje tegen...

muur-issue  
Hmm... Als ik strak tegen de muur aan loop, omdraai en vervolgens weg probeer te lopen, speelt de animatie wel af - maar Powerkid blijft op dezelfde plaats staan. Het probleem ligt hier bij de "collision box" van Powerkid. Dit is een onzichtbaar vormpje om de sprite heen die de engine vertelt wanneer je iets aanraakt. Dat werkt dus prima als je één kant op kijkt, maar zodra je je muis beweegt en de sprite horizontaal flipt zit je opeens met je rug vast in de muur.

Gelukkig is de maat van de collision vrij makkelijk aan te passen en zorg ik ervoor dat hij niet tot Powerkid's rug komt.

muur-fix

Beter! Ik geef voor nu de tiles even een simpel, plat kleurtje.
   

Achterlijke Alien

Game development is best lastig en er gaan vaak dingen fout zonder dat je het zelf doorhebt, dus het is super hulpzaam als mensen zoals Joppehi je op wat bugs kunnen wijzen:

"In deze versie viel me op dat de laatste 3 sprites voor de boss niet bewegen tot je bij ze in de buurt bent (duhh) maar ik zie ze toch al op mijn beeldscherm waardoor ik ze zo neerschiet."

Whoops! Aan de hand van die comment - en het erbij gevoegde filmpje - bleek inderdaad dat de range voor de Greys om in actie te komen net niet groot genoeg was, waardoor ze super onnozel voor zich uit blijven staren als je je muis ver genoeg naar rechts beweegt - zelfs als je op ze begint te schieten.

enemy-range-bug  
Gelukkig is dat snel te fixen door een paar cijfertjes aan te passen.

enemy-range-bug-fix  
Zo worden ze opeens een stuk gevaarlijker! Lolindir kwam ook met een suggestie:

"De health pickups glijden nu wel heel snel richting de player, misschien fijner als je eerst binnen de range moet zijn?"

money-range-fix  
There you go!
   

Sappige Steak

Oh! Bijna vergeten! We hadden vorige maand ook een poll natuurlijk. De vraag was wat voor health pickups we wilden gaan doen - baklap, slagroomtaart of allebei? Baklap dus, met maarliefst 42%! Ik maak een kleine sprite voor de pickup en geef hem een glimmende animatie - om ervoor te zorgen dat hij er nog aantrekkelijker uitziet.

baklap  
Hup, in de game ermee. Deze gigantische homp vlees moet op zijn minst wel drie HP healen, niet?

baklap-heal  

Geinige geluidjes

We hebben nu natuurlijk die toffe muziek van Mark, maar het zou ook fijn zijn als je pistool wat geluid maakt als je hem afvuurt, of dat de gamecartridges een sound effect hebben voor als je ze oppakt. Daarvoor gebruik ik Chiptone - een gratis stukje software die random geluidjes voor je genereert, die je vervolgens zelf nog kan aanpassen. Ik maak een geluidje voor schieten, bijanden raken, zelf geraakt worden, muren raken, het oppakken van cartridges en het eten van de steak. Ik kan alleen geen losse audioclips opnemen, dus heb ik een kleine walkthrough gemaakt van het spel tot nu toe, waar je kunt zien hoe het er nu precies voorstaat met de game. Als je hem liever zelf wilt spelen kan dat natuurlijk ook, hierrr!

   

The End

Dat was hem weer voor vandaag! Volgende maand maken we (hopelijk) de bossfight af en gaan we uitstippelen hoe de rest van de game er uit gaat zien. Mede daarom zou ik jullie willen vragen wat jullie nog precies in de game zouden willen zien. Nieuwe gameplayelementen? Wat voor soort levels? Meer bossfights? En zoja, tegen wie? Ook kan je nog steeds ideeën aandragen voor nieuwe vijanden, wapens of locaties. Tot volgende maand!
    

Alle delen in de pu.nl bouwt een top down shooter serial:

Zaterdag 25 Augustus – Deel 1
Zondag 23 September – Deel 2
Zaterdag 20 Oktober – Deel 3
Zaterdag 17 November – Deel 4
Maandag 17 December – Deel 5
Zaterdag 12 Januari – Deel 6

REACTIES (27) 

Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord