Tässä on nyt yli vuoden päivät tätä peliä väännetty. Aina ei ole jaksanut, ja intissäkin on jo yli puoli vuotta lusittu, mutta sainpas lopulta jotain julkaisukelpoista valmiiksi.
Kyseessä on ensimmäinen pelini, joka käyttää OpenGL:ää ja ensimmäinen 3D-pelini. Pelin idea on varsin yksinkertainen. Tarkoituksena on ohjata rotkoon tippunutta sankaria niin, että hän ei osu esteisiin. Luolastot ja esteet ovat satunnaisesti generoituja, joten jokainen pelikerta on erilainen.
Olen tehnyt peliin muutamia grafiikkaefektejä, kuten bloomin ja motion blurrin. Efektit eivät käytä varjostimia vaan puhdasta OpenGL 1.1:tä, minkä takia ne ovat melko raskaita ja tarvitsevat tehoja näytönohjaimelta. Peli ei välttämättä ole mitään hauskinta ajanvietettä, vaan se onkin ollut lähinnä oma testialusta kolmiulotteiselle grafiikalle sun muulle ihme säätämiselle.
Nykyisen version pitäisi jäädä viimeiseksi, jollen mitään bugifixejä enää tee.
Hienoa nähdä taas (kuten edellisessäkin projektissasi), että toimivaa jälkeä syntyy. Nykyversio toimii myös Winellä ongelmitta.
Vaikkei koodia olekaan nähtävillä, alkudemo paljastaa, että taidat käyttää FPS:n rajoittamiseen väärää tekniikkaa: matka käynnistyksestä valikkoon kesti i965-sarjan GPU:lla melko kauan ja animaatiot etenivät hitaasti. Yleensähän suotavampaa on laittaa nopeus pysymään samana ja jättää vain välivaiheita piirtämättä. (Sama vaiva näkyy valikossakin, peliä en uskaltanut näillä asetuksilla edes testata.)
Valikosta sainkin sitten asetukset matalimmiksi, ja homma alkoi luistaa. Voisit mielellään madaltaa tasoja automaattisesti (ainakin ensimmäisellä ajokerralla), jos alkudemon ensimmäiset framet menevät liian hitaasti. Qualityn vaikutus nopeuteen hieman hämmästyttää, miten olet toteuttanut sen? Apply-nappi vastaa hieman hitaasti, joten jokin Please wait -teksti voisi olla tyylikäs.
Sellaisen bugin havaitsin, että välillä tekstuurit maagisesti vaihtavat paikkaa, kun peli jää taustalle ja teen hetken muuta. Esimerkiksi päävalikkoon ilmestyivät Credits-valikon tekstit (kuva) ja New Game -valikon sisältö pyörähti yhden pieleen (Back ylimmäksi). Välillä tekstit katosivat kokonaankin. Toiminnot ja kehystykset pysyivät oikeina ja Settings-valikossa käyminen korjasi tekstuurit. En toki voi mennä takuuseen, että vika olisi pelissäsi eikä esimerkiksi Winessä tai jopa ajuripuolella, mutta en ole huomannut vastaavia vikoja muissa peleissä.
Ukko kaipaisi jotain varjostusta kääntyillessään. Palkitkin olisivat hienoja varjostettuina. Lisäksi ihmettelin palkkien pikselöityneitä reunoja (kuva). Onko tämä nyt sen matalan grafiikka-asetuksen seuraus? Onko jokin syy piirtää palkit yksittäisinä tekstuureina eikä samalla tekniikalla (ehkä jopa 3D:nä) kuin kuilun reunat?
Rankasta kritiikistä huolimatta peli vaikuttaa varsin hyvältä.
Hauskana kehitysideana heittäisin mukaan eri "kentät" (Level).
Eli jokaisella kentällä on satunnaislukuja varten oma alkusuola (esim. kentän järjestysluku), jonka seurauksena jokaisella pelikerralla ensimmäinen kenttä olisi aina sama, samoin toinen ja siitä etiäpäin.
Seuraavaan kenttään pääsisi vain jos olisi pysynyt hengissä tietyn etäisyyden, joka kasvaisi matemaattisella kaavalla kentän järjestysluvun mukaan.
Minulla ainakin korkeimmilla grafiikka-asetuksilla reunat olivat pikselöityneitä.
Ihan hyvin tämä kumminkin toimi, vaikka etäisyyttä oli välillä hankala hahmottaa aika tasaisen värityksen takia.
Hyvin pyöri korkeimmilla, mutt etäisyyksien hahmottaminen oli hieman vaikeaa, ku ei ollu varjoja jne...
Metabolix kirjoitti:
Vaikkei koodia olekaan nähtävillä, alkudemo paljastaa, että taidat käyttää FPS:n rajoittamiseen väärää tekniikkaa: matka käynnistyksestä valikkoon kesti i965-sarjan GPU:lla melko kauan ja animaatiot etenivät hitaasti. Yleensähän suotavampaa on laittaa nopeus pysymään samana ja jättää vain välivaiheita piirtämättä. (Sama vaiva näkyy valikossakin, peliä en uskaltanut näillä asetuksilla edes testata.)
Kun pelin käynnistää, se piirtää aluksi joka framen ja tarkistaa noin sekuntin välein, josko pitäisi jättää joitakin frameja piirtämättä, ja vähentää piirrettyjä frameja portaittain. Tekniikka on tosiaan vähän heikko ja olen jo seuraavaan peliprojektiin onnistunut tekemään paremman systeemin, joka reagoi nopeammin ja toimii portaattomammin.
Metabolix kirjoitti:
Qualityn vaikutus nopeuteen hieman hämmästyttää, miten olet toteuttanut sen?
Pelin grafiikka on todella yksinkertaista, ja sen pitäisi pyöriä ihan hyvin melkein joka koneella. Grafiikassa on myös erittäin vähän karsittavaa pienemmille laatuasetuksille. Tämän takia "Very high" asetuskin on nopea eikä nopeuseroa "Low" asetukseen voi huomata helposti. Sen sijaan bloom-asetus on erittäin raskas ja sen ottaminen pois päältä vaikuttaa nopeuteen todella paljon.
Metabolix kirjoitti:
Sellaisen bugin havaitsin, että välillä tekstuurit maagisesti vaihtavat paikkaa, kun peli jää taustalle ja teen hetken muuta. Esimerkiksi päävalikkoon ilmestyivät Credits-valikon tekstit (kuva) ja New Game -valikon sisältö pyörähti yhden pieleen (Back ylimmäksi).
On tosiaan kummallinen vika. Peli lataa textuurit näytönohjaimen muistiin OpenGL:n toimesta, jonka jälkeen ne poistetaan tietokoneen muistista, eikä niihin sen jälkeen enää kosketa. Voi olla, että joku toinen ohjelma sekoittaa näytönohjaimen muistia.
Metabolix kirjoitti:
Lisäksi ihmettelin palkkien pikselöityneitä reunoja (kuva). Onko tämä nyt sen matalan grafiikka-asetuksen seuraus?
Johtuu juurikin matalasta grafiikka-asetuksesta. Korkeampi asetus generoi tarkemmat textuurit ja käyttää parempaa filteröintiä.
Metabolix kirjoitti:
Onko jokin syy piirtää palkit yksittäisinä tekstuureina eikä samalla tekniikalla (ehkä jopa 3D:nä) kuin kuilun reunat?
No, pelissä ei oikeastaan ole minkäänlaista pelimoottoria, vaan tämä on itseni vääntämä 3D-kikkare, ja sen takia varsin rajoittunut. Pelissä ei itse asiassa ole edes 3D-törmäysmoottoria, vaan ukon törmääminen esteeseen tarkastetaan tutkimalla esteen textuuria ja luolan seiniin tutkimalla ukon etäisyyttä luolan keskipisteestä.
Anaatti kirjoitti:
Kun pelin käynnistää, se piirtää aluksi joka framen ja tarkistaa noin sekuntin välein, josko pitäisi jättää joitakin frameja piirtämättä, ja vähentää piirrettyjä frameja portaittain. Tekniikka on tosiaan vähän heikko ja olen jo seuraavaan peliprojektiin onnistunut tekemään paremman systeemin, joka reagoi nopeammin ja toimii portaattomammin.
Eikös perinteinen delta timing toteutus toimisi?
Itse yleensä yritän lukita päivitynopeuden johonkin tiettyyn ja ottamalla aika, kuinka kauan edellisen ja nykyisen framen välillä oikeasti meni, saadaan kerroin: dt. Kun tuon delta-ajan tallentaa sekunteina, niin sitä voidaan suoraan käyttää tapahtumien ajastukseen yksinkertaisen laskurin avulla.
Esimerkiksi, jos haluat kasvattaa x-koordinaattia 8 pikseliä sekunnissa:
dx = 8 x = x + dx * dt
jalski kirjoitti:
Esimerkiksi, jos haluat kasvattaa x-koordinaattia 8 pikseliä sekunnissa:
x = x + dx * dt
Sellainen lähestymistapa käytännössä estää pelin pyörittämisen samalla tavalla koneesta riippumatta, varsinkin, jos mukana on kiihtyvyyttä ja törmäystarkistuksia. Yleensä on käytännöllisempää ajaa fysiikkaa vakiomittaisella askeleella ja käyttää ajastusta vain sen päättämiseen, milloin piirretään. Yksi frame näyttää siis käytännössä tältä:
while (aika + askel <= kello) { aika += askel; laske(askel); } piirra();
Uusi versio pelistä on valmis ja jää varmaan viimeiseksi ellen mitään bugikorjauksia enää tee. Suurimmat uudistukset tähän versioon ovat äänet ja musiikit sekä nettipistelista endless-pelimoodille. Tämän lisäksi tällä kertaa on tarjolla myös Linux-versio, joka tulee binäärimuodossa, mutta uskoisin, että se kuitenkin toimii suhteellisen monella eri kokoonpanolla.
Tein myös pelille lyhyen mainosvideon ja se kannattaa ehdottomasti käydä katsomassa. Linkki videoon löytyy viestin lopusta. Loppuun vielä kiitokset aikaisemmista kommenteistanne. Ilman niitä tämä uusi versio olisi jäänyt paljon laihemmaksi. Alla vielä tärkeimmän muutokset tähän versioon sekä latauslinkit.
Hieno on, mutta minulla ainakin alkoi tuntua pidemmän putoamisen jälkeen jotenkin nykivältä, siis aivan kuin putoamisnopeus olisi aaltoilevasti vaihdellut. Edit: Näin uudemmalla testaamisella ongelma ilmeni jo Easy-tasolla ylös noustessa.
Mysteeriksi jää, miksi paketissa on noin monta tarpeetonta kirjastoa (mm. MikMod) ja miksei ääniä ole pakattu Ogg Vorbis -muotoon (ja musiikkeja myös, niin päästäisiin jälleen vähemmillä kirjastoilla ja ilman MP3-muodon lisensointiepäselvyyksiä). Näillä muutoksilla lähti pelistä 5 megaa (40 prosenttia) eli paketista 3,5 megaa (35 prosenttia). Lisäksi yllättäen vanha kunnon gzip tekee tämän jälkeen paremman paketin kuin bzip2. Luonnollisesti nykyaikaisempi xz voittaa molemmat.
Sillä nyt on taas niin mahdottomasti merkitystä, että missä paketissa pari disketillistä tavaraa tulee jakoon vuonna 2012...
Musiikin toistossa on bugi. Alussa tulee vain hetki alkumusiikkia, ja sitten se lähtee alusta. Joskus mikseri sekoilee ja toistaa jokaista kappaletta sellaisen pienen hetken (arviolta 0.1 sekuntia), ja sitten toistaa jonkun kokonaan.
Vaikeusasteista sanon sen verran, että Easy menee läpi ensimmäisellä tai toisella yrittämällä, Medium noin viidennellä yrittämällä Middle of the Earthiin, mutta Hard tössää kilometrissä. Endless-jutussa ennätys on noin neljä kilometriä.
Teeppä vielä Fullscreen-mode tuohon graphics settingseihin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.