Tekstiseikkailua tekemään...
10.10.2002 17:22 julkaistun artikkelin on kirjoittanut Lauri.
Tosiaan, eipä ollutkaan aikaisemmin edes tullut mieleen, että voisi tehdä tekstiseikkailupelin. Mutta niin siinä vain kävi, että kun tuossa pari päivää sitten kokeilin Zork-tekstiseikkailua, joka muuten on yksi tunnetuimmista tekstiseikkailuista, niin alkoi aivoissa ideasuoni virtaamaan oikein toden teolla. Joku varmaan tietää sen tunteen, kun jotain hienoa nähdessä alkaa aivoissa raksuttaa, että tuo on varmaan tehty tuollai ja tämä tällai, niin ja tuonhan voisi toteuttaa vaikka tuollaisella rakenteella jne...
Saatat tietää tunteen vaikka et olisi koskaan ohjelmoinutkaan, nimittäin sama tunne tulee, ainakin itselläni, myös muissa yhteyksissä. Esimerkkinä vaikka tilanne, kun näkee komean rakennuksen kauniin järven rannalla, tulee heti pakonomainen tarve miettiä, miten maiseman ja rakennuksen saisi parhaiten mallinnettua 3D-peliin, kuitenkin säästäen mahdollisimman paljon polygoneja. Mitkä yksityiskohdat kannattaisi laittaa tekstuureihin ja mitkä tehdä polygoneilla.
Kun tuo tunne iskee, niin sen jälkeen se onkin sitten menoa. Noh, nyt se tunne sitten iski minuun, enkä sen jälkeen paljon muuhun ole jaksanut keskittyäkään. Mutta enköhän sitten siirry itse asiaan. Eli mistä tässä hommassa oikein on kyse? Miten tekstiseikkailu oikein tehdään? Täytyy tunnustaa jo tässä vaiheessa, että minulla ei ole asiasta harmainta aavistustakaan, mutta siitä huolimatta projekti on jo täydessä vauhdissa ja suunnitelmaakin on jo kiitettävästi.
Ideana on siis tehdä oikein kunnollinen parseriin pohjautuva tekstiseikkailupeli, joka etenee käyttäjän antamien käskyjen mukaisesti. Käskyt ovat siis selkeää suomen kieltä, jota yritän opettaa tietokoneen ymmärtämään. Yritän tehdä pelistä mahdollisimman muunneltavan siten, että peli ladataan lähes kokonaan erillisestä tekstitiedosta. Vain tärkeimmät ominaisuudet tulee olemaan koodattuna peliin. Kaikki teksti, mitä peliin tulee (huoneiden ja tavaroiden selostukset, verbit, substantiivit yms..) ladataan erillisestä tekstitiedostosta, sekä myös joitakin skriptejä, joita tarvitaan pelin edetessä (esim. laittaessasi valot huoneeseen näet enemmän asioita yms.).
Olen kuitenkin ollut sen verran kärsimätön pääsemään kokeilemaan hommaa käytännössä, että yhden illan suunnittelun jälkeen syöksyin suoraan Visual Studion kimppuun ja aloin koodaamaan tiedostonlatausta ja tietorakenteita sekä luokkia peliä varten. Nyt on jo valmiina verbien ja substantiivien (esineiden) lataukset ja luokat.
Mutta eipäs mennä vielä asioiden edelle, vaan lähdetään liikkeelle suunnittelusta. Minullahan ei ole minkäänlaista kokemusta kyseisestä pelityypistä, muuta kuin että olen joskus pelannut niitä. Jonkun mielestä olisi siis ehkä ollut loogista, että olisin ensimmäisenä suunnannut Internetiin etsimään tietoa tekstiseikkailun/parserin/yms.. tekemisestä. Eheeii... Avasin kylmän rauhallisesti notepadin, ja aloin kirjoittelemaan verbejä, kunkin omalle rivilleen.
Siitä se sitten alkoi. Kirjoitin ensin n. 20 verbiä, jotka tulivat ensimmäisenä mieleen. Tämän jälkeen kirjoitin verbien perään samalla tavalla substantiiveja. No siinä minulla oli sitten kasa verbejä ja substantiiveja ja ne piti saada jotenkin yhdistettyä toisiinsa, toisin sanoen tarkoituksena oli saada jonkinlainen kielellinen yhteys sanojen välille. Voit sanoa vaikka, että "Heitä keppi", mutta "Avaa keppi" sitä vastoin ei tarkoittaisi oikein mitään. Eli oli saatava "keppi" yhdistettyä jotenkin verbiin "Heitä", mutta ei verbiin "Avaa". Päätin laittaa jokaiselle verbille yksilöivän numeron, josta sen tunnistaisi, jolloin substantiiveille olisi mahdollista määrittää numeroiden avulla niiden kanssa yhteen käyvät verbit. Niinpä kirjoitin jokaisen verbin eteen numeron ja homma pääsi eteenpäin.
Jatkoin suunnittelua samalla tavalla tekstitiedostoa notepadilla muokaten, kunnes tietoa tuntui olevan tarpeeksi tekstiseikkailua varten. Substantiivien jälkeen mietin, miten näihin yksinkertaisiin käskyihin saataisiin vastauksia. Laitoin verbien perusvastaukset itse verbien perään ja hieman erikoisemmat vastaukset sitten erikseen. Tämän jälkeen mietin huoneita ja niiden toimintaa sekä myös muita pienempiä asioita, kuten esineiden selostuksia ja hiukan skriptikieltäkin. Näin siis syntyi alustava suunnitelma pelin tietorakenteista ja samalla myös ensimmäinen versio tiedostoformaatista pelille!
Seuraava päivä koulussa olikin erittäin tuskallinen. Ei olisi millään jaksanut istua tunneilla, kun mielessä oli vain polttava halu päästä jatkamaan projektia. Kuten arvata saattaa, koulusta tultua istuin tietokoneelle ja hyökkäsin tekstiseikkailun kimppuun. Tuon (eilisen) illan sitten koodasin verbien ja substantiivien luokat, jotka olin koulussa ideoinut jo lähes valmiiksi. Tässä vaiheessa homma näyttää jo erityisen hyvältä. Jo itse verbit ja substantiivit sisältävät pelin kannalta tärkeää logiikkaa: Substantiivi sisältää tiedot siitä, millä verbeillä sitä voi käyttää ja mikä verbin vastausvaihtoehdoista kussakin tapauksessa valitaan. Verbit puolestaan sisältävät kaikki tavallisimmat vastaukset, joita niitä käyttämällä voi tulla. Esimerkiksi "Syö"-verbillä voi olla kaksi vastausvaihtoehtoa: "%tavara% syöty." ja "Ei tuota voi syödä!". Vastausten määrä ja itse vastaukset ovat kaikki helposti muunneltavissa.
Tämän verran siis olen nyt saanut aikaiseksi. Tulipas paljon tekstiä.. huh, toivottavasti jaksoit pysyä mukana. Seuraavaksi alan kehittämään yksinkertaista versiota parserista, joka tulkitsee käskyn ja antaa oikean vastauksen. Että siitä sitten ensi kerralla. :)
Vaan sen jälkeen kun on kuusi tuntia putkeen istunut tietokoneen ääressä, katsoo kelloa joka näyttää jo yli kahtatoista, ja vielä vain haluaisi puurtaa ohjelman parissa vaikka silmäluometkin jo alkavat valua alaspäin, niin voi sanoa että on koukussa.
