woensdag 31 oktober 2012

Concept 1: Car City

Dit is een korte omschrijving van het eerste concept dat uit de brainstorm is gerold. Hoewel we deze richting opgaan, moet er nog een hoop ontworpen en getest worden. Het is dus nog vrij elastisch. 

CAR CITY
In dit concept speelt de jonge doelgroep auto-ontwerpers. Iedereen krijgt de opdracht om zijn eigen merk en voertuigen te ontwikkelen voor een stad die op het punt staat een enorme auto-industrie te krijgen. Zo kunnen de spelers trucks ontwerpen, sportwagens of zeer goedkope wagens voor de arbeider. Zodra iedereen hun ontwerpen heeft ontwikkeld worden ze in een wereld gezet waar een simulatie afspeelt aan de hand van de ontwikkelde wagens. 



Het brainstorm proces


NIEUWE DENKRICHTINGEN

Na de bespreking met de klant afgelopen week ontstonden er enkele nieuwe richtingen waar we ons op wilden richten; mede door de communicatie over de opdracht en de uitkomsten van de vorige twee concepten. De gemaakte prototypes worden voorlopig in de ijskast gezet, en we gaan verder met twee geheel nieuwe concepten. Voordat we daarmee aan de slag kunnen moeten ze echter eerst worden bedacht! Voor deze conceptualisatie besloten we om ons te richten op vier richtingen, kort samengevat zijn dat de volgende;

Connectie
Een spel waarin er een goede connectie is tussen de twee doelgroepen; eigenaren van mobiel erfgoed en jonge tieners op school. Maar ook multi-player binnenin de doelgroepen is onderdeel van deze richting.

Emotie
Een spel waarbij de spelers emotioneel betrokken raken bij erfgoed. Dit kwam voort uit één van de vorige concepten; Highscore or Fame, waarbij de spelers de keuze kregen om hun zelf samengestelde bootje te bewaren of te verkopen voor meer punten.

Maatschappelijk belang
Een spel dat een maatschappelijke boodschap over mobiel erfgoed overbrengt. Bijvoorbeeld hoe belangrijk de ontwikkeling van treinen of de scheepscontainer is geweest voor de groei van Nederland. Dit punt kwam ook over uit een vorige prototype; Trainization waarbij spelers steden moesten verbinden met treinrails om ze te laten groeien.

Digitaal/Analoog
Een spel dat digitale elementen combineert met analoge en hiermee iets aan het spel toevoegt, zijnde het meer betrokkenheid, betere connectie tussen de spelers of meer.

Met deze vier richtingen probeerden we vervolgens op verschillende manieren verder te denken. Het brainstorm proces is een vreemd geval en in mijn ervaring zelden hetzelfde, zeker met verschillende mensen. Bij een brainstorm is geen enkel idee slecht, en de woorden 'Nee' of 'Dat zou niet werken' zijn dan ook strikt verboden. Elk idee, hoe bizar dan ook kan iemand anders leiden tot een nieuw idee. 

Desondanks is de uitdaging vaak om iedereen zo vrij te krijgen om in deze gedachtengang te komen, en de gedachten toch langs alle uitgangspunten te leiden, en niet laten vasthaken aan één van die punten. Om dit teweeg te brengen probeerden we gedurende de week enkele methoden, met verschillende maten van succes. Afgelopen week botsten we ook tegen enkele andere externe problemen zoals ziekte en persoonlijke problemen binnen het team, die voor een hoop afleiding en vermindering van de werkkracht zorgden, waardoor dit experimentele brainstorm proces niet zo vlot liep als gepland. 


BRAINSTORM PROCES

We begonnen met het onderzoeken van verschillende bronnen. Eigenlijk waren we gewoon op zoek naar dingen die we tof vonden; Spellen die digitaal met analoog combineren, games die ook aanslaan bij volwassen, spellen over erfgoed en een rits aan andere kleine vindingen en punten die van pas zouden komen in de brainstorm. Inspiratie! Zodra we wat ammunitie van dit type hadden gingen we bij elkaar zitten om de vergaarde informatie te bespreken en de eerste ideeën die hier uit kwamen te noteren. Deze bleven echter erg hangen in de regio van de gevonden informatie, en er kwam nog weinig uit.

De voornaamste reden die we vonden voor dit gebrek aan creativiteit was het gebrek aan zuurstof in onze werkruimte en in extensie de hele verdieping. We besloten voor de 2e brainstorm om buiten in de kou te gaan zitten. Hier kwamen de gesprekken al wat vlotter op gang, maar hier stuitte we op een ander probleem dat vaker voorkomt bij brainstormen; een gebrek aan focus. De discussie bleef erg breed en we probeerden al onze focus punten tegelijk te behandelen. 

Uiteindelijk zijn we weer terug het gebouw in gegaan, op een wat beter geluchte plek en hebben we heel strikt afwisselend sessies gehad waarbij men individueel een concept uitschreef en deze vervolgens in een groepssessie weer bij elkaar gooiden. Deze werden dan besproken, en leidden tot de focus van de volgende individuele brainstorm. Door de tijdsdruk van de individuele sessies en de focus die word meegegeven kan men in relatief korte tijd verder denken. Hier zat de groep het beste in zijn vel en kwamen er leuke concepten uitrollen.

Op een gegeven moment moeten er echter knopen worden doorgehakt en gaan we een selectieproces door. We vatten de concepten samen en proberen kort de kern van elk concept te vinden. Ook bespreken we de mogelijke kanten die de concepten op zouden kunnen gaan. Op dit moment vervalt de regel dat 'Nee' en 'Dat zou niet werken' niet meer gezegd mogen worden. Iedereen kijkt kritisch naar de ideeën en zo kunnen sommigen al snel vervallen, of omdat de kern van een concept overeenkomt met een ander worden deze gefuseerd. Na deze selectieronde schreven we de overgebleven concepten op en stemden we op de potentie die we zagen in elk van de eerder genoemde focus punten. Hoewel deze punten niet direct de twee concepten bepalen die we gaan ontwikkelen, worden ze wel meegenomen in de uiteindelijke stemming.

De uiteindelijk stemming gaat als volgt; iedereen krijgt twee stemmen en kiest op de twee concepten waar ze het meeste potentie in zien. De concepten met de meeste stemmen gaan door. Welke concepten er zijn gekozen? Daar later (niet heel veel later) een blogpost over! 

vrijdag 19 oktober 2012

Post mortem: treinen game

Gesprek opdrachtgever

Na een gesprek met de opdrachtgever bleek er toch een verschil te zetten met onze doelstellingen en die van de klant. Na het eerste gesprek hadden wij geinterpeteerd dat de doelstellingen de volgende zouden zijn:
  • Mensen bewust maken van het belang van mobiel erfgoed
  • Mensen bewust maken van de invloed dat (nu) mobiel erfgoed voor impact heeft gehad op de maatschappij.
Echter is voor de klant de doelstelling om de mensen met mobiel erfgoed hun verhalen te laten delen met mensen die geen mobiel erfgoed hebben. Hierbij is gezegd dat we de aanname mochten maken dat de mensen met mobiel erfgoed vooral 45+ zijn. Vanwege deze wijziging in doelstelling hebben we besloten dit prototype stop te zetten en nieuwe prototypen te ontwikkelen voor de nieuwe doelstelling.



Train game

De doelstelling van de train game was gericht op het tweede doel van onze initiele doelstellingen: "Mensen bewust maken van de invloed dat (nu) mobiel erfgoed voor impact heeft gehad op de maatschappij". De train game richt zich specifiek om spelers te laten ervaren hoe groot de impact kan zijn om een stad te verbinden aan het railnetwerk en de stad 'mobieler'  te maken.

In de game zitten verschillende steden waar de speler rails tussen kan leggen. Wanneer steden met elkaar verbonden worden zullen deze steden gaan groeien. Ook verschijnen er kleine dorpjes waar het railnet verbonden kan worden. Deze kleine dorpen zullen vervolgens uitgroeien tot grote steden. Dit om de speler te laten begrijpen dat doordat steden vroeger werden verbonden konden uitgroeien tot volwaardige steden (bv Hilversum).


Iteratie 2

De traingame is in zijn eerste opzet afgerond, in iteratie 2 was het de bedoeling om te experimenteren met verschillende nieuwe onderdelen. Een aantal van de onderdelen waar we het over gehad hebben staan hieronder beschreven.

Klasse systeem

De speler leert vervolgens ook het verschil van klasse, elke stad genereert arme(3e klas), middenklasse (2e klas) en rijke mensen (1e klas). Aan de hand van wat er in een stad woont koopt de speler de desbetreffende wagons voor zijn trein.

Events

Het leek ons interessant om te experimenteren met events. Bijvoorbeeld de speler kan ervoor kiezen om een bepaalde techniek te kopen waardoor een bepaald systeem veel goedkoper word maar de consequentie is dat er mensen ontslagen worden. Hetgeen ervoor zorgt dat in veel steden opeens alleen nog maar arme (3e klas) mensen verschijnen. Ook als bijvoorbeeld de crisis in 1920 aanbreekt kan dit effect op deze manier gevoeld worden door de speler. Een ander idee is om steden mensen en goederen aan te bieden aan de hand van hun ligging. Bijvoorbeeld bied Rotterdam veel goederen.

Eigen Nederland

Om spelers een meer eigen spel te geven zaten we te denken aan een Nederland waar de speler zelf invloed op heeft. De speler kan bijvoorbeeld ervoor kiezen om een klein dorpje (waar hij zelf woont?) uit te laten groeien tot het kloppende hart van Nederland waardoor dit uiteindelijke misschien wel de hoofdstad word.

Juicyness - eye candy

Om het prototype aan te kleden en de speler het gevoel te geven dat hij iets teweegbrengt heb ik verschillende extra elementen toegevoegd. Bijvoorbeeld wanneer passagiers succesvol zijn vervoerd word er vuurwerk afgeschoten. Er lopen koeien rond met een simpele kunstmatige intelligentie, licht effectjes, dag en nacht cyclus en rook effectjes van de de trein. Stuk voor stuk kleine dingetjes die weinig tijd kosten om er in te zetten en een meer levendig gevoel geven.




donderdag 18 oktober 2012

Prototype Development: Highscore or Fame

Post mortem
Er heeft vanmiddag een gesprek plaats gevonden waarin bleek dat de opdrachtgever liever een game zag dat een communicatie opzet tussen oud en nieuw. Daarom moet het "Highscore or Fame" prototype worden stopgezet en beginnen we opnieuw met nieuwe ideeen en concepten.

Design lessen
Omdat we nog niet echt hebben kunnen playtesten hebben we minder uit het prototype kunnen halen dan we zouden willen. We hebben wel veel met het concept kunnen spelen in onze hoofd.

Traintracks

WorldManager

De WorldManager houd posities bij van alle WorldObject's. Deze worden opgeslagen op een gridbased systeem waarbij elke grid 25x25 is. Zowel de Rail als de City erven van WorldObject.

Wanneer op een WorldObject clicked word er voor elke grenzende positie (boven, rechts, links en onder) gekeken via de worldManager of hier nog een vrij plekje is. Wanneer er nog een plekje vrij is word er knopje geplaatst waar de gebruiker op kan klikken. 

Als de gebruiker op de railKnop klikt word er een nieuwe rail geplaatst.


WorldObjecten connecten

Als er een nieuw worldObject word gecreeerd word op dit object altijd de functie updateBottomTopLeftRight() , deze functie verbind deze rails met eventueel naastliggende stukken rails: De nieuwe rails word altijd gelocked aan het object waar de gebruiker in eerste instantie opklikte. Dit proces werkt twee kanten op. Beide objecten weten van elkaars bestaan af. Wanneer er nu nog een verbinding toegevoegd word word deze ook gezet op dezelfde manier. Echter wanneer een rail 2 verbindingen heeft word deze zogenaamd gelocked (isLocked). Als deze variable is gezet word deze rail genegeerd voor toekomstige railStukken. (dwz een rail kan nooit een splitsing zijn). Vervolgens als de verbinding is gezet word op beide rails updateRailSettings() aangeroepen. Deze functie update aan de hand van welke verbindingen zijn gezet welk model er geladen moet worden en in welke rotatie (bv een bocht, rechte, etc).



Path calculation

Als aan een rails met al 1 verbinding een stad word geconnect weet de rails dat een traject is afgerond. Er word nu een RailTrack object gemaakt die vanuit de laatste rails een path maakt naar de eerste rails op dit traject. Dit word een waypoint lijst. Vervolgens word er een trein gecreëerd die deze lijst van waypoints gebruikt om over te rijden.


Robustheid

Om het systeem robust te maken/houden heb ik gebruik gemaakt van functies die op elk moment aan te roepen zijn. Deze functies gooien eerst de huidige opzet weg en bouwen het daarna opnieuw op. Een voorbeeld hiervan is voor het bouwen van de buildRailIcons op het scherm.


woensdag 17 oktober 2012

Prototype Development: Highscore or Fame

Design veranderingen
De game bevat nu mannetjes die apart leveren en inkopen. Ze zijn voor nu te onderscheiden aan hun kleur. De mannetjes die inkopen verdwijnen nadat ze goederen binnen hebben gekregen en komen na geruime tijd weer terug.



World Collision
De collision met de wereld bleek een leuk vraagstuk met meerdere oplossingen. Zareh stelde voor een raycast naarbeneden te doen om zo de diepte van de zee te testen, en daarop te baseren hoe hard de boot mag varen. Wat we uiteindelijk gedaan hebben is circle colliders op de boot plaatsen van verschillende grootte die, wanneer ze in contact komen met land, de boot langzamer laten varen. Er zijn op het moment 3 colliders. De kleinste zet de speler terug op zijn vorige positie zodat de boot niet vast komt te zitten in het land.

donderdag 11 oktober 2012

Prototype Development: Highscore or Fame

Highscore or Fame concept
Samen met Pieter een game bedacht waarbij je met een zelf samengesteld bootje spullen moet inkomen en verkopen om punten te verdienen. Je vaart rond de hele wereld en bezoekt allemaal landen. Wanneer de tijd om is komt er een keuze of je een paar extra punten wilt OF je boot tentoon wil kunnen stellen voor andere gebruikers. Er staat dan bij langs welke landen deze is geweest. Hierdoor willen we de discussie starten of het belangrijk is iets te behouden of niet.

Development
Ik ben in Unity begonnen met de development. We hadden besloten de wereld rond te maken dus dat was voor mij een leuke taak.

woensdag 10 oktober 2012

LAB prototype Unity en Maya

Eerste prototype


Vandaag en gisteren bezig geweest met het eerste prototype in Unity. Unity werkt op sommige punten nogal merkwaardig, maar is wel erg snel en heeft al een breed scala aan bruikbare functies.

Nederland Creëeren

 Had een model nodig van Nederland, in eerste instantie deze zelf proberen te maken met de terrein editor in Unity, dmv een terrain met hierop een texture van nederland maar dit kost (onnodig) veel tijd en ben hier dan ook al snel afgestapt. Vervolgens een heightmap gemaakt:

Terrain > import height map
Gebruik altijd een heightmap met de power of 2; 2,4,8,16,32 etc, een grote heightmap kost aanzienlijk meer processorkracht.
Bij Terrain>Set resolution kan je de resolutie van je terrein zetten. Standaard op 2000x2000

De heightmap creeert 'blokken' waardoor de randen niet mooi lijken.


Vervolgens nederland in maya gemaakt met de create polygon tool, extude en de randen naar buiten trekken.
Tips van Zareh betreft de export:

1. Delete history
2. Modify > freeze transformation
3. Zet pivot op juiste plaats (center?)
3. Geeft sprekende naam en check in outliner of hij goed is gegaan.
4. check ook display> polygons> custom polygon display. Als dit niet goed zit zet dan in  normals > reverse de culling andersom.
5. Export als FBX

quick keys:
ctrl + > // ctrl+< select more/les
ctrl+shift op actie om hiervan een quickkey te maken

 Unity 

Een korte greep uit de technieken die ik heb gebruikt

Het kunnen klikken op een 3d object
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray,out hit)){ /* een hit op object hit.transform.gameObject*/ }



Het tonen van 2D gui elementen op 3D ruimte:
zet een gameObjectin de wereld, hang hier een C#-class aan met OnGui code voor het 2d element. positioneer nu dit gameObject op de juiste plaats door de volgende code in de update:

Vector3 screenPosition = Camera.main.WorldToScreenPoint(this.gameObject.transform.position);
 screenPosition.y = Screen.height - (screenPosition.y + 1);// inverts y
iconPos = new Rect(screenPosition.x - 50, screenPosition.y - 12, 50, 50);

iconPos is een rect waarin het 2d element getekend word, 50x50 is in dit geval mijn grootte

in onGui gebrui nu:
GUI.DrawTexture(iconPos,railIcon);

waarbij railIcon in mijn geval een texture 2D