| Membre VIP |
 |
 |
Inscrit le: 14 Avr 2007, 00:00 Messages: 1738 Localisation: ENS Rennes Niveau RPG Maker: +∞ Point(s) Fort(s): Ruby Sexe: Masculin Points d'aide: 60/60
Créations :
Voir ses créations
|
J'avais fait ça il y a longtemps, et j'ai un peu remis à jour le système après une demande. Le script crée des halos là où vous le voulez, comme vous le voulez, et les mets à jour. Il y a deux types de halos, ceux liés aux events, et sont mis à jour en fonction de la position de l'event, et ceux statiques, qui ne sont plus mis à jour. Pour des raisons de fluidité, si votre event de bouge pas, préférez un halo statique. Le héros possède son propre halo. - Code: Tout sélectionner
#==================================================================== # ■ Light_Radius (v2.0) # By Darkleo #==================================================================== class Light_Radius Opacity_Var = 3 # Opacity_Max = 175 # 0..255 Refresh_Time = 2 # Default_Graph = 'test2' # image par default (heros) #-------------------------------------------------------------------------- attr_accessor :bitmap #-------------------------------------------------------------------------- def initialize @bitmap_base = Bitmap.new($game_map.width*32, $game_map.height*32) # Lueurs fixes @bitmap_base.fill_rect(@bitmap_base.rect, Color.new(255, 255, 255)) @bitmap = Bitmap.new(640, 480) # Lueurs rect = Rect.new($game_map.display_x, $game_map.display_y, 640, 480) @bitmap.fill_rect(rect, Color.new(255, 255, 255)) trouer_heros trouer_events end #-------------------------------------------------------------------------- def update return unless $game_variables[Opacity_Var] == 0 or Graphics.frame_count%Refresh_Time == 0 rect = Rect.new($game_map.display_x/4, $game_map.display_y/4, 640, 480) @bitmap.blt 0, 0, @bitmap_base, rect trouer_events trouer_heros end #-------------------------------------------------------------------------- def trouer_heros ev = $game_player return unless ev.lr_active lueur ev.screen_x + ev.lr_x, ev.screen_y + ev.lr_y, ev.lr_image, ev.lr_opacity end #-------------------------------------------------------------------------- def trouer_events for ev in $game_map.events.values next unless ev.lr_active trouer_event ev end end #-------------------------------------------------------------------------- def trouer_event ev opac = ev.lr_opacity lueur ev.screen_x + ev.lr_x, ev.screen_y + ev.lr_y, ev.lr_image, opac end #-------------------------------------------------------------------------- def lueur x, y, image, opac = 250 bitmap = RPG::Cache.picture(image) rect = Rect.new(x - bitmap.height/2, y - bitmap.width/2, bitmap.rect.height,bitmap.rect.width) add_lueur @bitmap, rect, bitmap, opac end #-------------------------------------------------------------------------- def lueur_fixe x, y, opac = 250, pict = Default_Graph bitmap = RPG::Cache.picture(pict) rect = Rect.new(x + $game_map.display_x/4 - bitmap.height/2, y + $game_map.display_y/4 - bitmap.width/2, bitmap.rect.height, bitmap.rect.width) add_lueur @bitmap_base, rect, bitmap, opac add_lueur @bitmap, rect, bitmap, opac end #-------------------------------------------------------------------------- def add_lueur bitmap, rect, pict, opac bitmap.stretch_blt rect, pict, pict.rect, opac end #-------------------------------------------------------------------------- def dispose @bitmap_base.dispose @bitmap.dispose end end #====================================================================
#==================================================================== # ■ Spriteset_Map #==================================================================== class Spriteset_Map #-------------------------------------------------------------------------- alias lr_initialize initialize def initialize @light_radius = Sprite.new @light_radius.bitmap = $game_map.light_radius.bitmap @light_radius.visible = true @light_radius.blend_type = 2 @light_radius.z = 99 lr_initialize end #-------------------------------------------------------------------------- alias lr_update update def update lr_update @light_radius.opacity = [$game_variables[Light_Radius::Opacity_Var], Light_Radius::Opacity_Max].min end #-------------------------------------------------------------------------- alias lr_dispose dispose def dispose @light_radius.dispose lr_dispose end end #====================================================================
#==================================================================== # ■ Game_Map #==================================================================== class Game_Map attr_accessor :light_radius #-------------------------------------------------------------------------- alias lr_setup setup def setup map_id lr_setup map_id @light_radius = Light_Radius.new end #-------------------------------------------------------------------------- alias lr_update update def update lr_update @light_radius.update end end #====================================================================
#==================================================================== # ■ Game_Character #==================================================================== class Game_Character attr_accessor :lr_active ,:lr_image ,:lr_x ,:lr_y ,:lr_opacity #-------------------------------------------------------------------------- alias lr_initialize initialize def initialize lr_initialize @lr_active = false @lr_x = 0 @lr_y = 0 @lr_opacity = 255 end #-------------------------------------------------------------------------- def lr_set image=Light_Radius::Default_Graph, x_plus=@lr_x, y_plus=@lr_y, opacity=@lr_opacity @lr_active = true @lr_x = x_plus @lr_y = y_plus @lr_image = image @lr_opacity = opacity $game_map.light_radius.trouer_event self end #-------------------------------------------------------------------------- def lr_dispose @lr_active = false end end #====================================================================
Pour l'utiliser, remplissez à votre guise les ligne en haut du script. La variable vous permet de contrôler l'opacité du fond sombre. Si celle-çi indique une valeur supérieure à celle indiquée par la variable Opacity_Max, elle sera ramenée à celle-là. Après, tout se passe dans les events. Dans "Set move route" (en français déplacer/modifier ?), ce sont des commandes script : - Code: Tout sélectionner
lr_set image_name, x_plus, y_plus, opacity lr_dispose
La première commande crée un halo d'event, la seconde l'enlève. Dans la première, tout les arguments sont facultatifs, les deux "plus" décalent le halo. S'ils ne sont pas renseignés, ils gardent leur valeur précédente. Pour savoir si un event à un halo, c'est une condition script : - Code: Tout sélectionner
$game_map.events[@event_id].lr_active
Pour le héros : - Code: Tout sélectionner
$game_player.lr_active
Enfin, pour afficher un halo fixe, c'est un "insérer script" - Code: Tout sélectionner
$game_map.light_radius.lueur_fixe(x, y, opacity, image)
Attention aux retours à la ligne, après une virgule ou une parenthèse ouvrante. Par exemple, - Code: Tout sélectionner
$game_map.light_radius.lueur_fixe( rand(640), rand(480))
affiche un halo fixe au hasard sur la carte. Une image de test :  Remarques de dernières minutes : - Si vous ne voyez rien, c'est sans doute que l'opacité du sprite de light_radius est à 0.
Pensez à modifier la variable choisie :p - Le halo du héros n'est pas (plus) automatique, pensez à faire un lr_set sur le héros pour l'activer.
- Si ça lague un peu, augmentez la valeur de Refresh_Time, les halos seront un peu moins mis à jour
Amusez vous bien :p
_________________
 Projets
Dernière édition par darkleo le 05 Juil 2010, 12:06, édité 5 fois au total.
|
|