Krótki opis:
Skrypt pozwala na dodanie różnych efektów mapy takich, jak mgła itp.
Autor:
Victor Sant
Kompatybilność:
RPG Maker VX Ace
Skrypt:
Spoiler:
Kod:
#==============================================================================
# ** Victor Engine - Fog and Overlay
#------------------------------------------------------------------------------
# Author : Victor Sant
#
# Version History:
# v 1.00 - 2011.12.19 > First relase
# 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
#------------------------------------------------------------------------------
# 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.09 or higher
#
# * Alias methods (Default)
# 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
#
# * Alias methods (Basic Module)
# 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
# comment box, works like a script call
#
# <fog effect>
# settings
# </fog effect>
# 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)
#
# <fog opacity id: o, d>
# 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)
#
# <fog move id: x, y>
# 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
#
# <fog tone id: r, g, b, y, d>
# 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 = false
#--------------------------------------------------------------------------
# * required
# This method checks for the existance of the basic module and other
# 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(" ")
end
end
#==============================================================================
# ** 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)
end
end
#==============================================================================
# ** DataManager
#------------------------------------------------------------------------------
# This module handles the game and database objects used in game.
# Almost all global variables are initialized on this module
#==============================================================================
class << DataManager
#--------------------------------------------------------------------------
# * Alias method: setup_new_game
#--------------------------------------------------------------------------
alias :setup_new_game_fog_and_overlay :setup_new_game
def setup_new_game
setup_new_game_fog_and_overlay
$game_battle_fogs = VE_BATTLE_FOGS
end
#--------------------------------------------------------------------------
# * Alias method: setup_battle_test
#--------------------------------------------------------------------------
alias :setup_battle_test_fog_and_overlay :setup_battle_test
def setup_battle_test
setup_battle_test_fog_and_overlay
$game_battle_fogs = VE_BATTLE_FOGS
end
#--------------------------------------------------------------------------
# * Alias method: create_game_objects
#--------------------------------------------------------------------------
alias :create_game_objects_fog_and_overlay :create_game_objects
def create_game_objects
create_game_objects_fog_and_overlay
$game_battle_fogs = VE_BATTLE_FOGS
end
#--------------------------------------------------------------------------
# * Alias method: make_save_contents
#--------------------------------------------------------------------------
alias :make_save_contents_fog_and_overlay :make_save_contents
def make_save_contents
contents = make_save_contents_fog_and_overlay
contents[:battle_fogs] = $game_battle_fogs
contents
end
#--------------------------------------------------------------------------
# * Alias method: extract_save_contents
#--------------------------------------------------------------------------
alias :extract_save_contents_fog_and_overlay :extract_save_contents
def extract_save_contents(contents)
extract_save_contents_fog_and_overlay(contents)
$game_battle_fogs = contents[:battle_fogs]
end
end
#==============================================================================
# ** Game_Screen
#------------------------------------------------------------------------------
# This class handles screen maintenance data, such as change in color tone,
# flashes, etc. It's used within the Game_Map and Game_Troop classes.
#==============================================================================
class Game_Screen
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :fogs
#--------------------------------------------------------------------------
# * Alias method: initialize
#--------------------------------------------------------------------------
alias :initialize_ve_fog_and_overlay :initialize
def initialize
@fogs = Game_Fogs.new
initialize_ve_fog_and_overlay
end
#--------------------------------------------------------------------------
# * Alias method: clear
#--------------------------------------------------------------------------
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)
end
end
#==============================================================================
# ** 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_reader :fog_x
attr_reader :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
@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 = /<FOG EFFECT>([^><]*)<\/FOG EFFECT>/im
note.scan(regexp) { setup_fog($1) }
end
#--------------------------------------------------------------------------
# * New method: set_fog_opacity
#--------------------------------------------------------------------------
def set_fog_opacity(note)
regexp = /<FOG OPACITY (\d+): (\d+) *, *(\d+)>/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 = /<FOG MOVE (\d+): ([+-]?\d+) *, *([+-]?\d+)>/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 = /<FOG TONE (\d+): #{values}>/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)
end
end
#==============================================================================
# ** 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
#--------------------------------------------------------------------------
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
end
end
#==============================================================================
# ** 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
@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.fogs.each do |fog|
@fog_sprites[fog.id] ||= Sprite_Fog.new(@viewport1, fog)
@fog_sprites[fog.id].update
end
end
end
#==============================================================================
# ** 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
end
end
#==============================================================================
# ** Game_Fog
#------------------------------------------------------------------------------
# This class handles fog data. This class is used within the Game_Fogs class.
#==============================================================================
#==============================================================================
# ** 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.
#==============================================================================
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum