Takaisin piirrustuspöydälle: Winterheart

Peliarvostelujen lisäksi päätin aloittaa toisenlaisen kirjoitussarjan, jossa pohdin elämää pelikehittäjänä ja siihen liittyviä ongelmia. Pari ensimmäistä aiheeseen liittyvää kirjoitusta uhraan valoittaakseni ajatuksiani kolmen suurimman, ja vielä keskeneräisen, projektini taustalla. Tämän kertainen kirjoitus käsittelee, kuten otsikostakin voi päätellä, ensimmäistä suunnittelemaani Touhou fanipeliä: Winterheartia.

Aluksi hieman taustaa.

Tutustuin Touhou sarjaan ja sen rikkaaseen fanikulttuurin hieman ennen Mountain of Faithin julkaisua. Kuten arvata saattaa jäin miltei heti koukkuun sen tarttuviin kappaleisiin ja persoonalliseen hahmotaiteeseen; tässä vaiheessa tosin en vielä kuvitellut tekeväni omia shmuppejani saati sitten Touhou aiheisia fanipelejä.

Vasta pelattuani Concealed the Conclusionia (yksi loistavimmista fanipeleistä, jota suosittelen lämpimästi kaikille) sain lopullisen kipinän yrittää tehdä oma shmuppini, joka myöhemmin tunnettaisiin nimellä ”Winterheart”…


Winterheartin kehitys alkoi siinä vuoden 2009 paikkeilla ja sen piti alunperin olla täysin itsenäinen peli, joka sijoittuisi hieman Gensokyota muistuttavaan tasku-ulottuvuuteen… Tämän takia kirjoitin jopa pitkähkön esseen selittämään Hanayukiksi ristimäni paikan eriytymistä meidän maailmastamme, sen yhteiskunnallisia rakenteita sekä Ikuisen talven kirousta.

Hanayukin ensimmäinen versio

Valitettavasti pelin juonta kirjoittaessani törmäsin ikävään ongelmaan: Vaikka juonellisesti pelin lopetus ja extra-taso toimivatkin nykyisessä asetelmassa, alkuosaa oli vaikea sovittaa kokonaisuuteen…

Käytännössä juoni on seuraavanlainen:
Päätarinassa pelaaja matkaisi muuttuvan metsän läpi Kuroyamaan ja sieltä Yukihimen pyhätölle takomaan järkeä seonneeseen papittareen: Extrassa puolestaan kuljettaisiin pyhätöltä lähtevää salareittiä pitkin läpi vuoriston kirsikkapuumetsään, jossa taisteltaisiin Hanayukin jumalatarta vastaan.

Ongelmana tässä juonessa on se, että päähenkilö(i)lle on vaikea keksiä motivaatiota yht’äkkiä innostua läksyttämään papitarta saati sitten jumalatarta.

Kirouksen luonteen huomioiden kaikki paikalliset olivat eläneet samaa talvea ainakin viimeiset tuhat vuotta (erään versioni mukaan aika kulki Hanayukissa paljon hitaampaa: yksi kuukausi meidän maailmassamme vastasi tuhatta vuotta heidän maailmassaan), joten todennäköisesti he olisivat jo turtuneet koko asiaan eli heillä ei olisi mielenkiintoa korjata tilannetta.

Tarvittaisiin siis ulkupuolinen tekijä mutta tämä puolestaan luo uusia ongelmia: Mistä tämä ulkupuolinen oikein tulee, miksi hän haluaa pysäyttää ikuisen talven ja millä voimalla.

Jos kyseessä olisi ollut RPG, niin tässä ei oikeastaan olisi mitään ongelmaa koska tarinan avaamiselle riittäisi paljon enemmän aikaa mutta shmupissa koko hoito piti tiivistää 6+1:een ytimekkääseen dialogiin.

Laiskuuteni ansiosta keksin ”täydellisen” tavan kiertää nämä ongelmat muuttamalla Winterheartin fanipeliksi: kyseessähän on juuri sellainen ongelma, jota Reimu ja kumppanit ryhtyisivät ratkomaan. Tätä varten keksin peliin niin kliseisen alustuksen, että eräs venäläinen Touhou-foorumi epäili Winterheartin olevan PCB:n uudelleenkerronta: Kevään tulo on viivästynyt, joten sankarimme lähtevät selvittämään missä vika piilee.


Saatuani tarinan kasaan aloin miettiä millä tämän mestariteoksen voisi toteuttaa…

Olin aikaisemmin tehnyt paljon pikkupelejä GameMakerillä, mutta se ei oikein soveltunut tällaiseen projektiin. Onneksi olin juuri opetellut uuden yksinkertaisen ohjelmointikielien, jota mainostettiin 2D-pelien kehitykseen soveltuvana: CoolBasicin! Myöhemmin tajusin tehneeni väärän valinnan, sillä CoolBasic vaati hirveästi kikkailua yksinkertaisimpienkin pelimekaniikkojen toteuttamiseen ja silloinkin lopputulos oli välttävä.

CoolBasicilla yritin kahdesti saada Winterheartin tehtyä ennen kuin päätin vaihtaa oikeaan ohjelmointikieleen (näiden kahden version välissä tein CoolBasicilla myös kaksi versiota Voile Invadersista testatakseni Winterheartissa tarvitsemiani ominaisuuksia, mutta Voile Invadersista enemmän ehkä toisessa kirjoituksessa).

Näistä versiosta ensimmäinen on mielenkiintoisin, sillä kaikista Winterheartin ilmentymistä se on lähimpänä Touhou-pelejä (valikkorakenteeltaan ja introltaan siis); tämän lisäksi se sisälsi useita ominaisuuksia, jotka matkan varrella karsiutuivat pois kuten resoluution valinta ja Music Room…

Kuten kuvasta näkyy Comic Sans oli ensimmäisen version kantava voima

Toinen merkittävä asia, joka tippui ensimmäisen version jälkeen pois oli Yuyuko… Alun perin olin suunnitellut Reimun, Marisan ja Sakuyan rinnalle Yuyukon pelattavaksi hahmoksi ja kirjoitin jopa kaiken tarvittavan dialogin häntä varten. Valitettavasti tarinan kannalta Yuyuko olisi ollut varsinainen outolintu ja IN:n innoittamat ammustyypit tuntuivat tylsältä, joten päätin tiputtaa hänet pois hahmojoukosta (näin sivuhuomautuksena ammustyyppien sijaan olin alunperin suunnitellut SA-tyylistä paritussysteemiä, mutta tiputin sen pois jo ennen tätä ensimmäistä versiota koska pidin ammustyypeistä enemmän).

Huomaa Concealed the Conclusionista varastettu Sakuya

Tätä ensimmäistä versiota tehdessäni aloin viimein käsittää CoolBasicin rajallisuuden ja harkitsin vakavasti sen hylkäämistä, mutta CoolBasic-foorumilaisten tuella päätin vielä kerran yrittää Winterheartin tekemistä kyseisellä kielellä (loppuen lopuksi koodini ja käyttämäni grafiikka ei ollut täysin optimoitua, joten uskoin voivani ratkaista ongelmani suorituskyvyn kanssa tekemällä asiat hieman paremmin)…

Suorituskyvyllisistä syistä tämä toinen versio oli paljon yksinkertaistetumpi ja sisälsi ensimmäistä kertaa pitkään seuraavia peliprojektejani kiusanneen oivalluksen: Varsinaisen pelin aikana näytettävää ruutua voidaan hyödyntää myös pelivalikoissa, jolloin niin sanotulla pelialueelle näytetään valikkoon liittyvää grafiikkaa. Samoista syistä otin tässä versiossa myös ensimmäistä kertaa käyttöön tilekartat.

kuvassa näkyy myös eräs ominaisuus, mikä oli käytössä vain tässä kakkosversiossa: ammustyyppiä valitessa pelaajalle näytetään kyseisen ammustyypin tehokkain muoto

Tässä versiossa esiteltiin myös ”Snow Bonus” -systeemi, mikä myös jäi tämä version erikoisuudeksi:
Pelaajalla oli lumibonuksia varten oma palkki, joka kasvoi keräämällä vihollisten satunnaisesti pudottamia erikoisesineitä. Kun palkki tuli täyteen pelaajasta tuli hetkeksi aikaa kuolematon ja vihollisten tiputtamien piste-esineiden arvo kasvoi (toisin sanoen tämä oli eräänlainen versio PCB:n Supernatural Borderista).

Harmillista kyllä en vieläkään pystynyt kiertämään CoolBasicin raja-aitoja, joten päätin suosiolla luovuttaa ja laittaa Winterheartin jäähylle…


Pari vuotta myöhemmin (n. 2011) päätin yrittää jälleen Winterheartin tekemistä uudella tekniikalla. HAMK:ssa olin tutustunut C#-ohjelmointiin ja koska sillekin oli olemassa minulle jo ennalta tuttu SDL-mediakirjasto (SdlDotNet), tuumin josko nyt saisin viimeisteltyä fanipelini… Tosin ennen kuin aloitin puuhastelun Winterheartilla, tein kokeeksi uuden version Voile Invadersista sekä kaksi Perfect Youmu -peliä (niistäkin ehkä myöhemmissä kirjoituksissa).

Jälleen näin jälkiviisaana C# + XNA olisi ehkä ollut se parempi valinta, sillä tälläkin kertaa törmäsin rajoituksiin teknologian suhteen: Johtuen sen hetkisestä SDL versiosta, kuten CoolBasicissakin, reaaliaikaiset graafiset operaatiot eivät olleet mahdollisia (tai olivathan ne, mutta framerate laski lähelle nollaa). Käytännössä tämä tarkoitti sitä, että esimerkiksi jos luoteja aikoi näyttää useammassa kuin yhdessä kulmassa, piti niille erikseen piirtää käännetyt kulmat joko käsin spritejä tehdessä tai koodillisesti pelin latautuessa.

Joku minua edistyneempi ohjelmoija voisi tähän sanoa, että olisihan voinut kiertää tämän ongelman käyttämällä OpenGL:a tai vastaavaa graafiseen hienosteluun… Valitettavasti kavahdin OpenGL:n käyttäjäystävällistä syntaksia siinä määrin, että päätin pysytellä peruskirjastoissa.

Tästä haitasta huolimatta päätin jatkaa Winterheartin tekoa C#:lla, koska kyseisen kielen tarjomat muut edut saivat minut ylenkatsomaan tämän, myöhemmin ratkaisevaksi osoittautuvan, ongelman. Kehitys siis jatkui ja etenin jopa niin pitkälle, että aloin piirrellä lopetuksiin tarvittavia kuvia:

Reimu, good end… Kaavailin Winterheartiin myös EoSD:n tyyliset huonot lopetukset

Viimeistelin myös pelattavien hahmojen ja vastustajien kuvakkeet dialogia varten:

Ei… Se ei ole Akyuu siinä keskellä…

Alunperin ajatuksena oli käyttää Windows-ajalle tyypillisiä kokovartalopotretteja mutta koska en oikein luottanut piirtäjänlahjoihini, päädyin lopulta PC-98:sta tuttuun tekstilaatikkoratkaisuun.

Dialogin näyttämistä pohtiessani harkitsin myös Voilessa kokeilemaani ideaa, jossa pomotaistelut olisivat oma tasonsa ja keskustelut käytäisiin sitä edeltävässä introssa… Tämän ajatuksen tosin hylkäsin heti kättelyssä, sillä se olisi tehnyt tasojen etenemisestä liian töksähtelevää.

Edistyksestä huolimatta jouduin jälleen nostamaan kädet ilmaan sillä aikaisemmin havaitsemani pulma osoittautui kehityksen kannalta kohtalokkaaksi: Vaikka pystyinkin kiertämään joitakin graafisia rajoituksia tekemällä hieman enemmän manuaalista työtä, suorituskykyongelmaa en siltikään pystynyt ratkaisemaan. Mitä enemmän ruudulle piirtyi asioita (vihollisia, luoteja ja esineitä), sitä todennäköisemmin framerate tippui huolestuttavalla tavalla.


Tämän jälkeen kestikin sitten muutama vuosi ennen kuin aloin pohtia Winterheartia uudelleen.

Siinä vuoden 2014 paikkeille tutustuin uuteen mediakirjastoon, SFML:iin, joka tuntui pelikehityksen kannalta erittäin lupaavalta sillä se käytti rautakiihdytystä graafisiin operaatioihin. SFML:n avulla pystyin viimein tekemään asioita, joita puhtaalla SDL:llä ei ei olisi ollut mahdollista tehdä.

Ensin tosin keskityin parantamaan Winterheartin ulkoista ilmettä, sillä suurin osa tekemistäni grafiikoista joko näytti liian rumalta näin jälkeen päin tarkasteltuna tai oli kadonnut vanhan kannettavani sekä useiden ulkoisten kiintolevyjen syövereihin (tätä kirjoitusta varten tosin kahlasin kaikki tietovarastoni läpi ja onnistuin paikallistamaan etsimieni tiedostojen lisäksi tietoa projekteista, jotka olin jo kauan sitten unohtanut).

1. CoolBasic v1: Graze tunnettiin Braverynä, eikä piste-esineitä ollut mukana
2. CoolBasic v2: Snow bonus palkkina vasemmalla, piste-esineitä ei näytetty ja Graze puuttui kokonaan
3. C#/SDL: Käyttöliittymä saanut enemmän vaikutteita moderneista Touhou peleistä ja FPS näytetiin ruutua ympäröivänä reunuksena. Snow ja piste-esineet yhdistettiin yhdeksi kokonaisuudeksi.
4. C++/SFML: Luonnos uudesta käyttöliittymästä

Kuten kuvasta voi nähdä, mitä pidemmälle Winterheartin kehitys on edennyt, sitä enemmän ulkoasullisesti se on saanut vaikutteita moderneista Touhou peleistä (myös pelimekaniikatkin ovat lähentyneet ZUN:n käyttämiä, mutta en silti ottaisi käyttöön elämän / pommin puolikkaiden keräilyä )… Huomattavaa tässä on se, että alunperin karsastin voimamittarin korvaamista desimaaliluvuilla mutta olen vähitellen tottunut tähän uuteen tapaa ilmaista pelaajan voimataso: toisaalta pelin kuluessa harvoin siihen edes kiinnittää huomiota…

Myös keijut kokivat pienen muodonmuutoksen:

Ylärivillä keijun moderni ilmentymä ja alarivillä vanhempi versio

Uusissa keijuissa panostin enemmän liikkeeseen sillä aikaisemmat näyttivät kamalan staattisilta (johtunee hameen helmasta); lisäksi otin käyttöön alfa-kanavan saadakseni esimerkiksi siivet läpinäkyviksi (tämä ei olisi CoolBasicilla onnistunut).

Keijuista tulikin mieleeni, että olen aina suosinut värikoodattuja vihollisia sillä se auttaa pelaajaa arvioimaan mitä seuraavaksi tapahtuu… Winterheartia kehittäessäni olin alusta asti tehnyt jokaiselle perusviholliselle neljä eri väriversiota (valkoinen, punainen, vihreä ja sininen), joista jokaisella suunnittelin oma ammustyyppinsä sekä esineen tiputettavaksi. Loogisesti punaiset viholliset tiputtivat voimaa, siniset pisteitä, vihreät erikoisesineitä (esim. lunta ja pommeja) ja valkoiset satunnaisesti kaikkea.

Keijujen lisäksi pelattavat hahmot saivat minimaalisen kasvojenkohotuksen:

Vasemmalla alkuperäiset hahmot, oikealla uudemmat

Alkuperäiset spritet olivat hieman liian suuria verrattuna muuhun ympäristöön ja ne kärsivät samasta staattisuudesta kuin keijutkin; lisäksi näitä vanhempia spritejä katsoessa minulle tulee sellainen tunne kuin sankarittarimme yrittäisivät lentää kasvot maata kohden.


Saatuani Winterheartin graafisen ulkoasun hiottua kohdallaan, päätin taas jättää projektin kesken: tällä kertaa kirjoittamatta riviäkään koodia…

Syitä tähän oli oikeastaan monia, mutta päällimmäisenä mielenkiinnon lopahtaminen: Tässä vaiheessa idealistalle oli kertynyt paljon mielenkiintoisempia projekteja kuten Imperishable Odyssey (Labyrinth of Touhousta vaikutteita saanut Etrian Odyssey -klooni), The Great Gensou Card Tournament (Touhou Pocket Warsista ideoitu korttipeli, missä Aya yrittää metsästää kadonneita valokuviaan) ja Disappearing Scarlet Fantasy (Sakuyan ja Koakuman tähdittämä shmuppi), mitkä halusin viimeistellä ensin.

Asiaa ei auttanut yhtään myös sekään, että olin juuri päässyt töihin oikeaan ohjelmistofirmaan sovelluskehittäjäksi joten päästyäni kotiin siinä viiden kuuden maissa ohjelmoinnin jatkaminen vapaa-ajalla ei oikein kiinnostanut.

Ja niin siinä sitten kävi, että Winterheart jälleen kerran joutui jäähylle.


TL;DR;
Tässä siis lyhykäisyyden Winterheartin kehityshistoria mahdollisimman ympäripyöreästi kuvattuna …

Tätä kirjoitusta laatiessani aloin jälleen pohtia projektin viimeistelyä sillä vaikka tarina onkin hieman ennalta arvattava ja pelimekaniikat eivät ole kekseliäisyydellä pilattu, niin tästä voisi saada kelpo shmupin aikaiseksi. Eri asia sitten on millä aikataululla saan sen valmiiksi, sillä jos vanhat merkit pitävät paikkansa niin ensi kesänä minulla on jo parisen uutta projektia mielessäni, mitkä nään Winterheartia mielekkäämmäksi toteuttaa.

No, ehkä sitten vuonna 2019 kun tämän kyseisen projektin aloittamisesta on kulunut se kymmenen vuotta.

Kategoria(t): Touhou Avainsana(t): , , . Lisää kestolinkki kirjanmerkkeihisi.

2 vastausta kohteessa Takaisin piirrustuspöydälle: Winterheart

  1. zertap sanoo:

    Miksei mulle tuu ikinä mitään motivaatiota kirjoittaa pelei.
    Random skriptoja sillon tällön. Käytetyin skripta varmaan se mikä poimii pornokokoelmastani random videon :D

    • Tsalop sanoo:

      Siinähän sulla olisi jo aihio valmiina… Eikös tällaiset kestävyyspelit ole suosittuja?

Vastaa käyttäjälle zertap Peruuta vastaus

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

Voit käyttää näitä HTML-tageja ja attribuutteja: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>