Tee itse omat pelisi

Tuomas

Tuomas Honkala merkitsee kaikki luokat staattisiksi.

 

Päätin säästää tuhansia markkoja ja koodata oman pelini.

Törmäsin ensimmäisen kerran ohjelmoinnin peruskäsitteisiin Kansallis-Osake-Pankin kustantamassa Hakki Hamsteri -lehdessä. Hölmön huumorisarjakuvan välissä julkaistiin yllättävän pätevää Basic-ohjelmoinnin peruskurssia, joka tuntui 7-vuotiaasta suorastaan taianomaisen mielenkiintoiselta. Ei minulla vielä omaa tietokonetta ollut, mutta Basic-ohjelmoinnin peruskäskyt ja ohjelmien kulkua kuvaavat vuokaaviot painuivat kummasti mieleen.

Kurssitus jatkui ensimmäisen tietokoneeni Commodore 64:n ohjekirjassa. Se ei ollut mikään piuhat seinään ja menoksi -vihkonen, vaan kierreselkäinen järkäle, joka lähti liikkeelle olettamuksesta, että totta kai uuden tietokoneen omistajan kuului omaksua ohjelmoinnin perustaidot.

Minulle selvisi vasta paljon, paljon myöhemmin, että yliopistomaailmassa 1980-luvun Basic-intoon suhtauduttiin lähinnä vitsauksena. Helsingin yliopiston tietojenkäsittelytieteen laitoksella vitsailtiin, että ”osaaville” Basic-ohjelmoijille pitäisi merkitä valmiiksi muutaman opintoviikon verran miinusta, kun he aloittavat opiskelun. Basicia pidettiin syystäkin rumana ohjelmointikielenä, josta oppi lähinnä huonoille tavoille.

1980-luvun kotimikrohuuman aikana tietokoneharrastajan oli miltei mahdotonta paeta ohjelmoinnilta. Jopa Mikrobitti-lehti uhrasi sivutolkulla palstatilaa erilaisten valmiiden pikkuohjelmien ja -pelien ohjelmointilistauksiin, joita protonörtit näppäilivät tyytyväisinä koneilleen.

Ohjelmoin jo pienestä pitäen, mutta se ei tehnyt minusta vielä ohjelmoijaa.

Kaikkien aikojen Ultima

Vanhan sanonnan mukaan pelikriitikoksi ryhtyy sellainen ihminen, joka haluaisi tehdä pelejä, mutta ei osaa. Se on ilkeästi sanottu, mutta tuskin täysin vailla totuuspohjaa. On aina helpompi kritisoida muiden töitä kuin luoda jotain uutta itse.

Itse olen arkkityyppi ohjelmoijana epäonnistuneesta pelikriitikosta, joka hautasi haaveensa ja raakileeksi jääneet Basic-ohjelmansa pöytälaatikkoon. Eipä niissä olisi paljon muisteltavaakaan – melkein toimiva Nethack-klooni ja taktinen avaruustaistelupeli, jossa ei ollut mitään pelattavaa.

Olisin voinut antaa asian vain olla, mutta viime syksynä päätin poistua mukavuusalueeltani ja opetella ohjelmoimaan. Koska olin mädättänyt aivoni Basicilla, jouduin aloittamaan kaiken nollasta.

Ennen viime syksyä en olisi saanut Javasta irti edes ”heippa maailmaa”, nyt koodaan sillä ensimmäistä kunnollista peliäni. Mahtava mestariteokseni ei ole vähempää kuin suoraviivainen Ultima-klooni.

Alkajaisiksi minun pitäisi kai perustella, miksi Ultima. Höh, no miksi ei? Vanhat tiiligrafiikka-Ultimat ovat kaikkien aikojen suosikkipelejäni ja olen lapsesta saakka halunnut tehdä oman version sellaisesta.

Aloittaessani Ultima-projektiani tiesin varsin hyvin, että ohjelmointitaidoissani oli vielä isoja aukkoja. Se oli oikeastaan se tarvittava sysäys Ultiman suuntaan, sillä vuoropohjaisuus ja tiiligrafiikkamaailma olivat huomattavasti anteeksiantavampi toimintaympäristö kuin tosiaikaisuus ja 3D.

Asetin tavoitteekseni Ultima IV- tai Ultima V -tasoisen toteutuksen. Pelissä ei siis ohjattaisi yksinäistä sankaria, vaan kokonaista seikkailijaryhmää, ja taisteluja varten siirryttäisiin erilliselle taktiselle kartalle. Taistelemisen vastapainona pelissä voisi keskustella ei-pelaajahahmojen kanssa ja ratkoa yksinkertaisia puzzleja. Ihannetapauksessa ei-pelaajahahmot noudattaisivat omia päivärutiineitaan, kenties jopa kävisivät illan hämärtyessä yöpuulle.

Teknisenä minimivaatimuksena pidin toimivaa Line-Of-Sightia eli nurkkien ja seinien taakse jäävien huoneiden pimentämistä pelaajalta. Myös dynaaminen valaistus (katulyhdyt, takat ja niin edelleen) olisi toivottavaa, mutta olisin tyytyväinen jo pelkkään vuorokaudenaikojen vaihtumiseen. Pelin kontrollit perustuisivat eri komentoja vastaaviin pikanäppäimiin, kuten O – Open, I – Ignite torch, T – Talk ja A – Attack. Keskustelun aikana pelaaja syöttäisi avainsanoja yksinkertaiseen tekstiparseriin.

Liikettä ruudulla

Vanhoja Ultimoita pelanneet tunnistavat heti mitä ajan pelilläni takaa. En silti nähnyt mitään järkeä jonkun tietyn Ultima-sarjan osan suorassa apinoinnissa. En halunnut hyödyntää sen enempää tuttuja hahmoja kuin tuttua maailmaakaan, vaan luoda omani. Pelisäännöissä pyrin ainoastaan pintapuoliseen samankaltaisuuteen, en täsmälleen identtiseen toimintaan.

Ehdin toki harkita Ultiman vaihtoehtona täysin omaperäisempiä vaihtoehtoja, kuten post-apokalyptista roolipeliä ja erilaisia tieteisskenaarioita. Hylkäsin ne kuitenkin liian vaivalloisina, sillä halusin keskittyä koodaamiseen ja ruohonjuuritason pelisuunnitteluun, en uniikin maailman taustatarinan satuiluun ja lainalaisuuksien miettimiseen. Miekan ja magian tie on kieltämättä tylsä ja kulunut, mutta tuttuudessa on myös puolensa, kun sellainen materiaali käsikirjoittaa itse itsensä.

Suurin huolenaiheeni oli saada ylipäätään jotain järkevää pelattavaa näkyville. Sehän oli ollut aikaisempien Basic-kyhäelmieni suurin kompastuskivi, kun ideoita riitti, mutta toteutus tökki. Ensimmäinen viikko ohjelmointia meni pelkän uskon varassa, sillä pelistäni ei saanut ulos kuin mustaa ruutua. Ette uskokaan kuinka helpottunut olin, kun musta ruutu vaihtui 11 x 11 -kokoisen ruudukon päälle asettuneeksi örkkimuodostelmaksi.

Ensimmäinen versio Ultima-kloonistani oli pelkkä taistelumoottori, jossa ei voinut aluksi edes taistella. Örkit osasivat sentään hakeutua taktisen taistelukartan alalaidassa odottavaa sankaria kohti. Hakeutumisrutiini osoittautui liiankin tehokkaaksi, sillä örkit etenivät 100-prosenttisen kaavamaisesti, asettuen aina samaan loppumuodostelmaan sankarin ympärille. Se ei ollut onneksi mitään, mitä parilla satunnaismuuttujalla ei saanut korjattua.

Pelini olisi pian täynnä satunnaisuutta.

Aloittelijan virheitä

Jos olen viimeisen parin kuukauden aikana oppinut pelintekemisestä jotain, niin ainakin sen, että asiat kannattaa suunnitella ja toteuttaa kerralla kunnolla. Liiallinen hätäily kostautuu ennemmin tai myöhemmin.

Ensimmäisenä virheenäni lykkäsin seikkailijaryhmän toteuttamista ainakin kuukaudella. Pelivuoron siirtyminen ryhmänjäseneltä toiselle on aivan keskeinen osa taistelumoottorin toimintalogiikkaa, mutta koska huomioni oli jo seikkailuympäristön toteutuksessa, ryhmänjäsenet saivat odottaa.

Loppujen lopuksi jouduin kirjoittamaan melkein koko taistelumoottorin ja vihollisia ohjanneen tekoälyrutiinin uusiksi. Taisteluissa ei nimittäin ollut mitään järkeä, kun ainoa vihollisten tunnistama kohde oli pelin päähenkilö. Kun sankari oli nuijittu kanveesiin, hirviöt lamaantuivat liikkumattomiksi tietämättä mitä seuraavaksi pitäisi tehdä.

Sittemmin olen joutunut korjaamaan tai muuttamaan melkein jokaista projektin alkuvaiheessa ottamaani oikopolkua. Kipeintä teki toimivalta vaikuttaneen Line-Of-Sight-järjestelmän päätyminen roskakoriin. Vaikka Javan etuna pidetään laitteistoriippumattomuutta, grafiikkarutiinini onnistui jotenkin maagisesti rikkomaan tätä periaatetta.

Nyt kun minulla on ensimmäinen hirviöillä, keskusteluilla ja puzzleilla ladattu monikerroksinen luolasto valmiina, murehdin pelin mittakaavan kasvattamista. Koodini on vain muutaman huolimattomasti asetellun käskyn päässä suorituskyvyn romahtamisesta. Ensimmäiset luolastoa suuremmalla ulkoilmakartalla tekemäni testit vaikuttivat sentään lupaavilta, vaikka kartalla ei metsää ja ruohokenttiä kummempaa sisältöä ollutkaan.

Sitten kun se on valmis

Pelinteko on pelikriitikolle silmät avaava kokemus. Vaikka koodaan pelkkää 1980-lukulaista Ultima-kloonia, projektiin joutuu kirjoittamaan koodia aivan tolkuttomat määrät. Tammikuussa uhrasin harrastukselleni kirjaimellisesti kaiken vapaa-aikani, helmikuussa hölläsin vähän tahtia.

Vaikka teen peliä ensisijaisesti omaksi iloksi, en voi olla tuntematta edes vähäistä suurempaa ylpeyttä aikaansaannoksestani. Kauhistun ajatusta, että joku ulkopuolinen saattaisi jonain päivänä arvioida kriittisesti rakasta hengentuotettani. Karman laki: kriitikko maistakoon omaa lääkettään.

Jotta palsta olisi täydellinen, minun on esitettävä yltiöoptimistinen lupaus pelin valmistumisaikataulusta. Täten vannon kautta keskeneräisen Java-dokumentaationi, että Ultima-kloonini on valmis tämän vuoden loppuun mennessä. Ja nyt takaisin koodaamaan…

Lisää aiheesta

  • Tuomas: Matka sinne ja takaisin

    Amerikassa kaikki on tunnetusti suurta, niin myös lentokenttädraama.
    Toimitukseemme iski melkein viikon kestänyt sähköpostikatkos juuri ennen kuin olin lähdössä Game Developers Conferenceen San Franciscoon. Kaltaiselleni sähköpostineurootikolle tilanne olisi ollut jo ihan riittävän…
  • Tuomas: P2P

    Tietokonepelaamisen ylivertaisuudesta vakuuttunut pc-herrarotu tunnetaan dogmaattisuudestaan. Asiat ovat joko tai ja konsoleilla yleensä huonommin. Eräs opinkappale koskee verkkopelaamista ja dedikoituja servereitä. Dedikoidulla serverillä tarkoitetaan konetta, joka on omistettu verkkopelin…
  • X:ynä

    X Rebirth on kipeä muistutus pelien ennakkotilaamisen vaaroista.