Partagez
Aller en bas
avatar
Zephyr_1.2
Membre

Nombre de messages : 158
Localisation : Scénariste érrant...
Distinction : aucune
Date d'inscription : 13/02/2008

Changer la couleur du personnage

le Mer 13 Fév 2008 - 22:06
Voici un script qui permet de changer la couleur du personnage en fonction de plusieurs valeurs.

Code:
#===============================================================
#                         
#                www.rpgmakervx-fr.com                                         
#     
#===============================================================
#====================================================
# Edit Character Color For RMVX
# By Nechigawara Sanzenin
# Traduit par: Ouroboros [metalic_puppets@hotmail.fr] pour RPG MAKER VX
# Exclusivité RPG MAKER VX http://rpgmakervx.1fr1.net
#====================================================
=begin

# Modifier la couleur du personnage sur la map
# Utilisation : Ajouter ça dans un commentaire dans un évènement
# [r.....] pour une couleur Rouge ( -255 à 255 )
# [g....] pour une couleur Verte ( -255 à 255 )
# [b....] pour une couleur Bleue ( -255 à 255 )
# [al...] pour une couleur en fonction de Alpha ( 0 à 255 )
# [hue...] pour changer Hue ( 0 à 360 )

=end

module Cache
def self.character(filename , hue=0)
    load_bitmap("Graphics/Characters/", filename , hue)
  end
end

class Game_Character
  attr_accessor :tone
  attr_accessor :hue
  #--------------------------------------------------------------------------
  # - Initialisation de l'objet
  #--------------------------------------------------------------------------
  alias inc_initialize initialize
  def initialize
    inc_initialize
    @tone = [0,0,0,0]
    @hue = 0
  end
end

#==============================================================================

class Game_Event < Game_Character
   
  alias inc_update update
  def update
    # check Code
    for i in 0...@list.size
      next if @list[i].code != 108
      # For Red Channel
      if @list[i].parameters[0].include?("[r")
        text = @list[i].parameters[0].scan(/\[r([-,0-9]+)\]/)
        red = $1.to_i
        if red > 255
          red = 255
        elsif red < -255
          red = -255
        end
        @tone[0] = red
      end
      # For Green Channel
      if @list[i].parameters[0].include?("[g")
        text = @list[i].parameters[0].scan(/\[g([-,0-9]+)\]/)
        green = $1.to_i
        if green > 255
          green = 255
        elsif green < -255
          green = -255
        end
        @tone[1] = green
      end
      # For Blue Channel
      if @list[i].parameters[0].include?("[b")
        text = @list[i].parameters[0].scan(/\[b([-,0-9]+)\]/)
        blue = $1.to_i
        if blue > 255
          blue = 255
        elsif blue < -255
          blue = -255
        end
        @tone[2] = blue
      end
      # For Alpha Channel
      if @list[i].parameters[0].include?("[al")
        text = @list[i].parameters[0].scan(/\[al([0-9]+)\]/)
        alpha = $1.to_i
        if alpha > 255
          alpha = 255
        elsif alpha < 0
          alpha = 0
        end
        @tone[3] = alpha
      end
      # For Hue
      if @list[i].parameters[0].include?("[hue")
        text = @list[i].parameters[0].scan(/\[hue([0-9]+)\]/)
        hue = $1.to_i
        if hue > 360
          hue = 360
        elsif hue < 0
          hue = 0
        end
        @hue = hue
      end
    end
    #Load Orginal Update
    inc_update
  end
  #--------------------------------------------------------------------------
end

#==============================================================================

class Sprite_Character < Sprite_Base
  #--------------------------------------------------------------------------
  # - Rafraichissement de la fenêtre
  #--------------------------------------------------------------------------
  def update_bitmap
    @character.update
    self.tone.set(@character.tone[0],@character.tone[1],@character.tone[2],@character.tone[3])
    if @tile_id != @character.tile_id or
      @character_name != @character.character_name or
      @character_index != @character.character_index or
      @hue != @character.hue
      @tile_id = @character.tile_id
      @character_name = @character.character_name
      @character_index = @character.character_index
      @hue = @character.hue
      if @tile_id > 0
        sx = (@tile_id / 128 % 2 * 8 + @tile_id % 8) * 32;
        sy = @tile_id % 256 / 8 % 16 * 32;
        self.bitmap = tileset_bitmap(@tile_id)
        self.src_rect.set(sx, sy, 32, 32)
        self.ox = 16
        self.oy = 32
      else
        self.bitmap = Cache.character(@character_name,@character.hue)
        sign = @character_name[/^[\!\$]./]
        if sign != nil and sign.include?('$')
          @cw = bitmap.width / 3
          @ch = bitmap.height / 4
        else
          @cw = bitmap.width / 12
          @ch = bitmap.height / 8
        end
        self.ox = @cw / 2
        self.oy = @ch
      end
    end
  end
 
end
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum