O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Eventing: Fine Tuning

Iniciado por Doiza, 20/03/2017 às 13:44

20/03/2017 às 13:44 Última edição: 24/04/2019 às 23:06 por Doiza
Eventing: Fine Tuning


[box class=titlebg]
O que faz
[/box]

Este script adiciona várias opções de modificação de characters pelo comando de Mover Evento:
- Mover o evento para um determinado local pelas coordenadas X e Y do mapa;
- Definir ângulo, cor, zoom, ou até mesmo rotacionar um evento;
- Definir rotas utilizando pontos de parada;
- Utilizar fade in e fade out, modificar switchs locais pelo comando de Mover Evento, e até mesmo teleportar o evento para uma posição aleatória;
- Acionar um balão de expressão ou animação pelo comando de Mover Evento;

Entre outros.

[box class=titlebg]
Instruções
[/box]
Todas no script. Não se esqueça de colocar a maior frequência do evento caso use em movimento personalizado para resultados imediatos:

[box class=titlebg]
Screenshots
[/box]

       
Casal solitário antes — Casal feliz depois!

       
           Fila típica entediante — Fila diversa interessante!

           
Banquinho estúpido — Banquinho legal!



[box class=titlebg]
Script
[/box]

## Eventing: Fine Tuning v3.4 ##
# Especifica posições com x e y, rotaciona eventos, teleporte 
#   e muito mais!
#
# Uso: todas as chamadas de script devem ser feitas pelo 
#  comando de mover evento.
#          offset(x,y)             desloca o evento de acordo com
#                                              com o valor de x e y       
#
#          set_zoom(zoom)          amplia a imagem do evento. 
#                                  zoom é o equivalente ao tamanho
#
#          rotate(angle)           rotaciona o evento. angle é o equivalente
#                                  ao ângulo (de -360 até 360)
#
#          blend(color)            onde color equivale à cor para o objeto
#                                   -> Color.new(vermelho,azul,verde,alpha)
#
#          mirrored                inverte o evento horizontalmente
#
#          flash(color,duration)   color equivale a cor do objeto e duration
#                                  à duração
#
#          slide(x, y)             funciona como no comando de offset, porém o
#                                  o evento se moverá até à posição indicada ao
#                                  invés de ser movido automaticamente
#
#          waypoint(x,y)           faz com que o evento se mova até um ponto
#                                  especificado. o próximo comando será 
#                                  executado assim que este primeiro terminar
#
#          moveto(x,y)             transfere o evento para a posição indicada
#
#          fadein                  muda a opacidade do evento gradualmente
#          fadein(duration)        até 255. duração básica de 10 frames
#
#          fadeout                 muda a opacidade do evento gradualmente
#          fadeout(duration)       até 0. duração básica de 10 frames
#
#          shake                   treme o evento (verticalmente). 
#                                  duração básica de 30 frames
#          shake(duration)        
#
#          random                  move o evento para uma posição aleatória no
#          random(width,height)    mapa. você pode especificar o alcance
#                                  máximo com width (altura) e height (largura)
#
#          random_region(id)       move o evento para um ponto aleatório que
#          random_region(id,w,h)   tenha o mesmo ID de região do ponto onde
#                                  estava antes. pode especificar alcance
#
#
#      self_switch("letter",value) modifica a switch local do evento. letter
#                                  equivale a "A" até "D" e value é true (ON)
#                                  ou false (OFF)
#
#          balloon(id)             executa um balão de expressão no personagem
#
#          jump_forward(length)    faz com que o evento pule para a direção
#                                  em que ele está olhando, ou o oposto ao
#                                  colocar um número negativo.
#
#          jump_side(length)       faz com que o evento pule para a esquerda,
#                                  ou direita se negativo
#
#          jumpto(x, y)            faz com que o evento pule para a posição 
#                                  especifica
#
#          memorize                salva a posição atual do evento
#          recall                  transfere o evento para a posição salva, ou 
#                                  original caso nenhuma tenha sido salva
#
#          recall_walk             faz com que o evento ande até à posição 
#                                  salva
#
#          reset                   reseta todos os comandos feitos pelo script
#          restart                 reseta o evento completamente com exceção
#                                  de switches locais
#          restart(true)           reseta o evento completamente junto com
#                                  as switches locais
#
#          moveto_player           transfere o evento para o jogador
#          moveto_player(true)     faz com que o evento ande até o jogador
#
#          moveto_event(id)        transfere o evento até outro evento com
#                                  a determinada ID
#
#          moveto_event(id, true)  faz com que o evento ande até outro evento
#
#      play_animation(event, anim) mostra uma animação especifica em um
#                                  evento específico
#
#                                  
#------#
#-- Script por: V.M of D.T
#
#- Dúvidas ou comentários ===>EM INGLÊS<===:
#    email: sumptuaryspade@live.ca
#    facebook: http://www.facebook.com/DaimoniousTailsGames
#    "Todos os meus outros scripts e projetos podem ser 
#    encontrados aqui: http://daimonioustails.weebly.com/"
#
#--- Uso gratuito tanto para projetos comerciais quanto não comerciais
#--- "Apesar de uma doação sempre ser uma ótima maneira de agradecer~ 
#    (Mas eu também aceito agradecimentos literais)"
 
EVENTING_USE_DIR8 = false
 
class Game_CharacterBase
  alias shake_init_public_members init_public_members
  alias shake_update update
  alias shake_moveto moveto
 
  attr_accessor   :zoom
  attr_accessor   :flash_on
  attr_accessor   :flash_color
  attr_accessor   :flash_time
  attr_accessor   :angle
  attr_accessor   :mirror
  attr_accessor   :blend_color
 
  def init_public_members
    shake_init_public_members
    reset_event_details
  end
  def reset_event_details
    @shakechar = [false, 0, 0]
    @zoom = 1
    @flash_on = false
    @flash_color = Color.new(0,0,0,0)
    @flash_duration = 0
    @angle = 0
    @total_angle = 0
    @mirror = false
    @blend_color = Color.new(0,0,0,0)
    @fade = @opacity
    @fade_time = 0
    @shake_time = 0
    @shake_direction = 0
    @memo_x = -1
    @memo_y = -1
  end
  def offset(x,y); @shakechar = [true, x, y]; end
  def reset
    reset_event_details
    rotate(@total_angle*-1)
  end
  def set_zoom(size); @zoom = size; end
  def flash(color,duration)
    @flash_color = color
    @flash_time = duration
    @flash_on = true
  end
  def rotate(angle)
    @total_angle += angle
    @angle = angle
  end
  def flashoff; @flash_on = false; end
  def mirrored; @mirror == true ? @mirror = false : @mirror = true; end
  def blend(color); @blend_color = color; end
  def screen_x
    if @shakechar[0] == false || @shakechar[1] == nil then
      $game_map.adjust_x(@real_x) * 32 + 16 else
      $game_map.adjust_x(@real_x) * 32 + 16 + @shakechar[1] end
  end
  def screen_y
    if @shakechar[0] == false || @shakechar[2] == nil then
      $game_map.adjust_y(@real_y) * 32 + 32 - shift_y - jump_height else
      $game_map.adjust_y(@real_y) * 32 + 32 - shift_y - jump_height + @shakechar[2] end
  end
  def slide(x, y)
    @slide_x = x + @shakechar[1]
    @slide_y = y + @shakechar[2]
    @step_anime = true
    @shakechar[0] = true
    @sliding = true
  end
  def fadein(time = 10)
    @fade_time = time
    @fade = 255
  end
  def fadeout(time = 10)
    @fade_time = time
    @fade = 0
  end
  def shake(time = 30)
    @shakechar[0] = true
    @shake_time = time
  end
  def random(rect_x = 250, rect_y = 250)
    tiles = []
    tiles = tile_array(rect_x,rect_y)
    tiles = tiles.compact
    return if tiles.empty?
    tile = rand(tiles.size)
    moveto(tiles[tile][0],tiles[tile][1])
  end
  def random_region(id, rect_x = 250, rect_y = 250)
    tiles = tile_array(rect_x,rect_y)
    tiles.each_index do |i|
      next if tiles[i].nil?
      erase = false
      erase = true unless $game_map.region_id(tiles[i][0], tiles[i][1]) == id
      tiles[i] = nil if erase
    end
    tiles = tiles.compact
    return if tiles.empty?
    tile = rand(tiles.size)
    moveto(tiles[tile][0],tiles[tile][1])
  end
  def random_wait(min, max)
    @wait_count = rand(max-min) + min - 1
  end
  def tile_array(rect_x,rect_y)
    tiles = [];nx = 0;ny = 0
    ($game_map.width * $game_map.height).times do |i|
      tiles.push([nx,ny])
      nx += 1
      if nx == $game_map.width
        nx = 0
        ny += 1
      end
    end
    tiles.each_index do |i|
      erase = false
      erase = true if tiles[i][0] == $game_player.x && tiles[i][1] == $game_player.y
      erase = true if tiles[i][0] == x && tiles[i][1] == y
      erase = true if tiles[i][0] > x + rect_x || tiles[i][0] < x - rect_x
      erase = true if tiles[i][1] > y + rect_y || tiles[i][1] < y - rect_y
      erase = true if !$game_map.check_passage(tiles[i][0], tiles[i][1], 0x0f)
      tiles[i] = nil if erase
    end
    return tiles
  end
  def self_switch(symbol, boolean)
    return if !self.is_a?(Game_Event)
    key = [$game_map.map_id, @event.id, symbol]
    $game_self_switches[key] = boolean
  end
  def balloon(id)
    @balloon_id = id
  end
  def update
    shake_update
    update_sliding if @sliding
    update_fading if @opacity != @fade && @fade_time > 0
    update_shake if @shake_time > 0
  end
  def update_fading
    @opacity += (255 / @fade_time) if @fade > @opacity
    @opacity -= (255 / @fade_time) if @fade < @opacity
    @opacity = 0 if @opacity < 0; @opacity = 255 if @opacity > 255
    @fade_time = 0 if @opacity == 0 || @opacity == 255
  end
  def update_sliding
    @shakechar[1] += 0.5 if @slide_x > @shakechar[1]
    @shakechar[1] -= 0.5 if @slide_x < @shakechar[1]
    @shakechar[2] += 0.5 if @slide_y > @shakechar[2]
    @shakechar[2] -= 0.5 if @slide_y < @shakechar[2]
    return unless screen_x == @next_x
    return unless screen_y == @next_y
    @sliding = false
    @step_anime = false
  end
  def update_shake
    @shake_time -= 1
    @shakechar[2] += 1 if @shake_direction == 0
    @shakechar[2] -= 1 if @shake_direction == 1
    if @shake_time % 3 == 0
      @shake_direction += 1
      @shake_direction = 0 if @shake_direction > 1
    end
  end
  def moveto(x,y)
    shake_moveto(x,y)
    @memo_x = @x if @memo_x < 0
    @memo_y = @y if @memo_y < 0
  end
  def jump_forward(length)
    x = 0; y = 0
    x += length if @direction == 6
    x -= length if @direction == 4
    y += length if @direction == 2
    y -= length if @direction == 8
    jump(x,y)
  end
  def jump_side(length)
    x = 0; y = 0
    y += length if @direction == 6
    y -= length if @direction == 4
    x += length if @direction == 2
    x -= length if @direction == 8
    jump(x,y)
  end
  def jumpto(x,y)
    x = x - @x
    y = y - @y
    jump(x,y)
  end
  def memorize
    @memo_x = @x
    @memo_y = @y
  end
  def recall
    moveto(@memo_x, @memo_y)
  end
  def recall_walk
    waypoint(@memo_x, @memo_y)
  end
  def restart(switches = false)
    initialize(@map_id, @event)
    if switches
      self_switch("A", false)
      self_switch("B", false)
      self_switch("C", false)
      self_switch("D", false)
    end
  end
  def moveto_player(wp = false)
    if wp
      waypoint($game_player.x, $game_player.y)
    else
      moveto($game_player.x, $game_player.y)
    end
  end
  def moveto_event(id, wp = false)
    return if $game_map.events[id].nil?
    event = $game_map.events[id]
    if wp
      waypoint(event.x, event.y)
    else
      moveto(event.x, event.y)
    end
  end
  def play_animation(event_id, animation_id)
    if event_id > 0
      return if $game_map.events[event_id].nil?
      event = $game_map.events[event_id]
    elsif event_id == -1
      event = $game_player
    end
    event.animation_id = animation_id
  end
end
 
class Game_Character
  alias eft_init_private_members init_private_members
  def init_private_members
    eft_init_private_members
    @waypoint = [-1,-1]      
  end
  def update_routine_move
    if @wait_count > 0
      @wait_count -= 1
    else
      @move_succeed = true
      command = @move_route.list[@move_route_index]
      if command
        if @waypoint[0] != -1
          process_waypoint_command
          advance_waypoint_route_index
        else
          process_move_command(command)
          advance_move_route_index
        end
      end
    end
  end
  def process_waypoint_command
    sx = distance_x_from(@waypoint[0])
    sy = distance_y_from(@waypoint[1])
    if sx.abs > sy.abs
      if EVENTING_USE_DIR8
        @move_succeed = false
        if sy != 0
          move_diagonal(sx > 0 ? 4 : 6, sy > 0 ? 8 : 2)
        end
        move_straight(sx > 0 ? 4 : 6) if !@move_succeed
        move_straight(sy > 0 ? 8 : 2) if !@move_succeed && sy != 0
      else
        move_straight(sx > 0 ? 4 : 6)
        move_straight(sy > 0 ? 8 : 2) if !@move_succeed && sy != 0
      end
    elsif sy != 0
      if EVENTING_USE_DIR8
        @move_succeed = false
        if sx != 0
          move_diagonal(sx > 0 ? 4 : 6, sy > 0 ? 8 : 2)
        end
        move_straight(sy > 0 ? 8 : 2) if !@move_succeed
        move_straight(sx > 0 ? 4 : 6) if !@move_succeed && sx != 0
      else
        move_straight(sy > 0 ? 8 : 2)
        move_straight(sx > 0 ? 4 : 6) if !@move_succeed && sx != 0
      end
    end
    @waypoint = [-1,-1] if !@move_succeed && @move_route.skippable
  end
  def advance_waypoint_route_index
    return unless @x == @waypoint[0]
    return unless @y == @waypoint[1]
    @waypoint = [-1,-1]
  end
  def waypoint(x,y); @waypoint = [x,y]; end
end
 
class Sprite_Character
  alias eventfp_update update
  def update
    eventfp_update
    zoom_update
    mirror_update
    blend_update
    rotate_update
    flash_update if @character.flash_on
  end
  def blend_update; self.color = @character.blend_color; end
  def zoom_update
    self.zoom_y = @character.zoom
    self.zoom_x = @character.zoom
  end
  def mirror_update; self.mirror = @character.mirror; end
  def flash_update
    flash(@character.flash_color,@character.flash_time)
    @character.flashoff
  end
  def rotate_update
    self.angle = @character.angle
  end
end


[box class=titlebg]
Demo
[/box]

Em inglês: Clique aqui

[box class=titlebg]
Condições de Uso
[/box]

Gratuito tanto para projetos comerciais quanto não comerciais, com os devidos créditos

[box class=titlebg]
Agradecimentos
[/box]

V.M. of D.T. — criação do script

Fonte
Você adora as enormes árvores do XP? Você odeia as cores "datadas" delas? Que tal dar uma olhada no meu Remaster?