Brutalt hjerneindgreb forvandlede mordere til nuttede ninjaer

It-udfordringen: Fredag rammer det nye spil fra danske IO Interactive, Mini Ninjas, butikkerne i Europa. Undervejs i projektet måtte programmørerne blandt andet genskabe karakterernes kunstige intelligens fra bunden.

Et hold på omkring 30 udviklere har arbejdet 3,5 år på at få Hitman-producenten IO Interactives nye barn, Mini Ninjas, på gaden.

Mini Ninjas er et actionspil, hvor spilleren styrer én af flere mulige ninjaer, som skal kæmpe mod horder af forhenværende nuttede dyr, som en ond krigsherre uheldigvis har forvandlet til samuraikrigere.

Fredag d. 11. september 2009, rammer Mini Ninjas butikkerne i Europa, og producer Jonas Lind og spilprogrammør Simon Veith Reinholt fortæller her, hvilke udfordringer projektet givet IO Interactive.

Hvad går projektet ud på?

Jonas Lind: Mini Ninjas skulle være et actionspil, som hele familien kan spille. Det betyder, at det er designet til børn, men at det også indeholder elementer, der giver deres forældre lyst til at tage controlleren i hånden og spille.

Spillet adskiller sig fra vores tidligere spil ved, at store dele af det foregår udendørs, i modsætning til den mere klaustrofobiske indendørsstemning i for eksempel Hitman.

Hvad har din rolle været i projektet?
Jonas Lind: Jeg har været producer på Mini Ninjas og har dermed fungeret som bindeled mellem programmører, grafikere, leveldesignere og så videre.

Simon Veith Reinholt: Jeg har stået for at programmere meget af den nye AI (den kunstige intelligens, red.) og OSD'et (spillets menusystemer, red.).

Hvilke teknologier er der brugt i projektet?

Simon Veith Reinholt: Vi bruger C++ til alt, hvad der har med selve spillet at gøre. Compilerne er platformspecifikke, hvilket vil sige, at vi for eksempel bruger Xbox' compiler til den platform.

Vi har brugt Python og C++ til at lave vores egne værktøjer. For eksempel har vi selv skrevet leveleditoren og de automatiserede build scripts i Python. Der er en enorm mængde data, der skal leveres som input til spillet. Det gælder for eksempel al grafikken, der består af trekanter som data, der skal indlæses.

Hvilke problemer stødte I på undervejs?

Jonas Lind: Vi har haft nogle udfordringer med AI'en. Tidligere har vi kun lavet skydespil, og vi regnede med, at vi kunne ommodellere AI'en fra Kane & Lynch (actionspil fra IO Interactive, red.) til Mini Ninjas. Men hele bevægemønsteret, man sætter op for figurer med rifler, er markant anderledes end det, man finder når hos ninjaer, der skal stikke hinanden med sværd.

Det viste sig at kræve en komplet omskrivning af AI'en, hvor vi smed næsten al koden ud og begyndte forfra. Det fandt vi ud af to år efter præproduktionen begyndte, hvilket var lige efter vores first playable (første spilbare udgave af Mini Ninjas, red.) var klar. Udviklerne var lettede over beslutningen, for de var utilfredse med, at de skulle sidde og slås med nogle problemer, som de ikke kunne få til at virke med de værktøjer, de havde på forhånd. Fra et produktionsynspunkt betød det, at det hele blev forsinket et par mandemåneder, hvilket igen forsinkede implementeringen af Save-load-funktionen og OSD'et.

Simon Veith Reinholt: Det var enormt rart at tage det skridt tilbage i produktionsprocessen.

Hvis man sammenligner med andre af vores spil, er der større og mere væsentlige forskelle på fjenderne, og derfor blev vi nødt til at oprette en fjendetype for hver fjende.

Der er for eksempel nogle fjender, der skal gå i formation med spyd, og andre skal kunne være usynlige. I det tidligere AI skulle vi kun håndtere figurer, som alle har menneskelignende kvaliteter og bevæger sig enkeltvis. I Mini Ninjas skal flere fjender kunne bevæge sig som en gruppe, men stadig reagere på hændelser individuelt, og det krævede en koordinationsmekanisme med en slags usynlig hånd, eller 'master', der styrer gruppen overordnet.

For at løse det problem har vi implementeret et minitrådsystem, som gør, at vi for eksempel kan give en figur kommandoen 'gå derover og vent på, at du er kommet frem'. Ministrådsystemet understøtter frivillige processkift mellem trådene i systemet, hvilket betyder, at en tråd først afbrydes, når den er færdig med at udføre sin opgave. Det står i modsætning til det, man kender fra et operativsystem, hvor scheduleren kan bryde ind i en tråds udførsel. Det stiller så også krav til parallelprogrammeringen, fordi vi som programmører skal sikre, at processkiftene sker ofte nok, så en tråd rent faktisk bliver afbrudt og ikke står og hænger.

Vi genbrugte nogle af Kane & Lynch's generelle AI-systemer helt nede i bunden, men vi følte i sidste ende, at det var nødvendigt at skrive AI'en helt om, fordi vi hele tiden stødte på problemer i den daglige implementering.

Klassehierarkierne i Kane & Lynch-AI'en kunne ikke indfange de nye AI-typer og deres adfærd, og det nye klassehierarki er også blevet væsentligt større og mere kompliceret.

Jonas Lind: OSD'et var også en lang iterativ, lige fra menusystemet i starten af spillet, og til den måde, man viser health-baren på skærmen. Det var primært en lang proces, fordi vi ændrede ambitioner undervejs om, hvordan man for eksempel går ind i en inventory-skærm og vælger en trylleformular og så er ude igen og kan kaste den mod fjenden. Der skal helst ikke være så mange skridt i at udføre den slags handlinger i spillet.

På det tidspunkt, hvor vi burde være færdig med OSD'et i alpha-udgaven, som i udgangspunktet skal være featurecomplete, havde vi kun et mangelfuldt OSD på det tidspunkt. Det hang også sammen med, at vi havde svært ved at finde en person, der kunne stå for opgaven.

Hvilke gode råd kan du give videre?

Jonas Lind: Da vi startede projektet, var det meningen, at det skulle vare 2-2,5 år, og det endte med at vare 3,5 år. Men det skal så siges, at ambitionsniveauet undervejs blev markant anderledes, end det var i begyndelsen.

Blandt andet besluttede vi, at Mini Ninjas også skulle være fængende for voksne, hvor det i udgangspunktet bare skulle have været et rent børnespil. Derudover blev vi enige om, at vi også ville rulle ud på PS3-platformen, og ikke kun nøjes med Nintendo Wii og Xbox.

Set ud fra det nye ambitionsniveau har vi holdt tidsplanen rimeligt godt. Men vi kunne have overholdt vores deadlines, de såkaldte vertical slices, bedre, end vi gjorde undervejs.

Vi havde sat vores vertical slice til at indeholde 15 procent af det endelige spilindhold, og tanken var så, at man ud fra den første vertical slice skulle kunne parallelproducere resten af spillet. På den måde fungerer den som en slags skabelon for, hvordan resten af spillet skal produceres rent mandskabsmæssigt og tidsmæssigt.

Men det kræver, at den første vertical slice så er færdig nok til, at den kan fungere som en målestok for udviklingen af resten af spillet.

Det viste sig, at vores vertical slice ikke var færdig nok, og det betød blandt andet, at vi senere måtte redesigne de 'bosser', som skal bekæmpes ved slutningen af hver bane. De var simpelthen ikke færdige nok ved den første vertical slice, og der var nok for meget ønsketænkning hos os om, de var færdige.

Vi havde et designdokument for, hvordan en boss skal nedkæmpes, og når man så implementerer de ting, man har designet, kan det ske, at det slet ikke var så sjovt eller svært, som man troede. Så prøver man nogle nye ting af, og jeg havde regnet med, at det ville tage tre iterationer per boss, men i nogle tilfælde tog det nærmere fem-seks iterationer.

Derfor handler det om at gå mere ind til benet og være hårdere ved sig selv. Der kan være alle mulige grunde til, at man har den der ønsketænkning, men det nytter bare ikke noget. Hvis man vil bruge noget som en målestok, så skal den også være i orden. Det lyder som om, det siger sig selv, men sådan er det desværre ikke altid i praksis.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Kommentarer (2)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Normann P. Nielsen

Ikke for at reklamere men jeg kan iøvrigt anbefale spillet http://tribaltrouble.com/, et fantastisk mindre spil - også fra DANSK side der er det eneste virkeligt, vikeligt velkørende jeg har set på Java platformen [på Windows anyway...] - det kører bare smukt! Og findes også til Linux + Mac OS

Mine unger er vilde med det :-)

  • 0
  • 0
Log ind eller Opret konto for at kommentere