Tämä Evolute on siis peli, jota olen alkanut jonkin aikaa sitten vääntämään. Se tulee olemaan ensimmäinen C++:lla tekemäni peli, mutta ei kuitenkaan ensimmäinen pelini, eikä myöskään aivan ensimmäinen C-kielinen ohjelmanikaan. Grafiikoista ja suunnilleen kaikesta muustakin huolehtii SDL-kirjasto.
Vaikka tämä onkin ensimmäinen oikeasti iso C-kielinen projektini, ovat tavoitteet todella korkealla, mutta tähän mennessä on kuitenkin näyttänyt todella hyvältä. :)
Peli on pohjimmiltaan tuollainen perus puolustusräiskintä, jossa ruudun alareunassa olevalla tykillä täytyy pitää yläreunasta päällevyöryvät viholliset loitolla. Mukaan on kuitenkin lisätty taidot, expat ja levut, mikä tekee pelistä varsin omaperäisen.
Tähän mennessä peliä on tehty noin puolitoista kuukautta, ja nyt alkaa olemaan pelin perusmekaniikat kasassa. Jonkinlainen menukin jo löytyy, mutta vielä on kuitenkin erittäin paljon tehtävää.
Päätin pystyttää pelille myös blogin, joka seuraa varsin tiiviisti sen kehittymistä, joten sinne vaan. Sieltä löytyy sitten kaikki vielä paljon tarkemmin ja se, mitä olen tähän mennessä tehnyt.
http://evolutedevblogi.blogspot.com
Uusimmat kuvat pelistä:
http://koti.mbnet.fi/ande_91/Kuvat/
http://koti.mbnet.fi/ande_91/Kuvat/
Näyttää varsin kliffalta tekeleeltä. Ainakaan itse en tuon kaltaiseen "modaukseen" ole törmännyt tämän klassikon kohdalla, joten jos siitä joskus linuxilla toimiva versio ilmestyy, niin koetan ihan mielenkiinnolla.
Matkaa tuntuu olevan kuitenkin vielä suht paljon, joten keep on coding.
Hyvältä näyttää. Tavoitteet on asetettu järkevästi ja kokonaisuudesta on selvästi jonkinlainen suunnitelma.
Generoitko hirveän tiheästi noita kuvia, kun tarvitaan noin valtava muistimäärä?
Aiotko julkaista jotain pelattavaa (ehkä jopa lähdekoodeineen) jo ennen viimeisteltyä versiota?
Kyllä, sehän kerrotaan tuolla blogissa. Et tainnut jaksaa lukea =).
jo123 kirjoitti:
Kyllä, sehän kerrotaan tuolla blogissa. Et tainnut jaksaa lukea =).
Voisitko kenties linkittää, kun kerta niin kätevästi löysit noihin kysymyksiin vastaukset? Itse en kyllä löytänyt vastausta tuohon julkaisukysymykseen..
Mainiota että joku jaksaa blogata aktiivisesti pelin kehitystä, siitä propsit aloittajalle! On varsin mukavaa seurata, kuinka projekti on kehittynyt/kehittyy ideasta toimivaksi sovellukseksi.
Tazca kirjoitti:
jo123 kirjoitti:
Kyllä, sehän kerrotaan tuolla blogissa. Et tainnut jaksaa lukea =).
Voisitko kenties linkittää, kun kerta niin kätevästi löysit noihin kysymyksiin vastaukset? Itse en kyllä löytänyt vastausta tuohon julkaisukysymykseen..
Mainiota että joku jaksaa blogata aktiivisesti pelin kehitystä, siitä propsit aloittajalle! On varsin mukavaa seurata, kuinka projekti on kehittynyt/kehittyy ideasta toimivaksi sovellukseksi.
http://evolutedevblogi.blogspot.com/2009/10/
Tuon blogimerkinnän lopusta löytyy infoa ensimmäiseen kysymykseen. Niin ja en minä siihen julkaisukysymykseen mitään vastausta tuolta blogista löytänyt, joten sinänsä vastasin hieman huolimattomasti. =)
jo123 kirjoitti:
Tuon blogimerkinnän lopusta löytyy infoa ensimmäiseen kysymykseen.
Siinäkään ei kerrota, miten paljon kuvia generoidaan. On aivan eri asia tehdä pyöritykset asteen välein kuin esimerkiksi kymmenen asteen välein. Tuossa on paljon muistioptimoinnin varaa, koska aivan pienimpiä käännöksiä ei vauhdissa lainkaan havaitse. Lisäksi kannattaa tarkistaa, mitkä asennot edes ovat mahdollisia. Tykki osoittaa ilmeisesti aina ylös, joten ainakin puolet mahdollisista asennoista jää käyttämättä.
Ainakin minun omistamallani "vanhemmalla raudalla" tulisi tuossa muistin määrä vastaan.
Kannattaa myös harkita (seuraavassa projektissa) vaihtoa SDL:stä SFML:ään, jossa on OpenGL-kiihdytys.
Kiitos vaan kaikista hyvistä kommenteista ja mukava kuulla, että blogistakin on ollut iloa. :) Sitten voisin vähän kysymyksiinne vastata.
Olen oikeastaan itsekkin huomannut, että muistia kuluu varsin paljon, myös muihin peleihin verrattuna. Se voi johtua paljolti siitä, että koko pelin kaikki grafiikka ladataan ja generoidaan heti pelin latautuessa ja lähes kaikki pelin grafiikka koostuu png-kuvista, joissa on alpha kanava. Olen kyllä tuotakin yrittänyt jonkin verran jo optimoida. Nuo Metabolixin pointit tuossa viimeisessä viestissä olivat todella hyviä, mutta olin jo oikeastaan ottanut nuokin huomioon. Samoin olen yrittänyt muutamia muistivuotoja sieltä löytää ja pari olen saanut korjattuakin. Yritän kuitenkin ennen ensimmäistä julkaisua vielä katsoa, saisiko sieltä yhtään enempää muistia vapautettua.
Sitten, ajattelin toki julkaista jotain ennen sitä viimeistä versiota, en ehkä kuitenkaan heti lähdekoodien kanssa, mutta saatanpa nekin joskus julkaista. Ensimmäinen versio tulee kuitenkin olemaan suhteellisen viimeistelty, mutta suurin putee tulee näin aluksi olemaan pelattan sisällön määrässä. Omia karttoja voi kuitenkin jo heti ensimmäisessä versiossa tehdä muokkaamalla yhtä tekstitiedostoa.
Julkaisuajankohdasta en olekaan vielä hirveästi puhunut, mutta sanoisin tuon ekan version olevan valmis jossain ensi vuoden alun paikkeilla, koska tekemistä on kuitenkin vielä melko paljon.
Tuolla toisessa viestiketjussa jo aikaisemmin mainostin tätä peliä: (mod. yhdisti aiheet). Ja nyt on sitten ensimmäinen versio saatu valmiiksi.
Peli oli siis pohjimmiltaan tuollainen perus puolustusräiskintä, jossa on mukana myös taidot expat ja levut. Tämä versio on nyt aivan ensimmäinen beta ja olisi kiva saada vähän palautetta siitä. Pelistä on saatavilla Windows version lisäksi myös Linux versio.
Pelin kehitys tulee vielä jatkumaan ja sitä voi seurata tuolta blogista:
http://evolutedevblogi.blogspot.com/
Lataa:
Lataa Windows versio
Lataa Linux versio
Huom: Linux-käyttäjien pitää asentaa myös seuraavat paketit:
SDL, SDL Image, SDL gfx, SLD Mixer
Olisi vielä kiva, jos joku testaisi saako tuota Linux versiota toimimaan. (pitäisi kyllä toimia)
FPS 500 Taitaisi pyöriä selaimesskin :)
Kannattaa pitää mielessä, että kirjastojen tarkat versionumerot ja versioiden nimeäminen vaihtelevat eri jakeluissa. Esimerkiksi tuo hakee tiedostoa libSDL_gfx.so.4, kun minulla on tarjota vain libSDL_gfx.so, libSDL_gfx.so.13 ja libSDL_gfx.so.13.5.2. Toimii se näilläkin, kun vain linkittää oikealle nimelle, mutta tuskin tuota peruskäyttäjä osaisi korjata. Julkinen lähdekoodi Makefilen kanssa on aina koodarille helpompi vaihtoehto. ;)
Toinen ongelma on, että kun olet käyttänyt zippiä pakkausmuotona, tiedostojen oikeudet ovat pielessä. Binaaritiedostolla ei ole execute-oikeutta. Voisit pakata Linux-version vaikka tar.bz2:ksi (tar cjf Evolute.tar.bz2 Evolute
). Lisäksi olisi hyvä, että paketin nimi ja hakemiston nimi vastaisivat toisiaan.
Näiden toimitustapaa koskevien haukkujen jälkeen päästään itse asiaan: Hieno peli. :) Ensimmäinen yritys tuotti listalle 382401 pistettä. (Edit: Toisella yrityksellä 1081879...) Täytyy myöntää, että pistesysteemistä en aivan päässyt perille, varsinkin, kun parin tason jälkeen sen tonnin pystyi laittamaan noista neljästä ainoastaan tarkkuuteen. Tulivatko muut maksimiin, vai mistä on kyse? (Edit: Ilmeisesti tulivat täyteen.)
Erityisplussa viimeistellystä ja toimivasta teoksesta. Kärsivällisyyttä on ainakin riittänyt. Valikon efektit ovat tyylikkäät, ja ilmeisesti valintojen kallistuspuolikin vaihtelee satunnaisesti käynnistyskerroilla.
Yksi kehitysideakin olisi: FPS:n voisi rajoittaa joko asetuksista tai ihan vakiona. Turha sitä on 140:n paikkeilla pitää, kun ruudulle ehtii tuosta ehkä puolet.
Pelin jälkeen näytettävissä pistepalkeissa itseäni häiritsi tämä efekti, että isoilla pisteillä kaikki menevät ensin täyteen ja lyhenevätkin sitten yllättäen.
Metabolix kirjoitti:
Turha sitä on 140:n paikkeilla pitää, kun ruudulle ehtii tuosta ehkä puolet.
Ajattelin sanoa juuri samaa. Syö vain turhaan tietokoneen tehoja.
Anaatti kirjoitti:
Olisi vielä kiva, jos joku testaisi saako tuota Linux versiota toimimaan. (pitäisi kyllä toimia)
Pelaa mullakin Metabolixin mainitsemien temppujen jälkeen.
Sen verran voisin lisätä, että ainakaan Gentoon paketinhallinnasta ei löydy 32-bittistä sdl-gfx:ää, joten 64-bittisten järjestelmien omistajat joutuu etsimään tiedoston jostain muualta. Mää otin tästä 32-bittisestä Gentoo-koneestani ja toimi.
Musiikki särisi tuolla 64-bittisellä koneella.
Sorsat ois kivat, niin vois kääntää omalle systeemille sopivan binäärin.
Ekalla yrityksellä 137681 pojoa. No, enhän mää mitään koskaan oo osannukaan pelata.
Aika koukuttava peli (itselläni jo yli miljoona pistettä), hienoa. Minulla tosin musiikki rätisee ja kuva välillä vähän vilkkuu. Järjestelmänä Debian squeeze.
Hyvin näytti toimivan 64-bittisellä Windows 7:lla, pisteitä tuli 11 245 66 ekalla yrityksellä. Ainoa asia mikä jäi ihmetyttämään oli, että jossain vaiheessa accuracyä ja muita ei voinut enää kehittää, eli sainko niihin ns. "max levelin" vai mistä oli kyse?
Kiiton kovasti kaikista kommenteista. Kiva kuulla, että peli on ollut kiva.
Metabolix kirjoitti:
Yksi kehitysideakin olisi: FPS:n voisi rajoittaa joko asetuksista tai ihan vakiona. Turha sitä on 140:n paikkeilla pitää, kun ruudulle ehtii tuosta ehkä puolet.
Itse asiassa pelin nopeus on kyllä rajoitettu 40 FPS:ään ja peli jää kyllä odottelemaan, jos kone on tehokkaampi. Tuo FPS vain näyttää sen mihin oma kone parhaimmillaan pystyisi eli ei tämä kuitenkaan kaikkea prossutehoa ime.
En tosiaan ole kovin paljoa vielä Linuxia käyttänyt ja sen takia noita ongelmiakin varmaan ilmeni, niin kysyisin, että kun tuon pelin omalla koneellani käänsin niin linkkasiko se juuri ne kirjastot tuohon peliin, jotka minulla oli omalle koneelleni asennettu ja vaati sen takia juuri noita kyseisiä versioita? Pitäisikö siis pistää aina lähdekoodia ja antaa jokaisen käyttäjän aina kääntää itselleen toimiva versio?
Sitten pari vastausta vielä peliä koskeviin kysymyksiin:
Kun joku levu menee yli kolmen, muiden max menee kolmeen ja sen yhden viiteen. Niihin levuhin, jotka ovat saavuttaneet jo tuon maxin, ei voi enää ostaa expaa.
Antakaa toki vielä palautetta ja korjausehdotuksia! Yritän huomioida kaikki ja saada niitä korjattua seuraavaan versioon.
Anaatti kirjoitti:
Itse asiassa pelin nopeus on kyllä rajoitettu 40 FPS:ään ja peli jää kyllä odottelemaan, jos kone on tehokkaampi. Tuo FPS vain näyttää sen mihin oma kone parhaimmillaan pystyisi eli ei tämä kuitenkaan kaikkea prossutehoa ime.
FPS-rajan voisi nostaa vaikka 70:een, esim. valikossa huomasi pienen hitauden hiiren liikkeissä 40 FPS:llä.
Näen vain kapallisen uusia kehitysideoita ja lisiä peliin :) Ihan mielenkiintoista oli pelata.
Hyvä peli, hyvä pohja johon saa vaikka mitä kivaa päälle, niin hyvä että voisin hyvin maksaa shareware versiosta, kun valmis ja täynnä mielenkiinoisimpia ominaisuuksia.
Tuohonhan jää koukkuun! Hyvä peli. Tuli tässä ensimmäisellä yrityksellä 1010098 pistettä!
Loppuvaiheessa mielenkiinto loppuu kun tykkiä ei voi enää kehittää ja toisaalta vaikeusaste ei kasva enää jyrkästi. Menee tasapaksuksi räiskimiseksi. Mutta aina johonkin 200-300 tuhanteen pisteeseen peli on kyllä mielenkiintoinen!
Nyt olen saanut seuraavan version, 0.5b, valmiiksi. Tärkeimmät muutokset ovat kunnollinen tuki pelaajien omille kartoille ja muutama uusi kartta. Myös pientä korjailua ja vähän muutakin on tehty.
Lataa:
Windows versio
Linux versio
Nyt olen yrittänyt paketoida tuon Linux version vähän paremmin. Kertokaa toki, jos saatte sen toimimaan tällä kertaa vähän paremmalla menestyksellä.
Nythän tuo toimii oikein kivasti. :)
Pakettiin on jäänyt pari backup-tiedostoa, INSTALLATION~ ja Makefile~.
Jos käännöksessä ei ole erityistä syytä käyttää pelkkää -O:ta, suosittelen -O2:ta.
Makefilestä voisi vielä laittaa riippuvuudet niin, ettei make turhaan käännä peliä uudestaan. Jos peli koostuu vain cpp- ja hpp-tiedostoista ja kaikki cpp-tiedostot kuuluu kääntää, koko Makefile tiivistyy tällaiseksi:
FLAGS = -O2 `sdl-config --cflags --libs` -lSDL_gfx -lSDL_image -lpng -lz -lSDL_mixer all: Evolute Evolute: $(wildcard src/*.cpp) $(wildcard src/*.hpp) g++ $(wildcard src/*.cpp) $(FLAGS) -o Evolute
Hienommin voisi vielä huolehtia, että edes yksittäistä cpp:tä ei käännetä turhaan uudestaan, mutta tuo nyt on niin pieni ohjelma, ettei hienojakoisemmasta optimoinnista ole paljonkaan iloa.
Koodia vilkaisin vähän, ja siitä täytyy huomauttaa, että otsikkotiedostot ovat väärä paikka muuttujien (tai vakioiden) määrittelyille. Suuri osa pelilooppi.hpp:n sisällöstä kuuluisi siis johonkin cpp-tiedostoon. Otsikko pitää voida turvallisesti sisällyttää vaikka joka tiedostoon, nythän näin ei ole.
Hienoa työtä joka tapauksessa!
Kiitos taas hyvistä kommenteista ja huomautuksista. Noista on varmasti apua!
*** buffer overflow detected ***: ./Evolute terminated ======= Backtrace: ========= /lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)[0x42aed8] /lib/tls/i686/cmov/libc.so.6[0x429f10] /lib/tls/i686/cmov/libc.so.6(__fgets_chk+0x129)[0x42a239] ./Evolute[0x80568fd] ./Evolute[0x80528ed] /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x360b56] ./Evolute[0x8049961] ======= Memory map: ======== (Mod. poisti moduulilistan; tuskin tarpeen.) Aborted
Näin tapahtuu, kun yrittää aloittaa Survival 1:stä...
Tutorial toimii kyllä.
Legu: voisit tehdä debug-käännöksen (optimointi pois, tilalle -g) ja katsoa gdb:llä tarkemman paikan.
Kannattaa muuten lisätä käännökseen standardi- ja varoitusliput (-std=c++98 -Wall -pedantic). Näillä tulee melkoinen määrä ilmoituksia mm. alustamattomista muuttujista. Lisäksi on hyvä tarkistaa muistivuodot vielä valgrindilla.
Debug-käännös ei sitten (tietenkään) kaadu, eli ikävä kyllä en nyt sitten sen tarkemmin pysty kertomaan virheestä.
Teksti "Loading map" on viimeinen, mitä ohjelma tulostaa. Debug-versiossa sitten seuraavaksi tuli "Survival1 loaded; 36 different spawners", eli viittaisi siihen että kartan lataamisessa on jotain vikaa.
Anaatti, oletko muuten sattunut huomaamaan noita lukuisia varoituksia, joita kääntäessä ilmenee, kuten:
In function ‘int sprintf(char*, const char*, ...)’, inlined from ‘void pelilooppi()’ at src/pelilooppi.cpp:300: /usr/include/bits/stdio2.h:35: warning: call to int __builtin___sprintf_chk(char*, int, unsigned int, const char*, ...) will always overflow destination buffer
... tai ...
In function ‘char* fgets(char*, int, FILE*)’, inlined from ‘void pelilooppi()’ at src/pelilooppi.cpp:310: /usr/include/bits/stdio2.h:253: warning: call to ‘__fgets_chk_warn’ declared with attribute warning: fgets called with bigger size than length of destination buffer
Plus sitten kasa warn_unused_result-varoituksia.
Katos vaan, nyt vasta huomasin nuo virheet, kun laitoin tuonne makefileen nuo -Wall ja -pedantic. Aika ikävää oikeastaan, koska Windowsilla työskennellessäni ei kääntäjä ole koskaan noista virheistä mitään ilmoittanut. :/
Noita Legun saamia varoituksia en ole kuitenkaan koskaan missään nähnyt.
Innostuin korjaamaan koodista pikaisesti räikeimmät virheet ja varoitukset. Patch-tiedosto on soodan filupastessa, ja sen voi lisätä lähdekoodiin komennolla patch -p0 < evolute-0.5b-1.patch
(ajettava Evolute-hakemistossa). Legu voisi kokeilla, auttaako tämä.
Lisää vinkkejä:
Olet mennyt lataaaani-funktiossa halpaan ja uskonut oppaan kirjoittajaa etkä dokumentaatiota. :) Mix_LoadWAV_RW-funktiolle ei suinkaan anneta parametrina kanavaa vaan lippu, joka kertoo, pitäisikö se parametrina annettu tiedosto sulkea. Tässä on siis muisti- ja muukin resurssivuoto. Käytä mieluummin Mix_LoadWAV-makroa, joka ottaa pelkän tiedostonimen.
Nappien käsittely newhiscore.cpp:ssä lyhenisi huomattavasti vaikkapa pienellä makrolla (toki monta muutakin tapaa on):
// Helppo ratkaisu: taulukko napeille! bool nappiprew[SDLK_LAST] = {false}; #define TARKISTA_NAPPI(SDLK, MERKKI, merkki) \ if (pelaajaninputit[SDLK]) { \ if(!nappiprew[SDLK] && hsnimikohta < 15 && kasautuminen > 20) { \ if (pelaajaninputit[SDLK_RSHIFT] || pelaajaninputit[SDLK_LSHIFT]) hsnimi[hsnimikohta] = MERKKI; \ else hsnimi[hsnimikohta] = merkki; \ hsnimikohta++; \ } \ nappiprew[SDLK] = true; \ } else nappiprew[SDLK] = false; // Tarkistukset: TARKISTA_NAPPI(SDLK_SPACE, ' ', ' ') TARKISTA_NAPPI(SDLK_a, 'A', 'a') TARKISTA_NAPPI(SDLK_b, 'B', 'b')
(Kyseisen tiedoston sisennykset ovat muuten aika kummallisia...)
Previous kirjoitetaan tavallisella v-kirjaimella.
Voisit vaihtaa joitakin taulukoita C++:n luokkiin (vector, string) ja C:n funktioita (sprintf, strstr) tietenkin vastaaviin jäsenfunktioihin. Esimerkiksi custommapit.cpp:ssä tämä ja monta muuta:
char maptiedostot[100][100]; //tuetaan 100 eri mappia kerralla std::vector<std::string> maptiedostot; // Tuetaan, kunnes muisti loppuu! bool onstage[maplkm]; // Vastoin standardia; muuttuja taulukon kokona. std::vector<bool> onstage(maplkm);
(Mod. yhdisti keskustelut.)
Nyt on siis versio 0.7 julkaistu ja tämä tulee jäämään viimeiseksi minun tekemäksi versioksi, koska en enää jaksa tehdä tätä peliä. Pelin lähdekoodit on kuitenkin julkaistu GNU General Public Licensen alaisena, joten kuka tahansa voi jatkaa pelin kehitystä.
Niille jotka eivät vielä tiedä: peli on pohjimmiltaan tuollainen perus puolustusräiskintä, jossa on mukana myös taidot expat ja levut.
Lataa:
Windows versio
Linux versio
Laadukasta työtä!
Ainoa selvä kritiikin paikka on tähtäinympyrän alaoikealla viistosti kulkeva sinertävä värivirhe. Tämä on ollut pelissä alusta asti, mutten ole tullut maininneeksi.
Eipä tuohon muuta parannettavaa keksi; peli on nyt kaikin puolin tyylikäs. Oletko itse ajatellut vielä jotain, vai miksi versionumero on jäänyt ykköstä pienemmäksi?
Yhteisö kiittää kontribuutiosta GPL-codebaseen!
Juu, olin suunnitellut peliin vielä kaikenlaista, minkä takia se on vasta 0.7.
Oli kyllä kohtuullisen koukuttava. Hyvää työtä!
Linuxilla peli muuten kaatui, kun yritin avata ensimmäistä survival-kenttää.
Kurkkasin nyt tuonne SourceForgeen. Lähdekoodi on hassusti turhaan hakemistossa v0.7, tuohan vaatisi koko SVN-puun muutoksen aina versionumeron muuttuessa. Muutenkin SF (tai SVN yleensäkin) on vähän hankala paikka hajautetulle kehitykselle, kun ei voi helposti pitää yllä omaa kehityspuuta; jos projekti olisi esim. GitHubissa, tilanne olisi helpompi.
Kyllä tuosta vain pelaamisen mittaan löytyy lisää hienoja ominaisuuksia. Huomasin äskettäin, että panoksetkin jättävät maahan jälkensä ja että haavoittuneet pallerot vuotavat vielä jälkikäteenkin. :P
Aihe on jo aika vanha, joten et voi enää vastata siihen.