Implementación de mosaico automático RPG Maker

8

Actualmente estoy trabajando con Phaser, haciendo un juego generado por procedimientos. Quería usar un poco de arte de RPG maker en mi juego (como referencia, estoy usando el RTP). Me topé con este artículo , que analiza cómo funcionan los mosaicos automáticos. También me topé con esta respuesta que enlaza con otro artículo que explica el mosaico automático.

Aquí está la cosa, no tengo idea de cómo implementar algo como esto. Estoy seguro de que tendría que hacer un seguimiento de qué conjuntos de fichas se pueden conectar a qué otros conjuntos de fichas (es decir, algunas fichas tienen hierba en el exterior y arena en el interior, por lo que en este ejemplo tendría que tener en cuenta que "hierba "los azulejos eran los azulejos exteriores).

Hice un generador de mapas (ver aquí ), y quería hacer conexiones perfectas entre mis áreas de mosaico. Por ejemplo, las áreas marrones serían áreas "densas" (bosques, cuevas, etc.). Las áreas púrpuras serían pisos de piedra, y el área verde es la hierba. Hay un conjunto de fichas que funciona muy bien para cosas como esta:

ingrese la descripción de la imagen aquí

Por lo tanto, me gustaría usar la hierba superior izquierda y el tercer juego de baldosas, piedra, que se conecta a la hierba.

¿Qué tipo de cosas debería tener en cuenta al implementar el mosaico automático usando este tipo de conjuntos de mosaicos, y hay algún algoritmo que pueda considerar para implementar?

Seiyria
fuente
Tiled es un editor de mapas de código abierto que tiene una implementación de mosaico automático. Podría intentar encontrar la implementación en el código fuente .
Philipp
Sin embargo, los paradigmas de autotiling de @Philipp Tiled y RPGMaker son diferentes. Mosaico le permite especificar las cuatro esquinas de un mosaico como un tipo de terreno específico ("arena", "hierba", "agua", etc.) y elige un mosaico correspondiente en función de eso. RPGMaker le permite especificar que los centros del mosaico sean una variante específica de tipo rodeado por tipo (por ejemplo, "arena dentro de hierba", "agua dentro de hierba", etc.). Las capas se utilizan para tratar esta limitación en ambos casos. Una transformación es posible, por supuesto; aquí, por ejemplo, usando REFMAP sand-inside-grass (con relleno de hierba): i.imgur.com/Z343MVq.png
Martin Sojka
2
Para el registro, los recursos RTP tienen licencia solo para su uso con su software respectivo y otras versiones de RPG Maker. Está bien como marcador de posición durante el desarrollo, pero deberá reemplazarlos con un conjunto gráfico diferente para su distribución, por ejemplo, el conjunto REFMAP o los gráficos basados ​​en la Copa de píxeles liberados.
Martin Sojka
Gracias por el aviso @MartinSojka: para bien o para mal, RPG maker proporciona el mejor conjunto completo de arte para trabajar (fichas, caras, sprites, efectos, etc.), pero he estado limitando lo que uso, solo para poder cubrir mis bases cuando llegue el momento de reemplazarlas. Simplemente no quería pasar horas buscando arte cuando podía programar. Gracias por la información sobre Liberated Pixel Cup, lo investigaré más adelante. FWIW, no planeo vender este juego, pero si lo hago, definitivamente reemplazaré el arte.
Seiyria

Respuestas:

1

He implementado esto (usando el RTP) de una manera simple (pero bastante tediosa).

Tomé una lista de todos los vecinos para la celda actual, y con muchas ifdeclaraciones dibujé el mosaico como 4 mosaicos más pequeños / cuartos.

Para mí, este método conduce a algunos errores apenas visibles, pero se pueden resolver probando algunos casos extremos y corrigiendo en consecuencia.

Si observa las imágenes de origen y la imagen resultante en el creador de juegos de rol, debería poder hacer esto (quizás con algo de prueba y error) con ifdeclaraciones, identificando cuál es el caso actual para el cuarto de mosaico dado y dibujando en consecuencia .

Este método puede mejorarse aún más y hacerse menos tedioso con las máscaras de bits (como se menciona por jzx).


Respondiendo tu comentario:

Al renderizar solo cuartos de mosaico, las posibilidades disminuyen dramáticamente.

No debería tener que manejar mosaicos en mosaicos, ya que deberían estar en diferentes capas alfabéticamente mezcladas o coloreadas entre sí.

Además, no veo por qué necesitaría vecinos incorporados, pero eso podría manejarse por separado en el cálculo de vecinos, tal vez utilizando algún tipo de mapa (lista de pares que se combinan).

El mapa suele ser estático y las imágenes son de baja resolución, por lo que no debe preocuparse por el rendimiento.

akaltar
fuente
Estaba muy interesado en usar máscaras de bits, hasta que vi que la complejidad aumenta con cada posible mosaico vecino. Mirando el RTP, no puedo reunir cuántos casos posibles habría, dado que algunos mosaicos se pueden apilar en otros mosaicos, y algunos mosaicos tienen vecinos incorporados.
Seiyria
@Seirya Respuesta editada.
akaltar
gracias por actualizar Sin embargo, hay una cosa: si observa el conjunto de mosaicos de arriba, puede ver que algunos mosaicos tienen vecinos incorporados, como el mosaico de arena sobre césped o el de piedra sobre césped. Para algunos mosaicos como los de agua, que se pueden colocar en cualquier cosa, esto no es realmente un problema.
Seiyria