Sujet n°11299
Posté par Koya le 16 Avr - 16:32 (2012)
Titre : Une minimap avec fog, comment faire?
Après avoir épluché vainement 9 pages de Support Techniques et la partie des scripts, plus une recherche longue et infructueuse de deux jours sur google, je viens prier sur l'autel PSP l'aide de quelque ancêtre programmeur bienveillant.

...Et sinon, j'aimerais ajouter une minimap possédant un fog. >.>"

Plus détaillé : je souhaite afficher dans un coin de l'écran (pour faire simple), une petite carte (de préférence d'opacité moyenne, donc transparente) de l'endroit où se trouve le héros. Les endroits qui n'ont pas déjà été visités seront ombrés/grisés/noirs/invisibles, et les lieux sont dévoilés soit quand le héros arrive dans la zone (pour une ville par exemple), soit dans une zone autour du héros (seulement sur la minimap, pas sur la carte elle-même). Evidemment, les lieux principaux déjà visités n'ont plus besoin d'être dévoilés de nouveau. Si possible, j'aimerais assez l'idée que des zones plus éloignées, de petits lieux "secrets", n'aient qu'une révélation temporaire de la carte, dans le sens où, si le héros sort de la zone, le brouillard revient sur la minimap.

Accessoirement, la minimap serait une image présente dans les dossiers, de taille dépendant de celle de la map correspondante, mais dont on n'affiche qu'une petite partie, centrée sur le joueur. (Exemple simple : mettons que la map fasse 30*55 carrés, la minimap fera 60*110 pixels, on l'affichera centrée sur la position du héros dans un rectangle de 40*80 pixels. Quand le héros se déplace, la minimap glisse aussi car reste centrée sur le héros, mais seule la partie dans le rectangle de 40*80 pixels est affichée.)

Voilà pour ce qui est de l'idée principale.

Le problème principal n'est pas l'affichage de la minimap, il y a bien assez d'informations à ce sujet sur le net je pense, mais le brouillard de la minimap.
J'ai envisagé de gérer le problème de cette façon :
Spoiler

-On a une variable, un tableau des mêmes dimensions que la minimap (soit une case = un pixel, pour faire simple).
Si la zone est dans l'ombre, elle vaut 0 (zone normale) ou 2 (zone d'ombre de lieu particulier).
Lorsque la zone est visible, la case contient un 1 (zone normale visible) ou un 3 (zone temporairement visible).

Donc, selon une zone (de préférence un vague cercle) autour du héros, toutes les valeurs dans ce cercle passent de 0 à 1 ou de 2 à 3.
Lorsque une case a pour valeur 0 ou 2, on affiche une case grise par-dessus la minimap au pixel correspondant.
Si le héros change de zone (id map différente), les valeurs à 3 retournent à 2.

J'aimerais donc des avis/idées/conseils par rapport à ce problème, est-ce la bonne façon de l'envisager? Y a-t-il un meilleur moyen? Quelqu'un connaît-il déjà une solution à ce problème (personnellement je n'ai pas trouvé en cherchant >.<) ?

Sur ma solution, j'ai également quelques questions particulières:
-Peut-on choisir de ne pas afficher certains pixels d'une image, les mettre en opacité 0? (plus élégant qu'un pixel gris moche, et cela permettrait d'avoir une minimap transparente même dans les zones non-explorées).
-Si oui, de quelle façon? Si non, comment afficher un pixel de couleur unie (donc pas une image) sur RMXP via script? (ok j'avoue j'ai pas encore cherché pour ce point précis)
-Par rapport à cette solution, j'aurai donc besoin d'un tableau par minimap. Vaut-il mieux que je crée ces tableaux dans des fichiers texte? Dans les scripts?
Et si il y a modification (une zone découverte), cette modification sera-t-elle interne à la sauvegarde ou permanente pour tout le projet? Bref, comment créer/gérer ça? :/


Si je me suis mal expliquée, n'hésitez pas à le signaler, j'essaie d'être claire mais ce n'est pas toujours très compréhensible. x']
Ah, je ne pense pas que ce soit utile de le préciser, mais j'emploie 4G+.

Beaucoup de questions donc, j'espère glaner quelques réponses lumineuses pour progresser sur le chemin de la connaissance. =)
Merci à ceux qui voudront bien venir en aide à l'ignorante que je suis. ^.^



[EDIT:] L'ombre pourrait également être réalisée avec un (tout petit) autotile je pense, qui serait placé sur l'image de la minimap. Reste à voir pour les dimensions, et toujours l'opacité de la minimap en dessous (si la minimap est transparente, comment faire pour qu'une zone d'ombre soit transparente sans qu'on voit la minimap. si c'est impossible, tant pis x] ).