Tuomas: Sananen Unitysta

Tuomas Honkala teki taas pelin. Tai prototyypin. Hänen mielestään ne ovat melkein sama asia.

Sananen Unitysta

Tämän numeron paras Unity ei ole Assassin's Creed.

Tähän numeroon kirjoittamani juttu Olli Sinerman pelikurssista ei kerro koko totuutta. Luennoilla istuminen oli kurssin helpoin osuus, varsinainen haaste oli se, että kurssin ohessa piti myös kehittää oma peli. Okei, eihän se ollut teknisesti ottaen pakollista, mutta piru vieköön, päätin ottaa haasteen vastaan.

Kurssin henkeen kuului, että pelinkehityksen piti muistuttaa mahdollisimman tarkasti kaupallista peliprojektia. Niinpä ennen kuin riviäkään koodia oli kirjoitettu, oma peli-idea oli ensin "pitchattava" konseptitasolla ja sitten vielä kirjoitettava suunnitteludokumentiksi.

Vaikka luokan edessä tapahtuneessa pitchauksessa ei sinänsä ollut liossa muuta kuin korkeintaan kasvojen menetys, reaktioista pystyi tekemään jonkinlaisia päätelmiä hyvältä vaikuttaneen idean kantavuudesta.

 

Kuuletko Kalevalan kutsun?

Sinerma halusi, että kaikki osallistujat kehittäisivät pelinsä ryhmissä. Ryhmät muodostettiin varsin vauhdikkaassa hengessä. "Kuka haluaisi kehittää roolipelin?" kyseli Olli. Kohotin käteni ja niin minut ja pari vierustoveriani (Matti Nauha ja Marek Burakowski) julistettiin roolipelitiimiksi.

Ja mikäs siinä, työskentely sattumalta valikoitujen kumppanien kanssa osoittautui varsin hedelmälliseksi. Päätimme sillä istumalla, että opettelisimme kurssin puitteissa jotain uutta ja kehittäisimme projektin Unity3D-pelimoottorilla, josta kenelläkään meistä ei ollut aiempaa kokemusta.

Tuotimme kukin tahollamme yhden pelikonseptin pitchaus-iltaa varten. Oma ideani oli Commodore 64:n ikivanhan Archon-toimintashakin päivittäminen nykyaikaan. Matti ehdotti scifi-ympäristöön sijoittuvaa isometristä taisteluroolipeliä. Parhaan pitchin teki kuitenkin Marek, joka lausui taikasanan "Moonstone".

Amigan unohdetussa Moonstone-miekkatoimintapelissä uljaat ritarit etsivät kuukiviä ja katkoivat örkkien päitä. Se oli suoraviivaista ja verevää toimintaa, verevyyden tarkoittaessa, että peli oli ihan tolkuttoman verinen.

En enää muista kuka meistä keksi sotkea Moonstoneen Kalevalan, mutta siitä se lähti. Puppugeneraattorini oli tuossa tuokiossa tuottanut juonikuvaelman, jossa Väinämöisen kasvattama Joukahainen rientää etsimään Lapin noidan särkemän Sammon palasia. Vitsi piili siinä, että petoksilla ja Väinämöisen salakavalilla motiiveilla höystetty juoni oli kaiken Kalevala-kaanonin vastainen. Mahtipontinen peli tarvitsi mahtipontisen nimen: Call of Kalevala - The Quest for Sampo.

Nyt kun ideasta oli päästy yhteisymmärrykseen, oli hyvä hetki aloittaa riiteleminen.

Perusasioiden äärellä

No okei, eihän kyse ollut mistään kovin vakavasta riidasta. Marek olisi halunnut kehittää Kalevalasta 3D-pelin, minä taas harasin ehdottomasti 3D:tä vastaan ja vaadin sprite-toteutusta. Motiivini olivat itsekkäät, sillä tiesin 3D-grafiikasta ja -mallinnuksesta suunnilleen yhtä paljon kuin sika tähtitieteestä. Argumentoin, että Unityn opettelussa oli ihan riittävästi duunia ilman kolmannen ulottuvuuden haltuun ottamistakin.

Se ei ollut mitenkään huono argumentti ja taisin sen avulla puhua Matin 2D-kantani taakse. Meillä taisi mennä 2D/3D-väännön takia kokonainen viikko työaikaa hukkaa, mutta kun 2D:hen lopulta sitouduttiin, päätös myös pysyi. Projekti eteni sen jälkeen varsin rivakkaa tahtia, mikä johtui osaltaan siitäkin, että hakattuamme pari viikkoa netistä ladattavia Unity-tutoriaaleja, aloimme viimein päästä pelimoottorin saloista perille.

Unityn ympärille kietoutunut oppimisen ja tekemisen ekosysteemi hämmästyttää laajuudellaan. Unitya kehittävä Unity Technologies on vienyt verkko-oppimisen paljon perinteistä puisevaa kehitysympäristödokumentaatiota pidemmälle. Vasta-alkajat otetaan haltuun valtavalla video-oppituntien kirjastolla. Unity-gurujen tuottamilla videoilla opetetaan kädestä pitäen työkalujen kaikkia mahdollisia osa-alueita. Opetustyyli on - niin hyvässä kuin pahassa - verkkainen, eikä mitään viiden minuutin tiivistelmiä tunneta.

Avaintutoriaalit kytkeytyvät Unityn verkkokauppaan eli Asset Storeen, josta voi ladata ilmaiseksi puolivalmiita projektiaihioita. Kun seuraa videoiden neuvoja kohta kohdalta ja kytkee palasia yhteen valmiiksi peleiksi, niin siinä oppii kummasti jotakin.

Verta ja skriptejä

Koska kurssin tavoitteena oli ”vain” toimiva peliprototyyppi, sallimme itsellemme joitakin erivapauksia, kuten sen, ettemme toteuttaisi kaikkea Call of Kalevan grafiikkaa itse. Sankarimme Joukahainen lainattiin Commodore 64:n Barbarianista, ainoa toteuttamamme vihollisörkki vastaavasti Moonstonesta.

Olin erityisen vaikuttunut miltei 30 vuotta vanhan Barbarianin sprite-taiteesta. Vähistä animaatioruuduista ja karkeasta pikseligrafiikasta huolimatta pääbarbaarin liikkeet ja hyökkäykset osoittautuivat lähemmässä tarkastelussa suorastaan mestarilliseksi työksi.

Oma panokseni örkin ja Joukahais-barbaarin grafiikkaan oli gore. Lisäsin molemmille hahmoille useita vaihtoehtoisia kuolinanimaatioita, mahdollisimman verisiä, totta kai. Unityn skripteillä on helppo instansoida tyhjästä ilmestyviä fyysisiä ja pseudofyysisiä objekteja, kuten iloisesti kaaressa lentäviä irtoraajoja ja jokaisesta osumasta maahan turahtavia verilammikoita.

Vaikka Unityn editorinäkymissä saa yllättävän paljon aikaan kirjoittamatta riviäkään koodia, pelit eivät sentään skriptaa itse itseään. Pelilogiikka on koodattava jokaiselle peliobjektille osoitettuun MonoBehaviour-skriptiin. Kerran framessa kutsuttavien skriptien ei sinänsä tarvitse olla monimutkaisia: ”Jos pelaaja tekee ohjausliikkeen vasemmalle, liikuta hahmoa tämän verran vasemmalle.”

Yksinkertaisillakin skripteillä saa aikaan monimutkaisia tapahtumia, kun skriptien välille muodostetaan hierarkisia suhteita. Call of Kalevalan gore-efektit demonstroivat hyvin tätä päällekkäisyyttä. Kun örkin MonoBehaviour-skripti rekisteröi kuolettavan osuman, se lähettää kutsun erityiselle Mestaaja-skriptille, joka instansoi PomppivaPaa-objektin. PomppivallaPaalla on oma MonoBehaviourinsa, jonka tehtävänä on rekisteröidä osumat maahan (pomps!) ja kutsua VeriLammikko-objekteja instansoivaa Verilammikoija-skriptiä aina kun näin tapahtuu.

Näennäisen monimutkaisen skriptausketjun lopputuloksena örkin irtopää pomppii verisesti pitkin vihreää nurminiittyä. Ja koska kyse on fyysisestä objektista, aiemmilta örkeiltä jääneet irtopäät reagoivat toisiinsa (töks!).

Call of Kalevala vaihtui Call of Dutyyn

Suunnitteludokumentissamme Call of Kalevalaan sisältyi taistelun lisäksi roolipelielementtejä, kuten hahmonkehitystä, varustautumista ja kaupungeissa vierailua. Totesimme ropetavoitteet kuitenkin aikarajamme kannalta mahdottomiksi ja päätimme keskittyä pelkän taistelusysteemin hiomiseen.

Pelisisällön typistäminen oli luultavasti viisas päätös, sillä hyvät toimintamekaniikat eivät suinkaan synny itsestään. Jo pelkkä liikkumisnopeuksien ja osumatarkistuksen hienosäätäminen on loputon savotta. Jos optimaalisia arvoja ei löydy, on tyydyttävä tarpeeksi hyviin. Olen totta kai jäävi arvioimaan omaa peliäni, mutta minusta Call of Kalevalasta kuoriutui yllättävän sujuvaa toimintamättöä. Olen erityisen ylpeä saumattomasti toimivasta torjuntamekanismista.

Henkilökohtaisesti suurin oppimiskynnykseni oli tutun Java-ohjelmointikielen vaihtaminen Unity-skriptien edellyttämään C# (lausutaan ”C sharp”) –kieleen. Kaikeksi onneksi C# on melko läheistä sukua Javalle, joten päästyäni kielten formaattierosta yli, pystyin tuottamaan ainakin alkeellisia ehtolauseellisia skriptejä. Aiemmin mainitsemieni tutoriaalien mallikoodin näkeminen auttoi C#:n omaksumisessa sekin.

Suureksi harmikseni missasin työmatkan takia kurssin demopäivän, enkä päässyt näkemään sen enempää muiden kurssilaisten prototyyppejä kuin kurssilaisten reaktiota omaan peliimme. Paikalla olleet tiimikaverini kyllä kehuivat, että Call of Kalevala otettiin hyvin vastaan. Ainakin se oli kurssin väkivaltaisin peli, mikä on jo jotain se.

Call of Kalevalan jatko on tällä hetkellä auki. Kiinnostusta jatkokehittelyyn olisi, mutta meillä kullakin on omat kiireemme. Lopputaistelu, jossa Väinämöinen yrittää laulaa Joukahaisen suohon, ansaitsisi silti nähdä päivänvalon.