Wednesday 4 May 2011

Uudesta karttaformaatista vielä

Viime tekstin kirjoituksen jälkeen kävimme Tässin kanssa jatkokeskustelua aiheesta, sillä lopputuloksella että kolmannen memap-formaatin pitäisi tukea
  • Rajoittamatonta layermäärää, tosin näiden kanssa kehittäjät saavat käyttää älliä, sillä kartan käsittelyn raskaus on melko suoraan verrannollinen layereiden määrään.
  • Transparentteja tilejä, mikä tarkoittaa sitä että tilesetit luodaan tästedes PNG-kuvina
  • Käänneltyjä tilejä, mikä tuo helpotusta tilesettien tekijöille, kun yhtä tileä ei enää tarvitse kopioida tilesettiin eri asennoissa.
  • Useampaa tilesettiä, mutta näidenkin kanssa saa käyttää älliä.
  • Tilesettien upotusta karttatiedostoon, eli tilesettejä ei enää tarvitse kuljettaa karttatiedostojen mukana, vaan ne kulkevat karttatiedostossa.
Karttatiedoston rakenne tulee muuttumaan sen verran, ettei nykyisellä MEMAPPERilla luodut kartat ole yhteensopivia tulevien peli- ja MEMAPPER-versioiden kanssa. Julkaissen uuden betan pian, ja odotan että joku veljeskunnasta antaa UIsta ja yleisestä käytettävyydestä kommentteja, jotta softaa voi kehittää eteenpäin. Sen jälkeinen MEMAPPER-versio tukee todennäköisesti uutta karttaformaattia.

Tiedoston speksit pitäisi kirjoittaa, ja nyt kun on aikaa, voisin yrittää sitä.

Tiedoston ensimmäinen tavu ilmaisee kirjastoversion, tätä speksiä noudattavissa tiedostoissa tämän tavun arvo on 3. Seuraava tavu ilmoittaa kartan leveyden tileissä, sen jälkeen tulee korkeus. Neljäs tavu ilmaisee layereiden lukumäärän. Seuraavaksi tulee leveys*korkeus*layerien määrä verran sarjaa, jossa ensimmäinen ja toinen tavu ilmaisevat X,Y - koordinaatit joilta kartan tile löytyy tilesetiltä. Sarjan kolmas tavu ilmaisee monennelta tilesetiltä tile on, ja neljäs tavu sarjassa kertoo tilen kulman. Tilen kulma on 90astetta*sarjan neljäs tavu. Kun sarjoja on tullut tarpeeksi monta (leveys*korkeus*layerien_määrä*4), on tultava ns. EOS-tavu (255), joka merkitsee että layeri on nyt luettu loppuun. Jos oikeassa kohtaa on joku muu kuin EOS-tavu, on karttatiedosto virheellinen, ja sitä ei voi hyväksyä.

Ensimmäisen EOS-tavun jälkeen tulee samaa neljän tavun sarjaa uudelleen leveys*korkeus*layerien_määrä, merkaten toisen layerin sisältöä. Uudet layerit taitetaan samojen periaatteiden mukaan kuin ensimmäinenkin, ja uudet layerit tukevat transparencyä, mitä eka layer ei tee. Kun viimeisen layerin EOS-tavu on kohdattu, eli on luettu tiedoston neljännen tavun verran EOS-merkkejä, alkaa hit-data. Hit-dataa on vain kartan_w*kartan_h verran, eli toisen ja kolmannen tavun tulon verran, ja jos hit-datan joukosta löytyy jotain muuta kuin 1 (=true ("tälle tilelle saa astua")) tai 0 (=false ("tälle tilelle ei saa astua")), on tiedosto viallinen. Karttatiedosto päättyy EOS-tavuun.

Mutta, olen puhunut siitä että tilesetit upotettaisiin karttatiedostoon. Miten tämä tapahtuisi?

Helppoa, rakkaat lukijani. Mietin pari päivää että miten upottaisin n-määrän PNG-kuvia turvallisesti oman datani joukkoon, ilman sitä riskiä että png-kuvan sekaan joutuisi muun kuvan dataa tai omaani. Sherlokkasin lopulta, että MS Wordin .docx - tiedostot, joita wordillä avataan, ovat tunnetusti vain zippitiedostoja jännällä tiedostopäätteellä. Etsin siis Javalle ja C++lle zippikirjastot, ja nyt kun olen ne löytänyt, voin toteuttaa MERPGille ja karttasoftalle tarjottavat karttatiedostot zippeinä, jotka sisältävät todennäköisesti juoksevasti numeroidun tilesetläjän ja binääritiedostona karttadatan, tiedoston jonka speksasin ylle.

Koodaamisiin :P

No comments:

Post a Comment