Tiled como editor de mapas en GNU/Linux

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

antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: Tiled como editor de mapas en GNU/Linux

Mensajepor antoniovillena » Sab, 26 Oct 2013, 11:56

No problem, lo tengo en cuenta para que se pueda poner cualquier número en el tipo. En el importador voy a tener que leer del archivo enems.h, parece ser que antiguamente no existía el colocador y se escribían a mano y me gustaría tener pasado los mapas de estos juegos a formato tmx. Esto no quita que se pueda exportar a .ene.
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Tiled como editor de mapas en GNU/Linux

Mensajepor na_th_an » Sab, 26 Oct 2013, 12:19

El colocador es anterior a la churrera :) Precisamente lo escribí para no tener que meter NADA a mano. Sin embargo, los valores de enems.h se calculan en base a los del colocador: el colocador fue una herramienta que hicimos en 2009 en plan genérico, para que nos sirviese para todo. De hecho, lo he usado para cosas que no son de la Churrera. Por eso los datos son diferentes.

Lo que sale en enems.h está preparado no solo para almacenar los valores iniciales de los enemigos, sino para contener su posición y estado dentro del juego. En el .ene sólo hay datos sobre la posición digamos "inicial", pero esto luego se convierte a una estructura de datos mayor. Además, se precalculan las cosas, porque así nos ahorramos el tiempo y espacio que necesita una rutina de inicialización.

Pongamos que enems.ene almacena cada enemigo así:

$this->bbcode_second_pass_code('', 'unsigned char t; // tipo de enemigo
unsigned char x; // posición x inicial (en tiles, 0 - 14)
unsigned char y; // posición y inicial (en tiles, 0 - 9)
unsigned char xx; // posición x final (en tiles, 0 - 14)
unsigned char yy; // posición y final (en tiles, 0 - 14)
unsigned char n; // velocidad (en píxels por frame, 0, 1, 2, 4, 8)
unsigned char s1; // sin usar
unsigned char s2; // sin usar')

En enems.h se escriben 12 bytes en 10 campos, que son los siguientes:

$this->bbcode_second_pass_code('', 'signed int x, y;
unsigned char x1, y1, x2, y2;
signed char mx, my;
unsigned char t;
unsigned char life;')

Para entendernos, voy a llamar p.* a los valores de enems.h y e.* a los de enems.ene

  • p.x y p.y almacenan la posición ACTUAL del enemigo. Son int y no unsigned char porque hay algunos tipos de enemigos con movimientos suave en los que se emplea aritmética de punto fijo y hace falta más espacio. Se inicializan con el valor de e.x *16 y e.y * 16.
  • p.x1 = e.x * 16, p.y1 = e.y * 16, p.x2 = e.xx * 16, p.y2 = e.yy * 16. Los "pivotes" de las trayectorias se precalculan y se pasan de tiles a pixels.
  • p.mx y p.my indican el movimiento en cada eje y se precalculan también. La ecuación es muy sencilla: p.mx = sgn (e.xx - e.x) * e.n. Así, un enemigo que empiece en el tile 10 y termine en el 2 y tenga velocidad 4 tendrá mx = -4 al principio.
  • p.t = e.t.
  • p.life se deja a 0 en enems.h y luego se inicializa al principio de cada partida con el valor que se establezca en config.h para la vida de los enemigos.

En resumen, enems.ene tiene un formato pensado para que sea fácil de leer, interpretar y modificar a la hora de editar las posiciones de los enemigos, y enems.h tiene un formato pensado para funcionar directamente como estructura de datos de control de los enemigos en el juego. Los datos de los enemigos se modifican directamente sobre la estructura que se define en enems.h. ¡Hay que ahorrar!
Como diría Rorshach: "Urm..."
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Tiled como editor de mapas en GNU/Linux

Mensajepor na_th_an » Sab, 26 Oct 2013, 12:23

Para más claridad, en el hilo de la churrera para Linux están los fuentes de todas las aplicaciones. En el código del colocador se ve como se genera el código exportado en enems.h
Como diría Rorshach: "Urm..."
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: Tiled como editor de mapas en GNU/Linux

Mensajepor antoniovillena » Sab, 26 Oct 2013, 13:05

Para mí es un poco más fácil leer del archivo .ene que del archivo enems.h, el problema es que no encuentro dicho archivo en los códigos fuentes de varios de vuestros juegos (Trabajo Basura, Zombie Calavera). Sin embargo el archivo enems.h está en todos los juegos y contiene la misma información que el archivo .ene, por lo que aunque me cueste más trabajo merecerá la pena importar de enems.h. En el peor de los casos (que tengamos el .ene y no el enems.h) siempre podemos tirar del colocador para generarlo.

Ya te digo que esto es a la hora de importar, para exportar se utiliza el formato .ene que es más flexible.
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Tiled como editor de mapas en GNU/Linux

Mensajepor na_th_an » Sab, 26 Oct 2013, 13:13

Eso es porque antes yo trabajaba de otra manera y tenía el colocador en otro sitio y los .ene están ahí. Si quieres puedo hacerte un paquete con todos los .ene que faltan ;)
Como diría Rorshach: "Urm..."
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: Tiled como editor de mapas en GNU/Linux

Mensajepor antoniovillena » Sab, 26 Oct 2013, 13:13

De todas formas si tienes tiempo échale un vistazo. Primero te instalas el Tiled y lees el mapa.tmx que he puesto más arriba. Luego te bajas las herramientas que he publicado y tratas de generar un .tmx partiendo de cualquier juego que hayais hecho con la Churrera. Finalmente usa TmxCnv para generar el archivo mapa.h partiendo de dicho .tmx, tendría que ser idéntico (incluso a nivel binario) al que se genera con mapcnv.

Añadir soporte para los enemigos sería una extensión de dichas utilidades, usando una capa adicional por encima de la capa de tiles.
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: Tiled como editor de mapas en GNU/Linux

Mensajepor antoniovillena » Sab, 26 Oct 2013, 13:15

$this->bbcode_second_pass_quote('na_th_an', 'E')so es porque antes yo trabajaba de otra manera y tenía el colocador en otro sitio y los .ene están ahí. Si quieres puedo hacerte un paquete con todos los .ene que faltan ;)


Genial, pues entonces importo directamente del formato .ene y acabo antes.