(Message tiré de RPG créative, mais comme c'est fermé et que c'est introuvable en français, je le post ici.)
Script originellement posté sur un site US.
Auteur : MGCaladtogel
Ce script permet de simuler le mode 7 apparu avec la Super Nintendo.Ce mode permet à une couche qui se situe sous tous les sprites d'être l'objet de diverses transformations telles que le zoom, la rotation, et un effet d'inclinaison (utilisé à l'époque dans des jeux comme Chrono Trigger, Final Fantasy VI ou Mario Kart).
Le script qui suit est l'évolution naturelle du script "Map façon 3d en profondeur" présent sur ce forum. Il permet d'appliquer les fonctionnalités du mode 7 pour les cartes que l'on veut.
Démo (script trop long pour être posté ici - comprend le script et une dll) :
http://www.mediafire.com/download/a42v5nv7ory8w6h/DemoScriptNeoMode7_FR_fix230311.zip
Instructions (traduites adroitement à partir d'un anglais plus qu'approximatif)
A rajouter dans le nom de la carte (cf. démo) :
[NM7] : active le mode 7 pour la carte, à condition que l'interrupteur 15 (valeur arbitraire à modifier au début du script (l. 78, partie 1) soit activé (et il l'est par défaut).
les commandes suivantes sont optionnelles :
[L] : la carte se répète en boucle horizontalement et verticalement.
[A] : active l'animation des autotiles animés (il faut qu'ils aient 4 graphismes d'animation, comme pour les RTP de base)
[H] : fait apparaître une ligne blanche à l'horizon (du plus bel effet selon l'auteur de ce script)
[Rx] : fixe la résolution de la couche en mode 7. [R1] est la valeur par défaut, c'est la résolution maximale. [R2] est une résolution moyenne : on perd en qualité ce qu'on gagne en
FPS. Et enfin R3 est la résolution la plus basse : on gagne beaucoup en performances, et on perd beaucoup en finesse d'image également.
[F] : active le "filtre". C'est un procédé qui augmente de façon très significative les performances, mais qui occasionne un léger effet de flou lors des déplacements de la carte. Cette option est vivement conseillée.
[#xx] : xx est l'angle d'inclinaison de la carte, en degrés, compris entre 0 et 89. [#0] signifie aucune inclinaison. Cet angle peut être modifié par des commandes (voir plus bas) alors que le joueur est déjà sur la carte.
[%xxx] : xxx est l'angle de rotation de la carte, en degrés, compris entre 0 et 379. Cet angle peut être modifié par des commandes (voir plus bas) alors que le joueur est déjà sur la carte.
Ou alors, ajouter au début du script (il y a des exemples - Partie 1, l. 68 ) :
$neoM7_maps_settings["le nom désiré"] = ["option 1", "option 2", ...]
Les options à entrer entre guillemets sont celles au-dessus sans les crochets.
Alors dès que dans le nom de la carte il y a "le nom désiré", la carte est considérée en mode 7 avec les options définies.
Commandes à utiliser à tout moment (avec "insérer un script" dans un évènement, ou appel à partir d'autres scripts) :
pour définir instantanément un nouvel angle d'inclinaison :
$scene.spriteset.tilemap.set_alpha(nouvel angle)
pour aller progressivement de l'angle d'inclinaison actuel à un nouvel angle d'inclinaison :
$scene.spriteset.tilemap.to_alpha(nouvel angle, vitesse)
pour augmenter/diminuer l'angle d'inclinaison d'une certaine valeur (à associer à une touche par exemple) :
$scene.spriteset.tilemap.increase_alpha(valeur)
pour définir instantanément un nouvel angle de rotation :
$scene.spriteset.tilemap.set_theta(nouvel angle)
pour aller progressivement de l'angle de rotation actuel à un nouvel angle de rotation :
$scene.spriteset.tilemap.to_theta(nouvel angle, vitesse, sens)
le sens vaut -1 (antihoraire) ou 1 (horaire).
pour augmenter/diminuer l'angle de rotation d'une certaine valeur (à associer à une touche par exemple) :
$scene.spriteset.tilemap.increase_theta(valeur)
Le niveau de zoom est défini en pourcentage, c'est-à-dire que 100 équivaut à aucun zoom.
Les valeurs possibles vont de 1 à 10000.
pour définir instantanément une nouvelle valeur de zoom :
$scene.spriteset.tilemap.set_zoom(nouvelle valeur)
pour aller progressivement de la valeur de zoom actuelle à nouvelle valeur de zoom :
$scene.spriteset.tilemap.to_zoom(nouvelle valeur, vitesse)
pour augmenter/diminuer la valeur de zoom d'une certaine valeur (à associer à une touche par exemple) :
$scene.spriteset.tilemap.increase_zoom(valeur)
La valeur de pivot, comprise entre 32 et 480, correspond au numéro de ligne de l’écran considéré comme l’axe d’inclinaison de la carte. Son intersection avec le milieu de l’écran défini le centre de rotation. Sa valeur par défaut est 256.
pour définir instantanément une nouvelle valeur de pivot :
$scene.spriteset.tilemap.set_pivot(nouvelle valeur)
pour aller progressivement de la valeur de pivot actuelle à nouvelle valeur de pivot:
$scene.spriteset.tilemap.to_pivot(nouvelle valeur, vitesse)
pour augmenter/diminuer la valeur de pivot d'une certaine valeur:
$scene.spriteset.tilemap.increase_pivot(valeur)
Les valeurs de zoom et de pivot sont conservées d’une carte à l’autre (ce qui permet de gérer l’entrée puis la sortie du menu). Il faut donc les réinitialiser manuellement si on en a besoin.
Autres précisions :
Pour donner une altitude à un évènement :
Ajouter dans les commandes de l’évènement un commentaire avec :
"Heigth x", x = 1 correspondant à une altitude de 32 pixels. Les nombres réels peuvent être utilisés.
Pour définir une altitude au joueur :
$game_player.height = x
La carte est dessinée à partir des trois couches de tiles, et utilise les tiles qui n’ont pas un numéro de terrain défini dans la liste l. 65 du script (par défaut 1 et 2) :
$terrain_tags_vertical_tiles = [1, 2]
Tous les autres tiles (numéros de terrain 1 et 2 par défaut) définissent des éléments (sprites) verticaux.
Tous les tiles d’un même numéro de terrain qui sont contigus forment un unique sprite vertical.
Le charaset du joueur utilisé pour la carte en mode 7 est celui de base, sauf s’il existe un fichier de charaset avec le même nom + "_m7". Dans ce cas, ce dernier est utilisé.
On peut alors utiliser un charaset avec autant de directions que l’on veut.
Il faut alors modifier la ligne 81 du script (dans la démo, 8 directions) :
$player_directions = 8
Et ensuite configurer les vues pour chaque direction (l. 90) :
$dirs[4] = [0, 2, 3, 1]
$dirs[8] = [0, 6, 2, 7, 3, 5, 1, 4]
Ici cela défini l’ordre des graphismes (lignes de charasets) utilisés pour 4 et 8 directions, en commançant par le character face à l’écran, puis en tournant dans le sens anti-horaire (analyser la démo pour mieux comprendre).
Pour indiquer un nombre de directions pour un évènement, il faut ajouter dans les commandes de l’évènement un commentaire avec :
"Directions x"