domingo, abril 8

Atualização Semanal

Como dito semana passada, o foco desta semana foi a finalização do autotile para o MapMaker.

Mas, o que é autotile?

Um autotile na realidade representa um conjunto de tiles. 47, para ser preciso. Como o nome insinua, é um tile "automático", ou seja, quando é utilizado, diferentemente de tiles normais, não há necessidade de escolher manualmente qual tile será usado em certa parte, basta ir desenhando e os tiles desenhados se ajustam de acordo. Nas imagens a seguir, podemos observar melhor o que ocorre.

Em um novo mapa, inicio o uso do autotile

Após o clique inicial, decido expandir a grama para a esquerda.

Novamente, expando a grama para a esquerda

Decido então expandir um pouco para baixo.

Por fim, na outra linha, retorno um pouco à direita


Como pode-se notar, os tiles muda dinamica e automaticamente conforme o usuário desenha.

Como o programa cria um autotile?

Observe a seguinte imagem:


Isso é uma imagem composta por 12 tiles que representam uma "grama crescida" por assim dizer. É algo útil na criação de florestas e afins, para dar um ar mais natural ao lugar e mostrar que não há (ou quase não há) ninguém por ali e a grama cresceu bastante.

Mas, enfim, esta imagem por si só não faz uma floresta, logo não faz sentido usá-la como tileset para um mapa. Poderíamos simplesmente incorporá-la a um tileset existente, porem, os 12 tiles que constituem essa imagem não são suficientes para se desenhar todos o tipos possíveis de formas. O que o programa faz, então, é criar 47 tiles a partir dessa imagem ao invés de apenas 12, gerando um autotile.

Para tanto, a imagem é dividida em 4 regiões.

Cada região, então, é novamente dividida em pequenas partes de 16x16 pixels:

Antes de prosseguir com a explicação, cabe uma observação:
Vemos que a região B é, basicamente, inútil. Como já citei, estou baseando-me fortemente no RPGMaker XP para a criação deste programa e o autotile não é exceção. Se bem me lembro, alguns autotiles possuem algo ocupando a região B, mas ainda não compreendi qual sua finalidade.

As principais regiões são as duas últimas: C e D, pois 46 dos 47 tiles gerados envolvem partes provindas delas.

Como funciona o autotiling?

Não fui capaz de observa um padrão durante a inicialização de cada um dos 47 tiles, por tanto eles são criados um a um no código, sem uso de loop algum. Talvez isso possa ser otimizado. Mas mesmo que um padrão seja detectado, teremos de manter em mente que cada um desses tiles possui um ID específico.

Para detectar qual o tile que deve ser desenhado, decidimos nos utilizar do sistema binário devido a sua propriedade onde não há repetição de resultado algum não importa quais somas sejam feitas. Dessa forma, atribuímos valores a cada um dos tiles adjacentes ao clicado. Sempre que um autotile existir em um tile adjacente, seu valor é somado a uma variável e o resultado final é o ID que deve ser utilizado. A imagem a seguir expõe os valores:

Primeiramente checamos os lados padrões (cima, baixo, esquerda, direita) e depois checamos as diagonais. Dessa forma, evitamos que certas posições sejam ignoradas por terem sido checadas precocemente. Uma vez definido o ID, o programa então faz uma checagem de todos os tiles adjacentes e manda todos aqueles que forem autotile se atualizarem.

Bom, acho que já falei demais e talvez quase nada do que tenha dito aqui faça sentido, mas, enfim, estou apenas informando o que fiz. Se parece complicado, não se assuste, porque é.

Sem mais, Victor Lucki.


Nenhum comentário:

Postar um comentário