Covert BitOps: Kuusnelospelejä suurella tunteella
Kuten moni Suomipelit.comin kävijä, Covert BitOpsin tiimi, eli Lasse Öörni, harrastaa pelien tekemistä. Hänen harrastuksensa eroaa kuitenkin suuresti monien muiden pelintekijöiden touhuista: kohteena ei olekaan tuttu ja turvallinen PC, vaan konevanhus Commodore 64. Lasse kertoo tässä haastattelussa, mikä häntä tuossa vanhassa koneessa kiehtoo ja miten pelien tekeminen sille eroaa PC-ohjelmoinnista.
15.12.2004 julkaistun artikkelin on kirjoittanut jalaine.
Lasse kuka? #
Suomipelit:
Kertoisitko näin alkuun jotain itsestäsi? Kuinka oikein kiinnostuit kuusnelospelien tekemisestä?[/B]
Lasse Öörni:
Kuusneloseen tuli tutustuttua 1986, ja vuosien kuluessa tuli MikroBitin, C=lehden ja muiden avustuksella kokeiltua kaikenlaista, Basicilla ensin ja vähitellen assembly-kielellä. Mutta silloin ei ollut kovin kummoisia työkaluja: esim. demoscenen piirissä paljon käytettyä Turboassembleria ei sattunut käsiin, joten nuo kokeilut jäivät aika pieniksi, ja kuusnelosen hajottua joskus 90-luvun puolella jäivät kokonaan.
Vasta vuonna 1998 innostuin uudestaan emulaattorien ja cross-developmentin seurauksena, ja lähdin uudelleen kokeilemaan. Tässä vaiheessa olin ohjelmoinut jo kokonaisia pelejä assemblyllä (Amiga) ja C:llä (PC), joten kokonaisuuden hallinnasta oli parempi käsitys. Eli noin 5 vuotta olen "vakavissani" kuusnelospelejä ohjelmoinut.
Suomipelit:
Osaatko sanoa, kuinka hyvin sinut ja pelisi tunnetaan suomipelaajien keskuudessa? Lada taitaa olla aika tuttu, mutta kuinka on muiden pelien laita? Oletko saanut ihmisiltä palautetta?
Lasse:
Palautetta tulee silloin tällöin, eli pari kertaa vuodessa. Arvelisin että Lada ja BOFH: Servers Under Siege ovat parhaiten tunnetut.
Mikä kuusnelosessa viehättää? #
Suomipelit:
Miksi teet pelejä juuri kuusneloselle? Eikö PC olisi nykypäivänä jo muodikkaampi alusta? Ja tehokkaampikin...
Lasse:
Kuusnelosella data ja työmäärä ovat paremmin yhden tai muutaman henkilön hallittavissa. Esimerkiksi kuvien piirtämisessä vaihtoehtoja vähentää huomattavasti 160x200-resoluutio ja 16 väriä verrattuna vaikka VGA:han tai truecolor-kuviin. Ääniin puolestaan ei tarvitse löytää reaalimaailman äänilähteitä tai sampleja, kun ne tehdään synteettisesti SID-piirillä. Kone tavallaan asettaa rajoitukset: pitää yrittää löytää mahdollisimman yksinkertaiset ja toimivat ratkaisut, kun PC:llä saattaisi lähteä kasaamaan vaikka mitä ominaisuuksia, ja sitä kautta ikuisuusprojekteja. PC:llä rima on myös jo aika masentavan korkealla, ainakin jos kaupallisiin peleihin vertaa.
Suomipelit:
Mutta eikö tavallaan tuo ole myös sellainen asia, joka tekee pelien tekemisestä kuusnelosella haastavampaa kuin PC:llä? PC:llä kun on varsin helppo tehdä pelejä komeilla resoluutioilla ja hulvattomalla väriloistolla...
Lasse:
Onhan tuokin totta. Eli tietynlaista masokismiakin saattaa vaatia pelin hiominen niin, että se on riittävän nopea kuusnepalla, eikä tuhlaa rajallista muistia. Lisäksi PC:lle löytyy dokumentaatiota, ohjelmointikirjastoja ja tutoriaaleja aika lailla kuusnelosta paremmin.
Mutta en nyt silti tuosta resoluution, tehon ja väriloiston hulvattomasta helppoudesta tiedä. Aika isoja tiimejä ja kovasti miestyövuosia PC-pelit tuntuvat vaativan, jos laatujälkeä aiotaan saada aikaan. Riippuu varmaan siitä, miten tavoitteet asetetaan.
Loistopelejä pienillä resursseilla #
Suomipelit:
Tavallaan yllättävää on sekin, että pelisi ovat oikeasti todella hyviä, verrattavissa kaupallisiinkin kuusnelostuotoksiin. Eivätkä pelit kuitenkaan ole edes mitään vanhan toistoa. Miten on mahdollista, että tuosta konevanhuksesta vieläkin saa jotain uutta irti?
Lasse:
Tekninen huippu kuusnelospeleillä oli varmaankin 90-luvun alkupuolella Turrican I+II:n, Mayhem In Monsterlandin, Creaturesien ym. kanssa. Minä en ole mitenkään tekninen koodaaja, enkä edes yritä noiden kanssa suoranaisesti kilpailla. Mutta sen sijaan olen pyrkinyt ottamaan vaikutteita muualta, kuten NES-peleistä tai jopa PC:n FPS-peleistä.
Suomipelit:
Mitä mieltä muuten olet siitä ikuisuuskysymyksestä, että mitkä ovat ne kaikkien aikojen parhaat pelit? Löytyvätkö ne kuusnelospuolelta, vai onko nykyisissä peleissä sittenkin jotain tehty paremmin?
Lasse:
Hyviä pelejä löytyy kyllä hirveän monelta alustalta ja aikakaudelta. Nykyisissä peleissä on monesti harkittu juoni ja suunnittelu, ja niihin jaksaa luultavasti sen vuoksi syventyä enemmän, mutta vanhoista kuusnelospeleistä taas saa parempia adrenaliini- ja hardcore-kokemuksia.
Se kyllä hieman huolestuttaa, että esimerkiksi Deus Exin kaltaista tajunnanräjäytystä ei ole vuoden 2000 jälkeen tullut, eikä tekoälyssäkään kai ainakaan FPS-pelien puolella ole vielä Half-Lifen voittanutta (ei edes Half-Life 2, jonka äskettäin pelasin läpi: grafiikka, hahmot ja fysiikkamallinnus olivat loistavia, mutta mielestäni tekoälyn ja pelaajan vapauden tunteen kanssa otettiin takapakkia).
Suomipelit:
Totta... Mutta palataan vielä hetkeksi omiin peleihisi. Ne kun ovat varmaan ainakin osalle lukijoista vielä aika tuntemattomia, niin mitä niistä suosittelisit ensimmäiseksi tuttavuudeksi? Mihin peleistä olet erityisen tyytyväinen?
Lasse:
BOFH:in kuusnelosversio välittömään toimintaan, ja MW4: Agents of Metal, jos tarinavetoinen toimintaseikkailu kiinnostaa. Molemmista kannattaa lukea pelin levyimagella mukana tulevat ohjeet ensin! MW4 on itselleni ehdottomasti suurin tyytyväisyyden aihe, onnistuin mielestäni säätämään tarinan ja toiminnan suhteen ja haastavuuden sopiviksi alusta loppuun.
Kuinka kuusnepalle sitten tehdään pelejä? #
Suomipelit:
Tässä on ollut jo yleisesti puhetta siitä, miksi olet innostunut tekemään pelejä kuusnelosympäristöön. Monia, muun muassa itseäni, varmasti kuitenkin kiinnostaa vielä enemmän se, kuinka nämä pelit oikeastaan syntyvät. Kertoisitko vähän laitteistostasi? Käytätkö ihan oikeaa kuusnepaa testaukseen vai testailetko pelejä yleensä emulaattorilla? Entä oletko viritellyt kuusnelostasi, vai huriseeko pöydälläsi vielä ihan se peruslaite?
Lasse:
Kuusnelonen, Action Replay 6 ja 1541 minulta löytyy, sekä muutama vähitellen kuoleva joystick. Hyvin harvoin noilla tulee testailtua, eli omasta mielestäni esim. VICE-emulaattoriin voi pelinteossa ääniä lukuunottamatta luottaa 99.99%-prosenttisesti. Demokoodarit sitten asia erikseen - kun etsitään videopiirin äärirajoja, voi sieltä vielä löytyä jotain mitä ei vielä emuloida oikein.
Musiikin ja äänien tekoon minulla on HardSID-äänikortti, johon on istutettu oikea SID-piiri. Mikään nykyinen ääniemulaatio (esim. Sidplay2 tai reSID) ei ole vielä oikein hyvä, varsinkaan SID-piirin suotimen osalta.
Suomipelit:
Kerroit tuossa aikaisemmin, että pelintekoprosessisi pohjautuu vahvasti PC:llä tapahtuvaan cross-developmentiin. Mitä tämä oikeastaan tarkoittaa?
Lasse:
PC:lle (tai muille kuusnelosta tehokkaammille alustoille) on olemassa runsas valikoima ristiinkääntäjiä, jotka tuottavat kuusnelosella ajettavaa ohjelmakoodia. Tämän lisäksi on saatavilla grafiikka-, ääni- ja muita työkaluja. Tosin käyttämäni grafiikka- ja kenttäeditorit olen tehnyt itse, jotta voin olla varma, että data tulee juuri siihen muotoon mihin haluan.
Suomipelit:
Nämä tekemäsi editorit ovat siis PC:llä toimivia ohjelmia?
Lasse:
Kyllä. Ne on tehty SDL-kirjastoa käyttäen, joten niiden pitäisi kääntyä kiltisti sekä Windows- että Linux-ympäristöissä.
Ristiinkääntäjän tuottama ohjelmatiedosto ja tarvittava muu data voidaan siirtää D64-levyimagelle emulaattorissa ajamista varten, tai esim. Star Commanderilla (printteriportti <-> levyasema-kaapeliviritys) siirtää oikean kuusnelosen ajettavaksi.
Toki voi myös ajaa emulaattorissa kuusnelosen grafiikka-, musiikki- ym. editoreita, ja yhdistää näiden tuottamat datat haluamallaan tavalla. Ainutta oikeaa tapaa cross-developmenttiin ei ole.
Suomipelit:
Nyt jos joku innostui harrastuksesta niin mikä olisi sellainen ristiinkääntäjä, jota itse käytät tai voisit suositella?
Lasse:
Käytän assembleria nimeltä DASM, mutta koska yleinen mielipide on sen oikukkaan luonteen vuoksi hieman sitä vastaan, en voi sitä aivan varauksetta suositella. Alkuun pääsee hyvin esim. C64ASM-nimisellä kääntäjällä ja netistä löytyy kääntäjiä runsaasti lisää. cc65-kääntäjän mukana tulee myös pätevä assembler, mutta se vaatii hieman vaikean linkkeriohjelman käyttöä.
Pari sanaa prosesseista #
Suomipelit:
Yleensä, kun alat tehdä peliä, onko sinulla jokin tietty pelintekoprosessi tai toimintamalli, jolla rupeat peliä työstämään?
Lasse:
Pelintekoprosessiin ei muuten ole mitään erikoista sääntöä, mutta matalan tason teknisistä rutiineista (esim. kuvan vieritys, spritejen ruudulle saanti) se yleensä alkaa, ja päättyy siihen, että peli on pelattavissa alusta loppuun, ja testattu riittävästi. Keskivaiheilla voi sitten tapahtua mitä tahansa, niinkuin MW4:n kanssa, joka jäi melkein vuodeksi muhimaan siitä syystä, että hyvää juonta ja kenttäjakoa ei meinannut saada aikaiseksi.
Suomipelit:
Heh. Ihailtavaa kyllä on, että kuitenkin tuon pitkähkön ajan jälkeen jaksoit vielä tarttua härkää sarvista ja tehdä pelin loppuun! Tekikö edes tiukkaa?
Lasse:
Kunhan sai peliengineremontin tehtyä, ja Impossible Mission II:stä vaikutteita ottanut perusidea oli selvillä, eli on erillisiä vihollislaitoksia renkaan muotoisesti asetettuna, ja kaikissa pitää vierailla, oli loppu helppoa. Paitsi mitä nyt taustagrafiikoiden piirto on aina jossain määrin verenmakuista.
Suomipelit:
Kuulostaa hyvältä. Ohjelmointiin vielä palatakseni, käyttämäsi ohjelmointikieli on varmaankin Assembly? Olen muutamaan otteeseen netissä törmännyt kuusneloselle tarkoitettuihin C-kääntäjiin - oletko kokeillut sellaisia? Onko niistä mihinkään?
Lasse:
Assemblyhän se. En ole uskaltautunut vielä C-kääntäjiä kokeilemaan, uskoisin ettei nopeatempoista 50Hz ruudunpäivityksen toimintapeliä kannata C:llä lähteä tekemään, kun assemblylläkin tekee tiukkaa, mutta onhan C-kielellä tehty kuusneloselle esim. internet-käyttöympäristö Contiki, jossa on web-selain ja muuta mukavaa.
Suomipelit:
Nuoren polven koodareille alkaa tuo Assembly olla vähän tuntemattomampi juttu ja olisikin hauska nähdä vähän, miltä näyttää pieni pätkä kuusnelospelin lähdekoodia. Liikenisiköhän tähän näytepätkä?
Lasse:
Pistetään vaikka lajittelurutiini, joka järjestää spritet Y-koordinaatin mukaiseen ylhäältä alas-järjestykseen spritenmonistusta (multiplexing) varten. Monistamalla spritejä saadaan niitä näyttöön enemmän kuin laitteiston tukema 8. Koodinpätkä löytyy MW4:stä, mutta idea on varastettu Oceanin ja Imaginen peleistä (esim. Green Beret)
Taustatietoina kuusnelosen prosessorista löytyy kolme rekisteriä, yleiskäyttöinen A (accumulator) ja indeksi/laskurirekisterit X ja Y. Allaoleva ohjelmapätkä käsittelee kahta taulukkoa: "spry", joka sisältää spritejen Y-koordinaatit epäjärjestyksessä ja "sortorder", johon syntyy järjestetty lista spriteindekseistä. Jokainen lajittelu on jatkoa edelliselle: jos lista on jo järjestyksessä, silmukka menee läpi hyvin nopeasti, vaikka algoritmi muuten onkin kammotun kuplalajittelun kaltainen.
ldx #$00
sspr_sortloop: ldy sortorder+1,x
lda spry,y
ldy sortorder,x
cmp spry,y
bcs sspr_sortskip
stx sspr_sortreload+1
sspr_sortswap: lda sortorder+1,x
sta sortorder,x
sty sortorder+1,x
cpx #$00
beq sspr_sortreload
dex
ldy sortorder+1,x
lda spry,y
ldy sortorder,x
cmp spry,y
bcc sspr_sortswap
sspr_sortreload:ldx #$00
sspr_sortskip: inx
cpx #NUMSPR-1
bcc sspr_sortloop
Ohjelmointia erilaisilla alustoilla #
Suomipelit:
Olet tehnyt pelejä myös PC:lle (BOFH ja Lada). Miten mielestäsi pelien tekeminen näille eri alustoille eroaa toisistaan? Entä mitä yhtäläisyyksiä niissä on?
Lasse:
Oman näkemykseni mukaan pelinteko on joka alustalla (no Atari 2600:sta en tiedä, en ole kokeillut) periaatteiltaan aika samanlaista, eli "suunnittele, koodaa, tee tarvittavat grafiikat ja äänet, testaa", mutta joka alustalla on toki omat omituisuutensa ja vahvuutensa. PC:llä ei tavallaan rajoja ole, mutta kuusnelosprojektin loppua kohti yleensä iskee paniikki, kun muisti tai levytila alkaa loppua..
Suomipelit:
Mitäs siinä vaiheessa tehdään? Mikä avuksi, kun peliin pitäisi tulla monta uutta kenttää ja ominaisuuksista puuttuu iso osa, mutta muisti uhkaa loppua?
Lasse:
On pakko lähteä katsomaan, miten koodia voi tiivistää, tai löytyykö esim. datataulukoita, jotka ovat korvattavissa ajon aikana tehtävillä laskutoimituksilla, ja niin edelleen. Nopeutta joutuu yleensä uhraamaan tilankäytön vuoksi.
MW4:ssä helpotti suuresti "skriptisysteemi", jolla pelin juoni toteutetaan. Assemblykoodiahan sekin on, mutta levyltä ladattavaa, joten tiettyjä toimintoja (esimerkiksi pelin valikot) saattoi siirtää levyltä ladattavaksi, pysyvää muistinkulutusta pienentäen.
Suomipelit:
Entä, onko eroa siinä, miten lähdet projektia aloittamaan PC:llä ja kuusnelosella?
Lasse:
Kuusnelosella alkuinnostus ainakin itsellä lähtee jostain teknisestä asiasta, kuten uudesta nopeammasta ja hienommasta kuvaruudun vieritysrutiinista tai nopeasta musiikinsoittorutiinista. "Isommilla" alustoilla puolestaan enemmän suunnitelmista ja käsityksestä, minkälainen pelistä on tarkoitus tulla.
Suomipelit:
Tuo taitaa olla aika yleistä. Osaatko sanoa, mistä tuo erilainen lähestyminen voisi johtua?
Lasse:
Kuusnelosella ihmiset ovat yleensä aloittaneet kaikenlaisesta pienestä laitteistoa lähellä olevasta näpertelystä (esim. vieritys tai rasterikeskeytykset), joten on luonnollista, että ne kiinnostavat myöhemminkin. PC:llä on aika varmaa, että jonkin idean pystyy toteuttamaan jos vain jaksaa koodata, kuusnelosella asia kannattaa testata heti käytännössä.
Erilaisia kuppikuntia kuusnelosen kimpussa #
Suomipelit:
Nettiä selatessaan huomaa, että tällaisia porukoita, jotka vielä tekevät pelejä Commodore 64:lle on yllättävän paljonkin. Kuinka kiinteä tämä yhteisö on ja kuinka aktiivisesti olet mukana tässä "scenessä"?
Lasse:
Kyllähän esim. sähköpostilla tai WWW-foorumeilla (esim. http://www.lemon64.com ja http://noname.c64.org/csdb) tulee yhteyttä pidettyä. Varsinaisesti kuusnelosscene ymmärretään demo- ja piraattiscenenä, pelit ovat vähän syrjäisessä asemassa. Itse en ole demonteosta kiinnostunut, mutta mm. työkaluohjelmien tiimoilta tulee oltua yhteydessä sceneäijien kanssa.
Suomipelit:
Harmillista, että hyvät pelit jäävät demojen varjoon... Mikä tässä on suuntaus? Tuleeko rakenne säilymään jatkossakin tällaisena vai nyt kun kuusnelospiratismi ei enää ole niin suuren porukan juttu, onko muutosta odotettavissa?
Lasse:
Kuusnelosen scene-aktiivisuus, sekä pelin- että demonteko, yleisesti ottaen vähenee hitaasti, mutta vääjäämättä. Erityisiä muutoksia tuskin on odotettavissa. Tosin aina tulee yllätyksiä, kuten syksyllä julkaistu epävirallinen kuusnelosen Turrican 3, johon kannattaakin tutustua välittömästi, jos ei vielä ole tietoinen: http://www.smash-designs.de
Linkkejä maailmalle #
Suomipelit:
Suurkiitos haastattelusta ja tsemppiä tuleviin projekteihisi! Niin, voisitkin oikeastaan vielä kertoa jotain tulevaisuudensuunnitelmistasi. Niitä kun niitä
on aina kiva kertoilla haastattelun loppupuolella.
Lasse:
Ideoita tulee aina ja pitää odottaa, että kokoontuuko niistä jotain järkevää. Tosin pitkän projektin valmiiksisaamisen jälkeen väsyttää, eikä halua vähään aikaan tehdä mitään :) Vähitellen alkaa kyllä myös tuntua siltä, että on jo ottanut kuusnelosesta kaikki tehot irti, mutta siltä tuntui myös jo vuonna 2001...
Suomipelit:
Toivottavasti kuulemme peleistäsi taas lähiaikoina lisää uutisia! Ja ehkä nyt tämän haastattelun jälkeen joku muukin innostui kokeilemaan pelien tekemistä tuolla koneklassikolle. Mistähän tällaisen ihmisen kannattaa lähteä liikkeelle?
Lasse:
Jaa-a.. annetaanpa muutama linkki:
- http://www.c64.sk C64-skenen uutiset
- http://www.lemon64.com Isoin C64-site, katso scene-foorumi ohjelmointikysymyksille
- http://project64.c64.org Dokumentaatiota, huomaa erityisesti välttämätön perusopus "C64 Programmer's Reference Guide"
- http://www.fairlight.to Työkaluohjelmia crossdevelopmenttiin
- http://www.coder.pwp.blueyonder.co.uk Lisää työkaluja
- http://www.ffd2.com/fridge/chacking Commodore Hacking-lehti
- http://www.ffd2.com/fridge The Fridge, kokoelma sekalaisia koodinpätkiä
- http://bj.spline.de/stuff/ml-tutorial.zi... Järkyttävän iso kokoelma assembly-tutoriaaleja
- http://www.antimon.org/code.php Tutoriaaleja hieman helpommin hallittavassa muodossa
- http://covertbitops.c64.org/rants.htm Juttua mm. spritenmonistuksesta (multiplexing) ja 1541-fastloaderin ohjelmoinnista
- http://geocities.com/mantisdawn/ Peter's Commodore 64 - yksinkertaisen pelin vaiheittainen kokoaminen
Ai niin, jos kirjastosta löytää Jukka Tapanimäen Commodore 64 Pelintekijän Opas -kirjan, on sen lukeminen erittäin suositeltavaa. E-tekstinä tuota kai ei ole vielä missään.



