Victor Engine - Fog and Overlay

download Victor Engine - Fog and Overlay

of 15

Transcript of Victor Engine - Fog and Overlay

  • 8/19/2019 Victor Engine - Fog and Overlay

    1/15

    #==============================================================================# ** Victor Engine - Fog and Overlay#------------------------------------------------------------------------------# Author : Victor Sant## Version History:# v 1.00 - 2011.12.19 > First release# v 1.01 - 2011.12.30 > Faster Regular Expressions# v 1.02 - 2012.01.02 > Fixed fog dispose when changing maps# v 1.03 - 2012.01.04 > Fixed load fail when fog ON# v 1.04 - 2012.01.10 > Fixed fog movement y bug# v 1.05 - 2012.01.14 > Fixed the positive sign on some Regular Expressions# v 1.06 - 2012.01.15 > Fixed the Regular Expressions problem with "" and # v 1.07 - 2012.01.15 > Fixed fog position in maps with loop# v 1.08 - 2012.05.21 > Compatibility with Map Turn Battle# v 1.09 - 2012.05.24 > Fixed initial fog position# v 1.10 - 2012.07.02 > Fixed initial fog position with Map Turn Battle# v 1.11 - 2012.08.02 > Compatibility with Basic Module 1.27# v 1.12 - 2012.12.13 > Fixed fog movement during battles#------------------------------------------------------------------------------# This script allows to add varied of effects and overlays to the maps.# Differently from pictures the fog follows the map movement instead of the# screen (this behavior can be changed). You can add various fogs and/or# overlays to the map.

    #------------------------------------------------------------------------------# Compatibility# Requires the script 'Victor Engine - Basic Module' v 1.27 or higher## * Alias methods# class Game_Screen# def initialize# def clear# def update## class Game_Map# def setup(map_id)# def scroll_down(distance)

    # def scroll_left(distance)# def scroll_right(distance)# def scroll_up(distance)## class Spriteset_Map# def initialize# def dispose# def update## class Game_Interpreter# def comment_call##------------------------------------------------------------------------------

    # Instructions:# To instal the script, open you script editor and paste this script on# a new section bellow the Materials section. This script must also# be bellow the script 'Victor Engine - Basic'# The images must be placed on the folder "Graphics/Fogs". Create a folder# named "Fogs" on the Graphics folder.##------------------------------------------------------------------------------# Maps and Comment calls note tags:# Tags to be used on the Maps note box in the database or in events

  • 8/19/2019 Victor Engine - Fog and Overlay

    2/15

    # comment box, works like a script call## # settings# # Create a fog effect on the map, add the following values to the info# the ID and name must be added, other values are optional.# id: x : fog ID# name: "x" : fog graphic filename ("filename")# opacity: x : fog opacity (0-255)# move: x : fog screen movement (32 = fog follows the map)# zoom: x : fog zoom (100 = default size)# hue: x : fog hue (0-360)# blend: x : fog blend type (0: normal, 1: add, 2: subtract)# depth: x : fog Z axis (300 = default value)## # This tag allows to change the fog opacity gradually# id : fog ID# o : new opacity (0-255)# d : wait until complete change (60 frames = 1 second)## # This tag adds fog continuous movement

    # id : fog ID# x : horizontal movement, can be positive or negative# y : vertical movement, can be positive or negative## # This tag allows to change the fog opacity gradually# id : fog ID# r : red tone (0-255, can be negative)# g : green tone (0-255, can be negative)# b : blue tone (0-255, can be negative)# y : gray tone (0-255)# d : wait until complete change (60 frames = 1 second)#

    #------------------------------------------------------------------------------# Additional instructions:## Map note tags commands are called right when enters the map, comment calls# are called during the event process.##==============================================================================

    #==============================================================================# ** Victor Engine#------------------------------------------------------------------------------# Setting module for the Victor Engine#==============================================================================

    module Victor_Engine  #--------------------------------------------------------------------------  # * Set fogs visibility on battle  # When true, fogs are visible on battle  #--------------------------------------------------------------------------  VE_BATTLE_FOGS = true  #--------------------------------------------------------------------------  # * required  # This method checks for the existance of the basic module and other

  • 8/19/2019 Victor Engine - Fog and Overlay

    3/15

      # VE scripts required for this script to work, don't edit this  #--------------------------------------------------------------------------  def self.required(name, req, version, type = nil)  if !$imported[:ve_basic_module]  msg = "The script '%s' requires the script\n"  msg += "'VE - Basic Module' v%s or higher above it to work properly\n"  msg += "Go to http://victorscripts.wordpress.com/ to download this script."  msgbox(sprintf(msg, self.script_name(name), version))  exit  else  self.required_script(name, req, version, type)  end  end  #--------------------------------------------------------------------------  # * script_name  # Get the script name base on the imported value, don't edit this  #--------------------------------------------------------------------------  def self.script_name(name, ext = "VE")  name = name.to_s.gsub("_", " ").upcase.split  name.collect! {|char| char == ext ? "#{char} -" : char.capitalize }  name.join(" ")  endend

    $imported ||= {}$imported[:ve_fog_and_overlay] = 1.12Victor_Engine.required(:ve_fog_and_overlay, :ve_basic_module, 1.27, :above)

    #==============================================================================# ** Cache#------------------------------------------------------------------------------# This module loads each of graphics, creates a Bitmap object, and retains it.# To speed up load times and conserve memory, this module holds the created# Bitmap object in the internal hash, allowing the program to return# preexisting objects when the same bitmap is requested again.#==============================================================================

    module Cache  #--------------------------------------------------------------------------  # * New method: fogs  #--------------------------------------------------------------------------  def self.fogs(filename)  self.load_bitmap('Graphics/Fogs/', filename)  endend

    #==============================================================================# ** DataManager#------------------------------------------------------------------------------

    # This module handles the game and database objects used in game.# Almost all global variables are initialized on this module#==============================================================================

    class

  • 8/19/2019 Victor Engine - Fog and Overlay

    4/15

  • 8/19/2019 Victor Engine - Fog and Overlay

    5/15

      #--------------------------------------------------------------------------  alias :clear_ve_fog_and_overlay :clear  def clear  clear_ve_fog_and_overlay  clear_fogs  end  #--------------------------------------------------------------------------  # * Alias method: update  #--------------------------------------------------------------------------  alias :update_ve_fog_and_overlay :update  def update  update_ve_fog_and_overlay  update_fogs  end  #--------------------------------------------------------------------------  # * New method: fogs  #--------------------------------------------------------------------------  def fogs  @fogs ||= Game_Fogs.new  end  #--------------------------------------------------------------------------  # * New method: clear_fogs  #--------------------------------------------------------------------------  def clear_fogs

      fogs.each {|fog| fog.erase }  end  #--------------------------------------------------------------------------  # * New method: update_fogs  #--------------------------------------------------------------------------  def update_fogs  fogs.each {|fog| fog.update }  end  #--------------------------------------------------------------------------  # * New method: create_fog  #--------------------------------------------------------------------------  def create_fog(*args)  fogs[args.first].show(*args)

      end  #--------------------------------------------------------------------------  # * New method: set_fog_move  #--------------------------------------------------------------------------  def set_fog_move(id, sx, sy)  fogs[id].start_movement(sx, sy)  end  #--------------------------------------------------------------------------  # * New method: set_fog_tone  #--------------------------------------------------------------------------  def set_fog_tone(id, red, green, blue, gray, duration = 0)  tone = Tone.new(red, green, blue, gray)  fogs[id].start_tone_change(tone, duration)

      end  #--------------------------------------------------------------------------  # * New method: set_fog_opacity  #--------------------------------------------------------------------------  def set_fog_opacity(id, opacity, duration = 0)  fogs[id].start_opacity_change(opacity, duration)  endend

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

  • 8/19/2019 Victor Engine - Fog and Overlay

    6/15

    # ** Game_Map#------------------------------------------------------------------------------# This class handles maps. It includes scrolling and passage determination# functions. The instance of this class is referenced by $game_map.#==============================================================================

    class Game_Map  #--------------------------------------------------------------------------  # * Public Instance Variables  #--------------------------------------------------------------------------  attr_accessor :fog_x  attr_accessor :fog_y  #--------------------------------------------------------------------------  # * Alias method: setup  #--------------------------------------------------------------------------  alias :setup_ve_fog_and_overlay :setup  def setup(map_id)  setup_ve_fog_and_overlay(map_id)  setup_fogs_effect  end  #--------------------------------------------------------------------------  # * Alias method: scroll_down  #--------------------------------------------------------------------------  alias :scroll_down_ve_fog_and_overlay :scroll_down

      def scroll_down(distance)  last_y = @display_y  scroll_down_ve_fog_and_overlay(distance)  @fog_y += loop_vertical? ? distance : @display_y - last_y  end  #--------------------------------------------------------------------------  # * Alias method: scroll_left  #--------------------------------------------------------------------------  alias :scroll_left_ve_fog_and_overlay :scroll_left  def scroll_left(distance)  last_x = @display_x  scroll_left_ve_fog_and_overlay(distance)  @fog_x += loop_horizontal? ? -distance : @display_x - last_x

      end  #--------------------------------------------------------------------------  # * Alias method: scroll_right  #--------------------------------------------------------------------------  alias :scroll_right_ve_fog_and_overlay :scroll_right  def scroll_right(distance)  last_x = @display_x  scroll_right_ve_fog_and_overlay(distance)  @fog_x += loop_horizontal? ? distance : @display_x - last_x  end  #--------------------------------------------------------------------------  # * Alias method: scroll_up  #--------------------------------------------------------------------------

      alias :scroll_up_ve_fog_and_overlay :scroll_up  def scroll_up(distance)  last_y = @display_y  scroll_up_ve_fog_and_overlay(distance)  @fog_y += loop_vertical? ? -distance : @display_y - last_y  end  #--------------------------------------------------------------------------  # * New method: setup_fogs_effect  #--------------------------------------------------------------------------  def setup_fogs_effect

  • 8/19/2019 Victor Engine - Fog and Overlay

    7/15

      @fog_x = 0  @fog_y = 0  create_fog(note)  set_fog_opacity(note)  set_fog_move(note)  set_fog_tone(note)  end  #--------------------------------------------------------------------------  # * New method: create_fog  #--------------------------------------------------------------------------  def create_fog(note)  regexp = get_all_values("FOG EFFECT")  note.scan(regexp) { setup_fog($1) }  end  #--------------------------------------------------------------------------  # * New method: set_fog_opacity  #--------------------------------------------------------------------------  def set_fog_opacity(note)  regexp = //i  note.scan(regexp) do |id, o, d|  @screen.set_fog_opacity(id.to_i, o.to_i, d.to_i)  end  end  #--------------------------------------------------------------------------

      # * New method: set_fog_move  #--------------------------------------------------------------------------  def set_fog_move(note)  regexp = //i  note.scan(regexp) do |id, sx, sy|  @screen.set_fog_move(id.to_i, sx.to_i, sy.to_i)  end  end  #--------------------------------------------------------------------------  # * New method: set_fog_tone  #--------------------------------------------------------------------------  def set_fog_tone(note)  values = "(\\d+) *, *(\\d+) *, *(\\d+) *, *(\\d+)(?: *, *(\\d+))?"

      regexp = //i  note.scan(regexp) do |i, r, g, b, a, d|  info = [i.to_i, r.to_i, g.to_i, b.to_i, a.to_i, d ? d.to_i : 0]  @screen.set_fog_tone(*info)  end  end  #--------------------------------------------------------------------------  # * New method: setup_fog  #--------------------------------------------------------------------------  def setup_fog(info)  id = info =~ /ID: (\d+)/i ? $1.to_i : 0  name = info =~ /NAME: #{get_filename}/i ? $1.dup : ""  op = info =~ /OPACITY: (\d+)/i ? $1.to_i : 192

      move = info =~ /MOVE: (\d+)/i ? $1.to_i : 32  zoom = info =~ /ZOOM: (\d+)/i ? $1.to_f : 100.0  hue = info =~ /HUE: (\d+)/i ? $1.to_i : 0  blend = info =~ /BLEND: (\d+)/i ? $1.to_i : 0  depth = info =~ /DEPTH: ([+-]?\d+)/i ? $1.to_i : 300  @screen.create_fog(id, name, op, move, zoom, hue, blend, depth)  endend

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

  • 8/19/2019 Victor Engine - Fog and Overlay

    8/15

    # ** Game_Interpreter#------------------------------------------------------------------------------# An interpreter for executing event commands. This class is used within the# Game_Map, Game_Troop, and Game_Event classes.#==============================================================================

    class Game_Interpreter  #--------------------------------------------------------------------------  # * Alias method: comment_call  #--------------------------------------------------------------------------  alias :comment_call_ve_fog_and_overlay :comment_call  def comment_call  call_create_fog_effect  comment_call_ve_fog_and_overlay  end  #--------------------------------------------------------------------------  # * New method: call_create_fog_effect  #--------------------------------------------------------------------------  def call_create_fog_effect  $game_map.create_fog(note)  $game_map.set_fog_opacity(note)  $game_map.set_fog_move(note)  $game_map.set_fog_tone(note)  end

    end

    #==============================================================================# ** Spriteset_Map#------------------------------------------------------------------------------# Esta classe reune os sprites da tela de mapa e tilesets. Esta classe é# usada internamente pela classe Scene_Map.#==============================================================================

    class Spriteset_Map  #--------------------------------------------------------------------------  # * Alias method: initialize  #--------------------------------------------------------------------------

      alias :initialize_ve_fog_and_overlay :initialize  def initialize  create_fogs  initialize_ve_fog_and_overlay  end  #--------------------------------------------------------------------------  # * Alias method: dispose  #--------------------------------------------------------------------------  alias :dispose_ve_fog_and_overlay :dispose  def dispose  dispose_ve_fog_and_overlay  dispose_fogs  end

      #--------------------------------------------------------------------------  # * Alias method: update  #--------------------------------------------------------------------------  alias :update_ve_fog_and_overlay :update  def update  update_ve_fog_and_overlay  update_fogs  end  #--------------------------------------------------------------------------  # * New method: create_fogs

  • 8/19/2019 Victor Engine - Fog and Overlay

    9/15

      #--------------------------------------------------------------------------  def create_fogs  @fog_sprites = []  end  #--------------------------------------------------------------------------  # * New method: dispose_fogs  #--------------------------------------------------------------------------  def dispose_fogs  if @fog_sprites  @fog_sprites.compact.each {|sprite| sprite.dispose }  @fog_sprites.clear  end  end  #--------------------------------------------------------------------------  # * New method: update_fogs  #--------------------------------------------------------------------------  def update_fogs  $game_map.screen.fogs.each do |fog|  @fog_sprites[fog.id] ||= Sprite_Fog.new(@viewport1, fog)  @fog_sprites[fog.id].update  end  endend

    #==============================================================================# ** Spriteset_Battle#------------------------------------------------------------------------------# This class brings together battle screen sprites. It's used within the# Scene_Battle class.#==============================================================================

    class Spriteset_Battle  #--------------------------------------------------------------------------  # * Alias method: initialize  #--------------------------------------------------------------------------  alias :initialize_ve_fog_and_overlay :initialize  def initialize

      create_fogs if $game_battle_fogs  initialize_ve_fog_and_overlay  end  #--------------------------------------------------------------------------  # * Alias method: dispose  #--------------------------------------------------------------------------  alias :dispose_ve_fog_and_overlay :dispose  def dispose  dispose_fogs if $game_battle_fogs  dispose_ve_fog_and_overlay  end  #--------------------------------------------------------------------------  # * Alias method: update

      #--------------------------------------------------------------------------  alias :update_ve_fog_and_overlay :update  def update  update_fogs if $game_battle_fogs  update_ve_fog_and_overlay  end  #--------------------------------------------------------------------------  # * New method: create_fogs  #--------------------------------------------------------------------------  def create_fogs

  • 8/19/2019 Victor Engine - Fog and Overlay

    10/15

      @fog_sprites = []  end  #--------------------------------------------------------------------------  # * New method: dispose_fogs  #--------------------------------------------------------------------------  def dispose_fogs  if @fog_sprite  $game_map.screen.fogs.clear  @fog_sprites.compact.each {|sprite| sprite.dispose }  @fog_sprites.clear  end  end  #--------------------------------------------------------------------------  # * New method: update_fogs  #--------------------------------------------------------------------------  def update_fogs  $game_map.screen.update_fogs  $game_map.screen.fogs.each do |fog|  @fog_sprites[fog.id] ||= Sprite_Fog.new(@viewport1, fog)  @fog_sprites[fog.id].update  end  endend

    #==============================================================================# ** Scene_Map#------------------------------------------------------------------------------# This class performs the map screen processing.#==============================================================================

    class Scene_Map  #--------------------------------------------------------------------------  # * Alias method: pre_transfer  #--------------------------------------------------------------------------  alias :pre_transfer_ve_fog_and_overlay :pre_transfer  def pre_transfer  pre_transfer_ve_fog_and_overlay

      if $game_player.new_map_id != $game_map.map_id  @spriteset.dispose_fogs  $game_map.screen.clear_fogs  $game_map.screen.fogs.clear  end  endend

    #==============================================================================# ** Game_Fog#------------------------------------------------------------------------------# This class handles fog data. This class is used within the Game_Fogs class.#==============================================================================

    class Game_Fog  #--------------------------------------------------------------------------  # * Public Instance Variables  #--------------------------------------------------------------------------  attr_reader :id  attr_reader :name  attr_reader :hue  attr_reader :sx  attr_reader :sy

  • 8/19/2019 Victor Engine - Fog and Overlay

    11/15

      attr_reader :ox  attr_reader :oy  attr_reader :depth  attr_reader :move  attr_reader :zoom_x  attr_reader :zoom_y  attr_reader :opacity  attr_reader :blend_type  attr_reader :tone  #--------------------------------------------------------------------------  # * initialize  #--------------------------------------------------------------------------  def initialize(id)  @id = id  init_basic  init_target  init_tone  end  #--------------------------------------------------------------------------  # * init_basic  #--------------------------------------------------------------------------  def init_basic  @name = ""  @depth = 300

      @zoom_x = 1.0  @zoom_y = 1.0  @move = 32  @opacity = 255.0  @blend_type = 1  @sx = 0  @sy = 0  @ox = 0  @oy = 0  @hue = 0  @opacity_duration = 0  @tone_duration = 0  end

      #--------------------------------------------------------------------------  # * init_target  #--------------------------------------------------------------------------  def init_target  @target_x = @x  @target_y = @y  @target_zoom_x = @zoom_x  @target_zoom_y = @zoom_y  @target_opacity = @opacity  end  #--------------------------------------------------------------------------  # * init_tone  #--------------------------------------------------------------------------

      def init_tone  @tone = Tone.new  @tone_target = Tone.new  @tone_duration = 0  end  #--------------------------------------------------------------------------  # * show  #--------------------------------------------------------------------------  def show(id, name, opacity, move, zoom, hue, blend, depth)  @id = id

  • 8/19/2019 Victor Engine - Fog and Overlay

    12/15

      @name = name  @move = move  @zoom_x = zoom.to_f  @zoom_y = zoom.to_f  @depth = depth  @opacity = opacity.to_f  @blend_type = blend  @ox = 0  @oy = 0  init_target  init_tone  end  #--------------------------------------------------------------------------  # * start_movement  #--------------------------------------------------------------------------  def start_movement(sx, sy)  @sx = sx  @sy = sy  end  #--------------------------------------------------------------------------  # * start_tone_change  #--------------------------------------------------------------------------  def start_tone_change(tone, duration)  @tone_target = tone.clone

      @tone_duration = [duration.to_i, 0].max  @tone = @tone_target.clone if @tone_duration == 0  end  #--------------------------------------------------------------------------  # * start_opacity_change  #--------------------------------------------------------------------------  def start_opacity_change(opacity, duration)  @opacity_target = opacity  @opacity_duration = [duration.to_i, 0].max  @opacity = @opacity_target if @opacity_duration == 0  end  #--------------------------------------------------------------------------  # * erase

      #--------------------------------------------------------------------------  def erase  @name = ""  end  #--------------------------------------------------------------------------  # * update  #--------------------------------------------------------------------------  def update  update_move  update_tone  update_opacity  end  #--------------------------------------------------------------------------

      # * update_move  #--------------------------------------------------------------------------  def update_move  @ox -= @sx / 16.0  @oy -= @sy / 16.0  end  #--------------------------------------------------------------------------  # * update_opacity  #--------------------------------------------------------------------------  def update_opacity

  • 8/19/2019 Victor Engine - Fog and Overlay

    13/15

      return if @opacity_duration == 0  d = @opacity_duration  @opacity = (@opacity * (d - 1) + @opacity_target) / d  @opacity_duration -= 1  end  #--------------------------------------------------------------------------  # * update_tone  #--------------------------------------------------------------------------  def update_tone  return if @tone_duration == 0  d = @tone_duration  @tone.red = (@tone.red * (d - 1) + @tone_target.red) / d  @tone.green = (@tone.green * (d - 1) + @tone_target.green) / d  @tone.blue = (@tone.blue * (d - 1) + @tone_target.blue) / d  @tone.gray = (@tone.gray * (d - 1) + @tone_target.gray) / d  @tone_duration -= 1  endend

    #==============================================================================# ** Game_Fogs#------------------------------------------------------------------------------# This class handles fogs. This class is used within the Game_Screen class.#==============================================================================

    class Game_Fogs  #--------------------------------------------------------------------------  # * initialize  #--------------------------------------------------------------------------  def initialize  @data = []  end  #--------------------------------------------------------------------------  # * []  #--------------------------------------------------------------------------  def [](number)  @data[number] ||= Game_Fog.new(number)

      end  #--------------------------------------------------------------------------  # * each  #--------------------------------------------------------------------------  def each  @data.compact.each {|fog| yield fog } if block_given?  end  #--------------------------------------------------------------------------  # * clear  #--------------------------------------------------------------------------  def clear  @data.clear  end

    end

    #==============================================================================# ** Sprite_Fog#------------------------------------------------------------------------------# This sprite is used to display fgos. It observes a instance of the# Game_Fog class and automatically changes sprite conditions.#==============================================================================

    class Sprite_Fog < Plane

  • 8/19/2019 Victor Engine - Fog and Overlay

    14/15

      #--------------------------------------------------------------------------  # * initialize  #--------------------------------------------------------------------------  def initialize(viewport, fog)  super(viewport)  @fog = fog  @x = 0  @y = 0  $game_map.fog_x = 0  $game_map.fog_y = 0  @initi_ox = $game_map.display_x * 32  @initi_oy = $game_map.display_y * 32  update  end  #--------------------------------------------------------------------------  # * dispose  #--------------------------------------------------------------------------  def dispose  bitmap.dispose if bitmap  super  end  #--------------------------------------------------------------------------  # * update  #--------------------------------------------------------------------------

      def update  update_bitmap  update_position  update_zoom  update_other  end  #--------------------------------------------------------------------------  # * update bitmap  #--------------------------------------------------------------------------  def update_bitmap  if @fog_name != @fog.name  self.bitmap = Cache.fogs(@fog.name)  @fog_name = @fog.name.dup

      end  end  #--------------------------------------------------------------------------  # * update_position  #--------------------------------------------------------------------------  def update_position  self.ox = $game_map.fog_x * @fog.move + @fog.ox + @initi_ox  self.oy = $game_map.fog_y * @fog.move + @fog.oy + @initi_oy  self.z = @fog.depth  end  #--------------------------------------------------------------------------  # * update_zoom  #--------------------------------------------------------------------------

      def update_zoom  self.zoom_x = @fog.zoom_x / 100.0  self.zoom_y = @fog.zoom_y / 100.0  end  #--------------------------------------------------------------------------  # * update_other  #--------------------------------------------------------------------------  def update_other  self.opacity = @fog.opacity  self.blend_type = @fog.blend_type

  • 8/19/2019 Victor Engine - Fog and Overlay

    15/15

      self.tone.set(@fog.tone)  endend