Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 4191 miembros registrados.
El último usuario registrado es Victor Inkheart.

Nuestros miembros han publicado un total de 85188 mensajes en 12128 argumentos.

Tiles, Autotiles y Subtiles; un lío de índices

Ver el tema anterior Ver el tema siguiente Ir abajo

Tiles, Autotiles y Subtiles; un lío de índices

Mensaje por Wecoc el 2013-04-30, 22:08

Hoy os presento ésto, que más que un tutorial es una lección.

RPG MAKER XP: Tiles, Autotiles y Subtiles; un lío de índices

Quizá os hayáis preguntado más de una vez cómo se montan los tiles y los autotiles en los mapas. La verdad es que la cosa tiene su complicación xD y por eso pondré esto aquí, y porque un scripter no se puede saberse todo eso de memória y quizá vaya bien a alguno como chuletilla.

Explicación general

Cada Tile es un índice en el Tileset. Eso significa que cada cuadro de 32 x 32 del tileset se cuenta en orden empezando por el primero (que en los índices es el 0) y sumando. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10... y así hasta el último tile. Ésto sería una explicación rápida de qué es el Índice de los Tiles, pero no es exactamente cierta.

La complicación es que los Autotiles no son un único tile sinó un conjunto de tiles. En concreto en RPG maker XP, cada Autotile contiene 48 pequeños tiles.

Por lo tanto en la primera fila del tilemap, si miramos un Índice de los Autotiles sí se cumple lo de antes.



Pero si en cambio queremos mirar el que realmente nos interesa, que es el Índice de los Tiles, a cada paso de un autotile al siguiente habrá que sumar 48. A partir de la segunda fila en cambio sí avanzará de uno en uno, porque de allí en adelante se trata de tiles normales.

El índice real, pues, es así:



Éste es el orden de lectura que utiliza el maker para leer los tiles.

¿Pero entonces entre el 0 y el 48 por ejemplo, qué orden utiliza? ¿Qué pasa si le digo que mire el 27?
Si os ponéis en el editor, encima de un Autotile y le hacéis doble click, encontraréis la respuesta. Haciendo eso sale una ventana emergente con todo el Autotile desglosado en los diferentes Tiles de los cuales está formado, y además, salen en orden.



Claro que ahí no acaba la cosa, ni mucho menos.
Si nos fijamos en cómo es el gráfico de un autotile normal (no animado, porque el número de frames no afecta el índice) resulta que solo hay 12 cuadritos de 32x32. ¿Entonces, de donde salen los 48 tiles del Autotile desglossado?

La respuesta es que cada tile real del autotile está hecho de 4 partes de 16x16 sacadas del gráfico del autotile. Con diferentes combinaciones de esas partes, se logran los 48 tiles de cada autotile.

Por ejemplo, para explicarme mejor, si tenemos el siguiente Autotile saldrá esto:

==>

Para ver claro de donde sale cada combinación, podemos ordenar cada parte de 16 x 16 en algo que no tiene nombre pero que para entendernos llamaré Subtile. Entonces, podemos hacer un Índice de los Subtiles, bastante usado en scripts de autotiles.

Si hacemos un Autotile con este nuevo índice marcado nos saldrá esto

==>
(Cambié el color de los números del resultado para que se vea mejor cada tile)

Otro ejemplo, quizá un poco más gráfico, aunque igualmente liante y un tanto mariquita:

==>

Este último índice es tan liado, que es lo que más molesta a los scripters que hacen algo referente al funcionamiento de los Autotiles. Como comprenderéis, saber que el Tile de índice 35 del Autotile está hecho con los Subtiles [13, 14, 19, 12] no es ni facil de deducir, ni facil de recordar.

Por éso, para hacer más útil éste tocho, he esto la siguiente Macrotabla ordenada.

La primera columna es el índice del Tile dentro del Autotile, la segunda columna es cómo se ve con el ejemplo del agua, la tercera cómo se ve con el template, la cuarta el número de subtiles que utiliza (se numeran en array, por ejemplo el primero que sale sería [27, 28, 33, 34] ) y la última cómo se vería con el último ejemplo que puse.

Spoiler:

¿Wecoc, para qué me puede servir esto?

Buena pregunta xD Pues veréis, lo de los Subtiles sólo os servirá para comprender mejor cómo el maker monta el Autotile automáticamente. El índice de Subtiles y la Macrotabla os servirán solo si sois scripters y queréis hacer algo relacionado con Tiles y Autotiles.

Pero la otra parte, la del índice de Tiles, sí os puede ser fácilmente útil incluso a los enginers.

Se puede cambiar un tile por otro en medio del juego facilmente utilizando ésto:

Código:
$game_map.data[x, y, layer] = tile
layer es la capa de 0 a 2, y tile es el número del tile en el Índice de los Tiles.

Finalmente con lo mismo pero en un if se puede comprobar si un evento está encima de un tipo de tile concreto, eso puede ser otro uso dado para ello, útil para algunos engines.

Código:
if $game_map.data[$game_map.events[5].x, $game_map.events[5].y, 0] == 384

¿Por curiosidad, dónde está definido todo esto?

Todo esto viene definido en dos scripts ocultos que van muy unidos: Tilemap y TilemapAutotiles. La pena es que aún modificando los dos códigos no se pueden conseguir grandes cambios en el funcionamiento de los autotiles, porque todo va regido por el editor del programa. Aún así sí se pueden hacer algunas pequeñas variaciones como hice yo mismo en un caso para hacer que los 48 tiles salieran de otras combinaciones en el gráfico. La diferencia nunca se verá en el editor, pero sí en el juego.

Espero que os haya servido ésta mema explicación. Si os ha quedado alguna duda podéis preguntármela.


Última edición por Wecoc el 2013-05-01, 14:14, editado 1 vez
avatar
Wecoc
Administrador
Administrador



Créditos 9265

Gracias : 502

Volver arriba Ir abajo

Re: Tiles, Autotiles y Subtiles; un lío de índices

Mensaje por orochii el 2013-04-30, 23:17

Sólo una anotación extra. Si hacen lo de cambiar los tiles por llamar script
Código:
$game_map.data[x, y, layer] = tile
Hay ciertas propiedades (como la prioridad) que PUEDEN no actualizarse adecuadamente. Eso me pasó cuando quise hacer un "comando" de cambiar tilesets, mejor dicho le tuve que decir al tileset que se destruyera y volviera a construir xDDD. Todo porque unos tiles no les daba la gana de cambiarse su prioridad.

Este es mi código de cambiar tileset/tiledata. Va dentro de Game_Map. Altamente probable que no les funcione xD, pero diay, yo he tocado muchas cosas por todos lados (ya a mi proyecto lo tengo todo violado 8D! --eh... en fin, es un chiste, un MAL chiste).
Código:
  def ch_tiledata(data_id,pano=true,fog=true,bback=true)
    @tile_id = data_id
    # set tile set information in opening instance variables
    tileset = $data_tilesets[data_id]
    @tileset_name = tileset.tileset_name
    @autotile_names = tileset.autotile_names
    if pano
      @panorama_name = tileset.panorama_name
      @panorama_hue = tileset.panorama_hue
    end
    if fog
      @fog_name = tileset.fog_name
      @fog_hue = tileset.fog_hue
      @fog_opacity = tileset.fog_opacity
      @fog_blend_type = tileset.fog_blend_type
      @fog_zoom = tileset.fog_zoom
      @fog_sx = tileset.fog_sx
      @fog_sy = tileset.fog_sy
    end
    @battleback_name = tileset.battleback_name if bback
    @passages = tileset.passages
    @priorities = tileset.priorities
    @terrain_tags = tileset.terrain_tags
    @tilemap_refresh = true
  end
Esto lo hace dentro del Spriteset_Map, cuando @tilemap_refresh == true
Código:
  def refresh
    @tilemap.dispose
    @tilemap = Tilemap.new(@viewport1)
    @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
    for i in 0..6
      autotile_name = $game_map.autotile_names[i]
      @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
    end
    @tilemap.map_data = $game_map.data
    @tilemap.terrain_tags = $game_map.terrain_tags
    @tilemap.priorities = $game_map.priorities
  end
Como ven, destruyo y reconstruyo. Si no lo hacía, algo quedaba por fuera, y al final terminaba haciendo lo mismo a mano x'D. Y si son perspicaces, se imaginarán que cuando hace esa reconstrucción se pega por una centésima de segundo x'D.

En fin, eso era 8'D,
Orochii Zouveleki
avatar
orochii
Caballero Shiro
Caballero Shiro

0/3

Créditos 6680

Gracias : 337

Volver arriba Ir abajo

Re: Tiles, Autotiles y Subtiles; un lío de índices

Mensaje por yoenmii el 2013-05-01, 06:13

@Wecoc Gracias por el tutorial, está muy bien y la verdad es que no sabía nada de esto. Y otra cosa, esto en VX ¿sería igual?
@Orochii ¿Quizá haya cosas que se puedan quitar de ahí?, no puede ser posible que el RPG Maker sea tan "tonto" como para no hacer eso en menos de dos lineas XD.
avatar
yoenmii
Novato
Novato

0/3

Créditos 91

Gracias : 2

Volver arriba Ir abajo

Re: Tiles, Autotiles y Subtiles; un lío de índices

Mensaje por Wecoc el 2013-05-01, 14:14

Orochii: Lo tendré en cuenta xD

Yoenmi: Tu pregunta me lleva a la segunda parte de la lección. Tranquilo, ya pensaba hacerla igualmente xD La respuesta rápida es que no va igual.

En VX Ace que yo sepa sí va igual al VX todo esto, antes de que lo preguntéis xD Aún así es un programa que desconozco casi del todo.

RPG MAKER VX: Diferentes Autotiles y nuevos Rooftiles
(Por si no había ya suficiente lío)


Mucha gente estará de acuerdo en que Enterbrain la cagó bastante haciendo estos cambios al Tilemap respecto al XP.
La lectura de los autotiles se complicó horrores en funcionamiento, y se hizo de manera que quedaba peor, todo para intentar hacérselo más facil a los nuevos.
Además aparecieron las Shadows, los Counters y no se qué puñetas más, todo automático, y el orden del tilemap se volvió inquebrantable.

Los Autotiles del VX

A parte de los Tiles, que eso sí va igual, se cambia totalmente la lectura de Autotiles y aparecen los RoofTiles, que viene a ser lo mismo pero otra lectura.

Empezaremos con los Autotiles.

Éstos siguen funcionando con Subtiles de 16x16, la diferencia es que ahora no ocupan 12 tiles en el gráfico sinó 6.
Se obtienen 48 tiles finales igualmente, pero por esa diferencia, solo se utilizan 24 subtiles diferentes y la combinatoria es mucho más liada, a parte de que los cantos pasan a depender solo de un cuadrito de 16x16, motivo por el cual los autotiles de VX siempre quedan más cuadrados.

Además, se quita lo de la ventana emergente de modo que ya no se puede ver el orden de los Tiles tan fácilmente (eso sí que creo que Enterbrain lo hizo solo para joder). Por suerte, el orden final sigue siendo el mismo.

Así que podemos hacer lo mismo de antes, y como los tiles finales son los mismos, en el primer template el resultado quedará exactamente igual.

==>

Hagámoslo ahora con el segundo ejemplo, el de los números. Evidentemente salen combinaciones totalmente distintas al caso del RPG maker XP.

==>
(Siento que algunos números se vean sucios, como no te lo hace el propio programa tuve que hacerlo a mano)

El ejemplo de los colores no creo que valga la pena, ya que en este caso da poca información extra.

Podemos hacer la macrotabla como antes, la he hecho también ampliando la de antes para poder hacer la comparación.

Spoiler:


Qué son y cómo van los RoofTiles

Los RoofTiles son como Autotiles pero "recortados", ya que no necesitan todas las combinaciones. Son los que se usan para roofs, es decir, tejados.
Su gráfico solo tiene 4 Tiles, por lo tanto 16 Subtiles. Con ello hace 16 tiles distintos.

==>

==>

Entonces la macrotabla en este caso es la siguiente

Spoiler:


¡Fin del tutorial!
avatar
Wecoc
Administrador
Administrador



Créditos 9265

Gracias : 502

Volver arriba Ir abajo

Re: Tiles, Autotiles y Subtiles; un lío de índices

Mensaje por yoenmii el 2013-05-01, 14:29

@Wecoc Relamente si que son ganas de tocar las narices por parte de Enterbrain... Si los roofs y autotiles son básicamente lo mismo. No tenía tantos conocimientos técnicos xD.
Buen tutorial (de nuevo :P).
avatar
yoenmii
Novato
Novato

0/3

Créditos 91

Gracias : 2

Volver arriba Ir abajo

Re: Tiles, Autotiles y Subtiles; un lío de índices

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.