Saturday 11 June 2011

Karttatiedoston lisäspeksausta

Kuten hyvin tietänette, MERPGin ja MEMAPPERin lataamat karttatiedostot ovat hassusti nimettyjä zip-tiedostoja, ja tämä tuo minulle mahdollisuuksia, jotka tajusin vasta vähän aikaa sitten. Zippitiedostoon voi nimittäin piilottaa vaikka minkälaista tietoa, joka ei häiritse muuta tiedostossa olevaa dataa, ja jonka olemassaolosta ei lataava ohjelma edes tiedä, ellei se tiedä mitä on hakemassa.

Tämä mahdollistaa mm. sen, että saan annettua jokaiselle karttatiedoston layerille oman opacity - arvon. Tämä arvo tuottaa saman efektin, kuin Paint.netin vastaava, joten en ala selittämään sen toimintaa enempää kuin sanomalla, että toiminta on identtinen pdn:n vastaavan kanssa. Mainitsen vain, että sekä editori että pelimoottori tukevat tätä ominaisuutta.

Merkitsen layerien opacityt todennäköisesti sillä helpoimmalla mahdollisella tavalla, joka avaa ovet myös modaajille, jotka eivät jaksa harrastaa MEMAPPERia. Merkitsen tekstitiedostoon raakatekstinä joka riville jokaisen layerin opacityn. Tuo arvo on, luonnollisesti, välillä 0-255, koska pikselin alfa voi olla vain tuolla välillä.

Minua tosin jännittää miten aion toteuttaa tuon opacity-arvon käytännössä. Todennäköisesti parasta olisi ensin piirtää koko layer yhdelle pinnalle, laskea pinnan jokaisen pikselin alfaa (255-LayerinOpacity)n verran, ja sitten piirtää pinta näytölle.

Toinen sovelluskohde tälle zippirakenteelle on metadata. Pelimoottori ei tee mitään tiedolla siitä, minkäniminen mikäkin layer on, mutta editorin käyttäjät tahtonevat antaa layereille fiksumpia nimiä kuin "Layer N" (missä 0>=N>LayerCount). Tälläisen ominaisuuden implementointi on sitäpaitsi erittäin helppoa. Yksi tekstitiedosto, jonka jokainen rivi kertoo jokaisen layerin nimen (missä piirtojonon alin layer saa tekstitiedostosta ylimmällä rivillä olevan nimen).

Taidanpa siirtyä toteuttamaan näitä.

No comments:

Post a Comment