dimecres, 6 de maig de 2009

Cas d'estudi: Super Mario Bros - Part I: L'editor

Be, per a començar he fet l'editor. No vaig a parlar de com està fet, ja que es Visual Basic .NET i no ens importa per al joc en sí. El que vaig a comentar es el format de mapa.

Cada mapa serà de 256x15 tiles, ja que es una restricció similar a la que tenia el joc de NES. Més avant crearé zones per al tema de entrar en les tuberies i tal, pero això ja es parlarà en el seu moment.

He dividit el mapa en dos parts: la part dels tiles que se van a pintar i la part del tipus de tile.

El array dels tiles a pintar es un array de bytes, cada un apunta a un tile que es traurà de un bitmap. Els 7 primers bits son els que ens diràn el tile a pintar. Per tant, estarém restringits a 128 posibles tiles. El bit de major ordre de cada tile ens dirà, si està a 1, que el tile té una animació.

Les animacions les he inclos perque, al treballar en 32 bits de color no tenim paleta, i resulta que el canvi de color de les monedes i els taulells amb interrogant es un canvi de paleta. El fingirem afegint al bitmap de tiles el tile en els tres diferents colors. Si un tile es animat, farà un cicle entre ell i els dos següents tiles en el bitmap de tiles.

El array de tipus de tile també es un array de bytes. Per ara he definit els següents tipus de tile:

- Buit: Es un tile atravesable, sense més.
- Solid: Es un tile que no es pot atravesar, sense més.
- Trencable: Es un tile que, quan sigues Super Mario podrás trencar de una cabotada.
- Solta moneda: Es un tile que al pegar-li cabotada et donarà una moneda.
- Solta monedes: Es un tile que al pegar-li cabotades et donarà fins a 12 monedes.
- Solta seta: Es un tile que al pegar-li cabotada soltarà una seta de Super Mario.
- Solta estrela: Es un tile que al pegar-li cabotada soltarà una estrela.
- Solta vida: Es un tile que al pegar-li cabotada soltarà una seta de vida.

Amb açò podem fer les típiques combinacions de interrogant que solta seta, taulell trencable, etc... E inclus buit que solta vida. De totes formes, tot aixó ho vorem més avant.

Així doncs, el format del mapa es el següent:

Bytes Contingut
====== =========
1 Versió del mapa
1 Nombre de caràcters de l'arxiu de tiles (x)
x Nom de l'arxiu de tiles
3840 Array de tiles a pintar
3840 Array de tiles de bloc


Podeu descarregar l'editor i el seu codi font. L'editor encara es un poc tosc, pero fa el seu treball. He adjuntat un GIF amb tiles i el GIF necesari per als blocs. A més he inclos un exemple de mapa, amb uns pocs tiles ficats.


El funcionament de l'editor es el següent: Primer tria el arxiu de tiles en la caixa de text de baix. Pots triar qualsevol arxiu d'on siga, pero per a que funcione ha d'estar en el mateix directori que l'executable. Una vegada carregat, feu click sobre un tile, feu click sobre un bloc i marqueu o desmarqueu el check d'animació; i aleshores ja podeu fer click en el mapa per a pintar el tile resultant.

En l'editor, els tipus de tile (blocs) es pintaràn com un marc sobre el tile a pintar. Supose que es prou intuitiu, pero si no ho es digau-m'ho i ho explique millor.

Si voleu modificar i/o compilar l'editor necessitareu el Visual Basic .NET 2008 Express, descarregable desde ca Microsoft. Per a editar i compilar en Linux no estic segur, ja que MonoDevelop crec que només admet C#. No obstant, per a executar el programa ja compilat desde Linux tindreu que sudoaptgetar l'ultima versió de Mono i, a més, una extensió o parxe per a executar Visual Basic. Mon, com crec que eres l'unic Linuxero que segueix activament el blog, si t'interessa m'ho dius i t'ho mire, que per casa ho tinc apuntat.

1 comentari:

  1. De moment no és precís. Com sé que ho tens apuntat el dia que vulga compilar ja t'ho pregunte o ho busque jo.

    De moment només seguisc la teoria del blog ;)

    ResponElimina