top of page
  • Pasi

Digikasarin kasvatti III: Kotitietokonehjelmointia huviksi ja hyödyksi

Päivitetty: 7. tammik. 2021

Esinäytös: Pelastetaan ritari Arttu

Perjantaina 20. päivä marraskuuta kuluvaa vuotta oli melkoinen päivä. Onnekkaiden sattumusten loppusummana minulla on nyt mahdollisuus palata vanhan, jo lähes kadotetun peliprojektini pariin. Pelin nimi on ’Little Knight Arthur’, ja peliä on alun perin kehitetty vuoden 1985 lopusta vuoden 1986 alkuun. Pelin alusta on vanha kunnon Commodore 64.

Tuona perjantaina Suomen Pelimuseota Tampereelle rakentava tiimi ja tiedostoja vanhentuvilta tietokonemedioilta pelastava porukka nimeltä Kasettilamerit otti ja siirsi Arthur C64 -pelini master-lerpulta tiedostot turvaan ja edelleen USB-muistitikulleni (lerppu = Commodore 64:n diskettiaseman 5.25 tuumainen levyke).

Pelistä löytyy nyt ennakkovideo Youtubesta Dome.fi:n tekemänä.

Little Knight Arthur (Commodore 64, Machine Code, 1986)

Kuten videostakin voi päätellä, jo pelin ensimmäinen taso on melko vaikea, mutta mikäpä 1980-luvun puolivälin kotitietokonepeleistä ei olisi ollut? Manic Miner, Lode Runner, Tales of Arabian Nights, Monty on the Run, Hunchback, Thing on a Spring, kaikki tasohyppelyitä, jotka vaativat zenmäistä keskittymistä ja armottoman tarkkoja refleksejä. Jos tunnet näitä pelejä, sinulla on hyvä käsitys siitä, miten anteeksiantamaton pelaajan virheille Arthur C64 on. Ehkä jopa noita mainittujakin pelejä anteeksiantamattomampi...

Koska peli on täysin valmis, suunnitelmissa on julkaista se tässä blogissa, kenen tahansa Commodore 64:n tai kuusnepaemulaattorin käyttäjän pelattavaksi. Nyt palaan hetkeksi muistoihin alkaen vuodesta 1984, jolloin pelin sankari Arthur, tai oikeastaan alun perin suomeksi Arttu, sai alkunsa.

Koodailua ja kilpailua

Vuonna 1984 olin innokas kotimikroharrastaja, joka oli juuri opiskellut BASIC-ohjelmointia ensimmäisellä kotitietokoneellani Oric-1:llä (kts. blogin aiemmat muisteluosat). Vanhempani olivat kai tunnistaneet jotain taipumuksistani koskapa he tilasivat minulle lahjaksi Tekniikan Maailman vuosikerran. TM:hän on Suomen tunnetuimpia aikakauslehtiä jo 50-luvulta alkaen ja käsitteli tiedettä ja kaikkea tekniikkaa, kuten autoja, moottoripyöriä, veneitä, moottoreita, mekaniikkaa, sähkötekniikkaa ja elektroniikkaa. Kotimikroilun alkuvuosina Suomessa TM toi lukijoilleen aihetta tutuksi erityisillä mikrotietokoneisiin keskittyvillä liitteillä.

Helmikuun numerossaan TM.n tietokoneisiin keskittynyt toimittaja Eskoensio Pipatti julkaisi lehden järjestämän BASIC-ohjelmointikilpailun. Eskoensiosta tuli muuten hieman myöhemmin Suomen tunnetuimpien tietokoneisiin keskittyneiden lehtien vetäjä. Kun luin ohjelmointikilpailusta, päätin osallistua siihen eräällä peliohjelmallani, jota olin kehittelemässä. Pelin aihe oli tasohyppely, ja se otti vaikutteita ainakin Donkey Kong-, Jumpman- ja Hunchback-nimisistä 80-luvulla ilmestyneistä kaupallisista peleistä.

Pelin suunnittelun aloitin piirtämällä ruutupaperille pikseli pikseliltä ensimmäisen oman pelihahmoni, pienen ritarin vaalean turkoosinvärisessä haarniskassaan. Turkoosin siksi, että kyseessä oli yksi Oric-1:ssä käytettävissä olevista kahdeksasta väristä. Muut värit olivat musta, valkoinen, punainen, vihreä, sininen, keltainen, ja violetti. Värejä oli vain kahdeksan, sillä Oricissa väriarvon tallennuksen käytettiin vain kolmea bittiä, mikä mahdollisti vain luvut nollasta seitsemään. Tämä perusväreihin rajoittunut paletti on osa noiden alkuaikojen mikrotietokoneiden grafiikan viehätystä. Parhaan kontrastin aikaansaamiseksi taustavärinä peleissä käytettiin useimmiten mustaa, jonka päälle sitten tehtiin muu grafiikka noilla kirkkailla puhtailla väreillä.

Arttu - 8 bittinen pelihahmo Oric-1:lle

Hahmoja merkkigrafiikalla

Jotta sain Artun hahmoon riittävästi yksityiskohtia, käytin 2x2 Oricin uudelleenmääriteltyä tekstimerkkiä. Määrittelemällä useita merkkiryhmiä tein Artulle kahden kuvaruudun animaatiot kävelystä vasemmalle ja oikealle, miekan heilautuksesta, sekä kilven nostamisesta suojaksi. Kaikki tämä piti tehdä BASIC-ohjelmariveinä, jotka järjestin pieniksi, yhdisteltäviksi aliohjelmiksi. Saatuani ritarihahmon tepastelemaan edestakaisin tyhjällä ruudulla lisäsin pelikentän eli yhden kivilohkaremerkin avulla koostetun linnan käytävineen, kerroksineen ja torneineen.

Linnassa kävelyn jälkeen oli aika tehdä tasohyppelyn peruslike eli hyppy. Sekin oli toteutettu yksinkertaisimmalla tavalla: ensin tein osan joka pudotti Artun hahmon ruudulla alaspäin kunnes hahmon jalkojen alle sattui vähintään yksi linnan tiili. Hypyn taas tein siten, että jos hahmon pään päällä ei ollut yhtään merkkiä, painamalla hyppynäppäintä hahmo nousi kerroksen verran ylöspäin ja yhden tiilen verran eteenpäin etenemissuunnassa. Tällöin se jäisi ylemmän kerroksen yhden tiilen päälle seisomaan.

Vihulaisia ja ohjelmoinnin auvoa

Kun peli alkoi näin hahmottua, muistan hyvin päässeeni ohjelmoinnissa mukavaan flow-tilaan, jossa uusien pelielementtien lisääminen sujui kuin luonnostaan jo rakennettujen osien päälle. Aloitin pelin haasteiden lisäämisen uudelleenmääriteltyjen merkkijonojen avulla ja toteutin linnan alimmilla kerroksilla vipeltävät käärmeet ja hämähäkin. Tässäkin käytin todella lyhyttä kahden kuvan animaatiota samalla kun kierrätin merkkijonon merkkejä sivusuunnassa, jotta sain käärmeisiin kiemurtelua ja hämähäkin jalkoihin liikettä. Jokaisen yhden merkin mittaisen liikkeen yhteyteen lisäsin törmäystarkistuksen pelihahmon merkkien ja käärmeenpään sekä hämähäkkien merkkien kuvaruutupaikkojen välillä. Jos merkit menivät päällekkäin, siirryttiin rutiiniin jossa ritari kaatuu, yksi neljästä elämästä vähennettiin ja hahmo palautettiin aloituspisteeseen.

Samaan tapaan lisäsin miekan heilautukseen tarkistuksen, jossa hämähäkkiin tai käärmeen päähän osumalla vihollinen poistettiin pelistä, itse asiassa siis poistettiin kyseiset merkit merkkijonost, jolla elikoita animoitiin. Muistan olleeni innoissani pelin kehittymisestä askel kerralaan valmiiksi peliksi: jokainen uusi ominaisuus jonka sain toimimaan oli itsessään palkitseva kannustin jatkaa ohjelmoimista.

Miekan huitomisesta ja vihollisten nitistämisestä oli luonnollista siirtyä myös ääniefektien lisäämiseen peliin. Lisäsin simppelit äänet paitsi miekan ja kilven käyttöön, myös eteenpäin liikkumiseen, hyppyyn ja putoamiseen. Oli aika hämmästyttävää huomata, kuinka alkeellisetkin äänet lisäsivät pelin tunnelmaa ja vuorovaikutteisuuden tunnetta, vaikkei itse ohjaukseen tehnyt mitään muutosta. Toki ääniä pystyi käyttämään myös palkkioina pelaajan onnistumisista pienten melodioiden muodossa. Käytin pelin sävelmien pohjana vanhoja englantilaisia ja irlantilaisia kansanlauluja.

Pelin pääpahikseksi minulla oli kunnianhimoinen idea: valtava - tai no, 5x3 merkistä koostettu - lohikäärme keskellä linnaa. Tämä hirvitys vain odotti, että Arttu kiipeäisi oikeanpuoleisen tornin käytäville ja alkaisi sitten syökseä tulta päin pikku ritaria. Jonkin aikaa tässä meni, mutta viimein toimivat sekä lohhari että Artun kilpi, jolla lieskat ehti juuri torjua, jos seisoi oikeaan suuntaan ja painoi torjuntanäppäintä ajoissa.

Artun perivihollinen, lohikäärme Shamrock (Oric-1, BASIC, 1984)

Viimeistelyä

Pelin teon edetessä huomasin käyttäväni suhteessa enemmän ja enemmän aikaa pelin pelaamiseen ja testaamiseen verrattuna uuden ohjelmakoodin kirjoittamiseen. Huomasin että ohjelmoinnin eteneminen vaati kurinalaisuutta: oli paras pitää erilliset toiminnot eri aliohjelmiissa ja testata asia kerrallaan valmiiksi. Sen jälkeen koko pelin koostaminen tapahtui valmiiksi tehdyistä pienemmistä osista. Kuten edellä tuli mainittua, lisäsin asioita luonnollisessa järjestyksessä. Kun tuli mahdolliseksi pelaamalla testata jotain uutta ominaisuutta, siinä vaiheessa se oli aika toteuttaa. Esimerkiksi heti, kun sain valmiiksi osan, jossa Arttu saa haltuunsa miekan ja kilven, lisäsin aliohjelman, jolla pelaajan tulosta sai kasvatettua sopivalla pistemäärällä. Sama pisteytysaliohjelma oli myöhemmin helppo liittää vihollisten tuhoamisen hoitavaan aliohjelmaan.

Pelin ainokainen taso päättyi tekemääni animaatioon, jossa kivikasa romahtaa lohikäärmeen päälle. Tämä tapahtuu lyömällä miekalla ylimmässä kerroksessa sijaitsevaa kasan päällimmäistä kiveä. TM:n ohjelmointikilpailun säännöissä oli rajattu käytettävien ohjelmarivien määrää, ja niinpä ahdoin mahdollisimman paljon käskyjä jokaiselle riville. Sain siten puristettua peliin mukaan vielä yksinkertaisen starttiruudun, joka listasi käytetyt näppäimet, fanfaarimaisen sävelmänpätkän lohikäärmeen voittamisen kunniaksi, sekä pelaajan elämiä kuvastavat liput linnan tornin huipulle.

Kuinka lohikäärme voitetaan Arttu-pelissä

Sisarukseni saivat testata peliä ja muutamien testipelien jälkeen totesin, että peli oli valmis Tallensin sen C-kasetille, laitoin kirjekuoreen ja lähetin TM:ään kilpailussa mainittuun osoitteeseen. En odottanut kuulevani kilpailusta enempää ennen kuin voittajat julkaistaisiin lehden myöhemmässä numerossa saman vuoden syksyllä.

Niin hienona peliä kuitenkin pidin että tein siihen myös ikiomat pelikasetin kuoret:

Artun tee-se-itse pelikasettikotelo 80-luvulta

(Jipsoft oli itse keksitty, rekisteröimätön pelijulkaisijanimi omiin peleihini aitouden luomiseksi!...)

Odottamaton puhelinsoitto

Sitten kesällä 1984 tapahtui jotain, joka varmasti vaikutti eniten elämässäni ammattiin suuntautumisessa. Olin heinätöissä kotitilan pellolla muun perheen kanssa keskellä kuuminta ja kuivinta kesää juhannuksen jälkeen. Muistan, että isäni tuli talosta pellolle ja pyysi minua puhelimeen, joka siihen aikaan oli vielä vanha kunnon analoginen aparaatti luureineen, kiemuraisine johtoineen ja pyöriteltävine numeronvalintalevyineen. Isäni sanoi, että puhelimessa joku Tekniikan Maailma-lehdestä oli kertonut, että olen voittanut lehden ohjelmointikilpailun.

Minä ja äitini emme oikein uskoneet ensiksi, mutta isäpappa vakuutteli asiaa uudelleen. Menin siis puhelimeen ja juttu osoittautui todeksi. On hieman vaikea kuvata, miltä tuo hetki tuntui, mutta jotain siinä loksahti omassa päässäni kohdalleen. Se oli minulle hetki, joka useimmille oman alansa löytäneille ennemmin tai myöhemmin tapahtuu: sitä huomaa löytäneensä jotain, joka sekä tuntuu omalta että jossa huomaa omaavansa jonkinlaisia lahjoja.

Mikä vielä palkitsevampaa tässä tapauksessa, ohjelmointikilpailun pääpalkintosumman lisäksi Tekniikan Maailma -lehti tarjosi valmiin ohjelman julkaisemisesta saman verran julkaisupalkkiota. Yhteissumma kohosi yllättävän lähelle summaa, jolla olin aiemmin ostanut kohtitietokoneeni, eli yhden ohjelman tekeminen oli tuonut takaisin melkein kaikki vaivalla säästämäni ja omituiseen harrastukseeni sijoittamani rahat.

Arttu-peli julkaistiin ohjelmalistauksena Tekniikan Maailman numerossa 14/1984. Tässä on kuva jutun ensimmäisestä sivusta:

Artun julkaisu Tekniikan Maailman nrossa 14/1984

Harrastelijasta puoliammattilaiseksi

Niinpä minulle selvisi, että kotitietokoneohjelmoinnissa olisi jonkinlainen ansaintamahdollisuus. Minun tapauksessani se oli tietokoneohelmien laatiminen toisten kotimikroharrastajien huviksi ja hyödyksi. Lehtikustantajat ja tietokoneosastojen toimittajat olivat huomanneet, että kotitietokoneharrastuksen yleistyessä markkinoilla olisi tilaa sitä palveleville erikoislehdille. Pari ensimmäistä kotitietokoneharrastajille suunnattua lehteä eli MikroBITTI ja Printti aloittivatkin ilmestymisen samana vuonna 1984.

Minä puolestani ryhdyin lähettämään näihin lehtiin ohjelmiani saadakseni niitä julkaistuiksi ja rahaa julkaisupalkkioista. Sainkin pari peliohjelmaani MikroBITTI-lehteen: ensin numerossa 3/84 Galactic Guard -avaruustaistelupelin ja myöhemmin numerossa 9/86 Numberbumber -nimisen tietokoneversioni leluna tutusta liukulaattapelistä, jossa numerot 1-15 piti saada yhden tyhjän paikan kautta liikuttelemalla numerojärjestykseen mahdollisimman vähillä siirroilla.

Viimeisin mainitsemisen arvoinen Oric-1 ohjelmani oli sekin vielä BASICillä tehty. Tein Artun ja aiempien BASIC-pelieni tekniikalla vielä yhden, laajennetun tasohyppypelin Indiana Jonesin hengessä. Lopputulos oli nimeltään ’Huimapää Jake & Kadonneet Luolat’ ja siinä pelihahmo oli vain yhden merkin kokoinen. Toisaalta, peli sisälsi peräti kolme erilaista tasoa. Pelissä luolissa seikkailevan Jaken tehtävä oli kerätä hedelmiä eri puolilta luolastoa. Ensin kuitenkin hedelmät piti saada näkyviin kultaista kelloa kilistämällä.

Hupaisaa tässä niin kuin monissa muissakin tuon ajan toimintapeleissä oli se, että niissä ei tarvinnut olla kovinkaan loogista juonta tai tarinaa joilla perustellaan pelin tavoitteita ja tekemisiä. Kunhan toiminta oli riittävän haastavaa ja hauskaa, niin se riitti ja mielestäni edelleenkin riittää useimmissa videopeleissä.

Kuvaruutukaappaukset 'Huimapää Jake & Kadonneet Luolat'-pelistä (Oric-1, BASIC, 1985)

Muistaakseni laitoin Jaken Printti-lehteen ehdolle, mutta julkaisua ei kuulunut. Todennäköisesti syinä olivat ohjelman suuri rivimäärä, ja harvinainen tietokonemerkki, jolle peli oli tehty. Niinpä siitä tulikin yksi pöytälaatikkotuotoksistani, jota ei ole julkaistu ennen kuin nyt. Jos omistat Oric-1 -tietokoneen tai olet asentanut toimivan Oric-1 -emulaattorin, sinun ei tarvitse naputella ohjelmaa BASIC-riveinä kokeillaksesi sitä. Voit ladata ja käyttää TAP-tiedostoa jonka löydät blogini tiedostot-sivulta. Jos satut olemaan harvinainen tapaus ja kokeilet ohjelmaa, laita viestiä. Olisi mielenkiintoista tietää, löytyykö Suomesta enää Oric-1 -harrastajia

Näkemiin Oric, tervetuloa kuusnepa - ja Arthur C64

Vuonna 1985 olin päässyt harrastuksessani sihen pisteeseen, että oli aika päivittää ehompaan tietokoneeseen. Ostin Commodore 64:n ja 1541-levykeaseman rahoilla, jotka olin tienannut Artusta ja muista julkaistuista ohjelmista. Hyvin pian siitä kun sain oman kuusneloseni (jälleen tilaamalla postiennakolla), aloin opetella BASICin sijasta konekieltä. Tämä tarkoitti uuden tietokoneeni ohjelmoimista laiteläheisesti suoraan sen prosessorin tuntemalla käskykannalla ja oheispiirien ominaisuuksilla.

Konekieli oli paljon alkeellisempaa kuin korkean tason ohjelmointikielet. Esimerkiksi matemaattisiin laskutoimituksiin oli prosessorin rekistereillä käytettävissä muistaakseni vain 8-bittisten kokonaislukujen yhteen- ja vähennyslaskut käyttäen yhtä ylivuotobittiä, yhdellä lisäys ja vähennys, sekä kahdella kokonaislukujen kertominen ja jakaminen käyttäen bittien siirtoa vasemmalle tai oikealle. Toisaalta, konekielen suorittaminen oli paljon nopeampaa kuin tulkattavan BASIC-ohjelman suoritus.

Lisäksi, konekielellä pystyi näppärästi tekemään koneen oheislaitepiirien ohjausta kirjoittamalla ja lukemalla sopivia muistipaikkoja. Kuusnelosessa oli aikalaisiin nähden huomattavan kehittyneet video- ja äänipiirit. Videopiirillä, jonka nimi oli VIC, pystyi näyttämään enemmän värejä ja pikseleitä kuin Oricillani. Lisäksi sillä pystyi ohjaamaan spritejä, eräänlaisia pelihahmoihin sopivia bittikarttoj joita pystyi liikuttelemaan muun ruudulla näytetyn grafiikan päällä. Myös SID eli äänipiiri oli pystyvä, siinä oli kolme erillistä äänigeneraattoria ohjelmoituine äänen aaltomuotoineen. Sekä grafiikka- että ääniominaisuudet sopivat kuin nakutettu pienten videopelien tekemiseen.

Vielä yksi tärkeä syy siirtyä Commodoreen oli siihen saatava tekninen manuaali, joka oli hyvin perusteellinen ja selvitti yksityiskohtia myöten miten laitteen ominaisuuksia käytetiin. Kyseinen opus oli nimeltään Commodore 64 Programmer’s Reference Guide, ja siinä oli satoja sivuja enemmän kuin simppelissä Oric-1:n käsikirjassa.

Commodore 64:n parissa vietetyt viikot olivat hyvin samanlaisia kuin aiemmin Oricin BASIC-ohjelmoinnin opettelu, potenssiin kaksi. Koneessa oli runsaasti uutta opiskeltavaa. Vähitellen opin ja aloin päästä kuusneloseni herraksi. Ja minulla olikin hieno tavoite: uusi ja laajennettu versio Artusta, jossa olisi rutkasti enemmän tasoja, vihollisia, ansoja ja välitavoitteita. Tällä kertaa ohjelmoin peliä suoraan konekielellä, mikä mahdollisti nopean animoinnin ja kaupallisen tason lopputuloksen. Tein peliä pikku hiljaa lukion opintojen ohessa ja vuodenvaihteessa 1986 peli viimein alkoi tuntua valmiilta.

Arttu C64, Tulossa tammikuussa 2016 - 30 vuoden ’kehitysaikataulun' jälkeen

Kiitos Kasettilamerien ja Suomen pelimuseon, viimeisessä osassa Digikasarin kasvatti -blogisarjaani ensi tammikuussa, 30 vuoden varastolaatikkokypsyttelyn jälkeen, on aika julkaista Little Knight Arthur Commodore 64:lle. Koko loistossaan, kaikki seitsemän tasoa, amatöörimäisen jumputtavine pelimusiikkeineen, vikoineen kaikkineen. Ideana olisi käyttää Creative Commons-lisenssiä, joka sallii pelin vapaan levityksen ja muokkauksen kunhan alkuperäinen teos mainitaan. Ehkäpä joku vanhoihin tietokoneisiin hurahtanut harrastaja innostuu muokkaamaan ja tasapainottamaan peliä...

LIttle Knight Arthurin kauan viivästynyttä julkaisupäivää odotellessa, mielessäni on siihen liittyvä projekti joka on muhinut takaraivossa ja odotellut aloittamistaan. Kutsun projektia nimellä 'Arttu Retrogame*Recycled*Resurrected' tai lyhennettynä 'Arttu Re^3’. Siitä lisää toivottavasti melko pian.

---



104 katselukertaa

Aiheeseen liittyvät päivitykset

Katso kaikki
bottom of page