Initializing game system... Creating weapon... Creating player... Loading world... Done initializing. I’m goin’ in!
Utvecklarna har beskrivit Rodriguez ett barn av ”tusen serietidningar och actionfilmer. Han är James Bond, Mad Max, Jason Bourne, El Mariachi, Wolverine, Punisher, Rambo, Tony Montana, Han Solo och Vincent Vega i en, och dessutom lite av popsångaren Enrique Iglesias!”.
Det rör sig om en typisk revolution i ett land tyngt av repression, dammigt och förfallet a la Kuba, med stora karaktäristiska femuddiga stjärnor på väggarna och uppklistrade affischer av någon som ser ut som Che Guevara. San Esperito är en plats där makthunger och cynism går före ideologier. Där finns knarkkarteller, snabba bilar, helikoptrar, saker som kan explodera, byar att befria. Ja, du vet.
Vår hjälte landar i solnedgången. Observera den fyrkantigt hackiga kustlinjen, kanske ett utslag av att världen renderas i låg upplösning när den ses på långt håll.
Ett klassiskt skjutaspel. Pang. Boom. Splitter som far omkring. Men under den glansiga (sotiga) ytan döljer sig mängder av C++-kod och en landskapsfil på en gigabyte.
Spelkonstruktörer finns närmare än man anar. Avalanche Studios utvecklar för PS3 och Xbox 360 och finns på Åsögatan i Stockholm och dem ska vi besöka. Vår Quest börjar med att jag trycker på knappen för tionde våningen. Bakgrundsmusiken tonar upp. Hissen surrar och skrapar overkligt. När hissdörrarna öppnas, skingras röken och där står Oskar Burman, utvecklingschef på Avalanche. Vi följer honom genom korridorerna, tungt skramlande med jättelika vapen och ammunitionsbälten. Framme i kafferummet lägger vi automatkarbinen åt sidan och ber honom berätta allt om hur man skriver datorspel.
Oskar borstar stridsdammet av manschetterna och börjar:
– Avalanche Studios (AS) grundades 2003 och vi är numera drygt 150 anställda. Vi jobbar med tre parallella spelprojekt. Det som ligger närmast i tiden är Just Cause 2 som snart ska komma ut. Vi gör framför allt konsolspel och jobbar inte så mycket med PC.
Här sitter de cirka 150 anställda och bara funderar ut nya bomber och kanoner, eller bygger städer.
Världen byggs centralt
Vi har en central teknikorganisation på 25 personer som arbetar med spelens bas, nämligen visualiseringen av de stora 3D-världar som gjort oss kända, och levererar ut den till projekten. Vi har också en ljudstudio som gör ljudeffekter, medan den mesta musiken köps utifrån. Vi har en testavdelning på fem personer som gör kvalitetsprovning genom att spela spelen.
– Har ni större världar än alla andra?
– Vi har nog de största världarna på konsolsidan, för Xbox och Playstation. För PC finns säkert större världar, men där jobbar man annorlunda. PC-utvecklarna kan swappa mot hårddisken på ett annat sätt än vi kan i konsolerna.
– En stor värld? Hur räknar man det?
– Den räknas i kvadratkilometer. Världen i Just Cause 1 var 1024 kvadratkilometer och tvåan kommer att bli ungefär likadan, alltså 32 x 32 kilometer. Vi ser ingen fördel i att utöka den, för folk tappade bort sig i den. Vi håller samma storlek och fyller den med mera innehåll.
Ett exempel på ett genererat insjölandskap. Det här hade lika gärna kunnat vara någonstans i Norrland invid en älv.
– Hur bygger man världar? Sitter en och bygger träd, en bygger stridsvagnar och en gör mark?
– Vi har ett verktyg kallat JustEdit där man börjar med att ta fram en höjdkarta över världen, dess topografi. Det kan man göra fraktalt, eller genom att måla för hand. Vi brukar börja med att ta fram världen fraktalt och förändrar sedan olika ställen för hand, där vi till exempel vill ha en stad. Vill man ha ett berg kan man bara ta tag och dra upp det, eller trycka ned en grop i marken om man vill. Sedan målar man på den typ av terräng man önskar, om det ska vara skog eller öken eller så.
En genererad skog, som den ser ut när man är ute och kliver i den. Man blir imponerad av detaljrikedomen. Det här hade lika gärna kunnat vara ett foto av en riktig skog. Titta särskilt på björkbuskarna. Det märks att det är svenskar som varit framme.
Nu tar landskapgruppen vid och gör grafiken till terrängen. De bygger enskilda träd och buskar. De gör naturligtvis bara en version av ett träd och sedan tar landskapsmotorn vid och skapar variationer och befolkar världen med träd och buskar. Det är också halvautomatiskt. Man bara målar med skogspenseln så får man en hel skog, även om man skulle kunna redigera enskilda träd.
Den djupblå himlen över öknen speglar det faktum att luftfuktigheten är lägre i öknar.
Digitalt vatten
Vår hjälte landar i drickat. Men någon kommer säkert och hämtar upp honom. Notera att ljuset och skuggorna bryts i vattnet och reflekteras i havsbotten.
– Digitalt vatten fascinerar mig. Man kan tänka sig att vattnet representeras av ett antal parametrar om hur materia ska bära sig åt, att det ska vara genomskinligt och att det ska rinna åt något håll, och sen tvingas man väl gräva ett dike som vattnet kan rinna fram i om man vill ha en flod. Applicerar man vattnet på gropen, eller?
– Vi håller på med en del forskningsprojekt kring detta, men vårt nuvarande vatten är ganska rudimentärt. Det är bara ett plan och allting som ligger under den nivån får vatten. Vi har haft floder men alla ligger på samma nivå och därför har vattnet inte strömmat. Men visst har det andra egenskaper än fast mark. Det är transparent och när man hamnar under vattnet händer vissa saker med kameran, det blir suddigt och så vidare. Dessutom har vi en hel uppsättning undervattensterräng med alger och sånt.
Ljudjägarna får skjuta själva
– Vilka saker lägger ni ut på underleverantörer och vilka saker gör ni själva? Köper ni stridsvagnar löst?
– För det mesta gör vi allt ljud här. När det gäller vapenljud kan vi åka ut och skjuta på en skjutbana och spela in det. Vi provade att skjuta på en motorhuv med alla typer av vapen och den blev helt perforerad. Men det behövdes för att få rätt anslagsljud. För att få tag i motorljud brukar vi åka till folk som har intressanta motorer som passar i spelen, eller flygplan för att få flygplansljud, gamla bilar för att få karaktäristiska ljud av gamla bilar... Fotstegsljud gör vi genom att klampa på olika sätt.
Ska det vara skjuta så ska det vara på riktigt. För att få naturtrogna träffljud i spelet gick man ut i till en skjutbana och sköt sönder en motorhuv med olika sorters vapen och spelade in resultatet. Här skyr man inga medel för att få naturtrogenhet.
– Gör man fotsteg i realtid som när man lägger på ljud på en film, eller gör man ett typ-fotsteg och applicerar där det behövs?
– Man specificerar ganska noga vad man behöver. Man kan titta på animationen och se ungefär hur det bör låta och sen försöker man hitta det ljudet. Efteråt är det kodarnas sak att anropa det ljudet varje gång en fot slår i marken.
Ljudeffekter tas om hand eller skapas här i en av Avalanches tre ljudstudios. Cubase är verktyget. Notera KORG-syntarna vid väggen.
Stadsbyggnadskontoret
– Sitter ni och bygger husen ett och ett eller har ni en husgenerator så man kan strössla med hus och få en stad?
– Vi hade ett forskningsprojekt tillsammans med Vinnova för ett år sedan, som gick ut på att försöka generera generella städer med en procedur på samma sätt som vi genererar terräng, fast med olika typer av vägnät, som Gamla Stan med den typen av vägnät, eller amerikanska städer som står på rutnät, eller den speciella typ av vägnät som finns i förstäder. Och sedan skulle de tomter som skapades mellan vägarna fyllas på med hus automatiskt. Det projektet gick väldigt bra och vi fortsätter med det. Men någon måste fortfarande sitta och generera olika typer av fasader.
Fast i Just Cause 2 använder vi inte den tekniken, utan där bygger vi varje hus för sig just där det ska vara...
– Wow (i beundrande ton).
– ...i form av CAD-modeller som spelet sedan renderar.
– Om man skjuter hål i en vägg då, hur ändras CAD-modellen?
– I Just Cause kan man inte skjuta hål i väggar, husen är statiska. Vissa mindre hus, som hyddor, kan man dock skjuta sönder. Hade man ett förstörbart hus skulle man behöva bygga om CAD-modellen i spelet. Men absolut snällast mot processorn är att den beskjutna saken bara försvinner ur spelet och ersätts av lite sot på marken. De tar minst processorkraft.
Åh, snyggt. Vad ska man säga? Helikoptrarna har åttkantiga hjul.
Vi har å andra sidan väldigt förstörbara bilar. Om man skjuter på en stänkskärm byter man ut modellen av den hela bilen mot en modell med trasig stänkskärm. Det är inte ett dugg dynamiskt utan man byter delar på bilen så det ser ut som om den gått sönder.
Utvecklingsmiljön JustEdit
Texturer som väggar, gräsmatta, kamouflage, vägbana och öken skapar vi i Photoshop, medan alla objekt byggs i Audodesk Maya. AS är i gott sällskap, eftersom Maya används av en del andra småspelare i branschen, som Industrial Light and Magic and Tippett Studio (Matrix-filmerna). Efteråt målas objekten i Maya med texturerna och blir till solida objekt.
Ljudeffekter skapas och byggs i ljudeditorn Cubase och musik som kommer in utifrån, från frilansare eller filmbolag, hamnar också i Cubase.
Alltihop samlas ihop i editorn JustEdit som arbetar tillsammans med renderingsmotorn Avalanche Engine för att få rörelse i bilden. Musiken och ljudeffekterna triggas av olika händelser (skjutning, bil som startar) och kopplas till dessa händelser av kodarna i JustEdit.
När allt är hopbyggt kan man trycka på Play och gå runt och prova spelet, som om det spelats på en spelkonsol. Trycker man istället på Export-knappen kommer det ut en världs-fil på cirka en gigabyte som kan användas direkt i spelet. I JustEdit används C++ internt och man kan gå in och detaljredigera om man inte är nöjd med det som skapats automatiskt.
Det är nu som QA-gruppen får ta vid och prova världen och se att den verkar fungera korrekt. Det kan bli flera hopp tillbaka till redigeringen när ljudeffekter sitter fel, en kanon dundrar på fel sätt, fotsteg som inte låter spänstiga nog och så vidare.
Debug-stationen för PS3 är en unik apparat som Avalanche använder för att kunna debugga PS3-kod. En vanlig spelkonsol kan inte användas för debugging.
Klienten
Klienten, alltså spelkonsolen, har hela världen på sin hårddisk. När hjälten landsätts på ön håller man ordning på hans koordinater i världen och hämtar ut världen från hårddisken och renderar.
Man läser givetvis inte in hela gigabytefilen och får den renderad, utan bara den bit som finns i en omkrets runt den spelade strömmas in från hårddisken och renderas. Egentligen finns världen i två versioner, en låg- och en högupplöst, och bara den del som är allra närmast renderas högupplöst. Delen lite längre bort, som bara finns ”för syns skull” renderas lågupplöst för att spara processorkraft och minne.
– Vad händer om man kommer till världens ände?
– I dagsläget begränsar vi spelaren så han inte kan åka längre. I och med att det är en ö så är det dock bara vatten i kanterna.
– Sen måste spelpersonen förändra världen. Ändrar man på världen genom att skjuta sönder den, måste man ändra på renderingen?
– När en sak blir bortsprängd tas den bort ur listan med vad som ska visualiseras, genom att den helt enkelt stängs av. Vi har en lista över alla objekt som ska renderas och de kan antingen vara av eller på. När man spränger bort något triggar man först alla ljudeffekter och visar en bildsekvens av explosionen och sedan stänger man helt enkelt av objektet. Ska en bil vara partiellt trasig kan man istället byta ut objektet mot ett trasigt objekt. Ett bortskjutet objekt kan också ersättas med bilden av en sotfläck på marken.
Handkontrollen läses av kontinuerligt och renderaren får reda på hur spelaren rör sig. Det är viktigt att man får rörelsen rätt så spelet känns bra. Vänder man sig om ska rörelsen ske direkt och inte efter ett tag. Det är en svår balans att få det att se realistiskt ut. Just rörelse är kritiskt, eftersom kritiska röster om att ett spel ”känns trögt” är vanliga. Om man ska hoppa med en karaktär i spelet vill man att den ska hoppa direkt när man trycker för då känns reaktionen rätt. I verkliga värden börjar man med att ta sats för att få upp farten, vilket tar en viss tid. Skulle man ta med hela den fördröjningen i spelet skulle det kännas fel. Det är en mycket svår avvägning.
En explosions anatomi
Boom. I nästa sekund har den beskjutna bilen bytts ut mot en sotfläck och tre-fyra ljudfiler har låtit plåtbitar och glassplitter regna ned över deltagarna. Du ser hur tryckvågen rör sig utåt och påverkar de ljusblå fordonen, som lyfter lite.
När man detekterar att skjutaknappen tryckts in börjar man med att anropa vapnets subrutin som svarar med om det fungerade, om det finns ammunition kvar, och vilken styrka och räckvidd vapnet har och sedan utlöser man vapenljudet (eller ett försmädligt ”klick”). Därefter undersöker man om det blev träff eller inte. Blev det inte det, händer inget mer. Blev det träff anropar man det beskjutna objektets subrutin och undersöker om träffen blev tillräckligt kraftig för att göra skada. Var den inte det löser man ut ett dovt ”plunk” och inget mer händer.
Var den tillräckligt kraftig löser man ut en serie ljudeffekter kring explosionen (explosionen, metallen som förvrids, klangen när delarna landar på marken), visar en bildsekvens av explosionen och den rök som bildas och stänger av objektet i listan, eller byter ut det mot ett trasigt, eller en mörk fläck på marken och återgår i vänteläge. Under tiden gör renderaren sitt jobb och ritar upp världen igen. Det avstängda objektet renderas inte längre.
Samtidigt undersöker man om tryckvågen från smällen kan ha påverkat något annat. Om så, repeteras hela processen med ljudeffekter och bildserie igen för de träffade objekten. De kan också komma att stängas av i listan. Tryckvågen skapar också en fysikhändelse, en påverkan på andra objekt så att de kan flyttas i landskapet. Eventuellt fortsätter man att undersöka ytterligare tryckvågor.
Saker och ting AB
– Finns det företag som inte gör annat hela dagarna än bygger raketer och stridsvagnar i Maya?
– O, ja, sådana finns. Normalt köper vi bara första steget i tillverkningen. Det är en ganska teknikintensiv process att få in föremålet i spelet anpassat för våra verktyg. Det krävs för det mesta en del handpåläggning från våra grafiker. För det mesta lägger vi ut en exakt beställning till någon, med skisser på hur ett hus ska se ut från olika vinklar, med färgkartor och dylikt. När vi får det, tittar vi på det, kommer med feedback, får en ny modell och provar igen osv. Det brukar bli ett par vändor innan det är klart.
En trevlig liten bulldozer att köra sönder hus med kanske? Här är konceptritningen på en riktig fuling, med bilder av riktiga arbetsmaskiner att ta detaljer ifrån.
Givetvis har den skumma presidenten massförstörelsevapen. Fattas bara annat. Här har du konceptritningen på hans roterbara missilsilosar, enligt revolverprincipen. Ritningen har gått vidare till en designer som ska ”bygga” raketbasen. Designern har fått förslag på väggarnas textur, intressanta saker att ha på väggarna som bryter upp monotonin, och intressanta föremål att ställa ut, som strålkastare osv.
– En stridsvagn kan väl påverkas på olika sätt när man skjuter på den, antingen gå sönder helt eller inte påverkas alls?
– Det kommer koder från den subrutin som utgör vapnet, som jämförs med stridsvagnens tålighet, så man kan avgöra vad som ska hända. Ett annat exempel på parameter är ”buoyancy” som avgör om föremålet ska flyta eller inte om det hamnar i vattnen. Man kan också specificera vad som ska hända när objektet går fort, blir det dålig väghållning, eller i fallet flygplan, kanske det lyfter. Återigen en slags fysiksimulering.
Kolla min nya stridsvagn. Är den inte fin, med fyra kanoner. Så här ser ett enskilt objekt ut när det är färdigkonstruerat och kan inkorporeras i spelet.
Handlingen kräver en bro just här. All right. Du får din bro i JustEdit. I listan till höger kan du se alla objekt som visas, träd, gräs och stenar, delar av bilar mm.
Just här kommer hjälten att behöva en helikopter för att smita ifrån elakingarna. Alltså ställer vi dit en i JustEdit. Flygcertifikatet ligger i handskafacket. Äsch. Flyga är busenkelt.
Hur driver man handlingen?
– Berätta lite om hur man tvingar fram en handling, hur huvudpersonen kan samverka med andra personer och hur man får de övriga personerna i spelet att faktiskt jobba mot ett mål, till exempel att erövra presidentens bas eller sälja knark eller något. Det måste finnas en slags story?
– Ingenting händer om inte huvudpersonen själv gör något. Biltrafiken fortsätter visserligen på vägarna, men någon handling sker inte av sig själv. De spel vi utvecklar är av typen ”freeroaming”, eller ”sandbox gameplay”, där spelaren kan röra sig hur han eller hon vill i spelvärlden. Till skillnad från mer linjära spel där spelaren ständigt tvingas röra sig i en viss riktning så erbjuder freeroaming-spel en mycket större frihet – till ett pris naturligtvis. Det är ofta svårare och mer kostsamt att utveckla freeroaming-spel med sandboxelement eftersom speldesignern måste ta i beräknande allt vad en spelare kan tänkas hitta på, samtidigt som han ju vill att spelaren skall få ta del av storyn på ett naturligt sätt. Det som driver freeroaming-spelaren framåt är i regel upptäckaranda och storyline.
Vi placerar ut ledtrådar eller intressanta saker som spelaren kommer att hitta, som leder honom vidare. Man skulle också kunna tänka sig att någon virtuell figur till sist kommer fram och jagar spelaren i rätt riktning om inget händer.
Nattstrider. Den jämnblå himlen byts ut mot stjärnhimmel.
Tanken är att spelaren skall lockas in i spelvärlden och ta del av dess rikedom, samtidigt som spelets story uppmanar till att utföra våghalsiga uppdrag. Det ideala är när dessa två element lirar så bra ihop att man inte upplever någon skillnad mellan storyrelaterade uppdrag och freeroaming-uppdrag. Dock är freeroaming-genren tämligen ny och utvecklas fortfarande. Vi har lärt mycket sedan vi utvecklade JC_1 och vi hoppas att vi aldrig upphör med det. Vi testar, optimerar och rannsakar processen hela tiden.
IT-stödet på en spränga-skjuta-verkstad
Världarna blir till jättefiler som hamnar på detta SAN.
Vi tar svängen ned på nedervåningen och träffar på den IT-ansvarige Thomas Wall.
– Vi är som vilket medelstort företag som helst. Man kanske kunde tro att vi satt i en källare och hackade, men så är det inte. Vi har en central driftavdelning som alla andra. Men vi har rejält höga krav på maskinernas prestanda. Vi har till exempel gigabitnätverk överallt med tiogigabitslänkar mellan våningsplanen. Byggsystemet JustEdit för kodutvecklarna är centralt, så vi behöver ett snabbt nät. Fiber ut till arbetsstationerna hade tyvärr blivit för dyrt, men vi har fiber mellan våningsplanen.
Clustret som kör byggsystemet består av 10 bladservrar med sammanlagt 80 kärnor och 80 gigbyte RAM, med tillkopplat SAN.
JustEdit och andra kompilatorer drar massor av datakraft och ett cluster med Suse Linux tar hand om den saken.
Vi kompilerar i en blandad miljö. PC-systemen är linuxbaserade, så där kompilerar vi i linux-miljö, men Xboxen är microsoftbaserad och kräver en Windows-miljö. Clustret har därför både Windows- och Linux-maskiner. Kompileringarna exekverar rätt ned på metallen, men för de funktioner vi har bedömt det som möjligt har vi virtualiserat. Det har varit ett jättelyft och kostnaden för servrar har minskat till en tredjedel, inklusive lagringsenheten, SAN:et. Linux kräver inte lika mycket av maskinen så där blev virtualiseringen effektivast.
– Kör alla utvecklarna superarbetsstationer?
– Nej, vi använder maskiner som vanligt folk har. Det kan vara allt från en vanlig gammal Pentium-4 på 3 GHz till en quad-core-maskien, med varierande grafikkort. Alla utvecklarmaskiner har dock stöd för 3D i grafikkorten. Det ger oss en del av systemtestningen alldeles gratis och dessutom sparar det in en hel del pengar. De inte så snabba maskinerna har vi kompenserat med det centrala byggsystemet.
Tidsbesparing
Tidigare kompilerade alla på sina lokala maskiner, men jag började titta på det där med central kompilering och kom fram till att det skulle vara mycket tidsbesparande. Från början hade vi kompileringstider på 25 minuter, men i det centrala systemet är vi nere på en halv minut. Det är mycket viktigt för en kodare som vill testa sin kod hela tiden. Vi är långt uppe över 100.000 rader kod.
Det är bilden av ett välordnat programutvecklingsföretag som växer fram. Scrum-metodiken och planeringstavlorna på väggarna suddar helt ut bilden av fanatiska, skäggiga hackare som sitter i mörka hålor och utvecklar fantastisk kod på heroiskt kort tid. Folk tar reglementsenlig semester och man har till och med ett rekreationsrum dit man kan gå och koppla av, alternativt uppbringa ny inspiration med att spela gammaldags arkadspel eller elgitarr, eller ta en runda med något konkurrentspel.
När det brister med inspirationen kan man gå till förströelserummet och spela gammaldags arkadspel eller elgitarr eller koppla av med, ja, datorspel.
Lekstuga för machopojkar? Nej. Seriöst utvecklingsarbete.
Exit left
Jag ställer ned kaffekoppen och lyfter nonchalant min Superphaser G-12 och skjuter ett stort hål i väggen.
- Hasta la vista, baby!
Jag kliver rakt ut genom hålet. Fallet ned från tionde våningen bekommer mig inte. Actionhjältar slår sig aldrig.
Så går du vidare
Avalanche studios: www.avalanchestudios.se
Officiell webbplats för Just Cause: www.eidosinteractive.co.uk/gss/justcause/index.html
http://en.wikipedia.org/wiki/Just_Cause_(video_game)
http://sv.wikipedia.org/wiki/Just_Cause
Läs om Maya: http://usa.autodesk.com/adsk/servlet/index?id=7635018&siteID=123112
Mer om Maya: http://en.wikipedia.org/wiki/Maya_(software)
Speltidningar och webbplatser med spelrecensioner finns det tillräckligt många. De räknar jag inte upp här. Här har du bara några stycken:
Spelnyheter: www.eurogamer.net
Uppslagsverk över spel eller personer i spelindustrin: www.mobygames.com
Bra för att se genomsnittliga recensionsbetyg för spel www.gamerankings.com
Presumtiva kunder får njuta av spel och demosar i ett lyxigt ljudisolerat visningsrum à la biosalong. Det finns till och med ställ för drickamuggar. Fattas bara popcornmaskin.