v 9 5SD033

Sista crunchen lider mot sitt slut

 

Denna vecka har varit utan tvekan den mest stressfulla veckan under hela kursen. På grund av dålig planering och tidsoptimism har arbetet inte gått som det ska tidigare veckor. Detta har i sin tur har lett till att alla små saker som binder ihop spelet har hamnat på denna veckas planering akut. I början av veckan verkade det inte så fasligt många saker som behövde göras men en sak ledde till en annan och helt plötsligt var listan en mil lång.

 

En av mina främsta uppgifter för den här veckan var att fixa döds animationer för alla fiender då de innan bara förvan på direkten så fort projektilen träffade de. Grafikerna hade jobbat hårt med att göra animationerna och spritesheets så kändes dumt att utesluta dem. Förutom det så ger de spelet en bättre känsla vilket är något vi strävar mot.

 

I spelet har vi en klass vid namn EnemyManager som sköter all spellogik för fienderna och håller dem i en array som kameran använder sig av för att hitta alla fiender i scenen och ritar ut dem på skärmen. Eftersom varken spelaren eller projektiler ska kolla kollision mot döda fiender som fortfarande syns på skärmen så valde jag att separera döda fiender från levande i två olika arrayer. Detta även för att objekten har olika beteende mönster och funktioner beroende på om de lever eller inte. En av fienderna i spelet är en barrel som droppas från toppen av skärmen på slumpmässig position på x axeln. Om en annan fiende eller spelaren kolliderar alternativt skjuter en projektil på barreln sätts en timer igång och en animation spelas upp. Om en fiende eller spelaren befinner sig i närheten av objektet när en exploderar dödas fienden automatiskt och spelaren tar skada.

VI planerar att i mån av tid lägga till att objekt i en viss närhet av barrel men som är nog pass långt borta från den ska slungas en bit bakåt när den exploderar då ett objekt som exploderar i vatten skapar en svallvåg. VI tänkte lägga in det för att ge spelaren mer feedback på vad som händer i spelet och för att försöka skapa en wow faktor.

 

När spelaren tidigare dog gick spelet direkt till highscoren för att skriva in sitt namn men vi tyckte att det var för tråkigt så vi valde att lägga till en dödsanimation till spelaren som spelas upp när spelaren får slut på liv. Och för att göra det mer dramatiskt skapade jag en funktion i kameran som jag kallar på medan dödanimationen spelas upp. Den gör så att spelaren och GUIn är det enda som vissas på skärmen och resten ersäts av en svart bakgrund.2016-03-17

v 9 5SD033

V 8 5SD033

I måndags var det beta presentation av vårt spel Mermaid River som vid det tillfället inte nådde upp till våra förväntningar som vanligt. Vi hade implementerat alla mekaniker och olika objekt men saknade estetiska delar so som en paralax bakgrund för att få en bättre känsla av djup i spelet. Enligt mig gick dock presentationen bra och vi fick bra feedback och i princip ingen kritik angående de designbeslut som vi har tagit. Mina uppgifter för denna veckas sprint som även är den näst sista innan spelet ska vara inlämnat är väldigt varierande mot varandra. De största fokuset för mig har varit att knyta ihop påsen och se till att alla komponenter verkligen fungerar ihop med varandra och att leta efter buggar som tack och lov inte har varit många hittills.

 

En av de delarna som inte var fullständiga denna vecka var feedbacken till spelaren angående vad som händer och hur spelaren gör framsteg och hur hen blir belönad för sina framsteg. I spelet har vi implementerat en rom flaska som är en powerup med funktionen att sakta ner tiden. Eftersom vårt spel är en endless runner så kommer svårighetsmomentet in i form av att hastigheten ökar stegvis ju längre man kommer och fienderna blir snabbare. Och då är tanken att när man aktiverar rom flaskan vilket delvis som nämnt innan saktar ner tiden men även gör skärmen skakig för att simulera att spelaren är full.

 

För att få detta att funka behövde flera komponenters delar ändras och vissa funktioner läggas till. För att rendera alla sprites på skärmen har vi en kamera klass som tar alla objekten och renderar dem i ordning. I kameran la jag till en funktion som förflyttade kamerans relativa position i förhållande till sitt urprung. Problemet om uppstod var att spritesen har sin egna position och istället för att ändra allas riktiga position som skulle kunna förstöra andra mekaniker så som kollision. Lösningen på problemet blev att jag kopierar deras data tillfälligt och sätter deras position till kamerans nuvarande position. Då renderas spritesen ut på rätt ställe relativt till kameran men objektens ursprungliga position ändras inte vilket förebygger att mekaniker så som kollision inte påverkas av att kameran skakar.
Sedan la jag in GUI element till spelarens heads up diplay för att visa hur många mynt spelaren har plockat upp och hur långt man har tagit sig sen man startade spelet. Dessa delar består av en sprite och en text del som för mynten plussas på i pickup managern och för distansen plussas på varje delta sekund i game state updateringen.2016-03-11.png

V 8 5SD033

5SD033 v 7

Vi börjar nära oss sista milstolpen innan spelets produktion slut nämligen beta presentationen. Veckan som har gått har varit full av händelser både bra och dåliga. i måndags var det pre-beta spel testning och vårt spel mötte inte den standarden och mål som jag och övriga gruppen hade satt. På grund av omständigheter efter alfan var vi tvungna att programmera om i princip hela spelets struktur för att inte bara få ett fullt fungerande spel utan också ett spel med en kod struktur som är lätt att navigera i och som är sorterart på ett bra och rimligt sätt.

 

Min huvudsakliga uppgift denna vecka var att konstruera powerup och enemy systemen inför beta presentationen. Det låter kanske som två separata delar av ett spel vilket det är till en viss del men samtidigt är dessa system så pass beroende av varandra så att jag räknade det som en uppgift. Dock kodvis delade jag upp dessa två komponeter i två managers, en för enemies och en för powerups. Enemy managern håller koll på alla fiender som existerar i spelet och den uppdaterar dess positioner för varje frame. I designen till spelet har vi bestämt att fiender ska kunna komma in från både höger och vänster sida av skärmen och därför slumpar enemy managern ut vilken sida fiende objektet ska starta och viken postion på y axeln som fienden ska komma in på.

 

Powerup managern håller koll på både vilken powerup som spelaren använder och i annat fall använder den spelarens vanliga vapen och projektilerna som powerupen eventuellt avfyrar. Dock finns det en powerup som spelaren kan plocka upp som inte avfyrar en projektil och det är rom flaskan. Den saktar ner tiden så att spelaren hinner planera sin strategi bättre men det kommer till ett pris nämligen att skärmen blir skakig och suddig för att simulera att spelaren är full.

För att få en powerup i spelet måste man vänta en viss given tid innan en slumpmässig typ dropas i spelet. Men om man dödar fiender med sitt vanliga vapen eller med en powerup kortas tiden ner med ett visst intervall för varje dödad fiende. Allt detta räknas ut i managern och den droppar en ny powerup i spelet när kriterierna för den är uppfylld. Då powerups spawntid varierar beroende på hur många fiender man har dödat så verkade det rimligt att samma klass kollar kollision mellan projektiler och fiende objekten. image

5SD033 v 7