Viimeisimmät julkaisut

Kuinka se toimii, vai toimiiko se?

Mikä on peli?

“Pelissä on yleensä joku ukkeli tai muu hahmo jota ohjaillaan tai sitten monta joita ohjataan ulkopuolisesti ja sitten ne menee eri maastoissa ja ehkä hyppii, tai ehkä ne ampuu, ja yleensä pelissä on tarina, joka kulkeutuu pelin kanssa, ja sitten..”

Hetkinen. Tämähän esittelee vain tasohyppelyitä ja strategiapelejä. Mietippä uudestaan. Ja kun tarpeeksi kauan mietit, et voi löytää tarpeeksi sanoja kuvaamaan kaikkia pelejä maailmassa. Civilizationit, Half-Lifet, Ratchet and Clankit, World of Goo, Braid, Command & Conquerit. Vain pari esimerkkiä pelien erilaisuudesta. Loppujen lopuksi ei oikeastaan ole kuin yksi mahdollinen kuvaus kuvaamaan kaikkia maailman pelejä, tai edes edellämainittuja.

Peli on säkillinen ideoita, jotka toteutetaan ruudulle, ja joiden tapahtumia sitten ohjataan milloin mistäkin kuvakulmasta tietokoneen inputtien kautta. Peli on vaikea kuvailla tarkemmin, sillä jos mennään tästä yksityiskohtaisempiin asioihin kuten kamerakulmaan, pelihahmojen tyyppiin, genreen, oikeastaan mihin vain, ei pystytä kuvaamaan kaikkia pelejä.

Tämänpä takia pelinkehittäjällä on erittäin vapaat kädet tehdä mitä ikinä haluaa. Videopeli voi olla muovikitaran rämpytystä tai tenniksen pelaamista liikkeentunnistukapulalla. Se voi olla näppäimien näpyttelyä niin, että pelihahmo liikkuu ruudulla tai lyö miekallaan toista pelaajaa, joka pelaa internetin kautta toisella tietokoneella. Tästä voitaisiin jopa tehdä johtopäätös, jonka mukaan pelinkehitys on taidetta. Kuten maalaus tai musiikki, pelinkehityksellä on vain erittäin pienet ja löyhät rajat, ja tietokonepelistään – tai mistä tahansa pelistään – voi tehdä juuri sellaisen kuin haluaa.

Indie-kehittäjillä on juuri tämä etu. Kun suuren, kymmeniä työllistävän pelistudion on tehtävä peli, joka myy kalliin kehittämisensä voitolle ja hoitaa tekijöilleen palkkarahat, indie-kehittäjä voi tehdä ihan niinkuin haluaa, ja netti on täynnä ohjelmia, joiden kanssa on helppoa tehdä ilmainen, hauska ja pidetty peli. Suurstudiot saavat toki keskimäärin paremman laadun peleihinsä, kun pelien täytyy varmistaa itselleen kovat rahat, muttei se tarkoita sitä, että kaikki indie-pelit olisivat roskaa, vaikka monet ovat.

Jo mainitut World of Goo ja Braid ovat ainakin minun mielestäni parhaita pelejä, joita maan päällä on koskaan julkaistu. Koukuttava idea, yksinkertaisuus ja kaunis toteutus takaavat teoksille tuhannet suuret fanit. Nämä ovat tosin maksullisia pelejä, mutta myös ilmaispeleistä löytyy kultaisia toteutuksia, kuten legendaarinen Pekka Kana 2. Kyllä ne ilmaispelitkin menestyvät.

Miksi minä tätä kirjoitan? Rohkaistakseni. Onko sinulla mielessäsi peliprojekti? Pitäisitkö siitä itse? Pitäisivätkö siitä muut?

No tee se sitten.  Nettipiuha irti koneesta ja editorit auki. Hyvä peli saa hyvää palautetta, ja kukapa ei sitä haluaisi? Nyt sitä on jaossa. Ja tulee aina olemaan, kunhan vaan jaksaa hiukan vaivaa nähdä.

Projekti T > 0°C

Otappa esiin ohjelmointiprojektikansiosi. Laske kaikki siellä olevat projektisi, ja vähennä siitä (mahdolliset) valmiit projektit. Tuleeko mieleen pakastin? Lienee aika harkita jonkin wanhan projektin sulattamista.

Projektin sulattaminen

Projektin sulatus ei ole aina niin helppoa kuin luulisi. Tässä kuitenkin muutamia vinkkejä:

  • Tarkkaile ensin  koko projektia(ei pelkkää koodia). Mikä sai sinut alunperin tekemään sitä? Jos sinulla on jonkunlaista dokumentaatiota, lue se. Saatat olla unohtanut jotain,  joka oli joskus koko projektisi sydän. Motivaatio on tärkein osa projektin jatkamista!
  • Mieti, mihin tekeminen aikoinaan jäätyi. Älä ala suoraan siitä mihin jäit, vaan lämmittele ensin koko projekti, niin jatkaminen ei tyssää heti alkuunsa. On myös hyvä miettiä, mitä taitoja olet viime aikoina oppinut, ja olisiko niistä hyötyä nyt?
  • Tutki koodiasi. Parantele vanhaa koodiasi, jos näet siihen aihetta. Kirjoita jokin koodinpätkä kokonaan uudelleen. Näin virittäydyt projektiisi uudelleen.

Projektin pitäminen sulana

Kun sait projektin vauhtiin, mikä estää sitä jäätymästä?

  • Pidä yllä hyvä tahti! Älä pidä turhia taukoja, sillä tauot voivat venyä, venyä ja venyä. Älä myöskään mene liian nopeasti, sillä se saa aikaan tunteen, että nyt on turvallista pitää taukoa. Suuri vauhti myös rasittaa sinua pitemmän päälle.
  • Suunnittele etukäteen, mitä teet. Mieti, missä järjestyksessä on hyvä edetä. Lisää aikatauluun myös hyvät paikat muutaman päivän tauoille, sillä tauot virkistää, saatat saada uusia ideoita ja muutenkin projekti näyttää erilaiselta parin yön jälkeen. Suunnitelman täytyy myös joustaa!
  • Pidä aikataulusta kiinni! Parhaastakaan suunnitelmasta ei ole mitään hyötyä, jos sitä ei noudateta.
  • Onko ideat loppu? Katso myös muita jäätyneitä projekteja, ja tutki, olisiko niissä hyviä ideoita, jotka sopisivat tähän. Perhe, ystävät ja foorumi on myös hyvä paikka kysyä ideoita.
  • Kerro projektista toisille ja pyydä joitakuita patistamaan sinua projektin ääreen, jos edistystä ei tapahdu.
  • Muista pitää rytmi loppuun asti, koska viimeistely on yllättävän kylmää hommaa!

Hei, uusi idea!

Jos sait juuri hyvän idean, älä rupea oikopäätä toteuttamaan sitä. Tällaiset “herätekoodaukset” jäätyvät lähes väistämättä.

  • Kirjoita idea ylös. Ei, muistisi ei ole niin hyvä kuin luulet. Jos sinulla ei vielä ole tapana, pidä aina mukana kynä ja paperia!
  • Mieti, voisitko käyttää ideaasi jossain muussa projektissa. Älä kuitenkaan yritä väkisin työntää tower defenseä tasohyppelypeliin :)
  • Jos sinulla on jokin toinen projekti kesken, älä vain ala toteuttamaan toista! Joskus on hyvä laittaa jotkut ideat pakastimeen odottamaan sopivaa hetkeä.
  • Jos nyt kuitenkin päätät aloittaa uuden projektin, niin suunnittele se huolella. Hyvin suunniteltu on puoliksi tehty.
    • Kysy muilta, onko tämä hyvä idea, ja miten se voisi olla parempi.
    • Kirjoita kaikki, mitä tulee mieleen projektin tiimoilta, ylös. Tutki, mitä projektiin kannattaa lisätä ja mitä ei.
    • Oletko varma, että pystyt tekemään tämän projektin. Oletko tarpeeksi taitava? Onko tarvittavat työvälineet? Jos teet CB:llä, mieti kannattaisiko odottaa CBC:n tuloa.
    • Tarvitsetko tiimiä? Mieti onko se todella tarpeen. Tiimin ohjaaminen on vaikeata ja työlästä, ja harvemmin onnistunutta. Älä hae sitä ennenkuin olet saanut jotain oikeasti valmiiksi. Jos sinulla on vain idea ja jonkun toisen pitäisi tehdä peli sinulle, et saa kannatusta.
    • Ennen projektin aloittamista anna idean olla useita päiviä sellasenaan (älä huoli, hyvät ideat eivät jäädy ennen projektin aloittamista!). Palaa takaisin sorvin ääreen ja katso asiaa uudesta perspektiivistä.
    • ÄLÄ ANNA PROJEKTIN JÄÄTYÄ! Uudelleen lämmitetty ruoka ei ole yhtä hyvää(ellei se ole makaroonilaatikko :P ).

Edit: Nämähän ovat sitten vain minun mielipiteitäni, eli ei mitään tieteellisesti testattuja faktoja. Sen lisäksi nämä ovat rationaalisesti eikä empiirisesti kehittyneitä(eli kaikkea näistä ei ole tosiaankaan kokeiltu käytännössä)!

Retro?

Oliko kivaa kun pelasit ensimmäisen kerran Duke Nukem 3D:tä? Battlefield 1942:a?  Death Rallya?  Grand Theft Autoa? The Elder Scrolls: Arenaa? Driveria? “Totta kai oli \o/” vastaavat he, jotka näitä pelejä ovat pelanneet. Ovathan ne klassikkoja.

Mutta herätäänpä nykypäivään. Hyvän pelin voi ostaa netistä klikkaamalla hiirtään ja nopeiden nettiyhteyksien ansiosta niihin pääsee käsiksi nopeahkosti. Sitä jaksaa pelata tunteja, ja kun yksinpeli on suoritettu, moninpeli kiinnostaa tuplasti sen, mitä se kiinnosti tarinatilan ohella. Useimmiten pelien iät ovat joitakin kuukausia – aika paljon, koska samalla hinnalla ostat pari-kolme kirjaa, jotka luet kuukaudessa, tai pienen laatikollisen elokuvia, jotka kestävät viikon tai kaksi.

Nuori kun olen, en ole elänyt nykyisten naavapartojen aikana, vaikka innokas retropelaaja olenkin. Minun historiantuntemukseni perusteella entisaikoina ei pahemmin pelejä ostettu klikkaamalla. Ne haettiin 20 asteen pakkasessa postimyyntiliikkeestä, jossa niille saattoi olla jopa oma, pieni hylly jossakin likaisessa nurkassa. Ensimmäiset pelilevykkeet olivat yleensä niin kestäviä, että kun koiran- tai kissankarva niitä kosketti, ne olivat jo rikki, ja vaikka näin ei aina tapahtunutkaan, niin pelikonsoli ei aivan turhan usein lukenut levyä kunnolla. Pelitilanteita harvemmin tallennettiin, ja kun konsoli kuumeni tarpeeksi, tuhoten pelitilanteen käyttökelvottomaksi, aloitettiin alusta – jos jaksettiin, sillä pelit olivat useimmiten huonoja, yhden illan minipelejä.

CD-levyn keksiminen mullistikin maailmaa sen verran, että pelaaminen oli jo siedettävän helppoa ja mukavaa, ja sisältöäkin niihin mahtui. Pelit monipuolistuivat siedettävän nopeasti, ja moni nousi klassikoksi asti. Minipelit muuntuivat tarinallisiksi eepoksiksi, jotka sisälsivät milloin elokuvallisia kohtauksia ja milloin suoraan skripattuja, pelattavia kohtia. Half-Life, Max Payne ja monet muut mullistivat pelialaa antamalla peleille uudenlaisia kuvakulmia.

Nykyajan pelit ovat vuosia kestäviä mahtiteoksia, joita jaksaa pelata suoraan sanoen koko ajan. Teinien vanhemmat huutavat korvaan “lopeta nyt jo se pelaaminen prkl” viimeistään silloin, kun kone on ollut päällä viidettä tuntia.

Mutta hetkinen. Peliyhtiöt menevät konkursseihin yksi kerrallaan, työntekijöitä lomautetaan ja pelilehdet arvostelevat pelit rankasti. No totta kai, sillä meille on annettu niin paljon niin vähässä ajassa. Vuodelle 2010 luvataan kaikkien aikojen pelitulvaa; monet yhtiöt siirsivät pelinsä tämän vuoden alkuun välttääkseen 2009 loppuvuoden “tulvaa”. Peleille on omat kauppansa, jotka kilpailevat myyntiluvuissa musiikin kanssa.

Tapani mukaan kävelin monet metrit aiheesta pois, joten palataan alkuperäiseen pointtiini. Ehkä ne pelit 1990-luvulla ja 2000-luvun alussa olivat hienoja, suurenmoisia, uusia, mutta katsotaanpa nykyhetkeen. Ei niitä enää jaksa kukaan pelata. Niiden grafiikka pistää silmään ja päätä alkaa särkeä viimeistään vaikeimpien roolipelien kontrolleihin päästessä. Ja silti niitä pelataan.

Miksi? Missä niiden hohto on? Muistoissa? Eeppisissä tarinoissa? Kaikilla pelaajilla on varmasti omat syynsä. Pelatkoot, pelaanhan minäkin. Mutta myöntäkää jo, että niiden kuuluu väistyä nykyajan pelien alta. Ne eivät ole enää niitä uusia ja suurenmoisia pelejä kuten ne olivat joskus.

Tästä kolumnista tulikin näemmä enemmälti vuodatus ja angsti kuin asiaa kertova kolumni, mutta mitäpä siitä. Tuskin kukaan siitä suuttuu. Nyt Nintendo Entertaiment Systemin pariin.

Suuruudenhulluus & pelien vaikutus aivotoimintaan.

Armeijani oli suuri ja omistin teknologiaa, jota ei oltu vielä nähty. Kokosin lisäjoukkoja länsirajalle valmistautumaan yllätyshyökkäykseen Kreikkaa vastaan. Viimeisin sota edellä mainitun kanssa käytiin joitakin vuosia sitten, ja tällöin sain vallattua yhden kaupungin oman maani rajojen läheltä.

Joukkoja kasautui linnakkeeseeni ja hyökkäys alkoi. Ensimmäinen kreikkalainen kaupunki sijaitsi joidenkin päivien kuluttua armeijani edessä, kuin syötäväksi annettu omena. Piiritys kesti joitakin päiviä, ja lopulta miestappiot kääntyivät voitokseni.

Vaan pian tapahtui jotain täysin odottamatonta. Japanin keskikokoinen maa etelästä liittyi sotaan; ei vain minua vastaan, vaan myös Kreikkaa. Kolmen maan suuri sota oli tuhoisin koko maailmanhistorian aikana. Eikä sillä, että asia olisi ollut minun kannaltani vain voittoisa, kun Japani nyt tuhosi pientä itävihollistani; se tuhosi myös minua, enkä ollut valmistautunut asiaan millään tavalla.

Joidenkin vuosien päästä Kreikka suostui viimein neuvotteluihin. Sota itäistä maata vastaan päättyi, joukkoni päätyivät takaisin minun mailleni ja Japani oli nyt suurin – ja ainoa – kohteeni. Vaan asiaa ei auttanut se, että Japanin suuri armeija oli jo tunkeutunut minun nyt pienentyneeseen mantereeseeni – ja kaiken aikaa taustalla viekas Ranska käytti asian hyväkseen valtaamalla miehittämättömiä kaupunkeja.

Maani oli kutistunut kolmas-osan alkuperäisestä, ja Japanin suuret joukot vain talsivat sisään. Se riitti minulle. Minä näytin pelkuruuteni ja luovutin. Escape-näppäin onkin hienosti nimetty, varmasti pelaamista silmällä pitäen.

Tallentamatta pelitilannetta poistuin työpöydälle ja katsoin sitä hetken. Mikä meni vikaan? Minulla oli suurin armeija, tehokkaimmat aseet. Oivalsinkin, että taktiikkani oli se, joka kusi. Aseet ovat turhia, jos niitä ei osaa käyttää.

Pelaajat ja ohjelmoijat puhuvat usein, kuinka pelien tekoäly on huono tai liian yksinkertainen, eikä se yllä ihmismielemme tasolle. Ehkä ei, mutta kuinka voitte valittaa, kun nyt jo vuosia vanha Civilization IV voi tuoda näin suuren elämyksen, haastaa aivot miettimään mitä aiot tehdä seuraavaksi – ja mitä se huono tietokoneen tekoäly aikoo tehdä.

Valittamisen ihana fiilis & nostalgian kultaiset kehykset

Varmaan tunnetkin World of Warcraftin, tuon monien kammoksuman niin kutsutun huumeen sekä maailman suosituimman MMORPG:n eli massiivisen onlineroolipelin. Vaikka peli onkin hyvä ja sillä on viimeisimpien raporttien mukaan noin 11.5 miljoonaa pelaajaa, silti monet haukkuvat sen aivan lyttyyn. Outoa on kuitenkin se, että haukkujat eivät ole niitä jotka eivät pelaa vaan juuri ne jotka pelaavat.


Algalon the Observer

Uusimman lisäosan Wrath of the Lich Kingin mukana Blizzard, pelin tekijä, on helpottanut huomattavasti uusien pelaajien mahdollisuuksia päästä peliin sisälle. Kuitenkaan vanhoja pelaajia ei ole unohdettu vaan heille tarjotaan vaikeampia vastuksia niin sanotuissa hard mode -vastuksissa. Se ei tietenkään ole tyydyttänyt vinkujia vaan päin vastoin nämä valittavat vain lisää kuinka Blizzard vihaa heitä kun ei tarjoa uniikkeja vastuksia jotka olisivat vaikeita aina eikä vain hard modena. Sanottakoon tähän että se on väärä väite, Algalon the Observer on pelin yksi vaikeimmista vastuksista vieläkin eikä sillä ole sellaista “lällymoodia”.

En ole ihan varma mikä on perimmäisin syy, veikkaan kuitenkin jokaisen halua olla erilainen. Ja kuinka voit olla erilainen kun monet kymmenet tuhannet muut pystyvät nyt voittamaan samat vastukset kuin sinä itse. Pyh sanon minä! Mitä väliä sillä on jos muutkin pystyvät siihen, vielä kun joskus tämä väite on aivan perätön. Pelin Ulduar raidinstanssin viimeinen vastus Yogg-Saronin 25-hengen version oli voittanut vain noin 90 000 pelaajaa ensimmäisen kahden kuukauden aikana. Vaikka luku vaikuttaa suurelta kannattaa ottaa huomioon asiakokonaisuus. Tämä luku on yhtä kuin 3 600 kiltaa eli toisin sanoen ehkä 1% prosentti kaikista killoista ko. pelissä. Silti se ei hiljentänyt noita valituksen ääniä joita joka puolelta kuuluu. Taino, ensin oli melko hiljaista, uutta upeaa Ulduaaria ylistettiin. Nyt se on lähinnä sylkykuppi.

Vaikka väitteellä, että peli on liian helppo nykyään olisikin pohja en voi silti kuin ihmetellä. Äänekäs vähemmistö, se miksi näitä valittajia voidaan kutsua, on todellakin äänekäs. Joskus tuntuu kuin pää olisi räjähtämäisillään kun selailen pelin yhtä suosituimmista fanisivustoista, MMO-Champion.comia. Joskus vähintään joka toinen aihe mikä tulee esiin on valitus. Ja itku. Ja parku. Ja mielestäni ehkä kauhein asia siinä on tämä, että valittajat ovat ottaneet yhden pelin kehittäjistä silmätikukseen ja syyttävät häntä aivan kaikesta. Siis mitä järkeä, eihän hän ole tätä peliä yksin tehnyt!


Karazhan

Mutta pitäähän se myöntää; on totta, että peli on helpottunut. Verrattuna edelliseen lisäosaan The Burning Crusadeen, jo sen vaikeusasteeltaan ensimmäinen raidinstanssi Karazhan oli aluksi ylivoimainen monille jotka sinne marssivat (eli toisinsanoen “hommaappas paremmat kamat, kkthxbye”). Wrath of the Lich Kingin vastaava raid, Naxxramas, on kohtuullisen helppo vastus. Huomioonottaen että et ole aivokuollut, tietenkin. Yksi päätekijöistä helpotukseen on myös mahdollisuus voittaa kaikki vastukset sekä 10:n, että 25:n hengen versioina. Sen sijaan, että alkuperäisessä pelissä oli vain 40:n ja joitakin 20:n hengen vastuksia plus toisessa lisäosassa oli kaksi 10-hengen raidia ja loput olivat 25-hengen raideja on tämä uusi systeemi helpottanut huomattavasti alkuunpääsyä – ja myös vaikeusastetta – vaikkakin pitkään pelin vaikein vastus olikin 10-hengen hard mode versio Sartharionista.


Molten Coren viimeinen pomo
vanha 40-hengen raid

Valittamiseen on kuitenkin yksi syy yli muiden: nostalgia. Tuo ihana tunne jostakin aikaisemmasta jo menneestä asiasta. Aika kultaa muistot ja se todellakin pitää paikkansa. Useat vanhat pelaajat vannovat alkuperäisen pelin 40-hengen vastusten nimeen vaikka tosiasiassa ne olivat suoraansanottuna helvetti (myös graafisesti, katso vieressä oleva Molten Core-kuva). Ensimmäinen vastus jo ennen raid-ryhmän kasaamista oli saada se vaadittava 40 henkeä kasaan. Toinen ongelma oli saada kaikille tarpeeksi hyvät varusteet joiden avulla pomot kaatuisivat. Kolmanneksi pomotaistelut eivät tosiasiassa olleet kovin monimutkaisia, ihmispaljous vain hämää sen. Naxxramas oli aiemmin 40-hengen raid – silloin joskus kun oli vielä “vanhat hyvät päivät”. Ja se oli silloin vaikea. Oikeasti vaikea.


Nagrand Arena, The Ring of Trials

Pelin PVE-sisällön ohella (player versus environment) äänekäs vähemmistö kiljuu myös PVP-sisällön epäbalanssista. On mahdotonta saada täydellisen tasapainoinen pelaaja vastaan pelaaja-sisältö varsinkin Burning Crusaden mukana tulleen areenan ja Wrath of the Lich Kingin uuden hahmoluokan kanssa. Areena on kuin suurennuslasi joka tuo kaikki pienimmätkin valituksen aiheet näkyvälle, uusi hahmoluokka taas sekotti aivan kokonaan kaiken aikaisemman tasapainon (se oli pelin voimakkain hahmoluokka noin ehkä 6-8 kuukautta). Ja aina on joku hahmoluokka joka on vahvempi muita, monissa räiskinnöissä se on sniper (eikös?).

Yksi ikävimmistä asioista pelin yhteisössä on nykyään älytön niin sanottu luokkajärjestelmä. Jotkin pelaajista luulevat olevansa toisia parempia ja ajatusmallin mukaan myös kohtelevat muita pelaajia sen mukaan. Tämä ilmiö vahvistuu kun toisen hahmon varusteet eivät vielä ole aivan parasta mahdollista laatua ottaen huomioon myös pelin helpon vaikeusasteen. Tästä tulee melko yksinkertainen yhtälö: huonot kamat -> henkilö on “vammainen” (lue: retard) -> häntä estetään pääsemästä hankkimaan parempia tavaroita. Uusimman päivityksen mukana tulleen Dungeon Finder -työkalun avulla ryhmien saanti on toisaalta nykyään helpompaa, joskin asennevamma ei siltikään ole mitenkään haihtunut. Esimerkkinä tankit (lue linkin takaa, ei tarkoita panssarivaunuja). Jos tällä on alle 25 000 health pojoa on hän aivan surkea vaikka tosiasiassa se HP määrä on riittävä normaaleihin heroic instansseihin. Asennevamma olettaa, että henkilö on hyvä vasta kun tällä on vähintään 40 000 HP.

Mutta Wow on vain yksi peli monista ja mitä enemmän pelaajia sitä enemmän valittajia ja valitettavaa. Jollakin toisella pelillä saattaa olla aivan samanmoinen kohtalo, olla haukuttavana vaikka tosiasiassa jos unohtaisi pikkuasiat ja keskittyisi siihen hyvään osaan siitä voisi nauttia. Pelit ovat viihdykkeitä. Yrittäkää siis viihtyä älkääkä valittako! Jos se on vaikeusasteesta kiinni niin ehkä on parasta vain lopettaa hissuksiin eikä sanoa mitään sillä tämä peli (Wow siis) ei ole muuttumassa kuin parempaan päin olitte sitten itse mitä mieltä tahansa.

Keepin’ high hopes with the next expansion!

Tavallinen iltapäivä.

Nörtti istuu koneensa eteen ja alkaa kirjoittamaan koodia, ei ole muutakaan tekemistä. Projektit-kansiossa mätänee vajaa kymmenen vanhaa, hyytynyttä projektia, joista kaikki ovat kaatuneet samojen tekosyiden kautta: ei minulla riitä aikaa, en minä juuri nyt, en osaa tehdä graffaa. Kaikki nämä tekosyyt yhdistää yksi, arvattavissa oleva piirre.

Yhtäkkiä, koneellaan istuva hetkellisesti tylsistynyt henkilö saa suurenmoisen peli-idean! Hän alkaa kirjoittamaan pelilleen menua ja dialogia, sekä piirtämään grafiikkaa ja hakemaan netistä ääniä muokattavaksi ja laitettavaksi peliin. Parin tunnin sisällä koodarilla on jo täysverisen pelin ainekset: hyvä idea, simppeli mutta tyydyttävä graafinen anti ja hienoisen suurenmoiset äänet. Hän on ylpeä itsestään: “sainpas jotakin tehtyä”.

Koodari menee jääkaapille, ottaa kolajuoman ja kaataa itselleen lasillisen raikasta, kylmää limsaa. Naamasta näkee, että hänellä on jo suuret suunnitelmat pelin jatko-osalle, ja sen jatko-osalle, jolloin hänelle muodostuu mahtava pelitrilogia. Sen jälkeen hän tekisi tosin vielä pari spin-offia ja lisäosaa, jotta eeppisyydessään maapallon kokoinen tarina saataisiin päätökseen.

Istu takaisin koneen ääreen, pelaa vähän aikaa Command & Conqueria tai GTA:ta, ja jatka projektia, hän ajattelee. Vaan Red Alertin nettipelissä tulikin turpaan ja vieläpä pahasti, eihän tällaista nyt kesken voi jättäää! Koodari pelaa vielä sen kuuluisan “yhden matsin”. No, tällä kerralla hän pääsi kolmen parhaan joukkoon ja on siihen tyytyväinen, mutta voitonmakuun päästyään hän ottaa hyllystä vielä Mercenaries kakkosen. Jos nyt tällä kertaa pääsisi sen vaikean missionin läpi.

Tuntien päästä, päivällisen, lukemattomien pelimatsien ja joidenkin musiikkilevyjen jälkeen koodari katsoo Windowsinsa työpöydälle. Suurenmoinen, eeppinen ja muutenkin täydellinen peliprojektinihan se siinä.

“Jospa laittaisin sen projektit-kansioon, joudan tekemään sitä joskus myöhemminkin.”

Ja kun häneltä kysytään, miten hänellä on niin paljon projekteja samaan aikaan työn alla, hän vastaa melko varmasti: “no, minulla ei oikein ole ikinä aikaa työstää niitä, ja ideoita on vähän kertnyt.”

Oikeammin olisi vain sanoa, mikä on tuo piirre, joka yhdistää kaikkia tekosyitäsi, arvattavissa oleva mutta kenenkään rehellisesti sanomaton piirre.

Laiskuus.

Mooren laki – 486:n mitätöijä.

Mooren laki; koodaajien toiveiden täyttymys, että katastrofi. Täyttymys tulee siitä, että pääsemme käyttämään entistä raskaampia algorimeja, tarkempia liukulukuja, jne. “Katastrofi” tulee sen sijaan tämän varjopuolena: Meidän pitää oppia käyttämään tätä valon nopeudella raksuttavaa rautaa. Monet ovat jo veikanneet mooren lain kuolleen, ja ehkä näin onkin, itse en ole aivan varma. Nykytrendillä laskuteho näytää kasvavan, mutta kuinka? Pentium 4  (aka kiuas: ) raksuttaa 3,8 GHz taajuudella.  Jaa.. nykyään pyöreästi tonnin maksava i7-975 3.33 GHz kellotaajuuden mukaan olisi tehottomampi. :/ Vaan kiitos nerokkaiden aivojemme, kertokaa tuo 3.33 GHz kuudella. :P (x2 lisä x4:ään tulee HyperThreading ominaisuudesta) sillä “prosessori” sisältääkin yhtäkkiä neljä kokonaista ja neljä vailinaista prosessoria.

Koodaajan näkökulmasta tämä on katastrofi: koodaajan juuri 3 vuotta täyttänyt raycaster toimii hitaammin uudella raudalla!?! Miksi, ihmetelään ja kaivetaan vastausta kenties vikaan menneisstä optimoinneista. tyrkätään inline IL/asmia joka suuntaan koodiin ja toivotaan parasta. Tulos: Juuri mitään ei tapahdu, ohjelma nopeutui ehkä 0.01% Turhautuneena (ja kenties raivostuneena, koska kaikki rahat meni) koodaaja yrittää kaataa koneensa jumittamalla sen ikuiseen neliöjuuri looppiin. Hyvin pettyneenä hän ei jaksa painaa edes alt+tab vaan kirjoittaa koodinsa suoraan heksana notepadiin.

save -> click click.

Koodaajan leuka loksahtaa auki kuin avolouhos. Kone ei odotetusti näytäkkään “varattu/busy” kursoria tai edes takertele millään tavoin. Vaikka ohjelma oli asetettu reaaliaikaiseksi. ctrl+shift+esc. nopeasti. nopeasti. Koodaajan naaman rata toistaa kappaleen alkua. Prosessorin käyttö on on “vain” 25% Koodaaja arvelee, että muisti jonkin komennon väärin. Hän lisää läjän, käänteisiä optimointeja ja ei katavaa/kaatuvaa koodia ohjelmaansa ja kokeilee uudestaan. Yhä 25%. Prkl. Syytä miettiettiessä hiiri eksyi painamaan valintaa “Oma kaavio kullekin suoritimelle”.
“Flash” yhtälö hyppää koodaajan mieleen:

vanha_ohjelma + prossu == ei toimi

vanha_ohjelma x N + prossu x N == toimii.

Ohjelman ajaminen useassa säikeessä yhtäaikaa, hallitusti, virheittä on yhtä tuskaa. Syynä on se, että käyttöjärjestelmän ja laiteiston keskeytykset, ja ohjelman omat säikeet sotkevat suoritusta. Kaikki yhtä aikaa, milloin tahansa, missä tahansa. Normaali idiottivarma sijoitus lauseke on aivan toinen moni ytimisellä prosessorilla ja usealla säikeellä. Sijoitushan tapahtuu asmina näin: lue osoitteesta muuttujan_A arvo rekisteriin, kirjoita arvo osoitteeseen jossa muuttuja_B sijaitsee. No mitäs tapahtuu kun säijje keskeytetään tuossa puolessa välin? ja toinen säijje kerkeää kasvattaa muuttuja_A:ta? Bugi. Bugi jota on ************* mäisen vaikea löytää. Pahinta on se, että vastuu on koodaajalla. Esim. muuttuja pitää lukita niin, että vain yksi säijje voi käsitellä sitä kerralla. Tämä on erittäin haastavaa.

Nyt itse asiaan, tulevaisuuden pelit saattavat vaatia uskomattoman määrän laskutehoa. Tämä tarkoittaa tietysti myös uskomatonta määrää säikeitä: Jok’ikinen pikseli saatetaan piirtää 3D näytölle omalla prosessorilaan. Jokaiselle kappaleelle on oma fysiikka prosessori. Jokaiselle pelihahmolle on oma prosessori. Alkaako jo hermostuttaa? Minua ei. :D Päähäni pälkähti nimittäin eräänä päivänä idea: laitteisto huoletii pelin säikeitämisestä yhdessä kääntäjän kanssa. Kuten nyt x86-64 käskykannassa on komento mov tiedon kopiointiin, tulevaisuuden prosessorissa on komennot kokonaisten säikeiden hallintaan. Termi on microthreading. Kaikki, siis aivan kaikki mikä voidaan ajaa yhtäaikaa ajetaan yhtäaikaa, ilman poikkeuksia. Jos ei voida, ajetaan koodinpala esim. tähän paremmin soveltuvalla ytimellä prosesorissa, jolloin suoritus aika on parempi. Kääntäjä tuottaa “säijje koodin” yhtenä ohjelman kääntämisen vaiheena. Koodaajan ei tarvitse tietää mitä konepellin alla on. Kääntäjä hoitaa homman kotiin, kaikki taputtavat ja pelaavat Crysis 21 the MMFPSG joka koodattiin CBv8:lla @ 2109 :)

Peliprojekti

Vaikka monet eivät sitä tiedäkään, olen ollut useasti suunnittelemassa erilaisia pelejä ja peliprojekteja kavereiden kanssa. Valitettavasti vain ne ovat kaatuneet joko liian suuriin suunnitelmiin tai resurssien (ihmiset, taidot, aika) puutteeseen. Olen kuitenkin usein miettinyt ennen varsinaista projektin kaatumista varsin pitkälle miten se kannattaisi toteuttaa. Tai no, tarkemmin kun asiaa ajattelee, niin yksi peliprojekti on tullut vietyä läpi kavereiden kanssa – ei tosin CoolBasicilla.

Usein foorumeita selatessa näkee tiimikyselyitä ja projektin alkuja jotka ovat täysin vailla johtoa. Jäseniä haalitaan sen mukaan kenellä on kiinnostusta ja taidot ovat toissijaisia. Jäseniä saatetaan ottaa myös täysin väärin perustein. Peliprojekteja aloitetaan ilman päämäärää – siis selvät tavoitteet puuttuvat.

Omasta kokemuksesta voin sanoa, että vakavasti otettavaa peliprojektia ei voi aloittaa tai viedä läpi ilman että projektilla on:

  • Johtaja
  • Selkeät tavoitteet
  • Aikataulu
  • Resurssit projektin toteuttamiseen (henkilöt, taidot, aika)

Mikäli projektilla ei ole johtajaa, kaikki menee helposti päättömäksi sähläämiseksi. Voi myös käydä niin, että projektin jäsenet eivät tee mitään, koska he eivät tiedä mitä heidän pitäisi tehdä. Hyvä johtaja on alansa osaava ja taitaa tehtävien jaon.

Tavoitteet auttavat omalta osaltaan selkeyttämään koko prosessia. Mitä ollaan tekemässä? Mikä on lopputulos? Mitä siihen tarvitaan? Näiden pohjalta voidaan arvioida resurssit jotka tarvitaan projektin toteuttamiseen. Kuinka monta ohjelmoijaa? Kauanko niillä menee aikaa? Montako graafikkoa? Kuka johtaa? Jne…

Mutta entä se aikataulu? Miten se arvioidaan?

Oikeassa maailmassa, oikeissa töissä ja oikeissa ohjelmistoyrityksissä ensin projektissa tehdään suunnitelmat siitä, että mitä tehdään ja mikä pitää olla lopputulos. Kun tämä on mietitty riittävän tarkkaan voidaan jakaa eri tehtävät osiin ja arvioida karkeasti niihin kuluva aika. Tämä auttaa sitten arvioimaan sitä, että kuinka monta henkilöä ja millaisia taitoja heiltä edellytetään. Samalla voidaan arvioida se, että milloin mikäkin osa on valmis ja tämä nk. deadline voidaan antaa tehtävästä vastaavalle henkilölle jolloin kyseinen henkilö tietää milloin tehtävä pitää olla tehtynä.

Kun on suunniteltu se, että mitä tehdään siirrytään suunnittelemaan samat asiat uudelleen – mutta tällä kertaa mietitäänkin, että miten ne tehdään. Jos et tiedä mitä sinun pitäisi tehdä, et voi myöskään suunnitella että miten sen tekisit. Eikö vain? Suunniteltaessa kirjataan ylös erilaiset ratkaisut yms. tekniset yksityiskohdat riittävällä tarkkuudella.

Kun kaikille on selvää, että mitä tehdään ja miten tehdään, voidaan siirtyä toteutusvaiheeseen. Itse toteutuksen pitäisi olla paljon helpompaa, kun kaikilla on selkeät tehtävät ja aikataulu. Lisäksi, koska yksityiskohdat on mietitty aikaisemmin voidaan keskittyä toteuttamaan aikaisemmin suunniteltua kokonaisuutta.

Toteutuksen jälkeen tulee testaus. Testataan, että kaikki suunnitellut ominaisuudet ovat mukana ja ne toimivat siten kuin pitääkin. Tässä vaiheessa apuna ovat ennen toteutusta tehdyt dokumentit ja testaukset tehdään niiden mukaan. Toki testauksetkin pitää ensin suunnitella, että operaatio voidaan viedä loppuun järjestäytyneesti.

Prosessin lopputuloksena on (toivottavasti) halutun kaltainen tuote :)

Mutta tämähän kuulostaa tylsältä. Onko näin pakko tehdä?

Ei, ei todellakaan, mutta kuinka moni CB-projekti on onnistunut verrattuna siihen, että kuinka moni on epäonnistunut. Tai kuinka monelle on naureskeltu jo alusta asti, koska homma on ollut täysin hakuammuntaa? Selkeä johto ja mahdollisimman hyvä suunnittelu ennen hutkimista on avain onnistumiseen. En toki väitä, että peliprojektia ei voisi viedä läpi ilman minkäänlaista dokumentaatiota ja suunnitelmia tai aikataulua, mutta mitä suuremmiksi kokonaisuudet menevät, sitä vaikeampi niitä on hallita. Suunnittelun avulla vältetään turhaa uudelleentekemistä ja siten nopeutetaan prosessia. Tosin, lähes kaikissa projekteissa joissa olen ollut mukana on ilmennyt toteutusvaiheessa jotain, joka pakottaa suunnitteleman osan uudelleen, koska sitä ei voida toteuttaakaan niin kuin alkuperin on suunniteltu.

Monissa pienemmissä projekteissa olen havainnut, että paras mahdollinen ryhmän koko on yksi henkilö. Kun ei tarvitse neuvotella asioista muiden kanssa ja on vastuussa vain itselleen voi asiat saada paljon nopeammin valmiiksi. Toisaalta silloin ei ole ketään antamassa palautetta ja huomauttamassa virheistä.

Tämä artikkeli oli vain kevyt (todella kevyt) pintaraapaisu ohjelmistprojektin / peliprojektin läpivientiin. Tässä artikkelissa en ottanut mitään läpivientimallia jonka kannalta oisin asian kertonut, mutta pääpiirteet kaikissa niissä on sama. Mikäli asia kiinnostaa enemmänkin kannattaa tutustua termeihin kuten ketterä ohjelmistokehitys, Scrum, Ohjelmistotuotanto, versionhallinta (subversion) sekä erilaiset prosessimallit. Aiheista löytyy paljon kirjallisuutta ja mikäli kielitaito kestää löytyy englanniksi enemmän luettavaa.

Mutta muistakaa, että kaiken ei pidä olla järjestäytynyttä ja organisoitua. Itsekin teen pieniä projekteja ihan vain huvin vuoksi ja ilman mitään suurempia suunnitelmia. Niistä vain tahtoo tulla niitä ikuisuusprojekteja :)

Mitä mieltä? Oliko tämä artikkeli hyödyksi? Herättikö ajatuksia? Korjattavaa? Kommentoitavaa? Otan palautetta mielelläni vastaaan :)

Optimointi

Kun Ruuttu kirjoitti ohjelmointipakkomielteestä löysin itseni tekstistä. Luultavasti jokaisella, joka on ohjelmoinut enemmän kuin vuoden, tulee ajateltua optimointia kielestä riippumatta. Jos kieli on tehokkaampi asiaa ei tule ajateltua niin paljon, mutta silti jonkin verran. CoolBasicilla tai muulla vähänkin hitaammalla kielellä ohjelmoidessa optimointi on olennainen osa ohjelmointia.

Kun ohjelmaa alkaa optimoimaan rankalla kädellä koodista tulee yleensä vaikeammin luettavaa, mutta sehän ei haittaa, kunhan ohjelman suoritusaika lyhenee 3. millisekunnilla. Itse olen ennenkin yrittänyt optimoida paljon, mutta CoolBasicin tavukoodia tutkittuani olen kiinnittänyt entistä enemmän huomiota optimointiin. Muuttujaan luvun sijoitus vie kauheat 3 kappaletta komentoja tavukoodissa. Ensiksi laitetaan muuttujan osoite pinoon, sitten sijoitettava arvo ja lopuksi sijoitusoperaattori. Toisin sanoen, välimuuttujaa ei kannata käyttää jos ei se ole aivan pakollista.

Kunhan optimoinnilla on säästetty aikaa sekunti aletaan miettimään millä ylimääräiset millisekunnit saataisiin vielä pois. Siinä vaiheessa silmään sattuu For -looppi jossa sama funktio suoritetaan samoilla parametreilla kahteen kertaan. Asia on aivan kauhea mutta onneksi siihenkin on olemassa ratkaisu, laitetaan funktion paluuarvo muuttujaan, jota voidaan sitten käyttää molemmissa kohdissa. Tälläkin voi säästää jopa (parametrien määrä * 2 – 3) komentoa tavukoodissa, millä hyvällä tuurilla saadaan pois 10 mikrosekuntia. Jos aletaan ajatella suuremmalla mittakaavalla 100000 kertaa käytäessä tällä säästettäisiin jo kokonainen sekunti ohjelmassa.

Kun joskus käänsin FreeBasicille kirjoittamani GetWord-funktion CoolBasicille huomasin että siinä oli pientä optimoinnin varaa. Alussa koodi näytti tältä:

Function GetWord2(a As String, b As Integer, c As String)
Dim aa As String
aa = a
For i As Integer = 1 To (b-1)
If Instr(aa, c) Then
aa = Mid(aa, Instr(aa,c)+Len(c))
EndIf
Next i
If Instr(aa,c) Then
Return Mid(aa, 1, Instr(aa,c)-1)
Else
Return Mid(aa, 1)
EndIf
End Function

Heti silmään pistää uusi muuttuja ‘aa’, johon alkuperäinen merkkijono sijoitetaan. Poistamalla kyseinen kikkailu säästetään kokonaiset 3 komentoa tavukoodissa. Hieno alku, eikö?

Katsotaanpa koodia uudelleen ja rivillä 6 huomaamme Len() -funktion kutsumisen. Tässä tapauksessa Len kutsutaan niin monta kertaa kuin sanoja ohitetaan. Koska ‘c’-merkkijonon pituus ei muutu voidaan pituus huoletta laittaa muuttujaan ja korvata Len() muuttujalla. Tämäkin operaatio säästää huomattavat (kierrosten_määrä – 4) operaatiota. Kymmenellä kierroksella säästetään jo huomattavat 6 operaatiota.

Rivejä 5 ja 6 katsottaessa huomaamme, että molemmilla kutsutaan samaa InStr -operaatiota. Jos vielä tämäkin laitetaan muuttujaan säästetään jälleen (kierrokset * 2 – 5) operaatiota. Kymmenellä kierroksella tulisi jopa 15 operaatiota. Hienoa.

Rivillä 4 näkyy olevan for-silmukan alku, jossa on mukana laskuoperaatio. Operaatio on vieläpä sama joka kerta, hyi hyi. Jos operaatio ‘For i As Integer = 1 To (b-1)’ korvataan ‘For i As Integer = 2 To b’ säästetään 2 operaatiota per kierros.

Lopulta koodi näyttää tällaiselta. Koodista tuli ehkä hieman vaikeaselkoisempaa, mutta säästimme muutaman millisekunnin. Itselläni optimoitu versio oli n. 1/3 nopeampi kuin alkuperäinen versio, eli touhu kannatti. Tavukoodissa säästettiin jopa 4 kokonaista komentoa, eli exen koko on jopa 20 tavua pienempi. Mission Accomplished!

Function GetWord2(a As String, b As Integer, c As String)
l = Len(c) // Otetaan pituus muuttujaan optimoinniksi
For i As Integer = 2 To b // Käydään läpi kaikki ei-halutut sanat
q = InStr(a, c) // Katsotaan löytyykö erotinta
If q Then // Löytyi
a = Mid(a, q + l) // Otetaan alkuosa pois erottimeen asti
EndIf
Next i
q = InStr(a, c) // Katsotaan vielä löytyykö erotinta
If q Then // Jos löytyi
Return Mid(a, 1, q - 1) // Palautetaan tekstiä seuraavaan erottimeen asti
Else // Ei löytynyt
Return Mid(a, 1) // Palautetaan loppuosa
EndIf
EndFunction

Projekti X – 35.4865% valmis

Idea pulpahtaa yhden miehen pelitalon johtohahmon aivokuoreen. Se on loistava. Pienen suunnittelutuokion jälkeen ryhtyy pelitalon ainoa koodari kasaamaan tämän mahti-idean ympärille pelin. Kymmenien työtuntien, muutaman unettoman yön ja lukuisien virhekorjauksien jälkeen peli alkaa vihdoin olla julkaisukunnossa. Alunperin suunnitellut ominaisuudet ovat valmiit ja kokonaisuus pysyy kasassa juuri ja juuri.

Julkaisu tapahtuu pienellä peliaiheisella foorumilla, mutta kas kummaa idea ei olekaan muiden mielestä aivan niin loistava kuin pelin julkaisija oli itse ajatellut. Mahdollisesti samasta ideasta on jo aiemmin nähty parempi toteutus, ehkä graafinen ulosanti ei ole tarpeeksi hyvää, peli on vain liian buginen ja/tai epätasapainossa, jotta sitä olisi miellyttävää pelata. Kuluttajat vaativat  lisää ominaisuuksia ja parempaa toimivuutta.

Ovatko kuluttajat koskaan täysin tyytyväisiä tuotteeseen, vaikka se lunastaisikin kaikki kehittäjien antamat lupaukset?

Kehitetäänkö projektia kuluttajien vai tekijöiden ehdoilla?

Milloin projekti on valmis?