.::RPG Joker::.
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

{Script} Sombras

Ir para baixo

{Script} Sombras Empty {Script} Sombras

Mensagem por Aurélio-Kun Sex Jun 13, 2008 2:24 am

Este Script cria uma sombra do personagem principal! Very Happy

Código:

#==============================================================================
# ■ Sprite_Shadow (Sprite_Ombre )
# Based on Genzai Kawakami's shadows, dynamisme&features by Rataime, extra
# features Boushy
#==============================================================================

CATERPILLAR_COMPATIBLE = true
SHADOW_WARN = true

class Game_Party
  attr_reader :characters
end

class Sprite_Shadow <RPG>1
    @anglemax=0
    @anglemax=params[2] if params.size>2
    @self_opacity=100
    @self_opacity=params[4] if params.size>4
    @distancemax=350
    @distancemax=params[3] if params.size>3
    @character = character
    update
  end

  def update

    if !in_range?(@character, @source, @distancemax)
      self.opacity=0
      return
    end
    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
      sy = (@character.direction - 2) / 2 * @ch
      if self.angle>90 or angle<-90
        if @character.direction== 6
              sy = ( 4- 2) / 2 * @ch
        end
        if @character.direction== 4
              sy = ( 6- 2) / 2 * @ch
        end
        if @character.direction== 2
              sy = ( 8- 2) / 2 * @ch
        end
        if @character.direction== 8
              sy = ( 2- 2) / 2 * @ch
        end
      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.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
    @deltax=@source.screen_x-self.x
    @deltay= @source.screen_y-self.y
    self.color = Color.new(0, 0, 0)
    @distance = ((@deltax ** 2) + (@deltay ** 2))
    self.opacity = @self_opacity*13000/((@distance*370/@distancemax)+6000)
    self.angle = 57.3*Math.atan2(@deltax, @deltay )
    @angle_trigo=self.angle+90
    if @angle_trigo<0
        @angle_trigo=360+@angle_trigo
    end
    if @anglemin !=0 or @anglemax !=0
      if (@angle_trigo<anglemin>@anglemax) and
@anglemin<@anglemax
        self.opacity=0
        return
      end
      if (@angle_trigo<anglemin>@anglemax) and
@anglemin>@anglemax
        self.opacity=0
        return
      end
    end
  end

  def in_range?(element, object, range)# From Near's Anti Lag Script, edited
    x = (element.screen_x - object.screen_x) * (element.screen_x -
object.screen_x)
    y = (element.screen_y - object.screen_y) * (element.screen_y -
object.screen_y)
    r = x + y
    if r <= (range * range)
      return true
    else
      return false
    end
  end

end

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

class Sprite_Character < RPG::Sprite
  alias shadow_initialize initialize

  def initialize(viewport, character = nil)
    @character = character
    super(viewport)
    @ombrelist=[]
    if character.is_a?(Game_Event) and $shadow_spriteset.shadows!=[]
      params = XPML_read("Shadow",@character.id,4)
      if params!=nil
        for i in 0...$shadow_spriteset.shadows.size
          @ombrelist.push(Sprite_Shadow.new(viewport, @character,i))
        end
      end
    end
    if character.is_a?(Game_Player) and $shadow_spriteset.shadows!=[]
      for i in 0...$shadow_spriteset.shadows.size
        @ombrelist.push(Sprite_Shadow.new(viewport, $game_player,i))
      end
      #===================================================
      # ● Compatibility with fukuyama's caterpillar script
      #===================================================
      if CATERPILLAR_COMPATIBLE and $game_party.characters!=nil
        for member in $game_party.characters
          for i in 0...$shadow_spriteset.shadows.size
            @ombrelist.push(Sprite_Shadow.new(viewport, member,i))
          end
        end
      end
      #===================================================
      # ● End of the compatibility
      #===================================================
    end
    shadow_initialize(viewport, @character)
  end

  alias shadow_update update

  def update
    shadow_update
    if @ombrelist!=[]
      for i in 0...@ombrelist.size
        @ombrelist[i].update
      end
    end
  end

end

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

#===================================================
# ▼ CLASS Spriteset_Map edit
#===================================================
class Spriteset_Map
  attr_accessor :shadows
  alias shadow_initialize initialize

  def initialize
    $shadow_spriteset=self
    @shadows=[]
    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 == ["s"] or
$game_map.events[k].list[0].parameters == ["o"]))
      params = XPML_read("Shadow Source",k,4)
      $shadow_spriteset.shadows.push([$game_map.events[k]]+params) if
params!=nil
    end
    p "Warning : At least one event on this map uses the obsolete way to add
shadows" if warn == true and SHADOW_WARN
    shadow_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

Para ativar a sombra coloque em um evento qualquer um comentário escrito:
Código:


# begin Shadow Source
# anglemin 0
# anglemax 360
# distancemax 300

Para ocultar a sombra coloque um comentário escrito " shadow source"

FLW Very Happy
Aurélio-Kun
Aurélio-Kun
Admin
Admin

Masculino
Número de Mensagens : 79
Idade : 27
Localização : Via Lactia
Data de inscrição : 13/06/2008

Ficha do personagem
Reputação:
{Script} Sombras Left_bar_bleue298/300{Script} Sombras Empty_bar_bleue  (298/300)

https://rpgjoker.forumeiros.com

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

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