Formato que genera mapcnv

Soporte técnico sobre los lanzamientos de MojonTwins y comentarios sobre los güegos. Ofrecemos soporte técnico con Fourspriter, te ayudamos con ZX Basic o Z88DK, te damos pistas some cómo saltarse un bicho y cosas así.

Moderador: na_th_an

Avatar de Usuario
Javi Perez
Mensajes: 13
Registrado: Lun, 08 Jun 2015, 11:47

Formato que genera mapcnv

Mensajepor Javi Perez » Jue, 09 Jul 2015, 12:04

Hola,

He dado por casualidad con un turorial en EMS donde explicáis como usar la herramienta mappy y debo decir que ha sido una revelación. Estoy haciendo pruebecillas con Z88DK y me estaba montando un mapa a mano con un par de tiles de prueba que he creado. Pero la tarea es muy tediosa y creo que mappy puede venir de perlas. Lo que necesito es muy simple, algo que me permita definir qué tile se ha de colocar en cada grid del mapa.

Primera pregunta, probablmente estúpida, es si se puede usar el mappy y el mapcnv para juegos que no se programen con la Churrera. Entiendo que sí, pero no estoy seguro de sí hay alguna característica ad-hoc que impidan usarlas fuera de esos entornos.

La segunda pregunta es sobre el formato del array que se encuentra dentro del fichero mapa.h generado por mappy. Entiendo que el array contiene IDs de tiles pertenecientes a algún tileset, pero no lo tengo claro...A modo de ejemplo, este array de uno de vuestros juegos, Dogmole creo:
$this->bbcode_second_pass_code('', '
unsigned char mapa [] = {
119, 119, 119, 119, 119, 119, 119, 119, 0, 0, 0, 0, 0, 0, 0, 112,...
')

Gracias!
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Formato que genera mapcnv

Mensajepor na_th_an » Jue, 09 Jul 2015, 12:44

Buenas.

Mapcnv te sirve para coger los datos que exporta mappy en formato "raw" (sin cabeceras, sólo un byte por tile del mapa; si no sabes cómo configurarlo mejor que te bajes el mappy mojono, que viene preparado -> https://www.mojontwins.com/warehouse/Mappy-mojono.rar) cuando grabas el mapa con extensión ".map" y dividirlo en pantallas.

Mappy exporta todo el mapa como un rectángulo de tiles gigante. Si tienes un mapa de 4x4 pantallas y cada pantalla es de 10x10 tiles, lo que exporta mappy es un rectángulo de 40x40 tiles ordenados por filas. Si estás haciendo un juego por pantallas es más cómodo tener los tiles de cada pantalla "juntos", por lo que hay que reordenar esa información.

Mapcnv hace eso. Recibe como parámetros las dimensiones del mapa en pantallas y las dimensiones de cada pantalla en tiles y toma el rectángulo de mappy y reorganiza los datos. En el array generado, y siguiendo con el ejemplo de 10x10 tiles en 4x4 pantallas, primero irán los 100 tiles de la primera pantalla, luego los 100 de la segunda... y así hasta la decimosexta. Para pintar una pantalla sólo te tienes que ir a la posición N*100 y pintar 100 tiles a partir de ahí.

Los datos que has puesto usan un formato empaquetado en el que cada byte contiene dos tiles. Cuando sólo hay 16 tiles, se usan 4 bits para cada tile y por tanto en un byte podemos meter dos, con lo que el mapa ocupa la mitad. Eso se consigue con el parámetro PACKED. Obviamente si usas más de 16 tiles no puedes empaquetar así.

Aunque no vayas a usar la churrera, es bueno que te leas el capítulo del tutorial donde se explica cómo se maneja Mappy y se usa mapcnv, y lo adaptes a tus necesidades.
Como diría Rorshach: "Urm..."
Avatar de Usuario
Javi Perez
Mensajes: 13
Registrado: Lun, 08 Jun 2015, 11:47

Re: Formato que genera mapcnv

Mensajepor Javi Perez » Jue, 09 Jul 2015, 19:54

$this->bbcode_second_pass_quote('na_th_an', '
')Aunque no vayas a usar la churrera, es bueno que te leas el capítulo del tutorial donde se explica cómo se maneja Mappy y se usa mapcnv, y lo adaptes a tus necesidades.

Muchas gracias por el consejo, acabo de leer ese capítulo y creo que el Mappy tal y como lo tenéis compilado me sirve perfectamente.

Por otro lado, a raíz de haber generado el mapa y tratar de renderizarlo con las funciones de la SP1, no sé si he dado con un bug, o una limitación de la librería, o me quedado sin memoria o que se yo :x :x :x

He definido un tile de prueba 16x16 con el que quiero "forrar" una pantalla entera. Para ello he dimensionado el array del mapa para almacenar los 192 tiles de 16x16. El problema que me encuentro es que sólo puedo pintar 38 tiles. A partir del 39 el programa peta. ¿Existe alguna limitación en cuanto al número máximo de tiles que se pueden pintar simultáneamente con SP1?