Character Trail 1.3 ( Rastro do personagem )

26 Respostas   4452 Visualizações

0 Membros e 1 Visitante estão vendo este tópico.

Klarth

  • *
  • Posts: 204
  • Ouros: 94
Tópico criado em: 25/02/2014 às 15:06 - Última modificação por Klarth em 01/03/2014 às 16:31

Character Trail 1.3

Compativel com: RMVXA
Compatibilidade: Boa
Facilidade de uso: Facil
Lag gerado: baixo

Condições de Uso
O uso é livre para qualquer tipo de projeto, mas se for usar dar os devidos créditos. Caso for postar em outro lugar, por favor colocar um link para este tópico.

Para que serve o script
O script cria um efeito que faz com que o personagem tenha um rastro, estilo alguns jogos de luta. O script é customizável, é possivel configurar a cor do rastro e uma switch para ativar o efeito.

Imagens



Download e Script
Código: [Selecionar]
module Trail_Conf
 #Cor do sprite 
  COLOR =  Color.new(255, 255, 255, 100)
 #Switch que ativa ou desativa o efeito
  SWITCH = 1
 #Caso o rastro fique desalinhado você pode ajustar a posição dele aqui
  AJUSTE_X = 16 # Ajuste no eixo X
  AJUSTE_Y = 32 # Ajuste no eixo Y
end

# Valor correspondente a cada direção para ajudar no script. OBs: Nao mexa aqui
module Direction
  UP = 8
  DOWN = 2
  RIGHT = 6
  LEFT = 4
end

# Inicio da classe Character trail
class Character_Trail
  # Parametros:
  # amount: quantidade de rastros
  # color: cor do rastro
  # lifetime: tempo que o rastro fica no mapa
  def initialize(amount, color, lifetime, viewport)
    @char_sprites = Array.new(amount + 1)
    @current_index = 0
    @char_color = color
    @lifetime = lifetime
    @fade = Array.new(amount + 1)
    @amount = amount + 1
    @actual_graphic = $game_player.character_name
    @player_x = $game_player.real_x
    @player_y = $game_player.real_y
    @viewport = viewport
    @hided = false
    @current_scroll_x = $game_map.display_x
    @current_scroll_y =  $game_map.display_y
    @actual_direction = $game_player.direction
    refresh
  end
 
 
  # Metodo para atualizar o grafico do rastro
  # é chamado uma vez no initialize
  # é necessário chamá-lo mais tarde caso o gráfico do personagem seja alterado
  def refresh
    for i in 0...@amount
      @char_sprites[i] = Sprite.new(@viewport)
      @char_sprites[i].bitmap = Cache.character($game_player.character_name)
      @char_sprites[i].opacity = 0
      @char_sprites[i].z = $game_player.screen_z - 30
      @char_sprites[i].color = @char_color
      @fade[i] = false
    end
  end
 
  # Método que contem toda a lógica do script 
  def update
    # Verifica se o gráfico do personagem mudou
    if $game_player.character_name != @actual_graphic
      refresh
      @actual_graphic = $game_player.character_name
    end
    # Parte principal que analise se o character se moveu e outras coisas
    if Graphics.frame_count % (@lifetime / (@amount - 1)) == 0
    if (@player_x != $game_player.real_x) ||
      (@player_y != $game_player.real_y)
      if @fade[@current_index] == false
        @player_x = $game_player.real_x
        @player_y = $game_player.real_y
        @char_sprites[@current_index].x = $game_player.screen_x -
        Trail_Conf::AJUSTE_X
        @char_sprites[@current_index].y = $game_player.screen_y -
        Trail_Conf::AJUSTE_Y
        set_graphic(@current_index,$game_player.character_index,
        $game_player.pattern, $game_player.direction)
        @fade[@current_index] = true
        @char_sprites[@current_index].opacity = 255
      end
      @current_index += 1
      @current_index = 0 if @current_index == @char_sprites.size
    else
      @current_index = 0
    end
  end
    update_z
    update_position
    update_opacity
  end
     
  def update_position
    if (@current_scroll_x != $game_map.display_x ||
      @current_scroll_y != $game_map.display_y)
      diference_x = @current_scroll_x - $game_map.display_x
      diference_y = @current_scroll_y - $game_map.display_y
      for i in 0...@amount
        if @fade[i]
          @char_sprites[i].x += diference_x * 32
          @char_sprites[i].y += diference_y * 32
        else
          @char_sprites[i].x += $game_player.screen_x * 32
          @char_sprites[i].y += $game_player.screen_y * 32
        end
      end
      @current_scroll_x = $game_map.display_x
      @current_scroll_y = $game_map.display_y
    end
  end
  def update_z
    if @actual_direction != $game_player.direction
      if $game_player.direction == Direction::UP
        @char_sprites.each do |char|
         char.z = $game_player.screen_z + 20
        end     
      else
        @char_sprites.each do |char|
         char.z = $game_player.screen_z - 20
        end
      end
      @actual_direction = $game_player.direction
    end
  end
  # Controla a opacidade de cada sprite
  def update_opacity
    dec = 255 / @lifetime
    for i in 0...@amount
      if @fade[i]
        @char_sprites[i].opacity -= dec
        if @char_sprites[i].opacity <= 0
          @fade[i] = false
        end
      end
    end
  end
 
  # Controla qual sprite derá desenhado no rastro
  def set_graphic(index, character_index, pattern, direction)
    cw = @char_sprites[index].bitmap.width / 12
    ch = @char_sprites[index].bitmap.height / 8
    n = character_index
    src_rect1 = Rect.new((n%4)*cw*3, (n/4*4)*ch, cw, ch)
    src_rect2 = Rect.new((n%4)*cw*3 + cw, (n/4*4)*ch, cw, ch)
    src_rect3 = Rect.new((n%4)*cw*3 + cw*2, (n/4*4)*ch, cw, ch)
    case direction
    when Direction::DOWN
      if pattern == 0 || pattern == 2
        src_rect = src_rect2
      elsif pattern == 1
        src_rect = src_rect3
      elsif pattern == 3
        src_rect = src_rect1
      end
    when Direction::LEFT
      if pattern == 0 || pattern == 2
        src_rect = src_rect2
        src_rect.y += ch
      elsif pattern == 1
        src_rect = src_rect3
        src_rect.y += ch
      elsif pattern == 3
        src_rect = src_rect1
        src_rect.y += ch
      end
    when Direction::RIGHT
      if pattern == 0 || pattern == 2
        src_rect = src_rect2
        src_rect.y += ch * 2
      elsif pattern == 1
        src_rect = src_rect3
        src_rect.y += ch * 2
      elsif pattern == 3
        src_rect = src_rect1
        src_rect.y += ch * 2
      end
     when Direction::UP
      if pattern == 0 || pattern == 2
        src_rect = src_rect2
        src_rect.y += ch * 3
      elsif pattern == 1
        src_rect = src_rect3
        src_rect.y += ch * 3
      elsif pattern == 3
        src_rect = src_rect1
        src_rect.y += ch * 3
      end
    end
    @char_sprites[index].src_rect = src_rect
  end
  # Esconde o Trail
  def hide
    if !@hided
      for i in 0...@amount
        @char_sprites[i].opacity = 0
      end
      @hided = true
    end
  end
  def show
    @hided = false
  end
end

# Aliases para atualizar o rastro
class Scene_Map 
  attr_reader   :spriteset
  alias update_old update
  alias start_old start
 
  def start
    start_old
    @character_trail = Character_Trail.new(6, Trail_Conf::COLOR, 60,
    spriteset.character_sprites[0].viewport)
  end
 
  def update
    update_old
    if $game_switches[Trail_Conf::SWITCH]
       @character_trail.show
       @character_trail.update
    else
       @character_trail.hide
    end       
  end 
end
class Spriteset_Map
  attr_reader   :character_sprites
end

Créditos e Avisos
Criador: Klarth

Raizen

  • Administrador
  • *
  • Posts: 3224
  • Ouros: 3192
  • Medalhas Vencedor do Protótipo Premiado Participante notável do evento "A Estação das Luzes do Norte" Vencedor CRM Awards - Melhor Scripter Vencedores das edições do Concurso Projeto Rickas!
Resposta 1: 25/02/2014 às 15:30

Cara bem legal o efeito, vejo que faz pouco tempo que voltou pro maker e já está com a mão na massa fazendo bons scripts assim :).


Parabéns velho, testarei em casa para confirmar o efeito ^^

Klarth

  • *
  • Posts: 204
  • Ouros: 94
Resposta 2: 25/02/2014 às 15:37

Obrigado raizen que bom que gostou ^^
É talvez seja a saudade do maker que me fez desenrolar kkk xD
E essa semana devo postar mais dois scripts que tenho em mente.
Vlws

Shiroyasha

  • *
  • Posts: 277
  • Ouros: 342
  • Viajando por aí.
  • Medalhas Participantes do Maps Together 2
Resposta 3: 25/02/2014 às 16:29

Sinceramente... Hoje pela manhã estava precisando mesmo de um script que fizesse exatamente isso.
Não sei que bruxaria foi essa, mas obrigado mesmo.
Irei testar aqui.
Até.

Fpr

Resposta 4: 25/02/2014 às 16:40

O efeito visual do Script é muito bom, já havia visto um script assim para o RMXP, mas perdia muito o rendimento.
Parabéns pela colaboração.  :ok:
-

Klarth

  • *
  • Posts: 204
  • Ouros: 94
Resposta 5: 25/02/2014 às 19:47

@Shiroyasha
Nossa então eu devo ser seu anjo da guarda kkkkk
Fico muito feliz que o script tenha lhe servido
@Fpr
Valeu man

Shiroyasha

  • *
  • Posts: 277
  • Ouros: 342
  • Viajando por aí.
  • Medalhas Participantes do Maps Together 2
Resposta 6: 25/02/2014 às 20:13

Exatamente, eu procurava algo que imitasse mesmo isso.
O único problema é que o efeito continua ativo mesmo quando o personagem está parado.
Obviamente dá pra controlar isso via switch verificando se os botões que movem o personagem estão sendo pressionados. Mesmo assim poderia vir a ser útil para não precisar fazer isto.
De qualquer forma, era exatamente o que eu precisava mesmo.
O Deus dos scripts deve ter ouvido minha prece e te deu uma iluminação. ahushauhsuas.
Até.

Klarth

  • *
  • Posts: 204
  • Ouros: 94
Resposta 7: 25/02/2014 às 20:16

O script está funcionando mesmo quando parado? Tem certeza?
Até porque uma das condições é o character estar se movendo..
Enfim, pode ser que eu não tenha entendido muito bem...

Shiroyasha

  • *
  • Posts: 277
  • Ouros: 342
  • Viajando por aí.
  • Medalhas Participantes do Maps Together 2
Resposta 8: 25/02/2014 às 20:48

Bem, quando testei aqui isso aconteceu. Era perceptível que o script continuava ativo mesmo com o personagem parado (ele ficava pálido parado, XD).

Dá pra notar com essa imagem aqui.

E mesmo esperando o efeito continuava.  :'-':

Klarth

  • *
  • Posts: 204
  • Ouros: 94
Resposta 9: 25/02/2014 às 21:02 - Última modificação por Klarth em 25/02/2014 às 21:05

Estranho... Aqui isso não acontece. Deve ser alguma incompatiblidade com algum script que você está usando. Tira um a um e testa para ver.
E tipo você não alterou nada nessa parte ne?
Código: [Selecionar]
    @character_trail = Character_Trail.new(6, Trail_Conf::COLOR, 60)

Kvothe

  • *
  • Posts: 652
  • Ouros: 1423
  • Maker Geral
Resposta 10: 25/02/2014 às 21:04

 Eita parabéns pelo script tio Klarth (Num sei por que mais tenho mania de chamar os scripter de tio.. aff) Bom.. espero ver mais dos seus aqui;


Klarth

  • *
  • Posts: 204
  • Ouros: 94
Resposta 11: 25/02/2014 às 21:07

Eita parabéns pelo script tio Klarth (Num sei por que mais tenho mania de chamar os scripter de tio.. aff) Bom.. espero ver mais dos seus aqui;
Tio... kkkkkkkkk
Valeu dax, que bom que gostou

Shiroyasha

  • *
  • Posts: 277
  • Ouros: 342
  • Viajando por aí.
  • Medalhas Participantes do Maps Together 2
Resposta 12: 25/02/2014 às 23:34

Estranho... Aqui isso não acontece. Deve ser alguma incompatiblidade com algum script que você está usando. Tira um a um e testa para ver.
E tipo você não alterou nada nessa parte ne?
Código: [Selecionar]
    @character_trail = Character_Trail.new(6, Trail_Conf::COLOR, 60)

O estranho é justamente isso, estou usando em um projeto limpo, sem nada mesmo. E não fiz nenhuma modificação no script também. Irei realizar algumas preces  :o:): alguns testes por aqui, meu maker não está muito confiável esses dias.

Klarth

  • *
  • Posts: 204
  • Ouros: 94
Resposta 13: 26/02/2014 às 01:05 - Última modificação por Klarth em 26/02/2014 às 01:21

Tenta copiar novamente o script do tópico e aplica-lo lá. Se não funcionar, ai meu amigo, recomendo vc recorrer a um pai de santo kkkk
Edit:
Cara essa classe sprite ta muito bugada,  tou tentando resolver aqui, qualquer coisa te mando mp.

Misty

  • Mito
  • *
  • Posts: 1602
  • Ouros: 1837
  • The Last One!~
  • Medalhas Participante do 'Amigo, Estou Aqui!' Participante da 2º Mostra de Arte Steamfórdia Vencedor CRM Awards - Melhor Designer pela 2ª vez Vencedor CRM Awards - Melhor Designer Vencedor do Protótipo Premiado
Resposta 14: 26/02/2014 às 01:19

CASTLEVANIA! <3
Cara, não tem como eu ver esse script sem lembrar do Alucard correndo. APOSKA '
Enfim, muito bom mesmo, quem sabe eu não use em meu projeto, meus parabéns! :XD: