Fórum iBlue
 Halo, Sombra e Reflexo Buddy_Group

Bem Vindos ao iBlue GAMES!

Registre-se para obter acesso especial em todo conteúdo presente no Fórum!
Tenha um bom uso do nosso fórum, e seja ativo!





Fórum iBlue
 Halo, Sombra e Reflexo Buddy_Group

Bem Vindos ao iBlue GAMES!

Registre-se para obter acesso especial em todo conteúdo presente no Fórum!
Tenha um bom uso do nosso fórum, e seja ativo!





Somos ÚNICOS, somos o SEU fórum


Você não está conectado. Conecte-se ou registre-se

Ver o tópico anterior Ver o tópico seguinte Ir para baixo  Mensagem [Página 1 de 1]

T-Lord

1 Halo, Sombra e Reflexo Empty Halo, Sombra e Reflexo Dom 13 Jan 2013 - 16:31

T-Lord
Administrador
HOR (Halo, Ombre e Reflet)
por Fabien
tutorial em portugues por phcs666 a.k.a Czarine
Introdução

Script que possibilita utilizar efeitos no mapa como halo, sombra e reflexo.

Características


  • Cria halo em volta dos eventos / personagem (um contorno brilhante)
  • Cria uma sombra que se estica conforme o evento / personagem se distancia do ponto de luz
  • Cria um reflexo simples do evento no chão, simulando estar na aguá ou em um piso espelhado

Screenshots

 Halo, Sombra e Reflexo Halor

Como usar

Copie e cole o script acima do main.

Instruções de uso no cabeçalho do script.

Demo

Em Anexo.

Script
Código:
#================================================================
# HOR (Halo, Ombre e Reflet) v0.99a
#----------------------------------------------------------------
# por Fabien (rpgmakerxp-factory.net)
# tutorial em portugues por phcs666 a.k.a Czarine (phcs@live.com)
#================================================================
# Para ligar o efeito de halo use:
#
# halo(id, opacity, flou, cor, zoom)
#
# onde:
#
# id      = ID do evento (0 para o heroi)
# opacity = opacidade do brilho
# flou    = semelhança na forma do brilho com o evento
# cor    = cor do brilho, no formato Color.new(255,255,255,255)
# zoom    = tamanho do brilho
#
# para desligar o efetio de halo use:
#
# $game_map.halos.delete(id) // id = ID do evento (0 para o heroi)
#----------------------------------------------------------------
# Para ligar o efeito de sombra use:
#
# ombre(id, source, opacity, flou, desop, altitude)
#
# onde:

# id      = ID do evento (0 para o heroi)
# source  = ID do evento fonte de luz (0 para o heroi)
# opacity  = opacidade da sombra
# flou    = semelhança na forma da sombra com o evento
# desop    = distancia da luz que a sombra começa a sumir
# altitude = simula a altitude da fonte de luz (quanto maior, menor a sombra)
#
# para desligar o efeito de sombra use:
#
# $game_map.ombres.delete(id) // id = ID do evento (0 para o heroi)
#----------------------------------------------------------------
# Para ligar o efeito de reflexo use:
#
# reflet(id, opacity, flou)
#
# onde:
#
# id      = ID do evento (0 para o heroi)
# opacity = opacidade do reflexo
# flou    = semelhança na forma do reflexo com o evento
#
# para desligar o efetio de reflexo use:
#
# $game_map.reflets.delete(id) // id = ID do evento (0 para o heroi)
#================================================================

  #--------------------------------------------------------------
  # halo
  #--------------------------------------------------------------
 
  def halo(ref, opacity = 100, flou = 5, color = Color.new(255,255,255,255), zoom = 1)
    if ref.is_a?(Array)
      ref.each{|a|halo(a,opacity,flou,color,zoom)}
      return
    end 
    $game_map.halos[ref] = Hor.new if not $game_map.halos.has_key?(ref)
    $game_map.halos[ref].type = "halos"
    $game_map.halos[ref].id = ref
    $game_map.halos[ref].ref = ref
    $game_map.halos[ref].opacity = opacity
    $game_map.halos[ref].zoom = zoom
    $game_map.halos[ref].flou = flou
    $game_map.halos[ref].color = color
    true
  end
 
  #--------------------------------------------------------------
  # ombre
  #--------------------------------------------------------------
 
  def ombre(ref, source, opacity = 150, flou = 3, desop = 50, altitude = 80)
    if ref.is_a?(Array)
      ref.each{|a|ombre(a,source,opacity,flou,desop,altitude)}
      return
    end
    $game_map.ombres[ref]=Hor.new if not $game_map.ombres.has_key?(ref)
    $game_map.ombres[ref].type="ombres"
    $game_map.ombres[ref].id=ref
    $game_map.ombres[ref].source=source
    $game_map.ombres[ref].opacity=opacity
    $game_map.ombres[ref].flou=flou
    $game_map.ombres[ref].desop=desop
    $game_map.ombres[ref].altitude=altitude
    true
  end
 
  #------------------------
  def reflets(*ids)
    ids.each{|id|reflet id}
  end
  #------------------------
 
  #--------------------------------------------------------------
  # reflet
  #--------------------------------------------------------------
 
  def reflet(ref, opacity = 150, flou = 3, dz = -100)
    if ref.is_a?(Array)
      ref.each{|a|reflet(a,opacity,flou,z)}
      return
    end
    $game_map.reflets[ref] = Hor.new if not $game_map.reflets.has_key?(ref)
    $game_map.reflets[ref].type = "reflets_sol"
    $game_map.reflets[ref].id = ref
    $game_map.reflets[ref].opacity = opacity
    $game_map.reflets[ref].flou = flou 
    $game_map.reflets[ref].dz = dz
    true
  end
 
#================================================================
# Game_Map
#================================================================

class Game_Map
 
  attr_accessor :halos, :ombres, :reflets # declaração
 
  #--------------------------------------------------------------
  # setup
  #--------------------------------------------------------------
 
  alias setup_hor setup
  def setup(map_id)
    setup_hor(map_id)
    @halos = Hash.new #elt = [evts_concernés,type,p1,p2,...]
    @ombres = Hash.new
    @reflets = Hash.new
  end
 
  #--------------------------------------------------------------
end

#================================================================
# Classe de armazenamento de informações sobre as luzes
#----------------------------------------------------------------
# Permite um acesso mais intuitivo
#================================================================

Hor
 = Struct.new( "Hor", :type, :ref, :id, :opacity, :zoom, :flou, :color,
:stock, :source, :angle, :desop, :altitude, :effacer, :dz, :chara_name)

#================================================================
# HOR
#================================================================
class HOR
 
  #--------------------------------------------------------------
  # inicialização
  #--------------------------------------------------------------
 
  def initialize(viewport, ref, original)
    @ref = ref
    @sprite = Sprite_Character.new(viewport, original.character)
    @sprite.visible = false 
  end
 
  #--------------------------------------------------------------
  # dispose
  #--------------------------------------------------------------
 
  def dispose
    @sprite.dispose
  end
 
  #--------------------------------------------------------------
  # maj_hor
  #--------------------------------------------------------------
 
  def maj_hor(original, hor)
    a = "hor" + @ref.to_s
    original.character.character_name += a 
    if original.character.character_name != @chara_name
      RPG::Cache.stocker_bitmap("Graphics/Characters/", original.character.character_name, chara_flou(original.bitmap,hor.flou))
      @chara_name = original.character.character_name
    end 
    @sprite.character = original.character
    @sprite.update
    original.character.character_name = original.character.character_name[0...-a.size]
  end
 
  #--------------------------------------------------------------
  # maj_halo
  #--------------------------------------------------------------
 
  def maj_halo(original, hor)
    maj_hor(original, hor)
    @sprite.angle = 0
    @sprite.opacity = eval(hor.opacity.to_s)
    @sprite.z -= 1
    @sprite.blend_type = 1
    @sprite.zoom_x = eval(hor.zoom.to_s)
    @sprite.zoom_y = eval(hor.zoom.to_s)
    @sprite.color = hor.color
    @sprite.oy = @sprite.src_rect.height / 2
    @sprite.y -= original.src_rect.height / 2
  end
 
  #--------------------------------------------------------------
  # maj_reflet
  #--------------------------------------------------------------
 
  def maj_reflet(original, hor)
    maj_hor(original, hor)
    @sprite.mirror = true
    @sprite.opacity = hor.opacity
    @sprite.z += hor.dz
    @sprite.angle = 180
  end
 
  #--------------------------------------------------------------
  # maj_ombre
  #--------------------------------------------------------------
 
  def maj_ombre(original, hor)
    maj_hor(original, hor)
    ev1 = (hor.source == 0 ? $game_player : $game_map.events[hor.source] )
    id = original.character.id
    ev2 = (id == 0 ? $game_player : $game_map.events[id] )
    angle = Math.atan2(ev1.screen_y - ev2.screen_y, ev1.screen_x - ev2.screen_x)
    @sprite.angle = -57.3 * angle + 90
    distance = Math.hypot(ev1.screen_y - ev2.screen_y, ev1.screen_x - ev2.screen_x) 
    @sprite.opacity = hor.opacity - distance * hor.desop / 100 
    @sprite.opacity = 0 if distance == 0
    @sprite.tone = Tone.new(255,255,255)   
    @sprite.blend_type = 2   
    @sprite.z -= 1 
    dh = (hor.altitude - original.src_rect.height)
    if dh <= 0
      @sprite.zoom_y = 10
    else     
      @sprite.zoom_y = distance / dh
      @sprite.zoom_y = 10 if @sprite.zoom_y > 10
    end
    angle = @sprite.angle / 90
    a = (ev2.direction * (angle.to_i * 2)) % 10
    a = ev2.direction if angle.to_i == 0
    @sprite.src_rect.y = (a - 2) / 2 * @sprite.src_rect.height   
  end
   
  #--------------------------------------------------------------
end

#================================================================
# Spriteset_Map
#================================================================

class Spriteset_Map
 
  #--------------------------------------------------------------
  # update
  #--------------------------------------------------------------
 
  alias update_hor update
  def update 
    update_hor
    @halos=Hash.new if @halos==nil
    @ombres=Hash.new if @ombres==nil
    @reflets=Hash.new if @reflets==nil
 
 
$game_map.halos.each{|ref,value|@halos[ref]=HOR.new(@viewport1,ref,@character_sprites[value.id-1])
 if not @halos.has_key?(ref)}
   
$game_map.ombres.each{|ref,value|@ombres[ref]=HOR.new(@viewport1,ref,@character_sprites[value.id-1])
 if not @ombres.has_key?(ref)}
   
$game_map.reflets.each{|ref,value|@reflets[ref]=HOR.new(@viewport1,ref,@character_sprites[value.id-1])
 if not @reflets.has_key?(ref)}
    @halos.each{|ref,hor|hor.maj_halo(spri($game_map.halos,ref),$game_map.halos[ref]) if effacer?($game_map.halos,@halos,ref)}
 
  @ombres.each{|ref,hor|
hor.maj_ombre(spri($game_map.ombres,ref),$game_map.ombres[ref]) if
effacer?($game_map.ombres,@ombres,ref)}
   
@reflets.each{|ref,hor|hor.maj_reflet(spri($game_map.reflets,ref),$game_map.reflets[ref])
 if effacer?($game_map.reflets,@reflets,ref)}
  end
 
  #--------------------------------------------------------------
  # effacer?
  #--------------------------------------------------------------
 
  def effacer?(hors_data,hors,ref)
    if not hors_data.has_key?(ref)
      hors[ref].dispose
      hors.delete(ref)
      return false
    end
    return true
  end
 
  #--------------------------------------------------------------
  # spri
  #--------------------------------------------------------------
 
  def spri(hash,ref) # renvoie le sprite
    return @character_sprites[hash[ref].id-1]
  end
 
  #--------------------------------------------------------------
end

  #--------------------------------------------------------------
  # chara_flow
  #
  # Preparação da imagem de base, se já não for um bitmap
  #--------------------------------------------------------------
 
  def chara_flou(original, intensite = 1)
    original = RPG::Cache.picture(original) if original.is_a?(String)
    if original.is_a?(Numeric)
      original = 0 ? original = $game_player.character_name : original = $game_map.events[original].character_name
      original = RPG::Cache.character(original, 0)
    end
    return original if intensite==0
    # flou horizontal
    bitmap1 = Bitmap.new(original.width + 4 * 2 * intensite, original.height)
    for n in 0..2 * intensite
      for x in 0...4
 
      bitmap1.blt(x * bitmap1.width / 4 + n, 0, original, Rect.new(x *
original.width / 4, 0, original.width / 4, original.height), 255 / (2 *
intensite))
      end
    end
    # flou vertical
    bitmap2 = Bitmap.new(bitmap1.width, original.height + 4 * 2 * intensite)
    for n in 0..2 * intensite
      for y in 0...4
 
      bitmap2.blt(0, y * bitmap2.height / 4 + n, bitmap1, Rect.new(0, y
 * bitmap1.height / 4,bitmap1.width, bitmap1.height / 4), 255 / (2 *
intensite))
      end
    end
    # retrição de opacidade original
    bitmapf = Bitmap.new(original.width + 4 * 2 * intensite, original.height + 4 * 2 * intensite)
    2 * intensite.times do
      bitmapf.blt(0, 0, bitmap2, bitmap2.rect)
    end
    bitmap1.dispose
    bitmap2.dispose
    return bitmapf
  end
 
#================================================================
# RPG
#================================================================

module RPG
 
  #--------------------------------------------------------------
  # Cache
  #--------------------------------------------------------------
 
  module Cache 
    def self.stocker_bitmap(folder_name, filename,bitmap)
      path = folder_name + filename
      @cache[path] = bitmap if filename != ""
    end
  end
 
  #--------------------------------------------------------------
end

#================================================================
# Game_Character
#================================================================

class Game_Character
  attr_accessor :character_name
  #--------------------------------------------------------------
end

  #--------------------------------------------------------------
  # lumhalo
  #
  # Ligação dinamica de lums, halos, sombras e reflexos
  #--------------------------------------------------------------
  def lumhalo
    $lum.lums.each_value{|lum|
    next if lum.nom != "lum_base" or not lum.id.is_a?(Numeric)
    halo(lum.id, "$lum.lums[" << lum.id.to_s << "].op/2")}
  end
   
  #--------------------------------------------------------------
  # grp_reflet
  #--------------------------------------------------------------
 
  def grp_reflet
    reflet 0
    groupe.each{|id| reflet id }
  end

Créditos e Agradecimentos

  • Feito por Fabien
  • tutorial em portugues por phcs666 a.k.a Czarine

http://www.zonetoony.net/
T-Lord

2 Halo, Sombra e Reflexo Empty Re: Halo, Sombra e Reflexo Dom 13 Jan 2013 - 16:32

T-Lord
Administrador
Caso queiram baixar Cliquem aqui!

http://www.zonetoony.net/

Ver o tópico anterior Ver o tópico seguinte Ir para o topo  Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos