Página 1 de 13

Tiled como editor de mapas en GNU/Linux

Publicado: Sab, 05 Oct 2013, 14:27
por son_link
Bueno, como algunos ya sabréis por el hilo de la Churrera Installer andaba buscando alternativas de algunos de los programas usados que solo están para Windows sustituyéndolas por alternativas que corran nativamente en GNU/Linux y D_Skywalk comoento Tiled.
Pues bien, esta mañana lo he estado probando y la verdad es que no esta mal, quitando que no tiene una opción del Mappy, y es poder poner guías para dividir la pantallas del juego, si bien abajo te dice en que casilla estas (por ejemplo 16,0, por lo que ya sabrías que estas en la segunda pantalla de arriba)
Para hacer la prueba he creado una de las pantallas del juego del tutorial y guardado al formato nativo (.TMX, que no es mas que un fichero en formato XML) y exportado a un fichero en formato JSON. Esto es una muestra del archivo generado:

TMX (lo he recortado un poco, que son muchas lineas):
$this->bbcode_second_pass_code('', '
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.0" orientation="orthogonal" width="15" height="10" tilewidth="16" tileheight="16">
<tileset firstgid="1" name="mappy" tilewidth="16" tileheight="16">
<image source="mappy.bmp" width="256" height="16"/>
</tileset>
<layer name="Capa de Patrones 1" width="15" height="10">
<data>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="8"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="8"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="8"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="8"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="8"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="7"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="8"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="7"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
<tile gid="1"/>
...
</data>
</layer>
</map>
')

JSON:
$this->bbcode_second_pass_code('', '
{ "height":10,
"layers":[
{
"data":[8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 1, 1, 1, 8, 1, 1, 8, 1, 1, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 12, 12, 12, 8, 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
"height":10,
"name":"Capa de Patrones 1",
"opacity":1,
"type":"tilelayer",
"visible":true,
"width":15,
"x":0,
"y":0
}],
"orientation":"orthogonal",
"properties":
{

},
"tileheight":16,
"tilesets":[
{
"firstgid":1,
"image":"mappy.bmp",
"imageheight":16,
"imagewidth":256,
"margin":0,
"name":"mappy",
"properties":
{

},
"spacing":0,
"tileheight":16,
"tilewidth":16
}],
"tilewidth":16,
"version":1,
"width":15
}
')

La parte importante en ambos casos esta dentro de data, que esta dentro de layer (Tiled permite múltiples capas)
Como se ve guarda un numero correspondiente al numero del tiled usado, siendo leído de izquierda a derecha y de arriba hacia abajo.
Yo creo que se puede usar Tiled en lugar de Mappy en Linux, y crear un conversor en Python que coja uno de los 2 formatos que comento (si bien prefiero JSON por que es mucho mas sencillo de usar en Python) y que crease directamente el archivo .h listo para ser usado.
¿Que opináis?

Re: Tiled como editor de mapas en GNU/Linux

Publicado: Sab, 05 Oct 2013, 18:17
por na_th_an
Considero que no poder poner guías es una putada bastante grande a la hora de hacer un juego por pantallas. Me parece un poco increíble que un editor tan completo no permita algo tan sencillo. Mappy tiene un sistema de plugins bastante potente y se puede añadir funcionalidad programando pequeñas funciones en LUA... ¿No tiene algo parecido tiled? Porque si pudiésemos dotarle de esta característica que falta, sería perfecto.

También está la opción de ponerse a mirar los fuentes o contactar con el autor.

En resumen: me parece guay, pero mucho me temo que hacer un juego con esto sin tener guías de pantallas puede llegar a ser un poquito coñazo :D Solo hay que contar y mirar las coordenadas, pero no me veo yo haciendo un mapa sin guías.

Un conversor sería muy sencillo. Si lees el json y los datos de la capa te quedan en un array, escribir un conversor se me antoja una tarea harto sencilla :)

Re: Tiled como editor de mapas en GNU/Linux

Publicado: Mié, 09 Oct 2013, 09:59
por son_link
He estado revisando las opciones y mirando la documentación, pero no hay nada para poner guías, salvo que alguno sepa de Java e intente hace una extensión que lo haga posible.
Buscare otras posibles opciones y comento en este mismo hilo

Re: Tiled como editor de mapas en GNU/Linux

Publicado: Mié, 09 Oct 2013, 10:46
por angel
Echadle un vistazo a este:

http://gbamapedit.sourceforge.net/

Igual sirve :D

Re: Tiled como editor de mapas en GNU/Linux

Publicado: Mié, 09 Oct 2013, 11:38
por son_link
$this->bbcode_second_pass_quote('angel', 'E')chadle un vistazo a este:

http://gbamapedit.sourceforge.net/

Igual sirve :D

Es viejo, no se actualiza desde el 2005 y no compila con la versión 4.8 de GCC. Probare con versiones anteriores a ver

Re: Tiled como editor de mapas en GNU/Linux

Publicado: Vie, 25 Oct 2013, 10:41
por antoniovillena
He creado unas utilidades para pasar los mapas de Mappy a Tiled y exportar a código los mapas de Tiled. De hecho iba a crear un hilo nuevo al respecto pero como ya estaba este, pues os lo robo.

La aplicación es ésta:

http://retrolandia.net/foro/showthread. ... 78&pid=441

Como véis he resuelto el tema de las líneas divisorias de una forma cutre pero eficaz. Lo siguiente a integrar son los enemigos para así poder prescindir del colocador. Todavía no me he empapado muy bien en el formato de enemigos/colocador, aun así prefiero pedir ayuda para ver cómo metemos los enemigos en el mapa.

La idea base es crear una nueva capa del tipo "Capa de objetos", intruducir el tileset de los sprites (sprites.png) como segundo tileset y ubicar los sprites dos veces por cada enemigo (como objeto en la capa de objetos, no como tile en la capa de patrones original). Supongo que el tipo de enemigo ya viene identificado por el sprite por lo que no hace falta añadir esa información. Sin embargo sí que es necesario indicar que ambos sprites pertenecen al mismo enemigo mediante un identificador, y la velocidad que llevan. También habría que introducir los hotspots, ubicando un único punto. El caso es que no sé cual es la forma más apropiada para hacerlo. Cada objeto tiene 2 atributos (nombre y tipo) y todas las propiedades que queramos. Podemos poner por ejemplo una propiedad que se llame speed y valga 1, 2 ó 4 y cosas así.

¿Sugerencias?

Re: Tiled como editor de mapas en GNU/Linux

Publicado: Vie, 25 Oct 2013, 10:57
por son_link
La idea me parece buena.
A ver que opina el resto

Re: Tiled como editor de mapas en GNU/Linux

Publicado: Vie, 25 Oct 2013, 11:05
por na_th_an
Una cosa sobre los enemigos:

Aunque actualmente el colocador, además del formato propio .ene, exporta archivos de código .h con todo lo necesario, tengo terminado un "conversor total" que genera un binario completo del nivel (mapa, gráficos, colocaciones de enemigos/objetos). Este conversor utiliza los archivos .ene del colocador, así que si váis a hacer algo, es necesario conservar ese tipo de archivos "intermedio".

Los archivos .ene son muy sencillos:

$this->bbcode_second_pass_code('', 'CABECERA

Offset Size Qué
========================================================
0 128 nombre del archivo del mapa (.MAP)
128 128 nombre del archivo del tileset (.BMP)
256 1 map_w
257 1 map_h
258 1 scr_w (siempre 15 para la churrera)
259 1 scr_h (siempre 10 para la churrera)
260 1 n_enem (siempre 3 para la churrera)

ENEMY CHUNK. Habrá map_w * map_h * 3 de estos
a partir del byte 261:

Offset Size Qué
========================================================
0 1 tipo de enemigo
1 1 posición x inicial (en tiles, 0 - 14)
2 1 posición y inicial (en tiles, 0 - 9)
3 1 posición x final (en tiles, 0 - 14)
4 1 posición y final (en tiles, 0 - 14)
5 1 velocidad (en píxels por frame, 0, 1, 2, 4, 8)
6 1 sin usar
7 1 sin usar

HOTSPOT CHUNK. Habrá map_w * map_h de estos,
a partir del byte 261 + (map_w * map_h * 3) * 8:

Offset Size Qué
========================================================
0 1 xy, posición del hostpot (en tiles, packed, XXXXYYYY)
1 1 t, tipo del hotspot')

Re: Tiled como editor de mapas en GNU/Linux

Publicado: Vie, 25 Oct 2013, 11:37
por antoniovillena
$this->bbcode_second_pass_quote('na_th_an', '
')Aunque actualmente el colocador, además del formato propio .ene, exporta archivos de código .h con todo lo necesario, tengo terminado un "conversor total" que genera un binario completo del nivel (mapa, gráficos, colocaciones de enemigos/objetos). Este conversor utiliza los archivos .ene del colocador, así que si váis a hacer algo, es necesario conservar ese tipo de archivos "intermedio".


No hay problema, puedo hacer una utilidad Tmx2Ene o algo parecido.

$this->bbcode_second_pass_quote('na_th_an', '
')Los archivos .ene son muy sencillos:

$this->bbcode_second_pass_code('', 'CABECERA

Offset Size Qué
========================================================
0 128 nombre del archivo del mapa (.MAP)
128 128 nombre del archivo del tileset (.BMP)
256 1 map_w
257 1 map_h
258 1 scr_w (siempre 15 para la churrera)
259 1 scr_h (siempre 10 para la churrera)
260 1 n_enem (siempre 3 para la churrera)

ENEMY CHUNK. Habrá map_w * map_h * 3 de estos
a partir del byte 261:

Offset Size Qué
========================================================
0 1 tipo de enemigo
1 1 posición x inicial (en tiles, 0 - 14)
2 1 posición y inicial (en tiles, 0 - 9)
3 1 posición x final (en tiles, 0 - 14)
4 1 posición y final (en tiles, 0 - 14)
5 1 velocidad (en píxels por frame, 0, 1, 2, 4, 8)
6 1 sin usar
7 1 sin usar

HOTSPOT CHUNK. Habrá map_w * map_h de estos,
a partir del byte 261 + (map_w * map_h * 3) * 8:

Offset Size Qué
========================================================
0 1 xy, posición del hostpot (en tiles, packed, XXXXYYYY)
1 1 t, tipo del hotspot')


Gracias por la info, os muestro la idea que tengo en mente. Echadle un vistazo a este mapa (de dogmole) en el que he pasado a mano los enemigos de la primera pantalla. Para los hotspots he usado un círculo porque no me convence ninguno de los sprites, pero se puede cambiar. También podemos poner la velocidad en parte del nombre o el tipo, y así no tener que usar atributos. Os aconsejo mirar también el código XML con un editor. Por cierto tenéis que ubicar este archivo en el directorio /map, para que estén accesibles los tilesets en ..\gfx\work.png y ..\gfx\sprites.png

Re: Tiled como editor de mapas en GNU/Linux

Publicado: Vie, 25 Oct 2013, 11:54
por na_th_an
Ahora mismo no me puedo poner a instalarme cosas en el curro, pero cuando arrive a casa, mereche un premio ;)