C'était un peu dans l'air du temps, CloudStrife en a sorti un, il n'y a pas longtemps. Voilà ma petite version. Enfin, un effet lumineux sans pixels zoomés 6 fois... (pour kamikaz93 )
Liste des possibilités: Ton, dimensions, et positions paramétrables. Un event peut déclarer tout les effets de la map, les effets peuvent être fixés à la map, aux events ou au player. Possibilités d'allumer et d'éteindre les lumières individuellement, et en masses, progressivement (en 60 frames). Possibilités aussi de les redimensionner individuellement, progressivement.
Possibilité d'obscurcir des maps, et d'utiliser les lumières pour éclairer par compensation les zones sombres.
Et pour les courageux ayant des quelques connaissances en script, possibilité d'ajouter assez facilement, d'autres formes d'effets lumineux.[/justify]
Spoiler:
-Installation
Ce script n'échappe pas à la régle du "copiez en dessous de material". Il a besoin de l'image "le.png" dans votre dossier Pictures.
-Utilisation
Franchement, je n'ai pas le courage de réécrire ce qu'il y a dans le script et dans la démo. Lisez le script si dessous pour plus de détails. J'ai qu'une chose à dire, respectez bien la synthaxe. -script
Spoiler:
Code:
#==============================================================================# # # # # # Light Effects VX 1.2 # # # # # #==============================================================================# #Original par Kylock # #revu par Vincentmhd # #http://vincentmhdmaker.canalblog.com/ # #10/8/2010 # # # # # #-------------------------------------NOTE-------------------------------------# # # # Ce script est une extention de celui de Kylock. # #Il permet de placer des effets lumineux à partir d'une image et de commentaire# # # #Il nécéssite une image "le.png" # # # # # # # #--------------------------------EFFET LUMINEUX--------------------------------# # # #Utilisation: # # # #Tout d'abord il existe plein de synthaxes possible donc je ne vais pas toutes les expliquer # # #Le minimum, c'est le TYPE de lumière à savoir: # #LIGHT :Lumière blanche toute simple # #DARKNESS :Ombre # #FIRE :Lumière vibrante # #TORCH :Lumière vibrante 2 # # # #J'ai conservé les types de Kylock # #Juste le type dans un commentaire fonctione mais ce n'est pas l'intérêt du script. # # # # #Il existe 4 paramètres sur lesquels la lumière peut varier: # #Les proportions, la position, la teinte et l'état (allumée ou éteinte). # #Pour écrire les paramètres, voilà la synthaxe complète: # # # #TYPE:[SIZE,COORDONNEES,TONE,STATE] # #exemple: LIGHT:[64,5,ROUGE,false] # #dans l'exemple la lumière sera de 64 sur 64, centrée sur l'event 5, de couleur# #rouge et éteinte à l'arrivée sur la map. # # # #ATTENTION pas d'espace, n'oubliez pas les : et [] # # # #Voyons les paramètres: # # # # - les proportions: # #L'image de base reste la même mais ses proportions peuvent être modifiées en # #carré ou en rectangle. En carré, un nombre suffit le script comprendra qu'il # #s'agit d'un carrée. En rectangle, un tableau de nombre permet de définir # #la largeur et la hauteur de l'effet: [a,b] # #ATTENTION pas d'espace... # # # # - Les coordonnées # #Les coordonnées peuvent être de 3 natures: # # + un tableau de 2 nombres [a,b] # # => Elles indiqueront une position fixe sur la map. # # + un nombre # # => Il correspondra à l'id d'un event auquel il sera fixé. # # + une chaine avec P au début P... # # => Il permet d'attribuer un effet sur le player. # # Attention l'effet ne sera dispo que sur la map de l'event créateur. # # # # - Le ton de l'image # #Il peut être un mot-clé, correspondant à un ton dans le hash ligne 1321 # #ou un tableau à 4 composantes: [r,b,g,a]. # # # # - L'état # #Ca peut paraitre étrange mais pour s'allumer ou s'éteindre un effet doit # #exister. Donc il se peut que vous ayez à déclarer des effets éteints pour # #pouvoir les allumer après. # # # # # #Un mot sur l'ordre des paramètres: # # # #le ton et l'état peuvent être mis n'importe où. # #Parcontre, les proportions doivent toujours être avant les coordonnées et # #si vous déclarez des coordonnées il faudra déclarer des proportions avant. # #Il existe une seule exception, si la coordonnée est une chaine pour le player.# # # #Autre: # #Les effets sont répertoriés dans un hash dont les keys correspondent aux # #coordonnées des effets. Cela implique qu'un event ne peut avoir q'un effet qui# #le suit, qu'une position fixe idem. Le player parcontre peut en avoir autant # #que voulu. # # # #Comment allumer ou éteindre une lumière: # #Il faut utiliser ces appels: # #$game_light.map[COORDONNEES].on # #$game_light.map[COORDONNEES].off # #Ces transformations sont oubliées si vous changez de map. # #Utilisez les pages et les interrupteurs locaux pour les rendre permanentes. # # # #$game_light.map_on # #$game_light.map_off # #Allume ou éteint toutes les lumières dépendantes de la map. # # # #Vous pouvez redimensionner les lumières. # #$game_light.map[COORDONNEES].resize(SIZE [,frame]) # # # # # #------------------------------MAP SOMBRE ET GROTTE----------------------------# # # # Il est possible d'habiller l'écran d'un voile noir qui se révèle par # #compensation avec les effets lumineux. Ce voile peut être plus ou moins opaque# #Les maps à voiler se trouvent ds un tableau DARK_MAP, ligne 214 il regroupe les #identifiants des maps avec l'opacité correspondante. # # # #Détail, les opacités des effets sont alignées sur cette opacity afin d'adapter# #la compensation. # # # # # # # #----------------------------------Influence des tons--------------------------# # # #A vrai dire, je ne sais pas vraiment ce qui est le mieux. Un interrupteur # #permet d'aligner ou non le tone du viewport des effets sur celui de la map. # # # # TONE_INFLUENCE # # # #Ligne 217 # # # #------------------------Petit mot pour ceux qui en veulent plus---------------# # # # Dans le script tel quel il n'y a qu'une image de base, afin de limiter les # #dépence aux fichiers. Il est possible d'ajouter d'autres formes de base en # #ajoutant d'autre type d'effet. # # # #Cependant cela demande quelques connaissance en script mais ce n'est pas # #compliqué. # # # #Allez à la ligne 529 # #Vous voyez : # # # #if ["LIGHT","DARKNESS","TORCH","FIRE"].include?(key) # # # #Ajoutez le nom de votre type personalisé dans le array comme les autres types.# #(c'est pour que le script reconnaisse le commentaire) # # # #if ["LIGHT","DARKNESS","TORCH","FIRE","MON_TRUC_PERSO"].include?(key) # # # # # #Allez à la ligne 689 # #Vous voyez: # # # # def draw # # case @light_type # # when "LIGHT" # # @light.bitmap = Cache.picture("le.png") # # @light.origine?("Centre") # # @light.blend_type = 1 # # @type_op = 125 # # when "TORCH" # # @light.bitmap = Cache.picture("le.png") # # @light.origine?("Centre") # # @light.blend_type = 1 # # @type_op = 125 # # @tremble = [10,10] # # when "FIRE" # # @light.bitmap = Cache.picture("le.png") # # @light.origine?("Centre") # # @light.blend_type = 1 # # @type_op = 125 # # @tremble = [3,3] # # when "DARKNESS" # # @light.bitmap = Cache.picture("le.png") # # @light.origine?("Centre") # # @light.blend_type = 2 # # @type_op = 125 # # else # # end # # end # # # #Pas de panique, c'est relativement simple. # #Bon il y les 4 types de base avec leurs paramètres inérants. Décrivons-les. # # # # # # when "FIRE" # # *Identifie le type de l'effet à faire. il faudra mettre un when "MON_TRUC_PERSO" # avant le else* # # @light.bitmap = Cache.picture("le.png") # # *Quelle image attribuer à votre effet* # # @light.origine?("Centre") # # *Comment centrer l'image (méthode perso à mot clé voir plus bas Sprite +)*# # @light.blend_type = 1 # # *Comment intégrer l'image par addition 1 par soustraction 2 (0 n'est pas utile ici) # @type_op = 125 # # *Quelle est l'opacité de base de cet effet* # # @tremble = [3,3] # # *Si l'effet tremble à quelle puisance. # # # # # #Pour ajouter votre effet, il suffit d'ajouter un when "MON_TRUC_PERSO" avant # #le else et de prendre modèle sur les autres types # # # #Bon je crois que j'ai fait le tour... # # # #==============================================================================#
#==============================================================================# # Ensemble des méthodes de créations # #==============================================================================# def create create_darkness end #------------------------------------------------------------------------------# # Création du viewport # #------------------------------------------------------------------------------# def vp_create @viewport = Viewport.new(0,0,Graphics.width, Graphics.height) @viewport.z = 1 end #------------------------------------------------------------------------------# # Renvois le viewport # #------------------------------------------------------------------------------# def viewport return @viewport end #------------------------------------------------------------------------------# # Création de la sprite de l'ombre. # #------------------------------------------------------------------------------# def create_darkness if dark_map?() if (@dark.nil?)||(@dark.disposed?) @dark = Sprite.new(@viewport) @dark.z = 1000 @dark.bitmap = Bitmap.new(2*Graphics.width, 2*Graphics.height) @dark.bitmap.remplir(Color.new(255,255,255,255)) @dark.origine?("Centre") @dark.coord?("Centre") @dark.blend_type = 2 @dark.visible = false end @dark.opacity = DARK_MAP[$game_map.map_id] else if (!@dark.nil?)&&(!@dark.disposed?) @dark.opacity = 0 end end #met à jour les opacités en fonction for light in @map.values light.refresh_op end end #------------------------------------------------------------------------------# # Création de la sprite de l'ombre. # #------------------------------------------------------------------------------# def create_from_event(type,param,id_event) light = Light.new light.create_from_event(type,param,id_event) @map[light.key] = light end #==============================================================================# # Méthodes de l'Ombre. # #==============================================================================# def dark_map?(id = $game_map.map_id) return DARK_MAP.has_key?(id) end
def dark_opacity if (!@dark.nil?)&&(!@dark.disposed?) return @dark.opacity else return 0 end end
#==============================================================================# # Ensemble des méthodes de monstration. # #==============================================================================# def show show_darkness show_map end
def hide hide_darkness hide_map end #------------------------------------------------------------------------------# # Monstration de l'ombre. # #------------------------------------------------------------------------------# def show_darkness if dark_map?()||(!@dark.nil?) if (!@dark.disposed?) @dark.visible = true end end end
def hide_darkness if dark_map?()||(!@dark.nil?) if(!@dark.disposed?) @dark.visible = false end end end #------------------------------------------------------------------------------# # Monstration des effets ce la map. # #------------------------------------------------------------------------------#
def show_map for light in @map.values light.show end end
def hide_map for light in @map.values light.hide end end
#==============================================================================# # Ensemble des méthodes de mise à jour. # #==============================================================================# def update vp_update update_darkness update_map end
#------------------------------------------------------------------------------# # Mise à jour du viewport. # #------------------------------------------------------------------------------# def vp_update if TONE_INFLUENCE @viewport.tone = $game_map.screen.tone end @viewport.ox = $game_map.screen.shake @viewport.update end #------------------------------------------------------------------------------# # Mise à jour de l'ombre. # #------------------------------------------------------------------------------# def update_darkness if dark_map?() if (@dark.nil?||@dark.disposed?) create_darkness end @dark.update end end #------------------------------------------------------------------------------# # Mise à jour des lumières # #------------------------------------------------------------------------------# def update_map for light in @map.values light.update end end
#------------------------------------------------------------------------------# # Tout éteindre la map. # #------------------------------------------------------------------------------# def map_off for light in @map.values light.off end end
#------------------------------------------------------------------------------# # Tout allumer de la map. # #------------------------------------------------------------------------------# def map_on for light in @map.values light.on end end
#==============================================================================# # Ensemble des méthodes de destruction. # #==============================================================================# def dispose dispose_darkness end
#------------------------------------------------------------------------------# # Destruction du viewport # #------------------------------------------------------------------------------# def vp_dispose @viewport.dispose end #------------------------------------------------------------------------------# # Destruction de l'ombre. # #------------------------------------------------------------------------------# def dispose_darkness if dark_map?() @dark.dispose end end #------------------------------------------------------------------------------# # Destruction de l'ombre. # #------------------------------------------------------------------------------# def clear_map for light in @map.values light.dispose end @map.clear end
end
#==============================================================================# # # # Alias de la classe des images de Maps # # # #==============================================================================# class Spriteset_Map
#Alias nécessaires alias light_initalize initialize alias light_dispose dispose alias light_update update
#==============================================================================# # # # Création du gestionnaire # # # #==============================================================================# class Scene_Title alias light_create_game_objects create_game_objects def create_game_objects light_create_game_objects $game_light = Gst_light.new end end
#==============================================================================# # # # Mise à jour du Gestionnaire à la Map # # # #==============================================================================# class Game_Map
alias mhd_light_setup_events setup_events def setup_events mhd_light_setup_events self.Mhd_setup end
def Mhd_setup for event in $game_map.events.values next if event.list == nil for i in 0...event.list.size if event.list[i].code == 108 commentaire = "" commentaire = event.list[i].parameters.to_s info = Commentaire.analyse(commentaire) self.Analyse_Com(info[0], info[1], event) end end end end
if !defined?(Analyse_Com(key, param, event)) def Analyse_Com(key, param, event) end end
alias light_Analyse_Com Analyse_Com alias light_setup_events setup_events
def Analyse_Com(key, param, event) light_Analyse_Com(key,param, event) if ["LIGHT","DARKNESS","TORCH","FIRE"].include?(key) $game_light.create_from_event(key,param, event.id) end end
def setup_events $game_light.clear_map light_setup_events end
end
#==============================================================================# # # # Classe d'un effet lumineux # # # #==============================================================================# class Light
#------------------------------------------------------------------------------# # Ce qui permet de l'identifier # #------------------------------------------------------------------------------# def key return @coord end
#==============================================================================# # Méthodes d'action. # #==============================================================================# #------------------------------------------------------------------------------# # Allume la lumière. # #------------------------------------------------------------------------------# def on @state = true op_change(@type_op) end #------------------------------------------------------------------------------# # Eteint la lumière. # #------------------------------------------------------------------------------# def off @state = false op_change(0) end
#==============================================================================# # Ensemble des méthodes d'opacité. # #==============================================================================# def op_change (op , duration = 60) @op_count = duration @target_op = op if @op_count == 0 @light.opacity = op end end #------------------------------------------------------------------------------# # Eteint la lumière. # #------------------------------------------------------------------------------# def align_op coef = 1 - (($game_light.dark_opacity.to_f)*0.5)/ 255.0 @type_op = (@type_op.to_f * (coef)).to_i end
elsif a.is_a?(Integer) @size_target=[a.to_i, a.to_i] end @size_count = count end
#==============================================================================# # Ensemble des méthodes de création. # #==============================================================================# #------------------------------------------------------------------------------# # Création par event # #------------------------------------------------------------------------------# def create_from_event(type, param, id_event) info = Commentaire.decompose(param) create_light(type) info = check_state(info) info = create_tone(info)
if !info.nil? if (info.is_a?(Array))&&(info.size > 1) create_size(info[0]) create_coord(info[1],id_event) else create_size(info) create_coord([],id_event) end else create_size([]) create_coord([],id_event) end
if @coord.is_a?(Array) @coord_type = "Fixe" elsif @coord.is_a?(Integer) @coord_type = "Event" elsif @coord.is_a?(String) @coord_type = "Player" end end
#------------------------------------------------------------------------------# # Création par équipement # #------------------------------------------------------------------------------# def create_from_eq(type, param, id_eq) end
#------------------------------------------------------------------------------# # Création par compétence # #------------------------------------------------------------------------------# def create_from_comp(type, param, id_comp) end
#==============================================================================# # Ensemble des sous-méthodes de création. # #==============================================================================# #------------------------------------------------------------------------------# # Création de la lumière. # #------------------------------------------------------------------------------# def create_light(type) @light_type = type draw align_op draw_op end
def draw case @light_type when "LIGHT" @light.bitmap = Cache.picture("le.png") @light.origine?("Centre") @light.blend_type = 1 @type_op = 125 @light.z = $game_light.map.size() when "TORCH" @light.bitmap = Cache.picture("le.png") @light.origine?("Centre") @light.blend_type = 1 @type_op = 125 @tremble = [10,10] @light.z = $game_light.map.size() when "FIRE" @light.bitmap = Cache.picture("le.png") @light.origine?("Centre") @light.blend_type = 1 @type_op = 125 @light.z = $game_light.map.size() @tremble = [3,3] when "DARKNESS" @light.bitmap = Cache.picture("le.png") @light.origine?("Centre") @light.blend_type = 2 @type_op = 125 @light.z = $game_light.map.size() -1000 #pour les Ténèbres s'annulent à la lumière il faut qu'ils soient sous #la lumière. else end end
def draw_op @target_op = @type_op @light.opacity = @type_op end #------------------------------------------------------------------------------# # Création de la taille de l'image (zoom) # #------------------------------------------------------------------------------# def create_size(info) a = Commentaire.decompose(Commentaire.decompose(info)) @size = 64
if (a.is_a?(Array)) && (a.size == 2) @size = [a[0].to_i, a[1].to_i]
elsif a.is_a?(String) if a[0,1] == 'P' @coord = a #si le makeur oubli... else @size=[a.to_i, a.to_i] end end @light.zoom_resize(@size[0],@size[1]) @size_target = @size end
#------------------------------------------------------------------------------# # Création de le ton de l'image (fonctionne par mots-clés et par arrays) # #------------------------------------------------------------------------------# def create_tone(param)
if ( ! param.nil? )
if (param.is_a?(Array)) for i in 0...param.size a = Commentaire.tone?(Commentaire.decompose(param[i])) if !(a.nil?) @light.tone = a param.delete_at(i) end end
elsif (param.is_a?(String)) a = Commentaire.tone?(param) if !(a.nil?) @light.tone = a param = nil end end
end return param
end #------------------------------------------------------------------------------# # Création des Coordonnées de l'image # #------------------------------------------------------------------------------# def create_coord(info, id) if @coord.nil? a = Commentaire.decompose(Commentaire.decompose(info))
if (a.is_a?(Array))&&(a.size == 2) @coord = [a[0].to_i, a[1].to_i] elsif (a.is_a?(Array))&&(a.size == 1) @coord = a[0].to_i elsif a.is_a?(String) if a[0,1] == 'P' @coord = a else @coord = a.to_i end else @coord = id end end end #------------------------------------------------------------------------------# # Initialisation de l'état de l'éclairage. # #------------------------------------------------------------------------------# def check_state(param)
if !param.nil?
if param.is_a?(Array) for i in 0...param.size if param[i] == "false" @state = false @target_op = 0 @light.opacity = 0 param.delete_at(i) end end
elsif param.is_a?(String) if param == "false" @state = false @target_op = 0 @light.opacity = 0 param = nil end end end
if @state.nil? @state = true end
return param end
#==============================================================================# # Ensemble des méthodes de mise à jour. # #==============================================================================# def update if @active @light.update op_update size_update place end end
#------------------------------------------------------------------------------# # Mise à jour de l'opacité en changement. # #------------------------------------------------------------------------------# def op_update if @op_count>0 d = @op_count @light.opacity = (@light.opacity * (d - 1) + @target_op) / d @op_count -=1 end end
#------------------------------------------------------------------------------# # Mise à jour de l'opacité en changement. # #------------------------------------------------------------------------------# def size_update if @size_count >0 d = @size_count @size[0] = (@size[0] * (d - 1) + @size_target[0]) / d @size[1] = (@size[1] * (d - 1) + @size_target[1]) / d @light.zoom_resize(@size[0],@size[1]) @size_count -=1 end end
#------------------------------------------------------------------------------# # Mise à jour de la position. # #------------------------------------------------------------------------------# def place if !(@light.opacity == 0) case @coord_type when "Fixe" @light.x = (((@coord[0]* 256) - ($game_map.display_x))/8 + 16).round @light.y = (((@coord[1]* 256) - ($game_map.display_y))/8 + 16).round when "Event" @light.x = ((($game_map.events[@coord].real_x) - ($game_map.display_x))/8 + 16).round @light.y = ((($game_map.events[@coord].real_y) - ($game_map.display_y))/8 + 16).round when "Player" @light.x = ((($game_player.real_x) - ($game_map.display_x))/8 + 16).round @light.y = ((($game_player.real_y) - ($game_map.display_y))/8 + 16).round else end
if !(@tremble.nil?) @light.x += rand(2*@tremble[0]) - @tremble[0] @light.y += rand(2*@tremble[1]) - @tremble[1] end end end
#------------------------------------------------------------------------------# # Rendre la lumière visible # #------------------------------------------------------------------------------# def show @light.visible = true @active = true end
#------------------------------------------------------------------------------# # Rendre la lumière invisible # #------------------------------------------------------------------------------# def hide @light.visible = false @active = false end #==============================================================================# # Méthodes de refresh # #==============================================================================# def refresh_op draw align_op draw_op if !(@state) @target_op = 0 @light.opacity = 0 end end
#==============================================================================# # Ensemble des méthodes de destrution. # #==============================================================================# def dispose @light.dispose end end
Dernière édition par vincentmhd le Lun 12 Mar 2012 - 21:19, édité 3 fois
#------------------------------------------------------------------------------# # # # Permet de remplir le rectangle. # # (c'est juste pour avoir moins de variables à renseigner.) # # plus pratique de commencer par la couleur... # #------------------------------------------------------------------------------#
def remplir(color = Color.new(255,255,255,255), rect = self.rect) self.fill_rect(rect , color) end end #==============================================================================# # # # # # SPRITE + (Coordonnées # # # # # #==============================================================================# # # #By Vincentmhd # #http://vincentmhdmaker.canalblog.com/ # #18/8/2010 # # # #v2, ajout de x_min, y_min, width et height dans la méthode coord? # # # # # #-------------------------------------NOTE-------------------------------------# # # # Ce script me permet de gérer plus facilement les sprites avec de petites # #méthodes supplémentaires. Afin de simplifier l'utilisation, j'utilise les # #monts clefs suivants: # # # # "Haut Gauche" "Haut Centre" "Centre" # # "Haut Droite" "Bas Centre" # # "Bas Gauche" "Gauche Centre" # # "Bas Droite" "Droite Centre" # # # # # # # #------------------------------------LISTE-------------------------------------# # # # # # ________________________________________________________________________ # # | | | # # | Prototype | Action | # # |____________________________________|___________________________________| # # | | | # # | Void > zoom_resize(Int, Int) | Détermination la taille du zoom | # # | | pour avoir la taille demandée. | # # |____________________________________|___________________________________| # # | | | # # | Bool > is_on?(Int, Int) | Détermination si la coord est | # # | | dans la sprite. | # # |____________________________________|___________________________________| # # | | | # # | Rect[Bool] is_on_corner?(Int, Int)| Détermination si la coord est dans| # # | | les coins. | # # |____________________________________|___________________________________| # # | | | # # | Rect[Bool] is_on_corner_8(Int, | Détermination si les coord est | # # | Int, Int) | dans les coins. | # # |____________________________________|___________________________________| # # | | | # # | Void > coord?(String, Rect) | Sous ces multiples Prototypes qui | # # | | peuvent effrayer cette méthode est| # # | | faites pour simplifier le | # # | Void > coord?(Array[Int, Int, | placement des sprites par | # # | Int, Int], | l'utilisation de mots-clés. | # # | Rect) | | # # | | @x, @y, @zoom_x, @zoom_y | # # | Void > coord?(Array[String, | | # # | Int, Int], | | # # | Rect) | | # # | | | # # |____________________________________|___________________________________| # # | | | # # | Void > origine?(Int, Int) | Sous ces multiples Prototypes qui | # # | | peuvent effrayer cette méthode est| # # | | faites pour simplifier le | # # | Void > origine?(String) | placement des sprites par | # # | | l'utilisation de mots-clés. | # # | | | # # | | @ox, @oz | # # |____________________________________|___________________________________| # # # # # #==============================================================================#
class Sprite
def zoom_resize(width,height = width) self.zoom_x = width.to_f/ ((self.width).to_f) self.zoom_y = height.to_f/ ((self.height).to_f) end #------------------------------------------------------------------------------# # # # Renvoit si la coordonnée est sur la croix centrale. # # # #------------------------------------------------------------------------------# def is_on_center_cross?(x = $souris.x, y = $souris.y) return (self.rect).is_on_center_cross?(x,y) end
#------------------------------------------------------------------------------# # # # # # Renvoit le rectangle de la sprite # # # # # #------------------------------------------------------------------------------# def rect if self.viewport != nil x = self.x + self.viewport.rect.x y = self.y + self.viewport.rect.y w = self.zoom_x*self.width h = self.zoom_y*self.height else x = self.x y = self.y w = self.zoom_x*self.width h = self.zoom_y*self.width end return Rect.new(x,y,w,h) end
#------------------------------------------------------------------------------# # # # # # Détermination si la coordonnée est dans la sprite. # # # # # #------------------------------------------------------------------------------#
def is_on?(x = $souris.x, y= $souris.y)
return self.rect.is_on?(x,y) end
#------------------------------------------------------------------------------# # # # # # Détermination si la coordonnée est dans les coins de la sprite. # # # # # #------------------------------------------------------------------------------#
def is_on_corner?(x = $souris.x, y= $souris.y, side = 8*self.zoom_x) return self.rect.is_on_corner?(x,y,side) end
#------------------------------------------------------------------------------# # # # # # Détermination si la coordonnée est dans les coins de la sprite. # # # # # #------------------------------------------------------------------------------#
def is_on_corner_8?(x = $souris.x, y= $souris.y, side = 8*self.zoom_x) return self.rect.is_on_corner_8?(x,y,side) end
#------------------------------------------------------------------------------# # # # Détermination des coordonnées de la sprite # # # # Formes possibles pour coord: "", [,,,], ["",,] # # # #------------------------------------------------------------------------------#
#------------------------------------------------------------------------------# # # # Détermination de l'origine de la sprite # # # # arguments possibles: "", [,] # # # #------------------------------------------------------------------------------#
def origine?(origine) case (origine) when nil ox = 0 oy = 0
when "Haut Gauche" ox = 0 oy = 0
when "Haut Droite" ox = self.width() oy = 0
when "Bas Gauche" ox = 0 oy = self.height()
when "Bas Droite" ox = self.width() oy = self.height()
when "Haut Centre" ox = self.width() /2 oy = 0
when "Bas Centre" ox = self.width() /2 oy = self.height()
when "Gauche Centre" ox = 0 oy = self.height() /2
when "Droite Centre" ox = self.width() oy = self.height() /2
when "Centre" ox = self.width() /2 oy = self.height() /2
else ox = origine[0] oy = origine[1] end
self.ox = ox self.oy = oy end
end #==============================================================================# # Fin de Sprite + # #==============================================================================#
#==============================================================================# # # # # # Mhd_File # # # # # #==============================================================================# # # #Vincentmhd # #http://vincentmhdmaker.canalblog.com/ # #10/07/2010 # # # # # #-------------------------------------NOTE-------------------------------------# # # # Ceci est une classe de décomposition de chaine selon une synthase précise. # #Me sert dans mes commentaires: Ils ont tous cette forme: # # # # CLEE:[PARAMETRES] # # # # La clée identifie le script a qui est adressé les paramètres. # #Selon les scripts les paramètres peuvent être imbriqués à diverses profondeurs# #Cette synthaxe me permet de compresser et d'homogénéïser le paramétrage de mes# #scripts. # #==============================================================================#
def analyse(commentaire) info = [] index = 0 ouvert = 0 info[index] = "" for i in 0...commentaire.size
info[index] += commentaire[i,1]
if info[index][info[index].size - IN.size, IN.size] == IN ouvert += 1 end
#Si l'on ferme un crochet if info[index][info[index].size - (OUT.size), OUT.size] == OUT ouvert -= 1 #Si l'on retourne à la strate 0 if ouvert == 0 info[index]= info[index][IN.size, info[index].size - (IN.size + OUT.size)] end end
if (ouvert == 0) if info[index][info[index].size - C.size, C.size] == C info[index] = info[index][0,info[index].size - C.size] index += 1 info[index] = "" end end end return info end
#------------------------------------------------------------------------------# # # # Décompose une chaine en plusieurs chaine de Rang 1 # # # #------------------------------------------------------------------------------#
def decompose(commentaire) info = [] index = 0 ouvert = 0 info[index] = "" if commentaire.is_a?(String) for i in 0...commentaire.size
info[index] += commentaire[i,1]
if info[index][info[index].size - IN.size, IN.size] == IN ouvert += 1 end
#Si l'on ferme un crochet if info[index][info[index].size - (OUT.size), OUT.size] == OUT ouvert -= 1 #Si l'on retourne à la strate 0 if ouvert == 0 info[index]= info[index][IN.size, info[index].size - (IN.size + OUT.size)] end end
if (ouvert == 0) if info[index][info[index].size - S.size, S.size] == S info[index] = info[index][0,info[index].size - S.size] index += 1 info[index] = "" end end end #resultat if info.size > 1 return info else return info[0] end
else if (commentaire.is_a?(Array))&&(commentaire.size == 1) return commentaire[0] else return commentaire end end end
#------------------------------------------------------------------------------# # # # Transforme un commentaire en ton. # # # #------------------------------------------------------------------------------# def tone?(commentaire) commentaire = decompose(commentaire)
if (commentaire.is_a?(Array))&&(commentaire.size == 4) t = Tone.new((commentaire[0]).to_i,(commentaire[1]).to_i,(commentaire[2]).to_i,(commentaire[3]).to_i) return t elsif TONE.has_key?(commentaire) return TONE[commentaire] else return nil end end end
#==============================================================================# # Include dans l'espace commun # #==============================================================================# include Commentaire
#==============================================================================# # Fin de Mhd_Commentaire # #==============================================================================#
Désolé, il est un peu long ~1500 lignes
-Démo
>>Démo
Euh, il y a dedans mon script Auto_Tp car, ça m'a permit de ne pas me prendre la tête à linker les maps. Donc ignorez-le. Il y a 12 maps dont quelqu'unes inutiles mais bon... ça m'a servi d'aire d'expérimentation.
Dernière édition par vincentmhd le Lun 12 Mar 2012 - 21:16, édité 3 fois
Hey sur ta démo y'a que 6 maps, et t'a du oublier de virer des prints xD De plus elle bug quand j'essaye d'allumer la lumiére !
Sinon très très bon script !
vincentmhd
Maire Lv.9
Age : 37 Inscrit le : 04/02/2009 Messages : 326
Sujet: Re: [VX] Effet de lumière Mhd Lun 1 Nov 2010 - 14:05
Je me permet de up, car le script a un peu avancé...
Ajout: Les équipements
les équipement peuvent maintenant ajouter des effets lumineux au player sur la map, lorsqu'ils sont équipés... (pas en combat, pour une prochaine fois éventuellement...) ... Exemple s'équiper d'une lanterne, vous permez d'avoir un halo de lumière autour de vous sur une map normale et si vous êtes sur une map "sombre", elle permet de compenser l'obscurité autour de vous.
Correction: Compatibilité avec Kylock
Euh oui à l'origine je voulais qu'on puisse substituer le script de kylock sans adaptation. Et je ne n'avais pas vérifier si ça marchait... et ça ne marchait pas, mais maintenant oui . Donc si vous voulez intégrer ce script dans un projet qui utilisait le script de Kylock c'est possible maintenant, normalement les types GROUND LIGHT LIGHT2, TORCH, TORCH2, FIRE doivent à peu près correspondre.
nota: si vous utilisez les 2 en même temps, ils vont s'additionner et ça ne va pas aller esthétiquement parlant.
==> la démo: ICI
thérapie
Aventurier Lv.16
Age : 28 Inscrit le : 03/08/2009 Messages : 1399
Sujet: Re: [VX] Effet de lumière Mhd Lun 1 Nov 2010 - 14:15
Une fois de plus tu nous sort un truck monstrueux (je parle surtout du halo pour la lanterne qui était chiant à faire en event ) et puis merci aussi pour l'adaptation
Bye
Zangther
Maître des Duels
Age : 32 Inscrit le : 29/07/2009 Messages : 7841
Sujet: Re: [VX] Effet de lumière Mhd Lun 1 Nov 2010 - 16:04
Rah et t'attend que je sois revenu sur Amiens avec ma connexion qui rejette megaup pour sortir une maj ><.
J'utilise dja ton ancienne version et j'en suis super content. Je te dis ce que j'en pense quand j'aurais téléchargé ^^
Garruk
Aventurier Lv.16
Age : 40 Inscrit le : 03/09/2009 Messages : 1503
Sujet: Re: [VX] Effet de lumière Mhd Lun 8 Nov 2010 - 19:50
Bonne nouvelle, je vais testé tout ça. Bonne continuation.
vincentmhd
Maire Lv.9
Age : 37 Inscrit le : 04/02/2009 Messages : 326
Sujet: Re: [VX] Effet de lumière Mhd Ven 26 Nov 2010 - 9:04
Je met juste un petit message pour annoncer qu'une nouvelle version est en préparation. Si j'ai le temps, elle sera là pour la semaine prochaine.
Les ajouts:
=>Possibilité de choisir la hauteur de l'effet (z)... pour essayer de faire moins effet photoshop ajouter en post capture ^^
=>Changement de l'identification des effets, qui permet entre autre d'accumuler pour une coordonnée, ou un event. (et vous choississez votre identifiant)
=> c'est invisible, mais maintenant vous pouvez mettre des espaces dans le commentaire. Il y a juste une boucle qui les éliminera avant de traiter le comm. C'est pour plus de souplesse dans l'écriture des comm... (je me pose la question est-ce que je dois rendre le comm non sensitive case?)
Euh j'ai un petit lien, mais qui n'est pas finit, j'ai encore plusieurs choses à régler. Dont un bon vieux bug, qui efface les effets, à cause d'une interaction avec le linker de maps. Le lien
Zangther
Maître des Duels
Age : 32 Inscrit le : 29/07/2009 Messages : 7841
Sujet: Re: [VX] Effet de lumière Mhd Ven 26 Nov 2010 - 9:51
Cool =)
Par contre j'avais remarqué un léger bug avec ton script. Lorsque l'on utilise les effets de lumière sur une map bouclée sur elle même, quand on arrive vers un bord, les effets ne sont pas visible sur l'une des parties de la map.