Tai rekisteröidy jo tänään!
GameDev Suomi Pelinkehitys Pelinkehityslogit
To The Depths (Android/iOS)
Sivuja: [1]

To The Depths (Android/iOS)

0 jäsentä ja 1 Vieras katselee tätä aihetta.
Aloitusviesti: 31. Joulukuu 2014, 17:34Peukku ylös +7Peukku alas -0
Eli tosiaan aikaisemminkin olin jo lupaillut To The Depthsiä Androidille, mutta asiat alkoi oikeasti tapahtua, kun ElNinja otti minut Grove Comppiin TETtiin viikoksi ja lupasi julkaista To The Depthsin Grove Compin kautta jos haluaisin. Koko viikon siinä sitten tein ~6h päivässä TTDtä ja viikon lopulla TTD oli jo peluukelpoinen kaikilla lähes yhtään tehokkailla (Samsung S2 -->) Androideilla.

Vieläkin on kieltämättä paljon tekemistä, mutta peli on jo ihan hyvin pelattavassa kunnossa. Tällä hetkellä työskentelen Facebook-ennätyslistan kanssa. Tarkoitus olisi vielä hioa pelikokemusta ja lisätä lisää biomeita ja pommeja, saavutukset, mainoksia (anteeks :<), lisää monipuolisuutta pelikenttään ja pausemenu.

Uskon kuitenkin, että peli on saatu julkaisukuntoon helmikuun aikoihin.

Niille jotka eivät peliä ole vielä kokeilleet, kyseessä on siis roguelike-platformeri jossa on tarkoitus väistellä pommeja ja selvitä mahdollisimman syvälle random generoituun luolastoon keräten elämiä ja itse käytettäviä pommeja (jetpack tulee mahdollisesti myös;3), samalla kun pommien määrä ja maaston hankaluus kasvaa hetki hetkeltä.



Lisää kuvia-->
Spoiler






Grove Comp: Facebook, Twitter

Aihe on ollut tarkoitus tehdä jo aikaisemmin, mutta saamattomuuteni takia laitan sen nyt taktisesti päivä ennen GM Oscareiden alkua, kun projua, joka on lisätty vaan kisaketjuihin ei vissiin voi äänestää O.o
4x
Tykkään

#1: 01. Helmikuu 2015, 14:07 (muokannut Igno 01. Helmikuu 2015, 14:31)Peukku ylös +1Peukku alas -0
Aloitin koko projun koodaamisen kokonaan puhtaalta pöydältä (krhm oliko tämä nyt sitten kolman vai neljäs kerta? ;D). En silti koe, että olisin liian kunnianhimoinen tai että koodattu aika olisi mennyt hukkaan.

Tällä hetkellä peli tulee olemaan luultavasti aivan peluukelpoinen niinkin vanhoilla kännyköillä kuin S2 ja tulee pyörimään melko vakaata 30FPSsää.

Olen hankkiutunut suurimmasta osasta objekteista eroon ja koittanu tehdä pelistä tilepohjaista. Se ei ole kuitenkaan täysin kokonaan mahdollista, koska Game Makerin fysiikkamoottori tarvii objektaja toimiakseen. Tämän takia pelkästään luolien/maaston reunat ovat objekteja ja loput kentästä ovat gridien ja surfaceiden avulla luotua harhaa.

Itse pelikenttä toimii nyt melkein kokonaan gridipohjaisena. Ensin luodaan uusi chunkki, joka kopioidaan varsinaiseen pelikenttägridiin. Sen pohjalta tehdään surface, jolle piirretään spritet sen mukaan mikä arvo gridin missäkin solussa on. Tämä mahdollistaa sen, että jotkut blockit saatetaan piirtää vain kerran pari koko pelin aikana. Blockkien valaistus lasketaan sen pohjalta, kuinka pitkä matka solusta on lähimpään tyhjään (arvoltaan 0) soluun. Surface päivitetään vain tietyiltä alueilta ja vain silloin, kun maastossa on lähistöllä tapahtunut muutos (esim hiirellä vasemmalla napilla klikatessa se tuhoaa klikatun blockin = säätää sen solun arvoksi 0 ja päivittää gridin ympäriltään 7x7 blockin alueelta.) Kun ennen blockit katsoivat etäisyytensä point_distance()lla, nyt ne tekevät sen kevyesti gridin perusteella ja vain harvoin, kun kenttä niiden ympärillä päivittyy.

Päivittäessä katsotaan myös, onko blockin naapurina tyhjä solu. Jos on, kohdalle luodaan fysiikkaobjekti, jotta pommit ja pelaaja voisivat törmätä siihen.

Käytännössä tämä tarkoittaa sitä, että jos generaatio ei ole menossa, tai pommi ei räjähdä juuri sillä hetkellä niin kenttä ei kuormita konetta mitenkään muuten, kuin piirtämällä surfacen näytölle.

Pelikentälle (32x64 grid) mahtuu koko aika kaksi 32x32 chunkkia. Kun pelaaja on tarpeeksi lähellä kentän pohjaa, gridin ylempi puolikas poistetaan, alin puolikas siirretään ylemmän kohdalle ja alle luodaan uusi gridi. Surfacella tehdään sama asia, ylempi puolikas poistetaan, alempi siirretään ylös ja alempi puolikas renderöidään gridin pohjalta.

Fysiikkaobjekteja siirretään chunkin verran ylöspäin, jotta ne ovat taas samassa tasossa surfacen kanssa. Sama tehdään viewin korkeudelle (ja tulevalle pelaajalle ja pommeille), joten pelaaja ei edes huomaa, että pelikenttä on noussut. Tämä tarkoittaa käytännössä sitä, että pelaaja on teknisesti koko aika suunnilleen samalla korkeudella (joka on pelissä, jossa tarkoitus on päästä mahdollisimman alas ehkä vähän masentavaa :D ).

Jos joku haluaa nähdä, miltä tämä käytännössä näyttää, laitoin testattavan moottorintyngän ladattavaksi. Tämä ei ole vielä nähtävästi paljoa edistystä, mutta nyt kun kaikki vaikea tekninen puoli on lisätty (paitsi että saan lisätä vielä ahh niin ihanan multiresoluutiosupportin ja onscreen-näppäimet), voin alkaa keskittyä varsinaisen sisällön tuottamiseen.

Lataa
Ylä- ja alanuolista liikuttaa "vieviä" (= piirretty osa kentästä, tämä tulee olemaan ainoa asia jonka pelaaja näkee pelikentästä.)
Kannattaa alussa painaa pitkään pohjassa alaspäin, koska alussa ei ole chunkkia generoituna, koska siihen tulee pelikentän nurmipinta/surface jota en ole ehtinyt koodata, joten et näe siinä mitään muuta kuin tyhjää, joka voi olla testaajalla vähän hämmentävää.

Klikkaamalle hiiren oikealle napilla tuhoaa blockin, vasemmalle luo blockin.

Ylöspäin kenttä ei generoidu, koska pelissä mennään alaspäin.
Fysiikkaobjektit näkyvät tosiaan noina punaisina läpinäkyvinä laatikoina, jotka on piirretty luolien reunoille surfacen päälle.


Toivon että joku sai jotain kirjoitelmastani selvää, kirjoitin käytännössä omaksi huvikseni, koska on kiva aina välillä saada itsekkin selvää mitä on saanut lähiaikoina aikaiseksi. :D Kunnioitus jos joku oikeasti jaksoi lukea koko kirjoituksen ;D
P.S. Jos chrome estää zipatun exen lataamisen en voi asialle mitään, vaihda firefoxiin tai selviä ilman ;/
P.S.2. Trying to use non-existing surface on tiedostettu bugi, jonka korjaaminen pitäisi olla ihan helppo operaatio, ei ole ollut vain aikaa.
3x
Tykkään

#2: 05. Helmikuu 2017, 10:14 (muokannut Igno 05. Helmikuu 2017, 10:18)Peukku ylös +7Peukku alas -0
Krhm kai sitä vois 2 vuotta myöhemmin laittaa vähän päivitystä projektin suhteen. :-----D




Sekä koska en syystä X pystynyt/osannut kopioida GIF:in urlia twitteristä niin laitan vähän gameplay-footagee tällein:
https://twitter.com/GroveComp/status/828010723888463872

Eli tosiaan mun ikuisuusprojekti alkaa oleen jo huomattavasti lähempänä julkasukelposuutta (en toki lupaa julkasuaikatauluja, koska ne ei oo ikinä pitäny paikkaansa.)
Pelissä on tätä nykyä kauppa, jossa on ostettavissa atm 7 poweruppia, jotka ostettua alkaa spawnailemaan satunnaisesti kenttään.
Pelissä on 9 erilaista luolastoa, joihin on (melkein) jokaiseen pyritty saamaan oma twistinsä rikastamaan gameplayta.
Online ennätyslistat.
Erittäin WIP Daily Challenge -moodi jossa on ennätyslistat jotka resetoituvat 00:00  Lontoon aikaa . Jokainen pelaaja saa saman kentän/seedin ja tiettyjä spawnratemuutoksia.

Mahtavaa (huom. WIP-) grafiikkaa Mattielta, sekä musat Distrancelta (sama jäbä joka on tehny NES-Retkun intromusat).

Täytyy sanoo että vaikka hiottavaa onkin vielä niin oon todella tyytyväinen tähän atm, peli on yllättävän koukuttava (kuinka markkinoida peliään uskottavasti kehittäjänä) ja joissain kohtiin äärimmäisen hektinen. Myös loistavaa ongelmanratkontaa, koska eri tilanteista on monia erilaisia tapoja händlätä ittensä hengissä, joka tuo paljon valinnanvaraa miten koittaa olla kuolematta.
10x
Tykkään

#3: 05. Helmikuu 2017, 20:44Peukku ylös +1Peukku alas -0
Yllättävän laadukkaan oloinen systeemi :) mainitsit tuolla twitterin puolella, että sourcesa random-generaattoriin saattaisi saada vilkuilla jos mielenkiintoa löyttyy. Voisin tuupata sen tuonne tutoriaali-osastolle ihmeteltäväksi jos jaksast :D Nyt vaan puristat projektin loppuun kun noin valmista olet saatu aikaan  (y)
2x
Tykkään
#4: 06. Helmikuu 2017, 09:42 (muokannut Igno 06. Helmikuu 2017, 09:46)Peukku ylös +1Peukku alas -0
Juu tosiaan tuoltahan tommoinen löytyykin:D
https://gamedev.fi/keskustelu/index.php?topic=1801.0

Ei toki graafisesti yhtä fancy kun To The Depthsissä, mutta sama koodi tossakin pelissä löytyy (käytän kyllä useampaa algoritmia erilaisiin luoliin, mutta loput on niin autotallimeininkiä että en hirveästi kehtaa jakaa)

En muista olinko vielä tuota moottoria tehdessäni ehtinyt muuttaa tuota gridipohjaiseksi, mutta jos aiot tuota käyttää niin tee ihmeessä. Huomattavasti nopeampia ja näppärämpiä kuin arrayt. Toki voin itsekin jossain välissä koittaa päiviteltyä versiota lisätä, mutta siihen menee vähän aikaa koska tuhat rautaa tulessa ton projun suhteen.

Jos gridejä haluaa käyttää niin pari protip:
1. Kun alussa shufflataan taulukko täyteen satunnaisia seiniä/tyhjiä soluja niin nopein tapa toteuttaa asia (säästää 32^2 random-funktiota esimerkin versiosta) on vain täyttää esim. 40% gridin ensimmäisistä soluista seinillä ja sekoittaa ne ympäri taulukkoa ds_grid_shuffle():lla, ajaa saman asian
2. Naapureiden määrän tarkistaminen sujuu nopeammin ja helpommin ds_grid_regionilla (josta miinustat senhetkisen solun arvon)

Jos haluat maanpinnasta examplea niin voin sen erikseen jossain välissä säätää.

PS. yksi autotallimenetelmä luoda luolia (joka on yllättävän hyvä), on ensiksi täyttää gridi täyteen seiniä/ykkösiä, sitten alkaa sijoittamaan ympyrän muotoisia luolia/nollia luolaan JOS ne ei overläppää liikaa edellisten luolien kanssa, joka onnistuu käytännössä näin (ulkomuistista todnäk virheillä)

cave = ds_grid_create(width,height)
ds_grid_clear(cave, 1);

repeat(15) {
xx = irandom(width)
yy = irandom(height)
radius = random_range(4,7)
if ds_grid_disk_mean(cave,xx,yy,radius) > 0.8 ds_grid_disk_set(cave,xx,yy,radius)}

Fiksuinta myös käyttää jotain muuttujaa joka nollaantuu aina kun uusi pala luolaa sijoitetaan ja kasvaa aina kun sijoitus epäonnistuu. Tälläin jos loopista poistutaan kun tämä muuttuja on yli asetetun rajan esim. 15. Vältytään mahdollisesta luolan tilan loppumisesta johtuvalta infinite-loopilta ja luolastosta tulee ideaalin kokoinen.

Ja joo koitan kaikkeni tehdä että tää saadaan kunnialla ulos järkevällä aikataululla. :D
Mun selitykset ehkä näin foorumilla vähän sekavia (ja muutenkin), mutta saa lisätä skypes amakine2 jos haluaa satunnaisgeneraatiosta jutella, ainahan tuo on hauskaa :D
1x
Tykkään

#5: 03. Maaliskuu 2017, 20:08 (muokannut Igno 03. Maaliskuu 2017, 20:16)Peukku ylös +3Peukku alas -0
Hiihtoloma on menny aikalailla 90% koodatessa, peli edistynyt ihan kohtalaisesti ja graafinen puoli sittan taas ihan huimasti.
Ohessa screenshotit pelin terrariasta "inspiroidusta" madosta sekä Mattien taiteilemasta törkeän nätistä title screenistä.


* WormSS.png (101.64 kilotavua, 1536x864 - tarkasteltu 136 kertaa.)
8x
Tykkään

#6: 03. Maaliskuu 2017, 20:46Peukku ylös +0Peukku alas -0
Näyttää aivan törkeen komeelta, vielku pääsis pelaamaan.
2x
Tykkään

#7: 12. Maaliskuu 2017, 20:30 (muokannut Igno 12. Maaliskuu 2017, 20:32)Peukku ylös +2Peukku alas -0
Näyttää aivan törkeen komeelta, vielku pääsis pelaamaan.

Vielä kun sais valmiiks :D
Mut kiva että on odottavaa pelaajakuntaa.

Ohessa pätkä Mattien tekemää introa <3
2x
Tykkään

#8: 13. Maaliskuu 2017, 10:46Peukku ylös +0Peukku alas -0
hyvältä näyttää!

ps. vaihtakaa nuo napit :D (oletankin että vielä placeholderit)
2x
Tykkään
#9: 13. Maaliskuu 2017, 17:54Peukku ylös +1Peukku alas -0
hyvältä näyttää!

ps. vaihtakaa nuo napit :D (oletankin että vielä placeholderit)

Kiitän. Napit vaihdettiin tässä pari päivää sitten, tältä näyttää nykyään (+ laboratorio-biomi):

* Lab.png (118 kilotavua, 1542x862 - tarkasteltu 152 kertaa.)
Tykkään

Sivuja: [1]
GameDev Suomi Pelinkehitys Pelinkehityslogit
To The Depths (Android/iOS)
 

Powered by SMF 2.0.11 | SMF © 2006–2009, Simple Machines LLC