Implémentation de la mosaïque automatique de RPG Maker

8

Je travaille actuellement avec Phaser, créant un jeu généré de manière procédurale. Je voulais utiliser de l'art de fabricant de RPG dans mon jeu (pour référence, j'utilise le RTP). Je suis tombé sur cet article , qui explique comment fonctionnent les tuiles automatiques. Je suis également tombé sur cette réponse qui renvoie à un autre article qui explique la mosaïque automatique.

Voici la chose, je n'ai aucune idée de la façon dont j'implémenterais quelque chose comme ça. Je suis sûr que je devrais garder une trace de quels ensembles de tuiles peuvent se connecter à quels autres ensembles de tuiles (c'est-à-dire que certaines tuiles ont de l'herbe à l'extérieur et du sable à l'intérieur, donc dans cet exemple, je dois noter que "l'herbe "les carreaux étaient les carreaux extérieurs).

J'ai créé un générateur de cartes (voir ici ) et je voulais établir des connexions transparentes entre mes zones de tuiles. Par exemple, les zones brunes seraient des zones "denses" (forêts, grottes, etc.). Les zones violettes seraient des sols en pierre et la zone verte est l'herbe. Il y a un jeu de tuiles qui fonctionne très bien pour des choses comme ça:

entrez la description de l'image ici

Je voudrais donc utiliser l'herbe en haut à gauche et le troisième ensemble de tuiles, la pierre, qui se connecte à l'herbe.

Quelles sortes de choses devrais-je prendre en compte lors de l'implémentation de la mosaïque automatique à l'aide de ces sortes de tuiles, et existe-t-il un algorithme que je peux examiner pour implémenter?

Seiyria
la source
Tiled est un éditeur de carte open source qui a une implémentation automatique de tuiles. Vous pouvez essayer de trouver l'implémentation dans le code source .
Philipp
Les paradigmes d'autotilage de @Philipp Tiled et de RPGMaker sont cependant différents. La mosaïque vous permet de spécifier les quatre coins d'une tuile en tant que type de terrain spécifique («sable», «herbe», «eau», etc.) et de choisir une tuile correspondante en fonction de cela. RPGMaker vous permet de spécifier les centres de la tuile étant une variante spécifique de type entouré (par exemple "sable à l'intérieur de l'herbe", "eau à l'intérieur de l'herbe" et ainsi de suite). Les couches sont utilisées pour gérer cette limitation dans les deux cas. Une transformation est bien sûr possible; ici par exemple en utilisant REFMAP sand-inside-grass (avec un rembourrage en herbe): i.imgur.com/Z343MVq.png
Martin Sojka
2
Pour mémoire, les ressources RTP sont concédées sous licence uniquement pour une utilisation avec leurs logiciels respectifs et d'autres versions de RPG Maker. Il va bien comme espace réservé au cours du développement, mais vous ne devrez les remplacer par un autre jeu graphique pour la distribution - par exemple l'ensemble de REFMAP ou des graphiques en fonction de la Coupe du Pixel Libérée.
Martin Sojka
Merci pour l'avertissement @MartinSojka - Pour le meilleur ou pour le pire, le fabricant de RPG fournit le meilleur ensemble complet d'art à utiliser (tuiles, visages, sprites, effets, etc.), mais j'ai limité ce que j'utilise, juste pour que je puisse couvrir mes bases quand vient le temps de les remplacer. Je ne voulais tout simplement pas passer des heures à chercher de l'art alors que je pouvais programmer. Merci pour l'info sur Liberated Pixel Cup, j'y reviendrai plus tard. FWIW, je n'ai pas l'intention de vendre ce jeu, mais si je le fais, je remplacerai définitivement l'art.
Seiyria

Réponses:

1

J'ai implémenté cela (en utilisant le RTP) d'une manière simple (mais assez fastidieuse).

J'ai pris une liste de tous les voisins pour la cellule actuelle, et avec beaucoup de ifdéclarations j'ai dessiné la tuile en 4 tuiles plus petites / quart.

Pour moi, cette méthode entraîne des erreurs à peine visibles, mais elles peuvent être résolues en testant certains cas de bord et en les corrigeant en conséquence.

Si vous regardez les images source et l'image résultante dans le fabricant de RPG, vous devriez être en mesure de le faire (peut-être avec quelques essais et erreurs) avec des ifdéclarations, en identifiant le cas actuel pour le quart de mosaïque donné et en dessinant en conséquence .

Cette méthode peut être encore améliorée et rendue moins fastidieuse avec des masques de bit (comme mentionné par jzx).


Répondre à votre commentaire:

En ne rendant que les quarts de tuiles, les possibilités diminuent considérablement.

Vous ne devriez pas avoir à manipuler des tuiles sur des tuiles, car elles devraient être sur des couches différentes mélangées alpha ou colorées les unes sur les autres.

De plus, je ne vois pas pourquoi vous auriez besoin de voisins intégrés, mais cela pourrait être traité séparément dans le calcul du voisin, peut-être en utilisant une sorte de cartes (liste de paires qui se mélangent).

La carte est généralement statique et les images sont en basse résolution, vous n'avez donc pas à vous soucier des performances.

akaltar
la source
J'aimais beaucoup utiliser des bitmasks, jusqu'à ce que je voie que la complexité augmente avec chaque tuile voisine possible. En regardant le RTP, je n'arrive pas à comprendre combien de cas possibles il y aurait, étant donné que certaines tuiles peuvent être empilées sur d'autres tuiles, et certaines tuiles ont des voisins intégrés.
Seiyria
@Seirya Réponse modifiée.
akaltar
merci pour la mise à jour. Une chose, cependant - Si vous regardez l'ensemble de tuiles ci-dessus, vous pouvez voir que certaines tuiles ont des voisins intégrés, comme les tuiles sable sur herbe ou pierre sur herbe. Pour certaines tuiles comme celles en eau, qui peuvent être placées sur n'importe quoi, ce n'est pas vraiment un problème.
Seiyria