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.
|
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. |
||||||||||||||||||||||||||||||||||
|
De forma análoga, la ubicación de los mapas puede ser comparada con una matriz de 10x10.
|
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)