vrijdag 20 december 2013

Merry Duckmass & a Frozen New Year

Heey Frozen Duckies, en welkom bij alweer de derde blogpost. Ook zo vlak voor de feestdagen krijgen jullie nog een update van onze game. Er is in de afgelopen weken natuurlijk veel bijgekomen en veranderd qua features in onze game R.U.L.E.

Maar wat is er dan zoal veranderd? Een aanpassing die op het eerste gezicht opvalt, is het perspectief. De vorige versie van de game bevatten nog een top-down perspectief, maar op dit moment hebben we een veel meer awesome perspectief. Je ziet de wereld namelijk een soort schuin. De game is nog steeds 2D, maar het is geen rechte projectie van bovenaf. Nu kunnen de spelers, de enemies en de projectiles ook voor en achter muren langs vliegen en lopen. De collision detection is hierdoor niet heel veel moeilijker geworden, wat deze werkt achter de schermen nog steeds met het top-down perspectief. Over collision detection gesproken, ook de enemies lopen nu niet meer door de muren heen. De rode enemies vinden hun weg nu d.m.v. onze nieuw toegevoegde pathfinding en steering.


Zie hieronder een awesome filmpje ter demonstratie van onder andere het perspectief.


Zoals te zien in de video zijn er ook coole explosies toegevoegd. Deze explosies zien er zo cool uit door de particles, die ook nieuw zijn! Ook hebben we alt fire toegevoegd. Tijdens het afvuren van deze en andere projectielen zul je merken dat we nu ook epic geluidjes hebben, voor zowel de explosies als de kogels. Bij het afvuren van kogels kan nu ook beter gericht worden, dit wordt medemogelijk gemaakt door een pointing laser. Een andere nieuwe feature is de screenshake. Als de alt fire een muur of een enemy raakt, explodeert deze waardoor er een screenshake plaatsvindt. Ook de doodgaan animatie van de speler is toegevoegd, en de doodgaan animatie van de enemies is aangepast. Deze animaties zijn nu super smooth! Ten tweede is er een spawn animatie van enemies gemaakt. Hierdoor faden enemies in aan het begin en tijdens een wave. Over waves gesproken, elke wave bestaat nu uit drie groepen van enemies. En na elke 3 waves begint een nieuw level.

Een andere nieuwe feature die gelijk opvalt bij het starten van de game, zijn de menu’s. Zo hebben we een startmenu, een optie menu en een pauze menu toegevoegd. Deze menu’s hebben opties zoals spelen in fullscreen of in windowed mode. Ook kun je de particle dichtheid aanpassen, en d.m.v. sliders kun je het gewenste muziek en geluid volume kiezen. Verder is er een optie op rumble aan of uit te zetten. Aan het einde van game, wanneer het game over is, verschijnt het highscore menu. In dit menu kan de speler zijn naam invoeren, als hij een plek in de lijst heeft bemachtigd. Deze highscores kunnen ook vanuit het startmenu bereikt worden. Verder zijn er meerdere highscorelijsten toegevoegd, zoals singleplayer en multiplayer. De highscore lijst bevat meerdere lijsten omdat we ook verschillende modi hebben toegevoegd, echter zijn deze nog niet geïmplementeerd. Deze modi zijn singleplayer modern, singleplayer carnage, singleplayer classic en multiplayer modern. Van deze modi hebben we tot nu toe alleen singleplayer modern en multiplayer modern geïmplementeerd.

Midterm presentatie:
Afgelopen woensdag was de midterm presentatie. Tijdens dit event was het de bedoeling om aan andere teams en de begeleiders te laten zien wat je zoal hebt uitgespookt de afgelopen weken. Dus ook Frozen Duck Games gaf hier een presentatie. Eerst vertelde onze eigen Herman en Victor iets over de progressie en de toekomstige plannen van het project. Dit werd vervolgd door een demo van de game. Na afloop van de 5 minuten durende presentatie, konden er vragen worden gesteld door het publiek. We werden o.a. gecomplimenteerd door Jeroen Fokker voor onze collision detection.

Teambuilding:
Gisteravond vond er een epic battle plaats tussen de props en de hunters. Ondanks alle rondvliegende kogels en gewelddadige crowbars, ging de overwinning toch over het algemeen naar de props. Nu hebben we het hier natuurlijk over de game prophunt! Gisteravond deed Frozen Duck Games aan teambuilding door gezellig samen te gamen. Na prophunt werd de strijdbijl nog niet begraven, en werd er wraak gezocht in de gamemode Murder. Blijkbaar schuilen er extreem sneaky murderers onder de Frozen Duck Games teamleden.
PS. Voor iedereen die nieuwsgierig naar de verloop van zaken tijdens onze vergaderingen. Hier volgt een foto met Victor’s extreem rechte handschrift. Plus een vurige discussie tussen Herman en Toby, die klaarblijkelijk is gewonnen door Toby met 99-1. 

Victor's fantastische aantekeningen
Dit is alweer het einde van deze blogpost. Frozen Duck Games wenst iedereen alvast een fijne kerst en een Gelukkig Nieuwjaar. See you next year!

-Frozen Duck Games

vrijdag 6 december 2013

Duckventures


Hallo fans, hier een update voor de nieuwsgierigen. Allereerst wil ik graag zeggen dat we een awesome wallpaper voor jullie hebben, gemaakt door onze eigen Victor. Vind hem hier.
Zeg, gaat het nou over robots of over explosies?
"Maar wat is R.U.L.E. dan??!", vragen jullie je natuurlijk af. We hebben de game een naam gegeven. Het heet nu officieel Robot Ultimate Laser Explosion (of: R.U.L.E). Waarom deze naam? Omdat je nooit genoeg lasers, explosies en laserexplosies kan hebben. Pew pew pew!

Een naam bedenken stelt in het grotere geheel natuurlijk niet zoveel voor. Gelukkig hebben we ook nog andere voortgang gemaakt. De eerste code is geïmplementeerd, taken zijn verdeeld, mysterieuze krachten roeren zich.



Hierboven zie je een van de eerste development-versies van RULE. Er zitten al gedeeltelijke random level en wave generation, player input, een domme AI en collision in. De rode enemies volgen speler 1 en de blauwe enemies schieten op een willekeurige speler. De spelers zelf zijn niet erg duidelijk te zien doordat ze zwart zijn op een zwarte achtergrond.

En dan nu wat behind-the-scenes. Om te kunnen beginnen aan de gamecode hebben we eerst de klassenstructuur besproken als team. Het design document beschreef hier en daar wel wat er geprogrammeert moest worden, maar dit was niet concreet genoeg om te beginnen.
Programmadesign 101 door Herman McAbstractiepants
Klassenindeling
De makkelijkste indeling leek ons een monolithische gamemaster, met daarin klassen voor allerlei kleinere taken. Zo is er een levelgenerator, wavegenerator, collisionmanager, playerlist, enz. Deze subklassen weten dat ze bij de gamemaster informatie op kunnen halen. Op die manier weet de collisionmanager welke objecten tegen elkaar moeten botsen en de enemies waar ze naartoe moeten lopen en schieten.

De heeft gamemaster ook een ruleset, waarmee verschillende gamemodes gedefinieerd worden. Zo staat in de singleplayer ruleset dat er maar één speler mag zijn en de speler een gelimiteerd aantal levens heeft. In de co-op ruleset staat dat er twee spelers zijn en dat een speler opnieuw kan spawnen als een wave begint.

Met deze kennis in onze eendenkoppen konnen we eindelijk eens gaan programmeren. Vol enthousiasme zijn we met level generation, wave generation, collision detection en adaptive difficulty begonnen.

Level generation
Onze laserexplosion containment areas worden gemaakt door een algoritme dat hier en daar een blob van muren plaatst. Bij het plaatsen van deze blobs wordt er rekening gehouden met waar er al muren staan, zodat er altijd zo'n 5 blokjes tussen alle bouwwerken. Ook zorgt het algoritme ervoor dat alle randen opgevult zijn met muren zodat je niet weg kan rennen, zoals te verwachten valt van human scum. Als laatste wordt het level gecontrolleerd op onbereikbare enkele lege blokjes, die vervolgens opgevuld worden.

Wave generation
Het aantal robots in een wave wordt berekend aan de hand van een aantal wavepoints. Hoe meer wavepoints er zijn, des te meer robots er in een wave passen. Robots worden niet los in waves geplaatst, maar als wave groups. Een groep kan 1 robot zijn, maar ook 5 tegelijk. Een wave group kan zijn carnage loslaten zodra er genoeg plaats is in het level, er is namelijk een limiet aan het aantal robots (wie bedenkt dit, meer robots is beter). De awesomeness van robots in een wave wordt bepaalt door de difficulty en het level van het spel. Hoe hoger, des te sterker de waves!

Collision detection
Met bloed, zweet en tranen is er een collision manager binnen twee dagen de grond uit gestampt. Het hoogtepunt van de collision detection is een SAT systeem. De capaciteit van dit systeem is van zo'n 20 detections tegelijk naar 100+ gegaan. No problemo jongens. Natuurlijk draait R.U.L.E. ook zijn hand voor simpeler zaken als pixel-perfect en rectangle collision detection niet om.

Adaptive difficulty
De adaptive difficulty heeft in een dag of twee een aantal mutaties ondergaan. Hierbij is het aantal benodigde klassen verminderd van 12 naar 5. De implentatie hiervan is op dit moment nog in een zeer vroege stage. Laten we zeggen dat het mogelijk is om statistiek te verzamelen en dat je eventueel deze data kan analyseren om de difficulty dynamisch aan kan passen. Misschien.

AI
Artificieel is het zeker. Intelligent? Niet zozeer. De robots hebben nog een beetje moeite met hun doel ("CRUSH LIFE", voor het geval je dat nog niet begrepen hebt) te bereiken. Ze schieten hier en daar wat en volgen de speler. Om muren heen lopen kunnen ze in ieder geval nog niet.

Code layout
Ook hebben we een aantal afspraken over de layout van de code gemaakt. Het is niet altijd even duidelijk wat iedereen in dit opzicht voor eisen stelt waardoor de indeling, al dan niet naar persoonlijke smaak, soms te wensen laat. Voorlopig is dit de volgorde die we aanhouden:

public class Robot 
{
 /* Public properties */
 public string Taunt { get; }

 // Constructor
 public Robot() 
 {
  taunt = "Y0U AR3 OBSoLETE.";
  version = "1.0.K.I.L.L.E.R.";
 }

 /* Public methods */
 public void UpgradeFirmware() 
 {
  version = "2.0-HUMAN_MANGLER";
 }

 /* Private methods */
 private void DESTROYHuMANS(Human scum) 
 {
  scum.ELiMINATE();
 }

 /* Private variables */
 private string version;
}

We zijn als team erg tevreden over wat we allemaal binnen een week hebben bereikt. Wees gerust, er is meer onderweg. Wat precies houden we zolang nog geheim.

PS: Sinterklaas vieren is voor Frozen Duck Games natuurlijk een must. We hebben succesvol loot weten te verzamelen in het dobbelspel. De luitjes van Bulletproof Games waren er ook en zijn vol trots met de drankspellen vertrokken (ja, er zaten drankspellen tussen als kado's).

Blijdschap