Thursday 27 January 2011

MEMAP-formaatti

Uutisia, MERPG:n karttamoottorinalku osaa nyt käydä tileset-kuvan läpi ja esittää ruudulla yksitellen tilet. Seuraava osa projektissa olisi varmaan kirjoittaa joku malli jonka mukaan lopullinen karttaluokka toteutetaan. Samalla pitäisi miettiä MEMAP-tiedostoformaattiakin. Skriptipohjainen- (alkuun tilesetin nimi ja suhteellinen polku, ja sen perään jännästi muotoiltua informaatiota siitä mikä tile tilesetistä kuuluu minnekin ruudulla ja mihin karttakerrokseen), vai binääriformaatti (oikeastaan samantyyppinen, mutta tekstidata korvattu numeerisella datalla)? Miten formaatin sisäinen syntaksi toimii/missä järjestyksessä data on tiedostossa (skripti/binäärinäkökulma)?

Miten toteuttaa MEMAP-luokan ja tiedostolaturin yhteiselo? MEMAP-luokkaan yksi latausmetodi, vai kokonainen oma luokkansa, jolle ensin määritellään asetuksia ja joka sitten palauttaa käyttäjälle täysin käyttövalmiin MEMAP-kartan?

Skriptitiedosto-formaatin toteuttaminen saattaisi olla helpompaa nyt kun tuo Skriptihöskä Viides elää MERPGin taustalla. Binääriformaatin lukeminen taas olisi paljon helpompaa, ja mikä kaikkein kivointa, kevyempää (ja sitä myöten nopeampaa). Toisaalta uskoisin että C++lla skriptitiedosto parsiutuu niin nopeasti, ettei käyttäjä huomaa eroa skripti- ja binääritiedoston välillä.

Formaatin ohjelmallinen toteutus on myös vähintäänkin mielenkiintoinen. Luokkaheader lienee seuraava(nkaltainen):

class MEMAP
{
private:
int kartan_sivun_mitta; //kokonaisina ruutuina, olettaen kartan olevan 1:1 - neliö
int X;
int Y;

std::vector<std::vector<OBJECT> > KARTTA; //näkyvä kerros
std::vector<std::vector<bool> > HIT_KERROS; //kerros joka määrittelee mihin hahmo voi astua, tämän pohjalta pitäisi olla helppo tehdä vaikka minimap...

public:
void draw(näyttölaite& näyttö);
void positionAt(int x,int y);
bool load(const char* polku); //<- toteutan ehkä, harkitsen myös sitä latausluokkaa
};

Ei se ollutkaan niin ihmeellinen. Jännintä ovat kaksiulotteiset KARTTA- ja HIT_KERROS - vektorit. Toisen koko saattaa kyllä nousta aika suureksi, kun tuo OBJECT-luokka on oma abstraktointini SDL-kirjastosta.

Tuohon pitäisi vielä toteuttaa ehkä joku karttanaatit->ruuttunaatit - muunnos (eli kartta-oliolta kysytään mihin pelihahmo on sijoitettava jos se halutaan sijoittaa tilen (3,4) päälle) ja HIT_KERROS-vektoria hyödyntävä funktio, joka yksinkertaisesti tarkistaa saako koordinaatteihin (x,y) sijoittaa pelihahmoa.

Tämän blogitekstin jälkeen projektissa pitäisi olla taas helpompi edistyä. Perehtynen näihin viikonloppuna :P

No comments:

Post a Comment