Light RPG forum
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.



 
AccueilPortailRechercherDernières imagesS'enregistrerConnexion
Le Deal du moment : -39%
Pack Home Cinéma Magnat Monitor : Ampli DENON ...
Voir le deal
1190 €

 

 Avoir des ombres ^^

Aller en bas 
AuteurMessage
sarana
Protecteur de la Lumière
Protecteur de la Lumière
sarana


Nombre de messages : 160
Localisation : Thailande
Date d'inscription : 09/06/2006

Avoir des ombres ^^ Empty
MessageSujet: Avoir des ombres ^^   Avoir des ombres ^^ EmptyVen 23 Juin - 5:11

Voilà, pour ajouter une touche de réalisme à votre jeu, des ombres !

1. Le script
À mettre au dessus de Main sous le nom de Sun_Effect :
Code:
#==============================================================================
# ■ Sprite_Sun
# # Based on Sprite_Shadow, modified by Rataime
#==============================================================================

SUN_WARN =true

class Game_Party
  attr_reader :characters
end

class Sprite_Sun < RPG::Sprite
  attr_accessor :character         
 
  def initialize(viewport, character = nil,id=0)
    super(viewport)
    @character = character
    params=$scene.sun[id]
    self_angle=45
    self_angle=params[0] if params.size>0
    self_opacity=128
    self_opacity=params[1] if params.size>1
    @self_angle=self_angle
    @self_opacity=self_opacity
    update
  end
 
  def update
    super
    if @tile_id != @character.tile_id or
      @character_name != @character.character_name or
      @character_hue != @character.character_hue
      @tile_id = @character.tile_id
      @character_name = @character.character_name
      @character_hue = @character.character_hue
      if @tile_id >= 384
        self.bitmap = RPG::Cache.tile($game_map.tileset_name,
          @tile_id, @character.character_hue)
        self.src_rect.set(0, 0, 32, 32)
        self.ox = 16
        self.oy = 32
      else
        self.bitmap = RPG::Cache.character(@character.character_name,
          @character.character_hue)
        @cw = bitmap.width / 4
        @ch = bitmap.height / 4
        self.ox = @cw / 2
        self.oy = @ch
      end
    end
   
    self.visible = (not @character.transparent)

    if @tile_id == 0
    sx = @character.pattern * @cw
    @direct=@character.direction

      if self.angle>90 or angle<-90
        if @direct== 6
          sy = ( 4- 2) / 2 * @ch
        end
        if @direct== 4
          sy = ( 6- 2) / 2 * @ch
        end
        if @direct != 4 and @direct !=6
          sy = (@character.direction - 2) / 2 * @ch
        end
      else
        sy = (@character.direction - 2) / 2 * @ch
      end
      self.src_rect.set(sx, sy, @cw, @ch)
    end
   
    self.x = @character.screen_x
    self.y = @character.screen_y-5
    self.z = @character.screen_z(@ch)-1
    self.opacity = @self_opacity
    self.blend_type = @character.blend_type
    self.bush_depth = @character.bush_depth
    if @character.animation_id != 0
      animation = $data_animations[@character.animation_id]
      animation(animation, true)
      @character.animation_id = 0
    end
   
    hour = $ats.hours_is
    if hour > 6 and hour < 22
      hour -= 7
      hour *= 12.85
      hour += 90
      self.angle =  hour
      self.opacity = 100
      hour = $ats.hours_is
      case hour
      when 7
        self.opacity = 40
      when 8
        self.opacity = 60
      when 20
        self.opacity = 60
      when 21
        self.opacity = 40
      end
    else
      self.visible = false
    end
    self.color = Color.new(0, 0, 0)
  end
end

#===================================================
# ▼ CLASS Sprite_Character edit
#===================================================

class Sprite_Character < RPG::Sprite
  alias sun_initialize initialize
 
  def initialize(viewport, character = nil)
    @character = character
    super(viewport)
    @sunlist=[]
    if $scene.is_a?(Scene_Map)
      if character.is_a?(Game_Event) and $scene.sun!=[]
        params = XPML_read("Shadow",@character.id,2)
        if params!=nil
          for i in 0...$scene.sun.size
            @sunlist.push(Sprite_Sun.new(viewport, @character,i))
          end
        end
      end
    if character.is_a?(Game_Player) and $scene.sun!=[]
        for i in 0...$scene.sun.size
          @sunlist.push(Sprite_Sun.new(viewport, $game_player,i))
        end
      end
      if character.is_a?(Game_Ally) and $scene.sun!=[]
        for i in 0...$scene.sun.size
          @sunlist.push(Sprite_Sun.new(viewport, character,i))
        end
      end
    end
    sun_initialize(viewport, @character)
  end
 
  alias sun_update update
 
  def update
    sun_update
    if @sunlist!=[]
      for i in 0...@sunlist.size
        @sunlist[i].update
      end
    end
  end 
 
end

#===================================================
# ▼ CLASS Game_Event edit
#===================================================
class Game_Event
  attr_accessor :id
end

#===================================================
# ▼ CLASS Scene_Map edit
#===================================================
class Scene_Map
  attr_accessor :sun
  alias sun_main main
 
  def main
    sun_main
    @sun=[]
  end 
end

#===================================================
# ▼ CLASS Spriteset_Map edit
#===================================================
class Spriteset_Map
  alias sun_initialize initialize
 
  def initialize
    if $scene.is_a?(Scene_Map)
      $scene.sun=[]
      warn=false
      for k in $game_map.events.keys.sort
        warn=true if ($game_map.events[k].list!=nil and $game_map.events[k].list[0].code == 108 and ($game_map.events[k].list[0].parameters == ["sun"] or $game_map.events[k].list[0].parameters == ["o"]))
        params = XPML_read("Sun",k,2)
        $scene.sun.push(params) if params!=nil
      end
      p "Warning : At least one event on this map uses the obsolete way to add a sun effect" if warn == true and SUN_WARN
    end
    sun_initialize
  end 
end



#===================================================
# ▼ XPML Definition, by Rataime, using ideas from Near Fantastica
#
#  Returns nil if the markup wasn't present at all,
#  returns [] if there wasn't any parameters, else
#  returns a parameters list with "int" converted as int
#  eg :
#  begin first
#  begin second
#  param1 1
#  param2 two
#  begin third
#  anything 3
#
#  p XPML_read("first", event_id) -> []
#  p XPML_read("second", event_id) -> [1,"two"]
#  p XPML_read("third", event_id) -> [3]
#  p XPML_read("forth", event_id) -> nil
#===================================================

  def XPML_read(markup,event_id,max_param_number=0)
    parameter_list = nil
    event=$game_map.events[event_id]
    return if event.list==nil
      for i in 0...event.list.size
        if event.list[i].code == 108 and event.list[i].parameters[0].downcase == "begin "+markup.downcase
          parameter_list = [] if parameter_list == nil
          for j in i+1...event.list.size
            if event.list[j].code == 108
              parts = event.list[j].parameters[0].split
              if parts.size!=1 and parts[0].downcase!="begin"
                if parts[1].to_i!=0 or parts[1]=="0"
                  parameter_list.push(parts[1].to_i)
                else
                  parameter_list.push(parts[1])
                end
              else
                return parameter_list
              end
            else
              return parameter_list
            end
            return parameter_list if max_param_number!=0 and j==i+max_param_number
          end
        end
      end
    return parameter_list
  end

2. Instructions
Pour donner une ombre à un personnage, mettez ça comme commentaire en première place dans les commandes de l'événement :
Code:
begin Shadow
(Le héros a automatiquement une ombre)

Pour faire une source spécifique de lumière, mettez comme commentaires :

begin Shadow Source
anglemin 260
anglemax 280
distancemax 300

ça veut dire :
source de lumière
angle de lumière entre 260° et...
...280°
à trois cases de distance max

3. Crédits
Fait par Rataime.
Trouvé sur RMXP.org par sarana.
Revenir en haut Aller en bas
 
Avoir des ombres ^^
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Avoir plus de slot de sauvegarde
» cherche script pour ne jamais avoir de game-over

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Light RPG forum :: Rpg Maker :: Scriptes-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser