maanantai 28. toukokuuta 2012

Back in action

Lomilta tuli palailtua toissaviikon sunnuntaina ja viime viikolla pääsin taas pelin kimppuun. Kuten viime viikolla sanoin tarkoituksena olisi lisätä crashdump eli peli kirjoittaa kaatuessaan kaatumisen aiheuttaneen virheen tiedot tekstitiedostoon joten voin analysoida kaatumisien syytä jälkikäteen. Tähän mennessä ainut tapa päästä käsiksi kaatumisen syyhyn oli silloin kun puhelin oli kiinni tietokoneessa. Toinen edellisessä postauksessa ollut ominaisuus oli save/load mahdollisuus. Tämän implementointi meni suhteellisen helposti. Tein SaveLoadManagerin joka hallitsee kyseistä tapahtumaa. Tietojen tallennusta varten loin serialisoitavan (luokka joka on mahdollista kirjoittaa binääritiedostoksi) SaveData luokan joka sisältää tiedot kentästä, yksiköistä, pelaajista ja rakennuksista. Tiedot vain vedetään itse pelistä suoraan luokkaan joka serialisoidaan ja tallennetaan puhelimen muistiin. Itse tiedoston kooksi ei testikartalla ja neljällä yksiköllä tullut kuin 1kilobitti. Ainoa mikä aiheutti tallennuksessa/lataamisessa pientä säätöä, olivat AndEnginen muuttujat joita ei voinut serialisoida. Yksikköjen käytössä oli spriteihin liittyvät TextureAtlakset ja TextureRegionit, mutta näitä ei olisi serialisoitu kumminkaan koska niiden tallentamiseen ei ole tarvetta sillä ne rakennetaan joka tapauksessa uudestaan aina pelin käynnistyessä. AndEnginen puolelta tuli myös TMXTile joka merkkaa kartalla sijaitsevaa neliötä. Yksiköt sekä rakennukset luottavat paikanhaussaan kyseisiin tileihin joten niiden serialisointi oli tarvittavaa. Kiersin itse tilen serialisoinnin kirjoittamalla sen koordinaatit serialisoitaviin muuttujiin ja latauksen yhteydessä haen kyseisen tilen uudestaan koordinaattien perusteella.

Jo mainittujen kahden muun toimenpiteen lisäksi poistin kuvankaappaus-ominaisuuden sillä hoksasin että oma puhelimeni tukee kuvankaappausta ihan sellaisenaan. HUD:ista poistetun kuvankaappausnapin tilalle laitoin tallentamisnapin. Peliin lisäsin myös luokan joka sisältää kaikki pelin vakiomuuttujat (esimerkiksi tallennusten kansion jne.) sekä luokan Androidin "Toast" viestin näyttämistä varten. 

Tällä viikolla on tarkoitus lisätä peliin loput rakennukset (kaupungit sekä päämaja) ja sotilaille toiminnallisuus niiden valloittamiseen. Jos rakennusten ja valloittamisen lisääminen sujuu nopeasti, saatan aloittaa moninpeli-ominaisuuden tekemistä niin client kuin server puolellekin.



Viime viikon muutokset:
- Talennus/Lataus lisätty
- Crashdump
- Vakiot-luokka
- Poistettu kuvankaappaus


Ensi viikolla tulevat muutokset:
- Lisää rakennuksia
- Rakennuksien valloitus
- Mahdollinen moninpelin aloitus

keskiviikko 16. toukokuuta 2012

"Lomalla"


Viime viikolla pääsin vihdoinkin takaisin pelin pariin parin viikon tauon jälkeen. Heti ensimmäisenä mielessä oli paljon puhuttu yksikköjen hyökkäys mutta päädyin kumminkin tekemään ensimmäisenä päivänä jotain ihan muuta. Ensimmäiseksi jaoin source-tiedostot järkeviin paketteihin (ne ovat tähän asti olleet kaikki samassa paketissa) ja muutin koodin rakennetta paljon muutenkin. Lisäsin myös asynkronisen lataamisen (eli tiedostojen lataamisen taustalla). Peli näyttää nyt latausruudun peliä aloitattessa ja lataa tiedostot taustalla ja peliruutu näytetään vasta kun lataus on valmis.

Seuraavana päivänä pääsin lopulta pääasian kimppuun eli hyökkäyksen implementointiin. Päätin tehdä hyökkäämisen niin että sekä hyökkäävä että "puollustava" yksikkö lähetetään apuluokalle joka laskee oikean määrän vahinkoa ja lisää mahdolliset maastobonukset ja palauttaa tehdyn vahingon. Pelissä hyökkäys suoritetaan ensin liikkumalla vihollisyksikön viereen, valitsemalla yksikkö uudestaan ja tällöin mahdollisiin hyökkäyksen kohteisiin piirtyy päälle punainen neliö. Lasketut vahingot vähennetään yksikköjen healthista ja jos yksikön health tippuu nollaan tai sen alle, se poistetaan pelistä. Poistin alussa vahingossa yksiköen spriteen liittyvät tiedot joka osoittautui virheeksi, kaikki pelin samaa tyyppiä olevat yksiköt kun käyttävät periaatteessa vain samaa spriteä jonka väri on koodillisesti vaihdettu. Tämän pienen ajatteluvirheen korjauksen jälkeen hyökkäys toimi vallan loistavasti. Tässä yhteydessä lisäsin ominaisuuden joka tummentaa yksikköjen spriteä hieman kun yksikkö on tehny kaiken mahdollisen vuorollaan (liikkunut maksiminsa sekä hyökännyt)

Aloitin tekemään myös peliin tallennus/lataus ominaisuutta. Ajoin ensin kirjoittaa kaiken pelin datan (valittu kartta, pelaajien ja yksikköjen tiedot jne.) XML tiedostoon ja tallentaa sen mutta mietin että helpompaa saattaa olla tehdä vain serialisoitava tallennusluokka johon asetataan kaikki tarvittavat tiedot. Ainoana huolena on serialisoidun tiedoston koko, pitää kokeilla ja sen jälkeen päättää aijonko sitä käyttää. Hankin myös ilmaisen palvelimen mahdollista multiplayer-ominaisuutta varten. Multiplayer pitäisi saada aikaiseksi aika aikaisessa vaiheessa nimittäin se helpottaisi testausta, yksin pelaaminen ilman tekoälyä kun on hieman tylsää.


Tällä viikolla ei tule mitään uusia päivityksiä sillä olen vierailulla vanhempieni luona ja en saa täällä koodaukseen keskityttyä kunnolla. Pelin pariin palaan siis ensi viikolla jonka jälkeen ja uutta blogipostausta nähdään siitä seuraavan viikon maanantaina. Ensi viikolla olisi tarkoitus tehdä aloitettu tallennus/lataus ominaisuus loppuun. Yritän myös lisätä "crash dump" ominaisuuden. Peli kaatuilee välillä oudosti ja olisi mukava tietää mistä kaatuminen loppuu. Yritän saada kaatumisen syyn talteen tekstitiedostoon ennen kaatumista, mutten ole vielä täysin varma miten sen aion tehdä.


Viime viikon muutokset:
- Hyökkäys lisätty
- Koodin rakennetta muokattu
- Asynkroninen lataus lisätty
- Tallennus/Lataus toimintoa aloitettu

Ensi viikolla tulevat muutokset:
- Tallennus/Lataus
- Crash dump

maanantai 7. toukokuuta 2012

Kiirettä

Enpä kerinnyt sitten viimeviikollakaan peliin koskea. Tälläkertaa syynä olivat vappu ja saman projektin edistäminen, yksi ryhmän jäsenistä kun lähtee matkoille tälläviikolla joten yritimme saada softan mahdollisimman valmiiksi. Tällä viikolla kumminkin peliä tulen tekemään eteenpäin, heti tämän blogipostauksen jälkeen jos tarkemmin sanotaan.  Yksikköjen hyökkäämisen lisäksi tarkoitus olisi järjestellä kooditiedostoja loogisempiin paketteihin, nykyään kun ne ovat kaikki saman paketin sisällä.



Tällä viikolla tulevat muutokset:
- Yksikköjen hyökkäys

tiistai 1. toukokuuta 2012

Myöhässä

Viimeviikolla ehdin hädintuskin ajoissa postata viikon blogipäivityksen, mutta tällä viikolla se kumminkin meni unohtumaan kokonaan, pistetään vapun piikkiin. Viime viikolla en kerinnyt DroidWarsille tehdä yhtään mitään, kun työstimme toista kouluprojektia urakalla eteenpäin. Tällä viikolla olisi kumminkin tarkoitus päästä takaisin pelin kehittämiseen ja seuraavana ominaisuutena on jo viime viikolla mainittu hyökkääminen



Tällä viikolla tulevat muutokset:
- Yksikköjen hyökkäys