Implementando o Ladrilho Automático do RPG Maker

8

Atualmente, estou trabalhando com a Phaser, criando um jogo gerado processualmente. Eu queria usar alguma arte de criador de RPG no meu jogo (para referência, estou usando o RTP). Eu tropecei neste artigo , que detalha como os blocos automáticos funcionam. Eu também me deparei com essa resposta, que tem um link para outro artigo que explica o agrupamento automático.

Aqui está a coisa, eu não tenho idéia de como eu implementaria algo assim. Tenho certeza de que precisaria acompanhar quais conjuntos de peças podem se conectar a outros conjuntos de peças (ou seja, algumas peças têm grama do lado de fora e areia do lado de dentro, portanto, neste exemplo, devo observar que "a grama "azulejos eram os azulejos externos).

Eu criei um gerador de mapas (veja aqui ) e queria fazer conexões perfeitas entre minhas áreas de mosaico. Por exemplo, as áreas marrons seriam áreas "densas" (florestas, cavernas etc.). As áreas roxas seriam pisos de pedra, e a área verde é a grama. Existe um conjunto de peças que funciona muito bem para coisas como esta:

insira a descrição da imagem aqui

Então, eu gostaria de usar a grama superior esquerda e o terceiro conjunto de azulejos, pedra, que se conecta à grama.

Que tipos de coisas eu deveria considerar ao implementar o agrupamento automático usando esses tipos de conjuntos de peças, e existe algum algoritmo que eu possa implementar?

Seiyria
fonte
O Tiled é um editor de mapas de código aberto que possui uma implementação de mosaico automático. Você pode tentar encontrar a implementação no código-fonte .
Philipp
Os paradigmas de autotiling do @Philipp Tiled e do RPGMaker são diferentes. Lado a lado permite especificar os quatro cantos de um ladrilho como um tipo de terreno específico ("areia", "grama", "água" e assim por diante) e escolhe um ladrilho correspondente com base nisso. O RPGMaker permite especificar os centros do bloco como uma variante específica do tipo cercado por tipo (por exemplo "areia dentro da grama", "água dentro da grama" e assim por diante). Camadas são usadas para lidar com essa limitação nos dois casos. Uma transformação é possível, é claro; aqui, por exemplo, usando areia REFMAP-dentro-grama (com estofamento grama): i.imgur.com/Z343MVq.png
Martin Sojka
2
Para o registro, os recursos RTP são licenciados apenas para uso com seus respectivos softwares e outras versões do RPG Maker. É bom como espaço reservado durante o desenvolvimento, mas você vai precisar para substituí-los com um conjunto gráfico diferente para a distribuição - por exemplo, o conjunto REFMAP ou gráficos com base na Pixel Cup liberado.
Martin Sojka
Obrigado pelo alerta @MartinSojka - Para melhor ou pior, o criador de RPG fornece o melhor conjunto completo de arte para trabalhar (peças, rostos, sprites, efeitos etc.), mas tenho limitado o que uso, para que eu possa cobrir minhas bases quando chegar a hora de substituí-las. Só não queria passar horas procurando arte quando poderia estar programando. Obrigado pela informação sobre a Liberated Pixel Cup, analisarei isso mais tarde. FWIW, não pretendo vender este jogo, mas se o fizer, definitivamente substituirei a arte.
Seiyria

Respostas:

1

Eu implementei isso (usando o RTP) de uma maneira simples (mas bastante tediosa).

Peguei uma lista de todos os vizinhos da célula atual e, com várias ifdeclarações, desenhei o bloco como 4 blocos menores / quarto.

Para mim, esse método leva a alguns erros pouco visíveis, mas eles podem ser resolvidos testando alguns casos extremos e corrigindo de acordo.

Se você olhar para as imagens de origem e a imagem resultante no criador de RPG, poderá fazer isso (talvez com algumas tentativas e erros) com ifinstruções, identificando qual é o caso atual para o trimestre indicado e desenhando adequadamente .

Este método pode ser melhorado e tornado menos tedioso com máscaras de bits (como mencionado por jzx).


Respondendo ao seu comentário:

Ao renderizar apenas quartas peças, as possibilidades diminuem drasticamente.

Você não precisa manipular peças em peças, pois elas devem estar em camadas diferentes, combinadas com alfa ou com teclas coloridas uma na outra.

Além disso, não vejo por que você precisaria de vizinhos embutidos, mas isso poderia ser tratado separadamente no cálculo de vizinhos, talvez usando algum tipo de mapa (lista de pares que se misturam).

O mapa geralmente é estático e as imagens são de baixa resolução, portanto, não é necessário se preocupar com o desempenho.

akaltar
fonte
Eu gostava muito de usar máscaras de bits, até perceber que a complexidade aumenta com cada possível bloco vizinho. Olhando para o RTP, não consigo reunir quantos casos possíveis, dado que alguns blocos podem ser empilhados em outros blocos e alguns têm vizinhos embutidos.
Seiyria
@Seirya Resposta editada.
precisa saber é o seguinte
obrigado pela atualização. Uma coisa, no entanto - se você olhar para o conjunto de peças acima, poderá ver que algumas peças têm vizinhos embutidos, como a areia na grama ou as pedras na grama. Para alguns azulejos como os da água, que podem ser colocados em qualquer coisa, isso não é realmente um problema.
Seiyria