1.0 Estructura del Mundo.
Ultima modificación : 20 de Noviembre de 2001.

Se llama mundo al conjunto de mapas disponibles, enlazados entre si por alguna regla o norma.
Un mundo puede contener como máximo 100 mapas y como mínimo 1. Aunque no se justifica crear un mundo para 1 solo mapa, puede darse alguna situación particular que así lo requiera.
También, sin muchas modificaciones pueden crearse varios mundos distintos. Por lo que el limite total de mapas es casi imposible de calcular. Solo por dar un ejemplo... con 10 mundos distintos de 100 mapas cada uno, tendriamos 1000 mapas diferentes... y, si consideramos que en lugar de 10 mundos, podriamos tener 32000 mundos distintos, el numero total de mapas ascenderia a mas de 3 millones de mapas...

1.1 Límites de mapas.

Para poder organizar todos estos mapas, es necesario crear reglas firmes que permitan la libre interaccion con el usuario y ocultar cualquier indicio de cambio de mapa para el usuario , de esa forma se genera un mundo uniforme aparentemente conformado por un solo mapa gigantesto. Aunque en la realidad y para optimizar las cargas, este mundo este compuesto por varios pequeños mapas.

0 10 20 90
1 11 21 91
2 12 22 92
9 19 29 99

Aquí podemos observar un ejemplo de un mundo compuesto por 9 mapas. El mapa principal, en donde nos encontramos es el 11. Los mapas en gris muestran hasta donde es ampliable el mundo (0 - 99)

Como veras los 9 mapas que componen este mundo no estan numerados del 0 al 9, sino que son : 0,1,2,10,11,12,20,21,22

Esto se debe a que matematicamente, es mas simple unir mapas con estos numeros que numerados de corrido. Por ejemplo:

Como estamos en el mapa 11, para calcular nuestro mapa superior haremos MapaPrincipal (11) - 1 = Mapa 10. La operacion contraria para calcular nuesto mapa inferior . MapaPrincipal (11) + 1 = Mapa 12.

Siguiendo con este sistema vemos que para los demas mapas hay que sumar o restar 9, 10 y 11, Como veremos debajo.

-11 -1 +9
-10 0 +10
-9 +1 +11

De forma análoga, la ubicación de los mapas puede ser comparada con una matriz de 10x10.

y | x 0 1 2 9
0 00 10 20 90
1 01 11 21 91
2 02 12 22 92
9 09 19 29 99

1.2 Límites de mundo.

Ya hemos visto como se unen los mapas para formar el mundo, pero, que sucede cuando llegamos al mapa 90? Si quisieramos seguir para la derecha, nos encontrariamos que no existe el mapa 100 (90+10). Por lo que deberíamos evitar el avance de nuestro personaje.
Para evitar esta limitación, se me ocurre que podria recomenzarse desde el mapa 0. Esto "graficaria" un planeta real, sería como dar la vuelta al mundo.
La forma de razonamiento seria la siguiente:

Si Nro de mapa destino es mayor o igual(*1) al tamaño del mundo, entonces mapa destino es igual al primer mapa ubicado en la misma coordenada Y.

Matemáticamente:
Si Mapa_Destino >= Mundo_X entonces Mapa_Destino = Mundo_X - Mapa_Destino

100 >= 100 ; Mapa_Destino = 100 - 100 = 0;

(*1) Mayor o Igual porque hay que recordar que si bien el mundo tiene 100 mapas, el mapa 100 no existe, los mapas se cuentan de 0 a 99.

Aún no se han analizado los problemas que puede traer este sistema, ni se han realizado los cálculos finos. Solo grafica mi propuesta de generar un mundo "no plano".

1.3 Sistema MultiMundos

Multimundos es un concepto un tanto extraño si se quiere. La idea es que existan varios mundos como los descriptos anteriormente, pero sin interacción entre ellos.
Supongamos lo siguiente:

Tengamos Mundo1 y Mundo2.
La única forma de acceder desde Mundo1 a Mundo2 y viceversa seria a traves de un "portal especial". Cuando se sucede este cambio. Todas las variables de Mundo1 quedan reemplazadas por las de Mundo2. Por lo que todo lo que suceda en Mundo1 no afectara en nada lo de Mundo2 (Interaccion 0)

Esto puede ilustrarse como planetas separados.
Los puntos de transporte de un mundo a otro serian fijos.. es decir para acceder a mundo2 tendriamos que ir al portal ubicado en Mundo1, Mapa 11, x=10, y=56. Eso te trasladaria por ejemplo a Mundo2, Mapa 35, x=29, y=5.

Como verán este podria ser un concepto muy interesante, lo que le daria al juego la posibilidad de expandirse mas alla de la tierra para conquistar otras galaxias.

2.0 Estructura de los MAPAS

Un mapa es básicamente un conjunto de celdas o lugares en los cuales pueden posicionarse diferentes objetos o personajes. Estas celdas serán llamadas de ahora en adelante TILES.
Nuestros mapas actuales estan compuesto por 30 Tiles horizontales y 60 Tiles verticales. El motivo de esto es que la altura del TILE es de 32 y el Ancho es 64 (pixels). Debido a esto, el tamaño vertical del mapa es el doble del ancho para generar un mapa de igual dimensiones en sus lados.
En un futuro, la cantidad de tiles horizontales y verticales será ampliada.
Los mapas cuentan con tres layers a saber : 1- Tipo de suelo 2-Tipo de estructura 3-Status.

El primero define que tipo de suelo tenemos : Pasto, Cemento, Rocas, Desierto, Agua, Fango, Etc...
El segundo define si ese TILE estará ocupado por alguna estructura, como pueden ser : Arboles o plantas, rocas, casas, ruinas, etc.
El tercer layer indica si nuestro personaje podrá pararse sobre el o atravesarlo.

Aquí un ejemplo.

Archivo : Mapa11.map

000 000 601 601 601 021 1a1 1<1

Aqui hay 8 grupos de 3 numeros, fueron separados para su mejor visualización pero en un mapa real se encuentran uno seguido de otros.
El primer y segundo grupo (000) indica un suelo de pasto, desocupado, y por el cual se puede caminar.
El tercero ,cuarto y quinto grupo (601) indica un suelo de Agua, desocupado, pero por el cual no se puede pasar (debido a que el 3 numero es un 1, ese tile esta bloqueado)
El sexto grupo (021) indica un suelo de pasto, un arbol (el 2) y obviamente no caminable. Si tuvieramos 020, nuestro personaje podria atravesar el arbol.
El séptimo y octavo (1a1, 1<1) indican un suelo de cemento , construcciones , bloqueado. Las construcciones pueden ser una pared y una roca, o lo que este definido para ese simbolo.Luego veremos esas definiciones.

2.1 Definiendo las figuras que representan cada símbolo en un mapa.

Como vimos antes, el valor 601 en un mapa representa un TILE con Agua como suelo, y no caminable. Pero que hace que el agua este allí?
Para responder esa pregunta vamos a tener que conocer como el sistema indexa los gráficos.

Los Gráficos están divididos por categorias a saber:

* Suelos.
* Estructuras.
* Arboles.
* Ruinas.
etc...

Todos los suelos se encuentran en un solo archivo de dibujo (.BMP) puestos uno detrás del otro y separados por una cantidad de pixeles contantes.
Veamos el caso real para los tipos de suelos:

Todos los suelos estan almacenados en el archivo TILES.BMP
El sistema crea una Superficie (Espacio de memoria donde almacena información gráfica) y carga el archivo TILES.BMP
Una rutina lee el código de suelo que debe dibujar, 6 en el caso de 601, y busca en la Superficie el sexto TILE. Luego de eso, se dibujan solo los pixels que compromenten dicho TILE.
Si modificaramos el archivo TILES.BMP y pondriamos otro dibujo en la ubicacion 6, cuando en nuestro mapa tengamos 601, aparecerá el nuevo dibujo y ya no tendriamos agua, sino lo que hallamos colocado alli.

De igual manera se realiza con el segundo layer, el de las estructuras.

¿Pero, que sucede si tenemos mas de 9 estructuras distintas?
Al tener 3 lugares para definir un TILE de los cuales solo 1 es para las estructuras, si quisieramos acceder a la estructura indexada como 10 NO podríamos colocar

0101 : 0-Suelo de pasto , 10- Estructura nro10 , 1 - no caminable

Colocar eso en un mapa generaria la siguiente lectura:

010 1 : 0-Suelo de pasto, 1- Estructura Nro 1 , 0 - Caminable, 1-Suelo de cemento , ? Valor faltante para segundo tile, ? Valor faltante para segundo tile.

Este inconveniente es muy simple de solucionar con la tabla Ascii.
Como podrán comprobar ALT + 48 , nos da el 0, y ALT + 57 nos da el 9. Si quisieramos colocar la estructura 10 tendriamos que hacer, ALT + 58. Por lo que la triada de numeros correcta para colocar un suelo de pasto, la estructura nro10 y bloquear el TILE seria.. 0
:1

Si quisieramos la estructura nro 21, seria ALT + 69 , por lo que quedaria 0E1

Este sistema nos estaría brindando aprox. 200 tipos de estructuras y suelos distintos, lo que me parece mas que suficiente, por lo menos de momento. Igualmente, si en un futuro se requeririan mas estructuras, puede usarse el Layer de estatus para indicar un nuevo indice de estructura. Por ejemplo.

0E3 ------------------> 0, suelo de pasto; E estructura 21; 3, es impar, implica tile bloqueado.

Si el layer_status esta entre 2 y 3 , la estructura final es , nro de estructura (21) + 200
Si el layer_status esta entre 4 y 5 , la estructura final es , nro de estructura (21) + 400

Con este sistema podriamos tener mas de 1000 estructuras diferentes de una forma muy simple.
Este sistema no esta chequeado, ya que de momento no tenemos necesidad de tener 1000 estructuras distintas, pero pienso que seria la posible solucion si se presentase un problema de este tipo.

¿Y... dirán, que pasa si tenemos mas de 200 suelos?
Realmente, ahi no podríamos usar el Layer_Status, porque ya esta usado con las estructuras, asi que habria que pensar otra solución, pero piensen algo... Un mundo con mas de 200 tipos de suelo? No me parece razonable... Aunque.. todo puede ser.. ;o)