dijous, 9 d’abril de 2009

Cas d'estudi: Gauntlet - Part III: El editor

Després d'una nit en la que he pogut dormir unes quantes hores seguides, hui m'he alçat reconfortat i m'he ficat a la faena.

He començat l'editor de mapes. Per ara nomes pot ficar parets o llevar-les. Aniré completant-lo conforme el joc ho requereixca.


En principi, parlar del format del mapa. El mapa en sí es un simple array de 32x32 bytes, en el qual, ara mateix, nomes pots trobar zeros (buit) o unos (paret). Aquest es el mapa que m'interesa per a procesar colisions i tota la peixca interna.

No obstant, hi ha un segon mapa que es el que realment es pinta ¿perqué? Si vos fixeu en els tiles de les parets del Gauntlet no son tots iguals:


Com podeu vore, depenent de si un bloc de paret te un altre bloc a algún costat, es pinta de una forma o altra. Es més, els tiles del piso tampoc son iguals: Si tenen una paret prop potser tinguen sombra. Aixó ens dona un total de 16 posibilitats de paret (en la versió arcade en son alguna més al ficar més sombretes xules, pero per ara ho ignorarem) i 8 posibilitats per al piso (2 de les quals son iguals, pero també ho ignorarem)

Així pues, el que faig es, a partir del mapa de parets i buits, monte altre mapa en el que calcule, per a cada bloc, quin tile li toca mostrar. Aquest calcul el faig al principi de carregar i mostrar el mapa, i després vaig actualitzant nomes els tiles que canvien. En l'editor els tiles canvien molt a sovint, pero en el joc hi ha pocs moments en que canvien (obrir portes, que encara no les havem tractat, i obrir "parets trampa", que tampoc les tractem encara).

La veritat es que en principi no volia fer-ho per al editor, que no passa res si es veu mal, pero al final ho he fet tant per practicar-ho com perque sempre mola més vore-ho tot sucoset ;-D

Altra questió es el format dels mapes. Com segurament vaja canviant durant el desenvolupament, he fet que el primer byte del mapa indique la versió. Així, l'editor el primer que fa es llegir este byte i redirigir a la rutina de càrrega de la versió del mapa corresponent. Ho he fet així per no perdre mapes de versions anteriors. Ara no importa molt, pero si cap al final, amb uns quants mapes fets, he de canviar el format, pot ser un fer la mà refer els mapes.

Per ara, els dos següents bytes estàn a zero, pero representaràn el tileset i color de les parets i el piso. I després ja van 32x32 bytes que representen cada bloc del mapa (en format simple, el calcul de tiles que he comentat avans es torna a fer desde el joc, me pareix una opció més segura i, a més, el precalcul de tiles es ràpid i es fa nomes una vegada). Els bloc estàn guardats en format de lectura occidental, d'esquerra a dreta i dalt a baix. O siga: Y=0, totes les X, Y=1, totes les X...).

Be, en el pròxim capitol ja començarem a escriure codi del propi joc. Començarem per implementar el pintat del mapa, el scroll i el centrat del mapa en varios punts, com fa el Gauntlet per a mantindre a tots els personatges en pantalla. Començare sobre la base del Patman en el que respecta a estructura del joc, pintant, sò i teclat.

Volia anar ficant a disposició de tots el codi font conforme es va escrivint, i el subversion del Google Code es perfecte per a tal cosa (on està el Arounders), però necessite un nom per al projecte, i ficar-li Gauntlet no em pareix apropiat. ¿Algú me proporciona un nom per a aquest Gauntlet Jailer?

PD: Ah, i ficaré també els executables i codi dels programetes perifèrics que vaja fent, com l'editor de mapes, encara que estos sense control de codi font.

Cap comentari:

Publica un comentari a l'entrada