Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Zeus Lights & Shadows : Manuel d'utilisation v1.3
- =begin
- Description :
- Ce script permet d'afficher des effets de lumière et des ombres.
- Il existe déjà pleins de scripts pour ajouter des loupiotes, mais mon but
- avec celui ci est de faire quelque chose de différent.
- Ainsi les lumières éclairent la nuit, c'est à dire qu'on peut mettre
- le ton de l'écran tout noir à -255 les lumières feront comme des trous
- dans un masque et nous permettrons de voir la map de façon claire et nette.
- Les ombres quant à elles ne sont pas dynamiques, les lumières n'engendrent
- aucune ombre, les ombres doivent être placées manuellement, un peu comme
- sous VXace, y'a qu'à considérer que ce sont toutes des ombres du soleil.
- La nouveauté c'est que les ombres ne se superposent pas (ce qui est
- absurde) mais fusionnent.
- Les ombres ne sont pas au dessus de tout mais au dessous, on peut avoir la
- tête qui passe devant une ombre, les chara s'assombrissent que quand ils
- marchent dans l'ombre.
- L'opacité des ombres décline avec la luminosité de la map,
- c'est à dire pas d'ombre du soleil la nuit (waw).
- Les ombres auto de VX et celles de VXace sont gérées par ce script.
- Y'a aussi moyen de les désactiver au tout début du script.
- Les commandes suivantes s'utilisent toutes dans des insertions de scripts.
- Log Change :
- 1.3 :
- - nouvelle option pour désactiver les lumières au tout début du script
- - nouvelle option pour désactiver les ombres au tout début du script
- - nouvelle option dans les events pour les empêcher d'être ombrés
- - nouvelle option dans les ombres pour définir si elles doivent ombrer
- les charas ou pas
- - nouvelle option qui permet de ne pas nommer les lumières/ombres
- un nom sera automatiquement attribué par rapport à l'event qui le crée
- - réparé bug d'affichage par rapport aux scripts qui modifient
- la taille de l'écran pendant le jeu même si c'est absurde
- - réparé bug d'affichage par rapport au tremblement de l'écran
- 1.2 :
- - réparé bug sur XP
- - ajout d'un listing rapide des fonctions dans la doc
- 1.1 :
- - réparé bug par rapport au régions sur VXace
- Conseils d'utilisation :
- 1/ héros/véhicules vs event/map
- Le script nous offre la possibilité d'associer des lumières/ombres aux
- héros, vehicules, events ou directement à la map.
- Ce qu'il faut savoir c'est que les lumières/ombres associées aux
- héros/véhicules sont mémorisées d'une map à l'autre, on a besoin de
- les initialiser qu'une seule fois et elles resteront jusqu'à ce qu'on
- décide de les supprimer.
- Quant aux events/maps c'est l'inverse, les lumières/ombres sont
- supprimées à chaque fois qu'on change de map, il faut donc faire en
- sorte qu'elles soient initialisées à chaque fois qu'on entre dans la map.
- 2/ initialisation
- J'ai créé une commande spéciale qui permet d'exécuter automatiquement
- des scripts au chargement des events, ça s'utilise comme ça :
- Commentaire: <setup>
- Script: ...scripts d'initialisation des lumières/ombres...
- Commentaire: </setup>
- Tout ce qui se trouve entre les balises <setup> sera exécuté
- automatiquement (et uniquement) lors du chargement de la page
- (même si censé être déclenché par la touche action).
- A vrai dire si on veut on peut mettre autre chose que des scripts entre
- ces deux balises, il faut juste éviter les commandes qui doivent
- attendre d'être effectuées/validées (genre des messages) sinon boom.
- Si on veut on peut initialiser toutes nos lumières/ombres à partir d'un
- seul event, cela dit si on décide de lier notre lumière à un event il
- sera peut être plus pratique d'avoir l'initialisation de sa lumière
- directement à l'intérieur de ses pages.
- Si un event a plusieurs pages seules les commandes de la page active
- seront exécutées.
- Liste rapide des fonctions :
- - light(key).setup(filename)
- - light(key).chara_id = n
- - light(key).clear
- - light(key).active
- - light(key).set_pos(x, y, duration)
- - light(key).set_origin(x, y, duration)
- - light(key).set_parallax(x, y, duration)
- - light(key).set_opacity(opacity, duration)
- - light(key).set_color(red, green, blue, alpha, duration)
- - light(key).set_zoom(zoom, duration)
- - light(key).set_flicker(variance, refresh_rate, duration)
- - light(key).set_angle(angle, duration)
- - light(key).set_wave(amp, length, speed, duration)
- - light(key).visible = true ou false
- - light(key).blend_type = 0 ou 1 ou 2
- - light(key).directions = n
- - light(key).patterns = n
- - light(key).anime_rate = n
- - shadow(key).setup(filename)
- - shadow(key).setup(width, height)
- - shadow(key).chara_id = n
- - shadow(key).clear
- - shadow(key).active
- - shadow(key).set_pos(x, y, duration)
- - shadow(key).set_origin(x, y, duration)
- - shadow(key).set_parallax(x, y, duration)
- - shadow(key).set_opacity(opacity, duration)
- - shadow(key).set_color(red, green, blue, alpha, duration)
- - shadow(key).set_zoom(zoom, duration)
- - shadow(key).visible = true ou false
- - shadow(key).directions = n
- - shadow(key).patterns = n
- - shadow(key).anime_rate = n
- - shadow(key).shadowable = true ou false
- - set_shadowable(value, chara_id)
- Lumières :
- - light(key).setup(filename)
- Initialise une nouvelle lumière.
- key = un identifiant pour notre lumière, chaque lumière doit avoir un
- nom qui lui est propre.
- On réutilise son identifiant à chaque fois qu'on veut modifier une
- lumière.
- On peut ne pas mettre d'identifiant le script en génèrera alors un
- automatiquement en prenant l'id de l'event qui exécute le script,
- par exemple "event5".
- Ca peut être intéressant si par exemple on met une lumière dans un
- event et qu'on a envie d'en faire des copier/coller, plutôt que de
- devoir modifier le nom dans chaque event on en met pas et on laisse
- faire le script.
- filename = le nom du fichier utilisé pour la lumière.
- L'extension n'est pas obligatoire.
- Le fichier doit se trouver dans le dossier Pictures, vous pouvez
- utiliser des sous dossiers si vous voulez avec des / comme séparateurs.
- La lumière doit être de couleur noire sur fond transparent,
- c'est important pour le fonctionnement interne du script.
- Pour donner une couleur à la lumière c'est expliqué plus bas.
- Exemple :
- light("lumière 1").setup("torch.png") # nouvelle lumière
- light.setup("torch.png") # nouvelle lumière sans identifiant
- - light(key).chara_id = n
- Permet de lier une lumière à un chara (event, héros, véhicule).
- Ça a plusieurs effets, la lumière suivra automatiquement son chara.
- La lumière synchronisera direction et animation si possible.
- Si la lumière est associée à un event elle disparaîtra si jamais
- l'event est transparent, si l'event est supprimé, ou encore si
- l'event n'a aucune page d'activée (aka si les conditions d'aucune de
- ses pages ne sont remplies).
- n = id du character sur lequel afficher la lumière.
- Si on met 0 la lumière ne suivra aucun chara, elle aura des
- coordonnées relatives à la map.
- Si on met un nombre > 0, la lumière suivra l'event correspondant.
- Si on met @event_id ça veut dire "cet event", celui qui exécute le script.
- Si on met -1 la lumière suivra le héros.
- Si on met -2, -3, -4, c'est pour les alliés. (VXace uniquement)
- Si on met -5, -6, -7, c'est pour les véhicules (VX & VXace uniquement)
- respectivement la barque, le bateau et le dirigeable.
- La valeur par défaut est 0.
- Exemple :
- light("lumière 1").chara_id = -1 # lie la lumière au héros
- - light(key).clear
- Supprime une lumière, tout simplement.
- Exemple :
- light("lumière 1").clear # supprime la lumière
- - light(key).active
- Retourne true ou false selon qu'une lumière existe ou pas.
- C'est fait pour être utilisé dans des conditions.
- Exemple :
- light("lumière 1").active == true # la lumière existe ?
- light("lumière 1").active == false # la lumière a été supprimée ?
- - light(key).set_pos(x, y, duration)
- S'il n'y a pas de chara_id les coordonnées de la lumière seront
- définies par rapport au coin au gauche de la map.
- S'il y a un chara_id les coordonnées de la lumière seront
- automatiquement celles du chara sélectionné, cette fonction servira
- alors à définir un décalage.
- x = coordonnée x en pixels
- y = coordonnée y en pixels
- duration = la durée de transition en nombre de frames.
- Les coordonnées changeront entre leur valeur actuelle et celle voulu
- sur la durée donnée.
- Ça peut permettre de faire bouger une lumière.
- 0 = pas de transition.
- On peut omettre cette argument, ce qui mettra sa valeur à 0.
- Ça sera la même chose partout donc je ne répéterai pas.
- Exemple :
- light("lumière 1").set_pos(128, 256, 60) # set_pos avec transition de 60 frames
- light("lumière 1").set_pos(128, 256) # set_pos sans transition
- - light(key).set_origin(x, y, duration)
- Change le point d'origine de l'image.
- x = coordonnée x du centre de l'image en pourcentage.
- 0 = tout à gauche.
- 100 = tout à droite.
- La valeur par défaut est 50.
- y = coordonnée y du centre de l'image en pourcentage.
- 0 = tout en haut.
- 100 = tout en bas.
- La valeur par défaut est 50.
- Exemple :
- light("lumière 1").set_origin(0, 0) # Origine au coin haut-gauche
- - light(key).set_parallax(x, y, duration)
- Cette option permet de gérer le niveau d'ancrage de la lumière sur
- la map, càd quand la map défile la lumière défilera à une vitesse
- différente, comme les panoramas quoi.
- Par défaut les valeurs sont à 1 ce qui veut dire que les lumières
- défilent à la même vitesse que la map.
- Si on met 2 les lumières défileront deux fois plus vite que la map.
- Si on met 0 les lumières ne défileront plus, comme si elles étaient
- ancrées à l'écran.
- On peut aussi mettre des nombres décimaux genre 0.5 pour défiler moins
- vite ou encore des nombres négatifs pour inverser le sens de défilement.
- Par contre c'est uniquement pour les lumières affiliés à la map,
- si la lumière suit un chara cette option ne marche pas.
- x = ancrage horizontal.
- La valeur par défaut est 1.
- y = ancrage vertical.
- La valeur par défaut est 1.
- Exemple :
- light("lumière 1").set_parallax(0, 0) # lumière ancrée à l'écran
- - light(key).set_opacity(opacity, duration)
- Change l'opacité de la lumière, ce qui aura pour effet de faire
- qu'elle brille moins le jour et éclaire moins la nuit aussi.
- Si on veut juste faire qu'elle brille moins le jour tout en éclairant
- bien la nuit il vaut mieux baisser la composante alpha de la couleur.
- opacity = pourcentage entre 0 et 100.
- La valeur par défaut est 100.
- Exemple :
- light("lumière 1").set_opacity(75, 60)
- - light(key).set_color(red, green, blue, alpha, duration)
- Colorise/Applique une couleur sur la lumière.
- On peut avoir une couleur nulle (avec tout à 0), la lumière sera
- invisible le jour, et ne fera qu'empêcher l'écran de noircir la nuit
- (pas de couleur).
- Pour avoir une lumière noire ou qui assombri l'écran il faudra
- modifier le blend_type (voir plus bas).
- red, green, blue = nombres entre 0 et 255.
- Ce sont les composantes de la couleur, rouge, vert, bleu.
- La valeur par défaut est 0.
- alpha = nombre entre 0 et 255.
- C'est la transparence de la couleur mais ici ça correspond plutôt
- à la luminosité de notre lumière.
- La valeur par défaut est 255 = 100%.
- Exemple :
- light("lumière 1").set_color(255, 0, 0, 255) # => lumière rouge
- - light(key).set_zoom(zoom, duration)
- Change le zoom de la lumière.
- zoom = un pourcentage.
- La valeur par défaut est 100.
- Exemples :
- light("lumière 1").set_zoom(200) # => zoom à 200% instantané
- light("lumière 1").set_zoom(200, 60) # => zoom à 200% sur 60 frames
- - light(key).set_flicker(variance, refresh_rate, duration)
- Fait scintiller la lumière, comme du feu.
- L'effet est réalisé en changeant le zoom de manière aléatoire.
- variance = amplitude du scintillement en pourcentage de zoom.
- Ce doit être un nombre supérieur à 0.
- Il vaut mieux mettre des petits nombres.
- La valeur par défaut est 0 = désactivé.
- refresh_rate = intervalle entre chaque changement en nombre de frames.
- En règle générale plus la variance est haute plus l’intervalle doit
- être grand pour éviter d'avoir quelque chose d'épileptique.
- La valeur par défaut est 4.
- Exemple :
- light("lumière 1").set_flicker(2, 4)
- - light(key).set_angle(angle, duration)
- Fait tourner la lumière...
- Ça marche mais que pour les lumières de jour.
- angle = nombre de degrés.
- On peut aussi mettre un nombre négatif.
- A noter que si on fait une rotation de 360° puis qu'on veut en
- refaire une autre une deuxième fois ça ne fera rien, vu qu'on est
- déjà à 360° il faut soit tourner à 720° soit remettre la valeur à 0
- avant d'essayer de la remettre à 360.
- Exemple :
- light("lumière 1").set_angle(360, 60) # => do a barrel roll
- - light(key).set_wave(amp, length, speed, duration)
- Fait onduler la lumière.
- Ça marche mais que pour les lumières de jour.
- amp = amplitude (horizontale) de l'ondulation en nombre de pixels.
- Ce doit être un nombre supérieur à 0.
- La valeur par défaut est 0 = désactivé.
- length = longueur (verticale) de l'onde en nombre de pixels.
- La valeur par défaut est 180.
- speed = vitesse de l'ondulation.
- La valeur par défaut est 360.
- Exemple :
- light("lumière 1").set_wave(4, 180, 360, 60)
- - light(key).visible = true ou false
- Permet de masquer une lumière sans perdre ses réglages, ça peut
- toujours servir.
- Par défaut la valeur est true.
- Exemple :
- light("lumière 1").visible = false
- - light(key).blend_type = 0 ou 1 ou 2
- Change le mode fusion (type de transparence) de la lumière.
- Si 0 => Normal
- Si 1 => Addition (éclairci)
- Si 2 => Soustraction (obscurci)
- Par défaut la valeur est 1.
- Exemple :
- light("lumière 1").blend_type = 2
- - light(key).directions = n
- Il est possible d'avoir des lumières directionnelles.
- C'est à dire que quand on met une lumière sur un chara, la lumière
- prendra la même direction que le chara.
- Pour faire des lampes de poche par exemple.
- Le script peut supporter des charas à 2, 4 ou 8 directions.
- n = le nombre de directions.
- Le fichier doit être prévu à cet effet, ça marche comme une planche de
- chara, il faut qu'il y ait toutes les directions dans le même fichier
- les unes au dessus des autres dans le même ordre que pour le chara.
- La valeur par défaut est 1.
- Exemple :
- light("lumière 1").directions = 4
- - light(key).patterns = n
- Comme pour les directions les lumières peuvent avoir des animations
- qui se synchronisent avec l'animation de leur chara.
- Le principe est le même.
- n = le nombre d'animations.
- Ici les animations doivent être alignées horizontalement dans le
- fichier comme pour les planches de chara.
- La valeur par défaut est 1.
- Exemple :
- light("lumière 1").patterns = 4
- - light(key).anime_rate = n
- Cette option permet d'animer automatiquement la lumière (Animer à
- l'arrêt en quelque sorte).
- n = intervalle entre chaque animation en nombre de frames.
- Plus c'est haut plus l'animation est lente.
- La valeur par défaut est 0 = désactivé.
- Exemple :
- light("lumière 1").anime_rate = 10
- Ombres :
- - shadow(key).setup(filename)
- Initialise une nouvelle ombre.
- key = un identifiant pour notre ombre.
- Fonctionne exactement de la même manière que pour les lumières.
- filename = le nom du fichier utilisé pour l'ombre.
- Ici contrairement aux lumières on peut coloriser l'ombre directement
- dans son fichier si besoin (même si en général les ombres sont noires).
- Les images d'ombres ne doivent pas être transparentes mais pleines,
- la transparence des ombres est gérée automatiquement par le script
- selon la luminosité ambiante de la map.
- Exemple :
- shadow("ombre 1").setup("shad.png") # nouvelle ombre
- shadow.setup("shad.png") # nouvelle ombre sans identifiant
- - shadow(key).setup(width, height)
- Initialise une nouvelle ombre sans image.
- Si vous avez besoin d'une simple ombre rectangulaire c'est plus
- simple et efficace de faire comme ça plutôt que de créer et utiliser
- des images.
- width = la largeur de l'ombre en pixels.
- height = la hauteur de l'ombre en pixels.
- Exemple :
- shadow("ombre 1").setup(32, 96) # nouvelle ombre de taille 32x96px
- - shadow(key).chara_id = n
- Permet de lier une ombre à un chara (event, héros, véhicule).
- Le principe est le même que pour les lumières.
- Cependant attention, les ombres de charas ne peuvent pas assombrir
- d'autres charas, si vous voulez des ombres sous lesquelles ont peut
- passer il faut qu'elles soient liées à la map.
- n = id du character sous lequel afficher l'ombre.
- Fonctionne exactement de la même manière que pour les lumières.
- Exemple :
- shadow("ombre 1").chara_id = -1 # lie l'ombre au héros
- - shadow(key).clear
- Fonctionne exactement de la même manière que pour les lumières.
- Exemple :
- shadow("ombre 1").clear # supprime l'ombre
- - shadow(key).active
- Fonctionne exactement de la même manière que pour les lumières.
- Exemple :
- shadow("ombre 1").active == true # l'ombre existe ?
- - shadow(key).set_pos(x, y, duration)
- Fonctionne exactement de la même manière que pour les lumières.
- Exemple :
- shadow("ombre 1").set_pos(128, 256, 60) # set_pos avec transition de 60 frames
- - shadow(key).set_origin(x, y, duration)
- Change le point d'origine de l'image.
- Par défaut l'origine est toujours au centre comme pour les lumières.
- Quand on place une ombre sur un chara c'est souvent mieux comme ça
- mais en général quand on veut en placer une sur la map on fait ça
- par rapport à son coin haut gauche, donc n'oubliez pas de changer ça !
- x = coordonnée x du centre de l'image en pourcentage.
- y = coordonnée y du centre de l'image en pourcentage.
- Exemple :
- shadow("ombre 1").set_origin(0, 0) # Origine au coin haut-gauche
- - shadow(key).set_parallax(x, y, duration)
- Fonctionne exactement de la même manière que pour les lumières.
- Exemple :
- shadow("ombre 1").set_parallax(0, 0) # ombre ancrée à l'écran
- - shadow(key).set_opacity(opacity, duration)
- Change l'opacité de l'ombre, l'opacité est déjà gérée automatiquement
- par le script donc ça sert pas à grand chose, mais si pour une raison
- y'a besoin de baisser l'opacité d'une ombre en particulier c'est
- possible.
- Cette option marche uniquement si vous utilisez une image pour votre
- ombre, sinon il faut voir avec le canal alpha de la couleur.
- opacity = pourcentage entre 0 et 100.
- La valeur par défaut est 100.
- Exemple :
- shadow("ombre 1").set_opacity(75, 60)
- - shadow(key).set_color(red, green, blue, alpha, duration)
- Définit la couleur de l'ombre pour quand on utilise pas d'image.
- red, green, blue = nombres entre 0 et 255.
- Ce sont les composantes de la couleur, rouge, vert, bleu.
- La valeur par défaut est 0 = noir.
- alpha = nombre entre 0 et 255.
- C'est l'opacité de notre ombre.
- La valeur par défaut est 255 = 100%.
- Exemple :
- shadow("ombre 1").set_color(0, 255, 0, 255) # => ombre verte
- - shadow(key).set_zoom(zoom, duration)
- Fonctionne exactement de la même manière que pour les lumières.
- Exemple :
- shadow("ombre 1").set_zoom(200) # => zoom à 200% instantané
- - shadow(key).visible = true ou false
- Fonctionne exactement de la même manière que pour les lumières.
- Exemple :
- shadow("ombre 1").visible = false
- - shadow(key).directions = n
- Fonctionne exactement de la même manière que pour les lumières.
- Exemple :
- shadow("ombre 1").directions = 4
- - shadow(key).patterns = n
- Fonctionne exactement de la même manière que pour les lumières.
- Exemple :
- shadow("ombre 1").patterns = 4
- - shadow(key).anime_rate = n
- Fonctionne exactement de la même manière que pour les lumières.
- Exemple :
- shadow("ombre 1").anime_rate = 10
- - shadow(key).shadowable = true ou false
- Définit si une ombre doit ombrer les charas ou pas.
- Pour les ombres associées à des charas il est important de faire
- qu'elles ne puissent pas ombrer, autrement le chara associé se
- retrouvera dans l'ombre en permanence.
- La valeur par défaut est true.
- Exemple :
- shadow("ombre 1").shadowable = false
- - set_shadowable(value, chara_id)
- Définit si un chara peut être ombré ou pas.
- value = true ou false
- La valeur par défaut est true.
- chara_id = id du character sur lequel modifier cette option.
- Si on ne met rien ça sera l'event qui exécute le script,
- comme si on mettait @event_id.
- Exemple :
- set_shadowable(false, -1) # empêche le héros d'être ombré
- set_shadowable(false) # empêche l'event qui exécute d'être ombré
- =end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement