И так что то никто не ответил. Спрошу прямо. Можно ли с помощью скрипта проверить является ли участок в определенных координатах проходимым.
Вид для печати
И так что то никто не ответил. Спрошу прямо. Можно ли с помощью скрипта проверить является ли участок в определенных координатах проходимым.
Ребят , а как сделать что бы свет исходил от кристалла к примеру ?
Если ты говоришь о движке VX Ace то вот скрипт Victor'а на освещение:
Спойлер Victor Engine - Basic Module:Код:#==============================================================================
# ** Victor Engine - Basic Module
#------------------------------------------------------------------------------
# Author : Victor Sant
#
# Version History:
# v 1.00 - 2011.12.19 > First release
# v 1.01 - 2011.12.21 > Added Event Troop notes
# v 1.02 - 2011.12.22 > Added character frames value
# v 1.03 - 2011.12.30 > Added Actor and Enemy notes
# v 1.04 - 2012.01.01 > Added party average level and map actors
# v 1.05 - 2012.01.04 > Compatibility with Characters Scripts
# v 1.06 - 2012.01.07 > Compatibility with Fog and Light Effect
# > Added new Sprite Character functions
# v 1.07 - 2012.01.11 > Compatibility with Control Text and Codes
# v 1.08 - 2012.01.13 > Compatibility with Trait Control
# v 1.09 - 2012.01.15 > Fixed the Regular Expressions problem with "" and “”
# v 1.10 - 2012.01.18 > Compatibility with Automatic Battlers
# v 1.11 - 2012.01.26 > Compatibility with Followers Options
# Compatibility with Animated Battle beta
# v 1.12 - 2012.02.08 > Compatibility with Animated Battle
# v 1.13 - 2012.02.18 > Fix for non RTP dependant encrypted projects
# v 1.14 - 2012.03.11 > Better version handling and required messages
# v 1.15 - 2012.03.11 > Added level variable for enemies (to avoid crashes)
# v 1.16 - 2012.03.21 > Compatibility with Follower Control
# v 1.17 - 2012.03.22 > Compatibility with Follower Control new method
# v 1.18 - 2012.03.22 > Added Battler Types tag support
# v 1.19 - 2012.05.20 > Compatibility with Map Turn Battle
# v 1.20 - 2012.05.21 > Fix for older RMVXa versions
# v 1.21 - 2012.05.29 > Compatibility with Pixel Movement
# v 1.22 - 2012.07.02 > Compatibility with Terrain States
# v 1.23 - 2012.07.03 > Fix for Pixel Movement
# v 1.24 - 2012.07.17 > Compatibility with Critical Hit Effects
# v 1.25 - 2012.07.24 > Compatibility with Moving Plaforms
# v 1.26 - 2012.07.30 > Compatibility with Automatic Battlers
# v 1.27 - 2012.08.01 > Compatibility with Custom Slip Effect
# v 1.28 - 2012.08.01 > Compatibility with Custom Slip Effect v 1.01
# v 1.29 - 2012.11.03 > Fixed returning value division by 0 error.
# v 1.30 - 2012.12.13 > Compatibility with State Graphics
# v 1.31 - 2012.12.16 > Compatibility with Active Time Battle
# v 1.32 - 2012.12.24 > Compatibility with Active Time Battle v 1.01
# v 1.33 - 2012.12.30 > Compatibility with Leap Attack
# v 1.34 - 2013.01.07 > Compatibility with Critical Hit Effects v 1.01
# v 1.35 - 2013.02.13 > Compatibility with Cooperation Skills
#------------------------------------------------------------------------------
# This is the basic script for the system from Victory Engine and is
# required to use the scripts from the engine. This script offer some new
# functions to be used within many scripts of the engine.
#------------------------------------------------------------------------------
# Compatibility
# Required for the Victor Engine
#
# * Overwrite methods
# class << Cache
# def self.character(filename)
#
# class Sprite_Character < Sprite_Base
# def set_character_bitmap
#
# class Game_Battler < Game_BattlerBase
# def item_effect_recover_hp(user, item, effect)
# def item_effect_recover_mp(user, item, effect)
# def item_effect_gain_tp
#
# * Alias methods
# class Game_Interpreter
# def command_108
#
# class Window_Base < Window
# def convert_escape_characters(text)
#
#------------------------------------------------------------------------------
# Instructions:
# To instal the script, open you script editor and paste this script on
# a new section bellow the Materials section.
#
#------------------------------------------------------------------------------
# New functions
#
# * Random number between two vales
# rand_between(min, max)
# min : min value
# max : max value
# Can be called from any class, this method return an random value between
# two specific numbers
#
# * Random array value
# <Array>.random
# <Array>.random!
# Returns a random object from the array, the method .random! is destructive,
# removing the value returned from the array.
#
# * Sum of the numeric values of a array
# <Array>.sum
# Returns the sum of all numeric values
#
# * Average of all numeric values from the array
# <Array>.average(float = false)
# float : float flag
# Returns the average of all numeric values, if floa is true, the value
# returned is a float, otherwise it's a integer.
#
# * Note for events
# <Event>.note
# By default, events doesn't have note boxes. This command allows to use
# comments as note boxes, following the same format as the ones on the
# database. Returns all comments on the active page of the event.
#
# * Comment calls
# <Event>.comment_call
# Another function for comment boxes, by default, they have absolutely no
# effect in game when called. But this method allows to make the comment
# box to behave like an script call, but with the versatility of the
# note boxes. Remember that the commands will only take effect if there
# is scripts to respond to the comment code.
#
#==============================================================================
#==============================================================================
# ** Victor Engine
#------------------------------------------------------------------------------
# Setting module for the Victor Engine
#==============================================================================
module Victor_Engine
#--------------------------------------------------------------------------
# * New method: required_script
#--------------------------------------------------------------------------
def self.required_script(name, req, version, type = 0)
if type != :bellow && (!$imported[req] || $imported[req] < version)
msg = "The script '%s' requires the script\n"
case type
when :above
msg += "'%s' v%s or higher above it to work properly\n"
else
msg += "'%s' v%s or higher to work properly\n"
end
msg += "Go to http://victorscripts.wordpress.com/ to download this script."
self.exit_message(msg, name, req, version)
elsif type == :bellow && $imported[req]
msg = "The script '%s' requires the script\n"
msg += "'%s' to be put bellow it\n"
msg += "move the scripts to the proper position"
self.exit_message(msg, name, req, version)
end
end
#--------------------------------------------------------------------------
# * New method: exit_message
#--------------------------------------------------------------------------
def self.exit_message(message, name, req, version)
name = self.script_name(name)
req = self.script_name(req)
msgbox(sprintf(message, name, req, version))
exit
end
#--------------------------------------------------------------------------
# * New method: script_name
#--------------------------------------------------------------------------
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
$imported ||= {}
$imported[:ve_basic_module] = 1.35
#==============================================================================
# ** Object
#------------------------------------------------------------------------------
# This class is the superclass of all other classes.
#==============================================================================
class Object
#--------------------------------------------------------------------------
# * Include setting module
#--------------------------------------------------------------------------
include Victor_Engine
#-------------------------------------------------------------------------
# * New method: rand_between
#-------------------------------------------------------------------------
def rand_between(min, max)
min + rand(max - min + 1)
end
#--------------------------------------------------------------------------
# * New method: numeric?
#--------------------------------------------------------------------------
def numeric?
return false
end
#--------------------------------------------------------------------------
# * New method: string?
#--------------------------------------------------------------------------
def string?
return false
end
#--------------------------------------------------------------------------
# * New method: array?
#--------------------------------------------------------------------------
def array?
return false
end
#--------------------------------------------------------------------------
# * New method: float?
#--------------------------------------------------------------------------
def float?
return false
end
#--------------------------------------------------------------------------
# * New method: symbol?
#--------------------------------------------------------------------------
def symbol?
return false
end
#--------------------------------------------------------------------------
# * New method: item?
#--------------------------------------------------------------------------
def item?
return false
end
#--------------------------------------------------------------------------
# * New method: skill?
#--------------------------------------------------------------------------
def skill?
return false
end
#--------------------------------------------------------------------------
# * New method: file_exist?
#--------------------------------------------------------------------------
def file_exist?(path, filename)
$file_list ||= {}
$file_list[path + filename] ||= file_test(path, filename)
$file_list[path + filename]
end
#--------------------------------------------------------------------------
# * New method: get_file_list
#--------------------------------------------------------------------------
def file_test(path, filename)
bitmap = Cache.load_bitmap(path, filename) rescue nil
bitmap ? true : false
end
#--------------------------------------------------------------------------
# * New method: character_exist?
#--------------------------------------------------------------------------
def character_exist?(filename)
file_exist?("Graphics/Characters/", filename)
end
#--------------------------------------------------------------------------
# * New method: battler_exist?
#--------------------------------------------------------------------------
def battler_exist?(filename)
file_exist?("Graphics/Battlers/", filename)
end
#--------------------------------------------------------------------------
# * New method: face_exist?
#--------------------------------------------------------------------------
def face_exist?(filename)
file_exist?("Graphics/Faces/", filename)
end
#--------------------------------------------------------------------------
# * New method: get_filename
#--------------------------------------------------------------------------
def get_filename
"["'“‘]([^"'”‘”’]+)["'”’]"
end
#--------------------------------------------------------------------------
# * New method: get_all_values
#--------------------------------------------------------------------------
def get_all_values(value1, value2 = nil)
value2 = value1 unless value2
/<#{value1}>((?:[^<]|<[^\/])*)<\/#{value2}>/im
end
#--------------------------------------------------------------------------
# * New method: make_symbol
#--------------------------------------------------------------------------
def make_symbol(string)
string.downcase.gsub(" ", "_").to_sym
end
#--------------------------------------------------------------------------
# * New method: make_string
#--------------------------------------------------------------------------
def make_string(symbol)
symbol.to_s.gsub("_", " ").upcase
end
#--------------------------------------------------------------------------
# * New method: returning_value
#--------------------------------------------------------------------------
def returning_value(i, x)
y = [x * 2, 1].max
i % y >= x ? (x * 2) - i % y : i % y
end
#--------------------------------------------------------------------------
# New method: in_rect?
#--------------------------------------------------------------------------
def in_rect?(w, h, x1, y1, x2, y2, fx = 0)
aw, ah, ax, ay, bx, by = setup_area(w, h, x1, y1, x2, y2, fx)
bx > ax - aw && bx < ax + aw && by > ay - ah && by < ay + ah
end
#--------------------------------------------------------------------------
# New method: in_radius?
#--------------------------------------------------------------------------
def in_radius?(w, h, x1, y1, x2, y2, fx = 0)
aw, ah, ax, ay, bx, by = setup_area(w, h, x1, y1, x2, y2, fx)
((bx - ax) ** 2 / aw ** 2) + ((by - ay) ** 2 / ah ** 2) <= 1
end
#--------------------------------------------------------------------------
# New method: setup_area
#--------------------------------------------------------------------------
def setup_area(w, h, x1, y1, x2, y2, fx)
aw = w
ah = h * aw
ax = x1
ay = y1
bx = x2
by = y2
bx += fx / 4 if ax > bx
bx -= fx / 4 if ax < bx
[aw, ah, ax, ay, bx, by]
end
#--------------------------------------------------------------------------
# * New method: get_param_id
#--------------------------------------------------------------------------
def get_param_id(text)
case text.upcase
when "MAXHP", "HP" then 0
when "MAXMP", "MP" then 1
when "ATK" then 2
when "DEF" then 3
when "MAT" then 4
when "MDF" then 5
when "AGI" then 6
when "LUK" then 7
end
end
#--------------------------------------------------------------------------
# * New method: get_param_text
#--------------------------------------------------------------------------
def get_param_text(id)
case id
when 0 then "HP"
when 1 then "MP"
when 2 then "ATK"
when 3 then "DEF"
when 4 then "MAT"
when 5 then "MDF"
when 6 then "AGI"
when 7 then "LUK"
end
end
#--------------------------------------------------------------------------
# * New method: get_xparam_id
#--------------------------------------------------------------------------
def get_xparam_id(text)
case text.upcase
when "HIT" then 0
when "EVA" then 1
when "CRI" then 2
when "CEV" then 3
when "MEV" then 4
when "MRF" then 5
when "CNT" then 6
when "HRG" then 7
when "MRG" then 8
when "TRG" then 9
end
end
#--------------------------------------------------------------------------
# * New method: get_xparam_text
#--------------------------------------------------------------------------
def get_xparam_text(id)
case id
when 0 then "HIT"
when 1 then "EVA"
when 2 then "CRI"
when 3 then "CEV"
when 4 then "MEV"
when 5 then "MRF"
when 6 then "CNT"
when 7 then "HRG"
when 8 then "MRG"
when 9 then "TRG"
end
end
#--------------------------------------------------------------------------
# * New method: get_sparam_id
#--------------------------------------------------------------------------
def get_sparam_id(text)
case text.upcase
when "TGR" then 0
when "GRD" then 1
when "REC" then 2
when "PHA" then 3
when "MCR" then 4
when "TCR" then 5
when "PDR" then 6
when "MDR" then 7
when "FDR" then 8
when "EXR" then 9
end
end
#--------------------------------------------------------------------------
# * New method: get_sparam_text
#--------------------------------------------------------------------------
def get_sparam_text(id)
case id
when 0 then "TGR"
when 1 then "GRD"
when 2 then "REC"
when 3 then "PHA"
when 4 then "MCR"
when 5 then "TCR"
when 6 then "PDR"
when 7 then "MDR"
when 8 then "FDR"
when 9 then "EXR"
end
end
#--------------------------------------------------------------------------
# * New method: get_cond
#--------------------------------------------------------------------------
def get_cond(text)
case text.upcase
when "HIGHER" then ">"
when "LOWER" then "<"
when "EQUAL" then "=="
when "DIFFERENT" then "!="
else "!="
end
end
end
#==============================================================================
# ** String
#------------------------------------------------------------------------------
# The string class. Can handle character sequences of arbitrary lengths.
#==============================================================================
class String
#--------------------------------------------------------------------------
# * New method: string?
#--------------------------------------------------------------------------
def string?
return true
end
end
#==============================================================================
# ** String
#------------------------------------------------------------------------------
# The class that represents symbols.
#==============================================================================
class Symbol
#--------------------------------------------------------------------------
# * New method: symbol?
#--------------------------------------------------------------------------
def symbol?
return true
end
end
#==============================================================================
# ** Numeric
#------------------------------------------------------------------------------
# This is the abstract class for numbers.
#==============================================================================
class Numeric
#--------------------------------------------------------------------------
# * New method: numeric?
#--------------------------------------------------------------------------
def numeric?
return true
end
#--------------------------------------------------------------------------
# * New method: ceil?
#--------------------------------------------------------------------------
def ceil?
return false
end
#--------------------------------------------------------------------------
# * New method: to_ceil
#--------------------------------------------------------------------------
def to_ceil
self > 0 ? self.abs.ceil : -self.abs.ceil
end
end
#==============================================================================
# ** Float
#------------------------------------------------------------------------------
# This is the abstract class for the floating point values.
#==============================================================================
class Float
#--------------------------------------------------------------------------
# * New method: float?
#--------------------------------------------------------------------------
def float?
return true
end
#--------------------------------------------------------------------------
# * New method: ceil?
#--------------------------------------------------------------------------
def ceil?
self != self.ceil
end
end
#==============================================================================
# ** Array
#------------------------------------------------------------------------------
# This class store arbitrary Ruby objects.
#==============================================================================
class Array
#--------------------------------------------------------------------------
# * New method: array?
#--------------------------------------------------------------------------
def array?
return true
end
#-------------------------------------------------------------------------
# * New method: random
#-------------------------------------------------------------------------
def random
self[rand(size)]
end
#-------------------------------------------------------------------------
# * New method: random!
#-------------------------------------------------------------------------
def random!
self.delete_at(rand(size))
end
#---------------------------------------------------------------------------
# * New method: sum
#---------------------------------------------------------------------------
def sum
self.inject(0) {|r, n| r += (n.numeric? ? n : 0)}
end
#---------------------------------------------------------------------------
# * New method: average
#---------------------------------------------------------------------------
def average(float = false)
self.sum / [(float ? size.to_f : size.to_i), 1].max
end
#---------------------------------------------------------------------------
# * New method: next_item
#---------------------------------------------------------------------------
def next_item
item = self.shift
self.push(item)
item
end
#---------------------------------------------------------------------------
# * New method: previous_item
#---------------------------------------------------------------------------
def previous_item
item = self.pop
self.unshift(item)
item
end
end
#==============================================================================
# ** RPG::Troop::Page
#------------------------------------------------------------------------------
# This is the data class for battle events (pages).
#==============================================================================
class RPG::Troop::Page
#--------------------------------------------------------------------------
# * New method: note
#--------------------------------------------------------------------------
def note
return "" if !@list || @list.size <= 0
comment_list = []
@list.each do |item|
next unless item && (item.code == 108 || item.code == 408)
comment_list.push(item.parameters[0])
end
comment_list.join("\r\n")
end
end
#==============================================================================
# ** RPG::UsableItem
#------------------------------------------------------------------------------
# This is the superclass for skills and items.
#==============================================================================
class RPG::UsableItem < RPG::BaseItem
#--------------------------------------------------------------------------
# * New method: for_all_targets?
#--------------------------------------------------------------------------
def for_all_targets?
return false
end
#--------------------------------------------------------------------------
# * New method: element_set
#--------------------------------------------------------------------------
def element_set
[damage.element_id]
end
end
#==============================================================================
# ** RPG::Skill
#------------------------------------------------------------------------------
# This is the data class for skills.
#==============================================================================
class RPG::Skill < RPG::UsableItem
#--------------------------------------------------------------------------
# * New method: item?
#--------------------------------------------------------------------------
def item?
return false
end
#--------------------------------------------------------------------------
# * New method: skill?
#--------------------------------------------------------------------------
def skill?
return true
end
#--------------------------------------------------------------------------
# * New method: type_set
#--------------------------------------------------------------------------
def type_set
[stype_id]
end
end
#==============================================================================
# ** RPG::Item
#------------------------------------------------------------------------------
# This is the data class for items.
#==============================================================================
class RPG::Item < RPG::UsableItem
#--------------------------------------------------------------------------
# * New method: item?
#--------------------------------------------------------------------------
def item?
return true
end
#--------------------------------------------------------------------------
# * New method: skill?
#--------------------------------------------------------------------------
def skill?
return false
end
#--------------------------------------------------------------------------
# * New method: type_set
#--------------------------------------------------------------------------
def type_set
[itype_id]
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.
#==============================================================================
class << Cache
#--------------------------------------------------------------------------
# * Overwrite method: character
#--------------------------------------------------------------------------
def character(filename, hue = 0)
load_bitmap("Graphics/Characters/", filename, hue)
end
#--------------------------------------------------------------------------
# * New method: cache
#--------------------------------------------------------------------------
def cache
@cache
end
end
#==============================================================================
# ** BattleManager
#------------------------------------------------------------------------------
# This module handles the battle processing
#==============================================================================
class << BattleManager
#--------------------------------------------------------------------------
# * New method: all_battle_members
#--------------------------------------------------------------------------
def all_battle_members
$game_party.members + $game_troop.members
end
#--------------------------------------------------------------------------
# * New method: all_dead_members
#--------------------------------------------------------------------------
def all_dead_members
$game_party.dead_members + $game_troop.dead_members
end
#--------------------------------------------------------------------------
# * New method: all_movable_members
#--------------------------------------------------------------------------
def all_movable_members
$game_party.movable_members + $game_troop.movable_members
end
end
#==============================================================================
# ** Game_BattlerBase
#------------------------------------------------------------------------------
# This class handles battlers. It's used as a superclass of the Game_Battler
# classes.
#==============================================================================
class Game_BattlerBase
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :buffs
#--------------------------------------------------------------------------
# * New method: get_param
#--------------------------------------------------------------------------
def get_param(text)
case text.upcase
when "MAXHP" then self.mhp
when "MAXMP" then self.mmp
when "MAXTP" then self.max_tp
else eval("self.#{text.downcase}")
end
end
#--------------------------------------------------------------------------
# * New method: type
#--------------------------------------------------------------------------
def type
list = []
get_all_notes.scan(/<BATTLER TYPE: ((?:\w+ *,? *)+)>/i) do
$1.scan(/(\d+)/i) { list.push(make_symbol($1)) }
end
list.uniq
end
#--------------------------------------------------------------------------
# * New method: danger?
#--------------------------------------------------------------------------
def danger?
hp < mhp * 25 / 100
end
#--------------------------------------------------------------------------
# * New method: sprite
#--------------------------------------------------------------------------
def sprite
valid = SceneManager.scene_is?(Scene_Battle) && SceneManager.scene.spriteset
valid ? SceneManager.scene.spriteset.sprite(self) : nil
end
#--------------------------------------------------------------------------
# * New method: element_set
#--------------------------------------------------------------------------
def element_set(item)
element_set = item.element_set
element_set += atk_elements if item.damage.element_id < 0
element_set.delete(0)
element_set.compact
end
#--------------------------------------------------------------------------
# * New method: add_state_normal
#--------------------------------------------------------------------------
def add_state_normal(state_id, rate = 1, user = self)
chance = rate
chance *= state_rate(state_id)
chance *= luk_effect_rate(user)
add_state(state_id) if rand < chance
end
#--------------------------------------------------------------------------
# * New method: damaged?
#--------------------------------------------------------------------------
def damaged?
@result.hp_damage != 0 || @result.mp_damage != 0 || @result.tp_damage != 0
end
#--------------------------------------------------------------------------
# * New method: mtp
#--------------------------------------------------------------------------
def mtp
return 100
end
end
#==============================================================================
# ** Game_Battler
#------------------------------------------------------------------------------
# This class deals with battlers. It's used as a superclass of the Game_Actor
# and Game_Enemy classes.
#==============================================================================
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# * Overwrite method: item_effect_recover_hp
#--------------------------------------------------------------------------
def item_effect_recover_hp(user, item, effect)
value = item_value_recover_hp(user, item, effect).to_i
@result.hp_damage -= value
@result.success = true
self.hp += value
end
#--------------------------------------------------------------------------
# * Overwrite method: item_effect_recover_mp
#--------------------------------------------------------------------------
def item_effect_recover_mp(user, item, effect)
value = item_value_recover_mp(user, item, effect).to_i
@result.mp_damage -= value
@result.success = true if value != 0
self.mp += value
end
#--------------------------------------------------------------------------
# * Overwrite method: item_effect_gain_tp
#--------------------------------------------------------------------------
def item_effect_gain_tp(user, item, effect)
value = item_value_recover_tp(user, item, effect)
self.tp += value
end
#--------------------------------------------------------------------------
# * New method: item_value_recover_hp
#--------------------------------------------------------------------------
def item_value_recover_hp(user, item, effect)
value = (mhp * effect.value1 + effect.value2) * rec
value *= user.pha if item.is_a?(RPG::Item)
value
end
#--------------------------------------------------------------------------
# * New method: item_value_recover_mp
#--------------------------------------------------------------------------
def item_value_recover_mp(user, item, effect)
value = (mmp * effect.value1 + effect.value2) * rec
value *= user.pha if item.is_a?(RPG::Item)
value
end
#--------------------------------------------------------------------------
# * New method: item_value_recover_tp
#--------------------------------------------------------------------------
def item_value_recover_tp(user, item, effect)
effect.value1.to_i
end
#--------------------------------------------------------------------------
# * New method: cri_rate
#--------------------------------------------------------------------------
def cri_rate(user, item)
user.cri
end
#--------------------------------------------------------------------------
# * New method: cri_eva
#--------------------------------------------------------------------------
def cri_eva(user, item)
cev
end
#--------------------------------------------------------------------------
# * New method: setup_critical
#--------------------------------------------------------------------------
def setup_critical(user, item)
cri_rate(user, item) * (1 - cri_eva(user, item))
end
end
#==============================================================================
# ** Game_Enemy
#------------------------------------------------------------------------------
# This class handles enemy characters. It's used within the Game_Troop class
# ($game_troop).
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# * New method: id
#--------------------------------------------------------------------------
def id
@enemy_id
end
#--------------------------------------------------------------------------
# * New method: note
#--------------------------------------------------------------------------
def note
enemy ? enemy.note : ""
end
#--------------------------------------------------------------------------
# * New method: get_all_notes
#--------------------------------------------------------------------------
def get_all_notes(*args)
notes = ""
notes += note if !args.include?(:self)
states.compact.each {|state| notes += state.note } if !args.include?(:state)
notes
end
#--------------------------------------------------------------------------
# * New method: get_all_objects
#--------------------------------------------------------------------------
def get_all_objects(*args)
result = []
result += [self] if !args.include?(:self)
result += states.compact if !args.include?(:state)
result
end
#--------------------------------------------------------------------------
# * New method: level
#--------------------------------------------------------------------------
def level
return 1
end
#--------------------------------------------------------------------------
# * New method: skill_learn?
#--------------------------------------------------------------------------
def skill_learn?(skill)
skill.skill? && skills.include?(skill)
end
#--------------------------------------------------------------------------
# * New method: skills
#--------------------------------------------------------------------------
def skills
(enemy_actions | added_skills).sort.collect {|id| $data_skills[id] }
end
#--------------------------------------------------------------------------
# * New method: enemy_actions
#--------------------------------------------------------------------------
def enemy_actions
enemy.actions.collect {|action| action.skill_id }
end
end
#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
# This class handles actors. It's used within the Game_Actors class
# ($game_actors) and referenced by the Game_Party class ($game_party).
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# * New method: note
#--------------------------------------------------------------------------
def note
actor ? actor.note : ""
end
#--------------------------------------------------------------------------
# * New method: hue
#--------------------------------------------------------------------------
def hue
@hue ? @hue : 0
end
#--------------------------------------------------------------------------
# * New method: get_all_notes
#--------------------------------------------------------------------------
def get_all_notes(*args)
notes = ""
notes += note if !args.include?(:self)
notes += self.class.note if !args.include?(:class)
equips.compact.each {|equip| notes += equip.note } if !args.include?(:equip)
states.compact.each {|state| notes += state.note } if !args.include?(:state)
notes
end
#--------------------------------------------------------------------------
# * New method: get_all_objects
#--------------------------------------------------------------------------
def get_all_objects(*args)
result = []
result += [self] if !args.include?(:self)
result += [self.class] if !args.include?(:class)
result += equips.compact if !args.include?(:equip)
result += states.compact if !args.include?(:state)
result
end
#--------------------------------------------------------------------------
# * New method: in_active_party?
#--------------------------------------------------------------------------
def in_active_party?
$game_party.battle_members.include?(self)
end
#--------------------------------------------------------------------------
# * New method: in_reserve_party?
#--------------------------------------------------------------------------
def in_reserve_party?
$game_party.reserve_members.include?(self)
end
#--------------------------------------------------------------------------
# * New method: in_party?
#--------------------------------------------------------------------------
def in_party?
$game_party.all_members.include?(self)
end
#--------------------------------------------------------------------------
# * New method: map_animation
#--------------------------------------------------------------------------
def map_animation(id)
$game_map.actors.each do |member|
member.animation_id = id if member.actor == self
end
end
#--------------------------------------------------------------------------
# * New method: on_damage_floor
#--------------------------------------------------------------------------
def on_damage_floor?
$game_player.on_damage_floor?
end
end
#==============================================================================
# ** Game_Unit
#------------------------------------------------------------------------------
# This class handles units. It's used as a superclass of the Game_Party and
# Game_Troop classes.
#==============================================================================
class Game_Unit
#--------------------------------------------------------------------------
# * New method: refresh
#--------------------------------------------------------------------------
def refresh
members.each {|member| member.refresh }
end
end
#==============================================================================
# ** Game_Party
#------------------------------------------------------------------------------
# This class handles the party. It includes information on amount of gold
# and items. The instance of this class is referenced by $game_party.
#==============================================================================
class Game_Party < Game_Unit
#--------------------------------------------------------------------------
# * New method: average_level
#--------------------------------------------------------------------------
def average_level
battle_members.collect {|actor| actor.level }.average
end
#--------------------------------------------------------------------------
# * New method: reserve_members
#--------------------------------------------------------------------------
def reserve_members
all_members - battle_members
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
#--------------------------------------------------------------------------
# * New method: event_list
#--------------------------------------------------------------------------
def event_list
events.values
end
#--------------------------------------------------------------------------
# * New method: note
#--------------------------------------------------------------------------
def note
@map ? @map.note : ""
end
#--------------------------------------------------------------------------
# * New method: vehicles
#--------------------------------------------------------------------------
def vehicles
@vehicles
end
#--------------------------------------------------------------------------
# * New method: map_events
#--------------------------------------------------------------------------
def map_events
@map.events
end
#--------------------------------------------------------------------------
# * New method: actors
#--------------------------------------------------------------------------
def actors
[$game_player] + $game_player.followers.visible_followers
end
end
#==============================================================================
# ** Game_CharacterBase
#------------------------------------------------------------------------------
# This class deals with characters. Common to all characters, stores basic
# data, such as coordinates and graphics. It's used as a superclass of the
# Game_Character class.
#==============================================================================
class Game_CharacterBase
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :move_speed
attr_accessor :move_frequency
#--------------------------------------------------------------------------
# * New method: player?
#--------------------------------------------------------------------------
def player?
return false
end
#--------------------------------------------------------------------------
# * New method: event?
#--------------------------------------------------------------------------
def event?
return false
end
#--------------------------------------------------------------------------
# * New method: follower?
#--------------------------------------------------------------------------
def follower?
return false
end
#--------------------------------------------------------------------------
# * New method: vehicle?
#--------------------------------------------------------------------------
def vehicle?
return false
end
#--------------------------------------------------------------------------
# * New method: frames
#--------------------------------------------------------------------------
def frames
return 3
end
#--------------------------------------------------------------------------
# * New method: hue
#--------------------------------------------------------------------------
def hue
@hue ? @hue : 0
end
end
#==============================================================================
# ** Game_Character
#------------------------------------------------------------------------------
# This class deals with characters. It's used as a superclass of the
# Game_Player and Game_Event classes.
#==============================================================================
class Game_Character < Game_CharacterBase
#--------------------------------------------------------------------------
# * New method: move_toward_position
#--------------------------------------------------------------------------
def move_toward_position(x, y)
sx = distance_x_from(x)
sy = distance_y_from(y)
if sx.abs > sy.abs
move_straight(sx > 0 ? 4 : 6)
move_straight(sy > 0 ? 8 : 2) if !@move_succeed && sy != 0
elsif sy != 0
move_straight(sy > 0 ? 8 : 2)
move_straight(sx > 0 ? 4 : 6) if !@move_succeed && sx != 0
end
end
#--------------------------------------------------------------------------
# * New method: move_toward_position
#--------------------------------------------------------------------------
def turn_toward_position(x, y)
sx = distance_x_from(x)
sy = distance_y_from(y)
if sx.abs > sy.abs
set_direction(sx > 0 ? 4 : 6)
elsif sy != 0
set_direction(sy > 0 ? 8 : 2)
end
end
end
#==============================================================================
# ** Game_Player
#------------------------------------------------------------------------------
# This class handles the player.
# The instance of this class is referenced by $game_map.
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# * New method: player?
#--------------------------------------------------------------------------
def player?
return true
end
#--------------------------------------------------------------------------
# * New method: perform_transfer
#--------------------------------------------------------------------------
def new_map_id
@new_map_id
end
#--------------------------------------------------------------------------
# * New method: hue
#--------------------------------------------------------------------------
def hue
actor ? actor.hue : 0
end
end
#==============================================================================
# ** Game_Follower
#------------------------------------------------------------------------------
# This class handles the followers. Followers are the actors of the party
# that follows the leader in a line. It's used within the Game_Followers class.
#==============================================================================
class Game_Follower < Game_Character
#--------------------------------------------------------------------------
# * New method: follower?
#--------------------------------------------------------------------------
def follower?
return true
end
#--------------------------------------------------------------------------
# * New method: index
#--------------------------------------------------------------------------
def index
@member_index
end
#--------------------------------------------------------------------------
# * New method: gathering?
#--------------------------------------------------------------------------
def gathering?
$game_player.followers.gathering? && !gather?
end
end
#==============================================================================
# ** Game_Followers
#------------------------------------------------------------------------------
# This class handles the followers. It's a wrapper for the built-in class
# "Array." It's used within the Game_Player class.
#==============================================================================
class Game_Followers
#--------------------------------------------------------------------------
# * New method: get_actor
#--------------------------------------------------------------------------
def get_actor(id)
list = [$game_player] + visible_followers
list.select {|follower| follower.actor && follower.actor.id == id }.first
end
#--------------------------------------------------------------------------
# * Method fix: visble_folloers
#--------------------------------------------------------------------------
unless method_defined?(:visible_followers)
def visible_followers; visible_folloers; end
end
end
#==============================================================================
# ** Game_Vehicle
#------------------------------------------------------------------------------
# This class handles vehicles. It's used within the Game_Map class. If there
# are no vehicles on the current map, the coordinates is set to (-1,-1).
#==============================================================================
class Game_Vehicle < Game_Character
#--------------------------------------------------------------------------
# * New method: vehicle?
#--------------------------------------------------------------------------
def vehicle?
return true
end
#--------------------------------------------------------------------------
# * New method: map_id
#--------------------------------------------------------------------------
def map_id
@map_id
end
#--------------------------------------------------------------------------
# * New method: type
#--------------------------------------------------------------------------
def type
@type
end
#--------------------------------------------------------------------------
# * New method: aerial?
#--------------------------------------------------------------------------
def aerial?
type == :airship
end
#--------------------------------------------------------------------------
# * New method: above?
#--------------------------------------------------------------------------
def above?
aerial?
end
end
#==============================================================================
# ** Game_Event
#------------------------------------------------------------------------------
# This class deals with events. It handles functions including event page
# switching via condition determinants, and running parallel process events.
# It's used within the Game_Map class.
#==============================================================================
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# * New method: name
#--------------------------------------------------------------------------
def name
@event.name
end
#--------------------------------------------------------------------------
# * New method: event?
#--------------------------------------------------------------------------
def event?
return true
end
#--------------------------------------------------------------------------
# * New method: erased?
#--------------------------------------------------------------------------
def erased?
@erased
end
#--------------------------------------------------------------------------
# * New method: note
#--------------------------------------------------------------------------
def note
return "" if !@page || !@page.list || @page.list.size <= 0
return @notes if @notes && @page.list == @note_page
@note_page = @page.list.dup
comment_list = []
@page.list.each do |item|
next unless item && (item.code == 108 || item.code == 408)
comment_list.push(item.parameters[0])
end
@notes = comment_list.join("\r\n")
@notes
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: command_108
#--------------------------------------------------------------------------
alias :command_108_ve_basic_module :command_108
def command_108
command_108_ve_basic_module
comment_call
end
#--------------------------------------------------------------------------
# * New method: comment_call
#--------------------------------------------------------------------------
def comment_call
end
#--------------------------------------------------------------------------
# * New method: note
#--------------------------------------------------------------------------
def note
@comments ? @comments.join("\r\n") : ""
end
end
#==============================================================================
# ** Game_Animation
#------------------------------------------------------------------------------
# Classe that handles Animation data
#==============================================================================
class Game_Animation
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :ox
attr_accessor :oy
attr_accessor :rate
attr_accessor :zoom
attr_accessor :loop
attr_accessor :type
attr_accessor :map_x
attr_accessor :map_y
attr_accessor :mirror
attr_accessor :follow
attr_accessor :height
attr_accessor :bitmap1
attr_accessor :bitmap2
attr_accessor :sprites
attr_accessor :duration
attr_accessor :direction
attr_accessor :duplicated
#--------------------------------------------------------------------------
# * New method: initialize
#--------------------------------------------------------------------------
def initialize(animation, mirror, user = nil)
@animation = animation
@rate = animation.name =~ /<RATE: ([+-]?\d+)>/i ? [$1.to_i, 1].max : 4
@zoom = animation.name =~ /<ZOOM: (\d+)%?>/i ? $1.to_i / 100.0 : 1.0
@follow = animation.name =~ /<FOLLOW>/i ? true : false
@mirror = mirror
@duration = frame_max * @rate
@direction = user.anim_direction if user
@sprites = []
bellow = animation.name =~ /<BELLOW>/i
above = animation.name =~ /<ABOVE>/i
@height = bellow ? -1 : above ? 300 : 1
end
#--------------------------------------------------------------------------
# * New method: data
#--------------------------------------------------------------------------
def data
@animation
end
#--------------------------------------------------------------------------
# * New method: id
#--------------------------------------------------------------------------
def id
@animation.id
end
#--------------------------------------------------------------------------
# * New method: name
#--------------------------------------------------------------------------
def name
@animation.name
end
#--------------------------------------------------------------------------
# * New method: frame_max
#--------------------------------------------------------------------------
def frame_max
@animation.frame_max
end
#--------------------------------------------------------------------------
# * New method: position
#--------------------------------------------------------------------------
def position
@animation.position
end
#--------------------------------------------------------------------------
# * New method: animation1_name
#--------------------------------------------------------------------------
def animation1_name
@animation.animation1_name
end
#--------------------------------------------------------------------------
# * New method: animation2_name
#--------------------------------------------------------------------------
def animation2_name
@animation.animation2_name
end
#--------------------------------------------------------------------------
# * New method: animation1_hue
#--------------------------------------------------------------------------
def animation1_hue
@animation.animation1_hue
end
#--------------------------------------------------------------------------
# * New method: animation2_hue
#--------------------------------------------------------------------------
def animation2_hue
@animation.animation2_hue
end
#--------------------------------------------------------------------------
# * New method: frames
#--------------------------------------------------------------------------
def frames
@animation.frames
end
#--------------------------------------------------------------------------
# * New method: timings
#--------------------------------------------------------------------------
def timings
@animation.timings
end
end
#==============================================================================
# ** Sprite_Character
#------------------------------------------------------------------------------
# This sprite is used to display characters. It observes a instance of the
# Game_Character class and automatically changes sprite conditions.
#==============================================================================
class Sprite_Character < Sprite_Base
#--------------------------------------------------------------------------
# * Overwrite method: set_character_bitmap
#--------------------------------------------------------------------------
def set_character_bitmap
update_character_info
set_bitmap
set_bitmap_position
end
#--------------------------------------------------------------------------
# * New method: center_y
#--------------------------------------------------------------------------
def actor?
@character.is_a?(Game_Player) || @character.is_a?(Game_Follower)
end
#--------------------------------------------------------------------------
# * New method: center_y
#--------------------------------------------------------------------------
def actor
actor? ? @character.actor : nil
end
#--------------------------------------------------------------------------
# * New method: update_character_info
#--------------------------------------------------------------------------
def update_character_info
end
#--------------------------------------------------------------------------
# * New method: hue
#--------------------------------------------------------------------------
def hue
@character.hue
end
#--------------------------------------------------------------------------
# * New method: set_bitmap
#--------------------------------------------------------------------------
def set_bitmap
self.bitmap = Cache.character(set_bitmap_name, hue)
end
#--------------------------------------------------------------------------
# * New method: set_bitmap_name
#--------------------------------------------------------------------------
def set_bitmap_name
@character_name
end
#--------------------------------------------------------------------------
# * New method: set_bitmap_position
#--------------------------------------------------------------------------
def set_bitmap_position
sign = get_sign
if sign && sign.include?('$')
@cw = bitmap.width / @character.frames
@ch = bitmap.height / 4
else
@cw = bitmap.width / (@character.frames * 4)
@ch = bitmap.height / 8
end
self.ox = @cw / 2
self.oy = @ch
end
#--------------------------------------------------------------------------
# * New method: get_sign
#--------------------------------------------------------------------------
def get_sign
@character_name[/^[\!\$]./]
end
end
#==============================================================================
# ** Sprite_Battler
#------------------------------------------------------------------------------
# This sprite is used to display battlers. It observes a instance of the
# Game_Battler class and automatically changes sprite conditions.
#==============================================================================
class Sprite_Battler < Sprite_Base
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :dmg_mirror
#--------------------------------------------------------------------------
# * New method: center_x
#--------------------------------------------------------------------------
def center_x
self.ox
end
#--------------------------------------------------------------------------
# * New method: center_y
#--------------------------------------------------------------------------
def center_y
self.oy / 2
end
end
#==============================================================================
# ** Spriteset_Battle
#------------------------------------------------------------------------------
# This class brings together battle screen sprites. It's used within the
# Scene_Battle class.
#==============================================================================
class Spriteset_Battle
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :viewport1
#--------------------------------------------------------------------------
# * New method: sprite
#--------------------------------------------------------------------------
def sprite(subject)
battler_sprites.compact.select {|sprite| sprite.battler == subject }.first
end
end
#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
# This is a superclass of all windows in the game.
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# * Alias method: convert_escape_characters
#--------------------------------------------------------------------------
alias :convert_escape_ve_basic_module :convert_escape_characters
def convert_escape_characters(text)
result = text.to_s.clone
result = text_replace(result)
result = convert_escape_ve_basic_module(text)
result
end
#--------------------------------------------------------------------------
# * New method: text_replace
#--------------------------------------------------------------------------
def text_replace(result)
result.gsub!(/\r/) { "" }
result.gsub!(/\\/) { "\e" }
result
end
end
#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
# This class performs battle screen processing.
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :subject
attr_reader :spriteset
end
#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
# This class performs map screen processing.
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :spriteset
end
Спойлер Victor Engine - Light Effects:Код:#==============================================================================
# ** Victor Engine - Light Effects
#------------------------------------------------------------------------------
# Author : Victor Sant
#
# Version History:
# v 1.00 - 2011.12.21 > First release
# v 1.01 - 2011.12.23 > Compatibility with Diagonal Movement
# v 1.02 - 2011.12.24 > Better checks for images bigger than screen
# v 1.03 - 2011.12.27 > Fixed bug when teleporting to same map
# v 1.04 - 2011.12.30 > Faster Regular Expressions
# v 1.05 - 2012.01.04 > Fixed lantern direction bug
# > Fixed load fail when lights ON
# v 1.06 - 2012.01.07 > Fixed light opacity change not updating
# v 1.07 - 2012.01.13 > Fixed update delay when exiting the menu
# v 1.08 - 2012.01.15 > Fixed the positive sign on some Regular Expressions
# > Fixed the Regular Expressions problem with "" and “”
# v 1.09 - 2012.05.21 > Compatibility with Map Turn Battle
# v 1.10 - 2012.07.24 > Compatibility with Moving Platform
# > Changed actor indexing for lantern (now start at 1)
# v 1.11 - 2012.08.02 > Compatibility with Basic Module 1.27
# v 1.12 - 2013.01.07 > Fixed issue with actor lantern and map transfer
#------------------------------------------------------------------------------
# This scripts allow to add varied light effects to the maps. But it works
# different from other scripts with this function.
# Normally, light effect scripts add images above the events, and then the
# screen is tone is changed, with the images staying bellow the darker layer.
# This script add an new darkened layer, and apply the light effect images
# on this layer.
#------------------------------------------------------------------------------
# Compatibility
# Requires the script 'Victor Engine - Basic Module' v 1.27 or higher
#
# * Alias methods
# class Game_Map
# def setup(map_id)
#
# class Game_CharacterBase
# def init_public_members
# def update
#
# class Game_Event < Game_Character
# def clear_starting_flag
#
# class Spriteset_Map
# def initialize
# def update
# def dispose
#
# class Scene_Map
# def pre_transfer
#
# 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 lights must be placed on the folder "Graphics/Lights". Create a folder
# named "Lights" on the Graphics folder.
#
#------------------------------------------------------------------------------
# Comment calls note tags:
# Tags to be used in events comment box, works like a script call.
#
# <create shade>
# setting
# </create shade>
# Create a shade effect on the map, add the following values to the setting.
# opacity: x : opacity (0-255)
# red: x : red tone (0-255, can be negative)
# green: x : green tone (0-255, can be negative)
# blue: x : blue tone (0-255, can be negative)
# blend: x : fog blend type (0: normal, 1: add, 2: subtract)
#
# <actor light> <event light> <vehicle light>
# setting setting setting
# </actor light> </event light> </vehicle ligth>
# Create a light effect on actor, event or vehicle, add the following
# values to the info. The ID, index and name must be added, other values
# are optional.
# id: x : ligh effect ID
# name: "x" : ligh effect graphic filename ("filename")
# index: x : actor index, event id or (0: boat, 1: ship, 2: airship)
# opacity: x : light opacity (0-255)
# pos x: x : coordinate X adjust
# pos y: x : coordinate Y adjust
# var: x : light opacity variation
# speed: x : light variation speed
# zoom: x : ligh effect zoom (100 = default size)
#
# <map light>
# setting
# </map light>
# Create a light effect on a specific map postion, add the following
# values to the info. The ID, map_x, map_y and name must be added, other
# values are optional.
# id: x : ligh effect ID
# name: "x" : ligh effect graphic filename ("filename")
# map x: x : map X coordinate
# map y: x : map Y coordinate
# opacity: x : light opacity (0-255)
# pos x: x : coordinate X adjust
# pos y: x : coordinate Y adjust
# var: x : light opacity variation
# speed: x : light variation speed
# zoom: x : ligh effect zoom (100 = default size)
#
# <actor lantern i: o>
# <event lantern i: o>
# <vehicle lantern i: o>
# Call a lantern on the target character, lanterns are effets that
# lights the front of the character
# i : actor index, event id or (0: boat, 1: ship, 2: airship)
# o : light opacity (0-255)
#
# <light opacity id: o, d>
# This tag allows to change the light opacity gradually
# i : light effect ID
# o : new opacity (0-255)
# d : wait until complete change (60 frames = 1 second)
#
# <shade opacity: o, d>
# This tag allows to change the shade opacity gradually
# o : new opacity (0-255)
# d : wait until complete change (60 frames = 1 second)
#
# <shade tone: r, g, b, d>
# This tag allows to change the shade opacity gradually
# r : red tone (0-255, can be negative)
# g : green tone (0-255, can be negative)
# b : blue tone (0-255, can be negative)
# d : wait until complete change (60 frames = 1 second)
#
# <remove light: id>
# This tag allows remove a light effect
# id: ligh effect ID
#
#------------------------------------------------------------------------------
# Maps note tags:
# Tags to be used on the Maps note box in the database
#
# <create shade>
# setting
# </create shade>
# Create a shade effect on the map, add the following values to the setting.
# opacity: x : opacity (0-255)
# red: x : red tone (0-255, can be negative)
# green: x : green tone (0-255, can be negative)
# blue: x : blue tone (0-255, can be negative)
# blend: x : fog blend type (0: normal, 1: add, 2: subtract)
#
# <actor light> <event light> <vehicle light>
# setting setting setting
# </actor light> </event light> </vehicle ligth>
# Create a light effect on actor, event or vehicle, add the following
# values to the info. The ID, index and name must be added, other values
# are optional.
# id: x : ligh effect ID
# name: "x" : ligh effect graphic filename ("filename")
# index: x : actor index, event id or (0: boat, 1: ship, 2: airship)
# opacity: x : light opacity (0-255)
# pos x: x : coordinate X adjust
# pos y: x : coordinate Y adjust
# var: x : light opacity variation
# speed: x : light variation speed
# zoom: x : ligh effect zoom (100 = default size)
#
# <map light>
# setting
# </map light>
# Create a light effect on a specific map postion, add the following
# values to the info. The ID, map_x, map_y and name must be added, other
# values are optional.
# id: x : ligh effect ID
# name: "x" : ligh effect graphic filename ("filename")
# map x: x : map X coordinate
# map y: x : map Y coordinate
# opacity: x : light opacity (0-255)
# pos x: x : coordinate X adjust
# pos y: x : coordinate Y adjust
# var: x : light opacity variation
# speed: x : light variation speed
# zoom: x : ligh effect zoom (100 = default size)
#
# <actor lantern i: o>
# <event lantern i: o>
# <vehicle lantern i: o>
# Call a lantern on the target character, lanterns are effets that
# lights the front of the character
# i : actor index, event id or (0: boat, 1: ship, 2: airship)
# o : light opacity (0-255)
#
#------------------------------------------------------------------------------
# Comment boxes note tags:
# Tags to be used on events Comment boxes. They're different from the
# comment call, they're called always the even refresh.
#
# <custom light>
# settings
# </custom light>
# Create a custom light effect on actor, event or vehicle, add the following
# values to the settings. The name must be added, other values
# are optional.
# name: "x" : ligh effect graphic filename ("filename")
# opacity: x : light opacity (0-255)
# pos x: x : coordinate X adjust
# pos y: x : coordinate Y adjust
# var: x : light opacity variation
# speed: x : light variation speed
# zoom: x : ligh effect zoom (100 = default size)
#
# <simple light: o>
# <simple lamp: o>
# <simple torch: o>
# <simple window 1: o>
# <simple window 2: o>
# Simple light shortcuts
# o : new opacity (0-255)
#
# <flash light: o>
# <flash lamp: o>
# <flash torch: o>
# <flash window 1: o>
# <flash window 2: o>
# Flashing light shortcuts
# o : new opacity (0-255)
#
# <lantern: o>
# Lanterns shortcut
# o : new opacity (0-255)
#
#------------------------------------------------------------------------------
# Additional instructions:
#
# The lights are placed on the shade, so you *must* create a shade in order
# to display the lights. No shade, no lights.
#
# The IDs of the light effects are used as identifiers. Don't use the
# same value for different light spots, if you do so, one light will
# replace the other. Also the IDs are used as referece to when
# removing lights and changing light opacity.
#
# The actor lanter use the actor position in the party, NOT the actor ID.
# So the if you want a lantern for the first character, use
# <actor lantern 1: o> (o = opacity)
#
# About the error on line 1062: this is a USER error made by BAD setup.
# this happen when you assign a light effect to a event id that don't exist
# at the map. So please: DON'T REPORT IT ANYMORE.
#
#==============================================================================
#==============================================================================
# ** Victor Engine
#------------------------------------------------------------------------------
# Setting module for the Victor Engine
#==============================================================================
module Victor_Engine
#--------------------------------------------------------------------------
# * 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
$imported ||= {}
$imported[:ve_light_effects] = 1.11
Victor_Engine.required(:ve_light_effects, :ve_basic_module, 1.27, :above)
Victor_Engine.required(:ve_light_effects, :ve_map_battle, 1.00, :bellow)
#==============================================================================
# ** 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: lights
#--------------------------------------------------------------------------
def self.lights(filename)
self.load_bitmap('Graphics/Lights/', filename)
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 :lights
attr_reader :shade
attr_accessor :remove_light
#--------------------------------------------------------------------------
# * Alias method: clear
#--------------------------------------------------------------------------
alias :clear_ve_light_effects :clear
def clear
clear_ve_light_effects
clear_lights
end
#--------------------------------------------------------------------------
# * New method: clear_lights
#--------------------------------------------------------------------------
def clear_lights
@lights = {}
@remove_light = []
@shade = Game_ShadeEffect.new
end
#--------------------------------------------------------------------------
# * New method: lights
#--------------------------------------------------------------------------
def lights
@lights ||= {}
end
#--------------------------------------------------------------------------
# * New method: remove_light
#--------------------------------------------------------------------------
def remove_light
@remove_light ||= []
end
#--------------------------------------------------------------------------
# * New method: shade
#--------------------------------------------------------------------------
def shade
@shade ||= Game_ShadeEffect.new
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
#--------------------------------------------------------------------------
# * Alias method: setup
#--------------------------------------------------------------------------
alias :setup_ve_light_effects :setup
def setup(map_id)
setup_ve_light_effects(map_id)
setup_lights_effect
end
#--------------------------------------------------------------------------
# * New method: setup_lights_effect
#--------------------------------------------------------------------------
def setup_lights_effect
setup_map_shade(note)
setup_map_lights(:actor, note)
setup_map_lights(:event, note)
setup_map_lights(:vehicle, note)
setup_map_lights(:map, note)
setup_map_lantern(:actor, note)
setup_map_lantern(:event, note)
setup_map_lantern(:vehicle, note)
end
#--------------------------------------------------------------------------
# * New method: setup_map_shade
#--------------------------------------------------------------------------
def setup_map_shade(text)
if text =~ get_all_values("CREATE SHADE")
info = $1.dup
shade = @screen.shade
shade.show
shade.opacity = info =~ /OPACITY: (\d+)/i ? $1.to_i : 192
shade.blend = info =~ /BLEND: (\d+)/i ? $1.to_i : 2
red = info =~ /RED: (\d+)/i ? $1.to_i : 0
green = info =~ /GREEN: (\d+)/i ? $1.to_i : 0
blue = info =~ /BLUE: (\d+)/i ? $1.to_i : 0
shade.set_color(red, green, blue)
end
end
#--------------------------------------------------------------------------
# * New method: setup_map_lights
#--------------------------------------------------------------------------
def setup_map_lights(type, text)
value = get_regexp_value(type)
text.scan(get_all_values("#{value} LIGHT")) do
light = setup_light($1.dup, type)
@screen.lights[light.id] = light if light.id
end
end
#--------------------------------------------------------------------------
# * New method: setup_map_lantern
#--------------------------------------------------------------------------
def setup_map_lantern(type, text)
value = get_regexp_value(type)
regexp = /<#{value} LANTERN (\d+): (\d+)>/i
text.scan(regexp) do |index, opacity|
target = get_font(type, index.to_i)
next unless target
target.lantern = opacity.to_i
target.update_lantern
end
end
#--------------------------------------------------------------------------
# * New method: get_regexp_value
#--------------------------------------------------------------------------
def get_regexp_value(type)
case type
when :actor then "ACTOR"
when :event then "EVENT"
when :vehicle then "VEHICLE"
when :map then "MAP"
end
end
#--------------------------------------------------------------------------
# * New method: setup_light
#--------------------------------------------------------------------------
def setup_light(info, type)
light = Game_LightEffect.new
light.name = info =~ /NAME: #{get_filename}/i ? $1.dup : ""
light.id = info =~ /ID: (\w+)/i ? $1.to_s : 0
light.id = info =~ /ID: (\d+)/i ? $1.to_i : light.id
light.x = info =~ /POS X: ([+-]?\d+)/i ? $1.to_i : 0
light.y = info =~ /POS Y: ([+-]?\d+)/i ? $1.to_i : 0
light.speed = info =~ /SPEED: (\d+)/i ? $1.to_i : 0
light.zoom = info =~ /ZOOM: (\d+)/i ? $1.to_f : 100.0
light.opacity = info =~ /OPACITY: (\d+)/i ? $1.to_i : 192
light.variance = info =~ /VAR: (\d+)/i ? $1.to_i : 0
if type == :map
map_x = info =~ /MAP X: (\d+)/i ? $1.to_i : 0
map_y = info =~ /MAP Y: (\d+)/i ? $1.to_i : 0
light.info = {x: map_x, y: map_y}
else
index = info =~ /INDEX: (\d+)/i ? $1.to_i : 0
light.info = {type => index}
end
light
end
#--------------------------------------------------------------------------
# * New method: set_light
#--------------------------------------------------------------------------
def set_light(id, name, info, op = 0, x = 0, y = 0, v = 0, s = 0, z = 100)
light = Game_LightEffect.new
light.id = id
light.name = name
light.info = info
light.opacity = op.to_i
light.x = x.to_i
light.y = y.to_i
light.variance = v.to_i
light.speed = s.to_i
light.zoom = z.to_f
light
end
#--------------------------------------------------------------------------
# * New method: get_font
#--------------------------------------------------------------------------
def get_font(type, i)
case type
when :actor then actors[i - 1]
when :event then events[i]
when :vehicle then vehicles[i]
end
end
end
#==============================================================================
# ** Game_CharacterBase
#------------------------------------------------------------------------------
# This class deals with characters. Common to all characters, stores basic
# data, such as coordinates and graphics. It's used as a superclass of the
# Game_Character class.
#==============================================================================
class Game_CharacterBase
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :lantern
#--------------------------------------------------------------------------
# * Alias method: init_public_members
#--------------------------------------------------------------------------
alias :init_public_members_ve_light_effects :init_public_members
def init_public_members
init_public_members_ve_light_effects
@lantern = 0
end
#--------------------------------------------------------------------------
# * Alias method: update
#--------------------------------------------------------------------------
alias :update_ve_light_effects :update
def update
update_ve_light_effects
update_lantern
end
#--------------------------------------------------------------------------
# * New method: update_lantern
#--------------------------------------------------------------------------
def update_lantern(forced = false)
diag = $imported[:ve_diagonal_move] && diagonal?
if @lantern != 0 && ((!diag && @lantern_direction != @direction) ||
(diag && @lantern_direction != @diagonal) || forced)
@lantern_direction = (diag ? @diagonal : @direction)
light = setup_lantern
$game_map.screen.lights[light.id] = light
elsif @lantern == 0 && @lantern_direction
id = event? ? "EL#{@id}" : "AL#{@id}"
$game_map.screen.remove_light.push(id) if $game_map.screen.remove_light
@lantern_direction = nil
end
end
#--------------------------------------------------------------------------
# * New method: setup_lantern
#--------------------------------------------------------------------------
def setup_lantern
id = event? ? "EL#{@id}" : "AL#{@id}"
type = event? ? :event : :actor
case @lantern_direction
when 1
name = 'lantern_downleft'
value = [id, name, {type => @id}, @lantern, -48, 48]
when 3
name = 'lantern_downright'
value = [id, name, {type => @id}, @lantern, 48, 48]
when 2
name = 'lantern_down'
value = [id, name, {type => @id}, @lantern, 0, 64]
when 4
name = 'lantern_left'
value = [id, name, {type => @id}, @lantern, -64, 0]
when 6
name = 'lantern_right'
value = [id, name, {type => @id}, @lantern, 64, 0]
when 7
name = 'lantern_upleft'
value = [id, name, {type => @id}, @lantern, -48, -48]
when 8
name = 'lantern_up'
value = [id, name, {type => @id}, @lantern, 0, -64,]
when 9
name = 'lantern_upright'
value = [id, name, {type => @id}, @lantern, 48, -48]
end
$game_map.set_light(*value)
end
end
#==============================================================================
# ** Game_Event
#------------------------------------------------------------------------------
# This class deals with events. It handles functions including event page
# switching via condition determinants, and running parallel process events.
# It's used within the Game_Map class.
#==============================================================================
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# * Alias method: clear_starting_flag
#--------------------------------------------------------------------------
alias :clear_starting_flag_ve_light_effects :clear_starting_flag
def clear_starting_flag
clear_starting_flag_ve_light_effects
@lantern = 0
$game_map.screen.remove_light.push("EV#{@id}")
refresh_lights if @page
end
#--------------------------------------------------------------------------
# * New method: refresh_lights
#--------------------------------------------------------------------------
def refresh_lights
case note
when /<SIMPLE LIGHT: (\d+)?>/i
set_light("EV#{@id}", "light", $1 ? $1 : 255)
when /<SIMPLE LAMP: (\d+)?>/i
set_light("EV#{@id}", "lamp", $1 ? $1 : 255)
when /<SIMPLE TORCH: (\d+)?>/i
set_light("EV#{@id}", "torch", $1)
when /<SIMPLE WINDOW (\d+): (\d+)?>/i
adj = $1 == "1" ? 0 : 14
set_light("EV#{@id}", "window", $2 ? $2 : 255, 0, 0, 0, adj)
when /<FLASH LIGHT: (\d+)?>/i
set_light("EV#{@id}", "light", $1 ? $1 : 255, 30, 1)
when /<FLASH LAMP: (\d+)?>/i
set_light("EV#{@id}", "lamp", $1 ? $1 : 255, 30, 1)
when /<FLASH TORCH: (\d+)?>/i
set_light("EV#{@id}", "torch", $1 ? $1 : 255, 30, 1)
when /<FLASH WINDOW (\d+): (\d+)?>/i
adj = $1 == "1" ? 0 : 14
set_light("EV#{@id}", "window", $2 ? $2 : 255, 30, 1, 0, adj)
when get_all_values("CUSTOM LIGHT")
info = $1.dup
n = info =~ /NAME: #{get_filename}/i ? $1.dup : ""
x = info =~ /POS X: ([+-]?\d+)/i ? $1.to_i : 0
y = info =~ /POS Y: ([+-]?\d+)/i ? $1.to_i : 0
s = info =~ /SPEED: (\d+)/i ? $1.to_i : 0
z = info =~ /ZOOM: (\d+)/i ? $1.to_f : 100.0
o = info =~ /OPACITY: (\d+)/i ? $1.to_i : 192
v = info =~ /VAR: (\d+)/i ? $1.to_i : 0
set_light("EV#{@id}", n, o, v, s, x, y, z)
when /<LANTERN(?:: (\d+))?>/i
@lantern = ($1 ? $1.to_i : 255)
end
end
#--------------------------------------------------------------------------
# * New method: set_light
#--------------------------------------------------------------------------
def set_light(id, name, op = 255, v = 0, s = 0, x = 0, y = 0, z = 100)
value = [id, name, {:event => @id}, op, x, y, v, s, z].compact
$game_map.screen.lights[id] = $game_map.set_light(*value)
$game_map.screen.remove_light.delete(id)
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_light_effects :comment_call
def comment_call
call_create_lights
call_change_shade_opacity
call_change_shade_tone
call_change_light_opacity
call_remove_light
comment_call_ve_light_effects
end
#--------------------------------------------------------------------------
# * New method: create_lights
#--------------------------------------------------------------------------
def call_create_lights
$game_map.setup_map_shade(note)
$game_map.setup_map_lights(:actor, note)
$game_map.setup_map_lights(:event, note)
$game_map.setup_map_lights(:vehicle, note)
$game_map.setup_map_lights(:map, note)
$game_map.setup_map_lantern(:actor, note)
$game_map.setup_map_lantern(:event, note)
$game_map.setup_map_lantern(:vehicle, note)
end
#--------------------------------------------------------------------------
# * New method: call_change_shade_opacity
#--------------------------------------------------------------------------
def call_change_shade_opacity
return if !$game_map.screen.shade.visible
note.scan(/<SHADE OPACITY: ((?:\d+,? *){2})>/i) do
if $1 =~ /(\d+) *,? *(\d+)?/i
duration = $2 ? $2.to_i : 0
$game_map.screen.shade.change_opacity($1.to_i, duration)
end
end
end
#--------------------------------------------------------------------------
# * New method: call_change_shade_tone
#--------------------------------------------------------------------------
def call_change_shade_tone
return if !$game_map.screen.shade.visible
note.scan(/<SHADE TONE: ((?:\d+,? *){4})>/i) do
if $1 =~ /(\d+) *, *(\d+) *, *(\d+) *, *(\d+)/i
$game_map.screen.shade.change_color($1.to_i, $2.to_i, $3.to_i, $4.to_i)
end
end
end
#--------------------------------------------------------------------------
# * New method: call_change_light_opacity
#--------------------------------------------------------------------------
def call_change_light_opacity
return if !$game_map.screen.shade.visible
note.scan(/<LIGHT OPACITY (\d+): ((?:\d+,? *){2})>/i) do
light = $game_map.screen.lights[$1.to_i]
if light && $2 =~ /(\d+) *,? *(\d+)?/i
duration = $2 ? $2.to_i : 0
light.change_opacity($1.to_i, duration)
end
end
end
#--------------------------------------------------------------------------
# * New method: call_remove_light
#--------------------------------------------------------------------------
def call_remove_light
note.scan(/<REMOVE LIGHT: (\d+)>/i) do
$game_map.screen.remove_light.push($1.to_i)
end
end
end
#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
# This class brings together map screen sprites, tilemaps, etc. It's used
# within the Scene_Map class.
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# * Alias method: initialize
#--------------------------------------------------------------------------
alias :initialize_ve_light_effects :initialize
def initialize
initialize_ve_light_effects
2.times { update_light(true) }
end
#--------------------------------------------------------------------------
# * Alias method: update
#--------------------------------------------------------------------------
alias :update_ve_light_effects :update
def update
update_ve_light_effects
update_light
end
#--------------------------------------------------------------------------
# * Alias method: dispose
#--------------------------------------------------------------------------
alias :dispose_ve_light_effects :dispose
def dispose
dispose_ve_light_effects
dispose_light unless SceneManager.scene_is?(Scene_Map)
end
#--------------------------------------------------------------------------
# * New method: update_light
#--------------------------------------------------------------------------
def update_light(forced = false)
return unless Graphics.frame_count % 2 == 0 || forced
update_shade
update_effects
end
#--------------------------------------------------------------------------
# * New method: dispose_light
#--------------------------------------------------------------------------
def dispose_light
if @light_effect
@light_effect.dispose
@light_effect = nil
@screen_shade = nil
end
end
#--------------------------------------------------------------------------
# * New method: update_shade
#--------------------------------------------------------------------------
def update_shade
if !@light_effect && $game_map.screen.shade.visible
refresh_lights
elsif $game_map.screen.shade.visible && @light_effect
@light_effect.update
elsif @light_effect && !$game_map.screen.shade.visible
dispose_light
end
end
#--------------------------------------------------------------------------
# * New method: refresh_lights
#--------------------------------------------------------------------------
def refresh_lights
@light_effect.dispose if @light_effect
@screen_shade = $game_map.screen.shade
@light_effect = Sprite_Light.new(@screen_shade, @viewport2)
$game_map.event_list.each {|event| event.refresh_lights }
@light_effect.update
end
#--------------------------------------------------------------------------
# * New method: update_effects
#--------------------------------------------------------------------------
def update_effects
return if !@light_effect || $game_map.screen.lights.empty?
$game_map.screen.lights.keys.each {|key| create_light(key) }
$game_map.screen.remove_light.clear
end
#--------------------------------------------------------------------------
# * New method: create_light
#--------------------------------------------------------------------------
def create_light(key)
effect = @light_effect.lights[key]
return if remove_light(key)
return if effect && effect.light == $game_map.screen.lights[key]
@light_effect.create_light($game_map.screen.lights[key])
end
#--------------------------------------------------------------------------
# * New method: remove_light
#--------------------------------------------------------------------------
def remove_light(key)
return false if !$game_map.screen.remove_light.include?(key)
@light_effect.remove_light(key)
$game_map.screen.lights.delete(key)
return true
end
end
#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
# This class performs the map screen processing.
#==============================================================================
class Scene_Map
#--------------------------------------------------------------------------
# * Alias method: pre_transfer
#--------------------------------------------------------------------------
alias :pre_transfer_ve_light_effects :pre_transfer
def pre_transfer
pre_transfer_ve_light_effects
if $game_player.new_map_id != $game_map.map_id
@spriteset.dispose_light
$game_map.screen.clear_lights
end
end
#--------------------------------------------------------------------------
# * Alias method: post_transfer
#--------------------------------------------------------------------------
alias :post_transfer_ve_light_effects :post_transfer
def post_transfer
$game_map.actors.each {|actor| actor.update_lantern(true) }
post_transfer_ve_light_effects
end
end
#==============================================================================
# ** Game_ShadeEffect
#------------------------------------------------------------------------------
# This class handles the shade layer data
#==============================================================================
class Game_ShadeEffect
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :visible
attr_reader :color
attr_accessor :blend
attr_accessor :opacity
#--------------------------------------------------------------------------
# * initialize
#--------------------------------------------------------------------------
def initialize
init_opacity
init_color
end
#--------------------------------------------------------------------------
# * init_opacity
#--------------------------------------------------------------------------
def init_opacity
@visible = false
@opacity = 0
@opacity_target = 0
@opacity_duration = 0
end
#--------------------------------------------------------------------------
# * init_color
#--------------------------------------------------------------------------
def init_color
@blend = 0
@color = Color.new(0, 0, 0, 0)
@color_duration = 0
@color_target = Color.new(0, 0, 0, 0)
end
#--------------------------------------------------------------------------
# * show
#--------------------------------------------------------------------------
def show
@visible = true
end
#--------------------------------------------------------------------------
# * hide
#--------------------------------------------------------------------------
def hide
@visible = false
end
#--------------------------------------------------------------------------
# * set_color
#--------------------------------------------------------------------------
def set_color(r = 0, g = 0, b = 0)
@color = get_colors(r, g, b)
@color_target = @color.clone
end
#--------------------------------------------------------------------------
# * change_opacity
#--------------------------------------------------------------------------
def change_opacity(op, d)
@opacity_target = op
@opacity_duration = [d, 0].max
@opacity = @opacity_target if @opacity_duration == 0
end
#--------------------------------------------------------------------------
# * change_color
#--------------------------------------------------------------------------
def change_color(r, g, b, d)
@color_target = get_colors(r, g, b)
@color_duration = [d, 0].max
@color = @color_target.clone if @color_duration == 0
end
#--------------------------------------------------------------------------
# * get_colors
#--------------------------------------------------------------------------
def get_colors(r, g, b)
color = Color.new(255 - r, 255 - g, 255 - b, 255) if @blend == 2
color = Color.new(r, g, b, 255) if @blend != 2
color
end
#--------------------------------------------------------------------------
# * update
#--------------------------------------------------------------------------
def update
update_opacity
update_color
end
#--------------------------------------------------------------------------
# * update_opacity
#--------------------------------------------------------------------------
def update_opacity
return if @opacity_duration == 0
d = @opacity_duration
@opacity = (@opacity * (d - 1) + @opacity_target) / d
@opacity_duration -= 1
end
#--------------------------------------------------------------------------
# * update_color
#--------------------------------------------------------------------------
def update_color
return if @color_duration == 0
d = @color_duration
@color.red = (@color.red * (d - 1) + @color_target.red) / d
@color.green = (@color.green * (d - 1) + @color_target.green) / d
@color.blue = (@color.blue * (d - 1) + @color_target.blue) / d
@color_duration -= 1
end
end
#==============================================================================
# ** Game_LightEffect
#------------------------------------------------------------------------------
# This class handles the light sprite data
#==============================================================================
class Game_LightEffect
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :id
attr_accessor :name
attr_accessor :info
attr_accessor :opacity
attr_accessor :x
attr_accessor :y
attr_accessor :variance
attr_accessor :speed
attr_accessor :zoom
attr_accessor :opacity_target
attr_accessor :opacity_duration
#--------------------------------------------------------------------------
# * change_opacity
#--------------------------------------------------------------------------
def change_opacity(op, d)
@opacity_target = op
@opacity_duration = [d, 0].max
@opacity = @opacity_target if @opacity_duration == 0
end
end
#==============================================================================
# ** Game_LightBitmap
#------------------------------------------------------------------------------
# This class handles the bitmpas of each light spot
#==============================================================================
class Game_LightBitmap
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :light
attr_reader :bitmap
attr_reader :opacity
attr_reader :x
attr_reader :y
#--------------------------------------------------------------------------
# * initialize
#--------------------------------------------------------------------------
def initialize(light)
@light = light
init_basic
update
end
#--------------------------------------------------------------------------
# * init_basic
#--------------------------------------------------------------------------
def init_basic
@bitmap = Cache.lights(@light.name)
@target = set_target
@opacity = @light.opacity
@speed = @light.speed
@variance = 0.0
@light.opacity_duration = 0
@light.opacity_target = 0
end
#--------------------------------------------------------------------------
# * width
#--------------------------------------------------------------------------
def width
@bitmap.width * @light.zoom / 100.0
end
#--------------------------------------------------------------------------
# * height
#--------------------------------------------------------------------------
def height
@bitmap.height * @light.zoom / 100.0
end
#--------------------------------------------------------------------------
# * update
#--------------------------------------------------------------------------
def update
update_position
update_opacity
update_variance
end
#--------------------------------------------------------------------------
# * update_position
#--------------------------------------------------------------------------
def update_position
@target.is_a?(Game_Character) ? character_position : map_position
end
#--------------------------------------------------------------------------
# * character_position
#--------------------------------------------------------------------------
def character_position
@x = $game_map.adjust_x(@target.real_x) * 32 - width / 2 + @light.x + 16
@y = $game_map.adjust_y(@target.real_y) * 32 - height / 2 + @light.y + 16
end
#--------------------------------------------------------------------------
# * map_position
#--------------------------------------------------------------------------
def map_position
@x = $game_map.adjust_x(@target[:x]) * 32 - width / 2 + @light.x + 16
@y = $game_map.adjust_y(@target[:y]) * 32 - height / 2 + @light.y + 16
end
#--------------------------------------------------------------------------
# * change_opacity
#--------------------------------------------------------------------------
def change_opacity(op, d)
@light.opacity_target = op
@light.opacity_duration = [d, 0].max
@light.opacity = @light.opacity_target if @light.opacity_duration == 0
end
#--------------------------------------------------------------------------
# * update_opacity
#--------------------------------------------------------------------------
def update_opacity
return if @light.opacity_duration == 0
d = @light.opacity_duration
@light.opacity = (@light.opacity * (d - 1) + @light.opacity_target) / d
@light.opacity_duration -= 1
end
#--------------------------------------------------------------------------
# * update_variance
#--------------------------------------------------------------------------
def update_variance
@variance += @speed
@speed *= -1 if @variance.abs > @light.variance.abs
@opacity = [[@light.opacity + @variance, 0].max, 255].min
end
#--------------------------------------------------------------------------
# * dispose
#--------------------------------------------------------------------------
def dispose
@bitmap.dispose
end
#--------------------------------------------------------------------------
# * set_target
#--------------------------------------------------------------------------
def set_target
if @light.info.keys.include?(:actor)
target = $game_map.actors[@light.info[:actor] - 1]
elsif @light.info.keys.include?(:event)
target = $game_map.events[@light.info[:event]]
elsif @light.info.keys.include?(:vehicle)
target = $game_map.vehicles[@light.info[:vehicle]]
else
target = @light.info
end
target
end
end
#==============================================================================
# ** Sprite_Light
#------------------------------------------------------------------------------
# This sprite is used to display the light effects
#==============================================================================
class Sprite_Light < Sprite_Base
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :lights
#--------------------------------------------------------------------------
# * initialize
#--------------------------------------------------------------------------
def initialize(shade, viewport)
super(viewport)
@shade = shade
self.bitmap = Bitmap.new(Graphics.width, Graphics.height)
self.blend_type = @shade.blend
self.opacity = @shade.opacity
self.z = 100
@lights = {}
end
#--------------------------------------------------------------------------
# * map_x
#--------------------------------------------------------------------------
def map_x
$game_map.adjust_x($game_map.display_x)
end
#--------------------------------------------------------------------------
# * map_y
#--------------------------------------------------------------------------
def map_y
$game_map.adjust_y($game_map.display_y)
end
#--------------------------------------------------------------------------
# * update
#--------------------------------------------------------------------------
def update
super
self.ox = map_x
self.oy = map_y
update_opacity
update_lights
end
#--------------------------------------------------------------------------
# * update lights
#--------------------------------------------------------------------------
def update_lights
rect = Rect.new(map_x, map_y, Graphics.width, Graphics.height)
self.bitmap.fill_rect(rect, color)
draw_light_effects
end
#--------------------------------------------------------------------------
# * color
#--------------------------------------------------------------------------
def color
@shade.color
end
#--------------------------------------------------------------------------
# * draw_light_effects
#--------------------------------------------------------------------------
def draw_light_effects
@lights.values.each do |light|
light.update
next if !on_screen?(light)
draw_light(light)
end
end
#--------------------------------------------------------------------------
# * on_sceen?
#--------------------------------------------------------------------------
def on_screen?(light)
ax1 = light.x
ay1 = light.y
ax2 = light.x + light.width
ay2 = light.y + light.height
bx1 = map_x
by1 = map_y
bx2 = map_x + Graphics.width
by2 = map_y + Graphics.height
check1 = ax1.between?(bx1, bx2) || ax2.between?(bx1, bx2) ||
ax1 < bx1 && ax2 > bx2
check2 = ay1.between?(by1, by2) || ay2.between?(by1, by2) ||
ay1 < by1 && ay2 > by2
check1 && check2
end
#--------------------------------------------------------------------------
# * draw_light
#--------------------------------------------------------------------------
def draw_light(light)
img = light.bitmap
rect = Rect.new(light.x, light.y, light.width, light.height)
self.bitmap.stretch_blt(rect, img, img.rect, light.opacity)
end
#--------------------------------------------------------------------------
# * update_opacity
#--------------------------------------------------------------------------
def update_opacity
@shade.update
self.opacity = @shade.opacity
self.blend_type = @shade.blend
end
#--------------------------------------------------------------------------
# * create_light
#--------------------------------------------------------------------------
def create_light(light)
remove_light(light.id)
@lights[light.id] = Game_LightBitmap.new(light)
end
#--------------------------------------------------------------------------
# * remove_light
#--------------------------------------------------------------------------
def remove_light(id)
@lights.delete(id) if @lights[id]
end
#--------------------------------------------------------------------------
# * dispose
#--------------------------------------------------------------------------
def dispose
super
@lights.values.each {|light| light.dispose unless light.bitmap.disposed? }
end
end
Вот тебе пример: https://yadi.sk/d/3cFLyFYvwsoPM
У меня МVЦитата:
Если ты говоришь о движке VX Ace то вот скрипт Victor'а на освещение:
Спойлер Victor Engine - Basic Module:Код:#==============================================================================
# ** Victor Engine - Basic Module
#------------------------------------------------------------------------------
# Author : Victor Sant
#
# Version History:
# v 1.00 - 2011.12.19 > First release
# v 1.01 - 2011.12.21 > Added Event Troop notes
# v 1.02 - 2011.12.22 > Added character frames value
# v 1.03 - 2011.12.30 > Added Actor and Enemy notes
# v 1.04 - 2012.01.01 > Added party average level and map actors
# v 1.05 - 2012.01.04 > Compatibility with Characters Scripts
# v 1.06 - 2012.01.07 > Compatibility with Fog and Light Effect
# > Added new Sprite Character functions
# v 1.07 - 2012.01.11 > Compatibility with Control Text and Codes
# v 1.08 - 2012.01.13 > Compatibility with Trait Control
# v 1.09 - 2012.01.15 > Fixed the Regular Expressions problem with "" and “”
# v 1.10 - 2012.01.18 > Compatibility with Automatic Battlers
# v 1.11 - 2012.01.26 > Compatibility with Followers Options
# Compatibility with Animated Battle beta
# v 1.12 - 2012.02.08 > Compatibility with Animated Battle
# v 1.13 - 2012.02.18 > Fix for non RTP dependant encrypted projects
# v 1.14 - 2012.03.11 > Better version handling and required messages
# v 1.15 - 2012.03.11 > Added level variable for enemies (to avoid crashes)
# v 1.16 - 2012.03.21 > Compatibility with Follower Control
# v 1.17 - 2012.03.22 > Compatibility with Follower Control new method
# v 1.18 - 2012.03.22 > Added Battler Types tag support
# v 1.19 - 2012.05.20 > Compatibility with Map Turn Battle
# v 1.20 - 2012.05.21 > Fix for older RMVXa versions
# v 1.21 - 2012.05.29 > Compatibility with Pixel Movement
# v 1.22 - 2012.07.02 > Compatibility with Terrain States
# v 1.23 - 2012.07.03 > Fix for Pixel Movement
# v 1.24 - 2012.07.17 > Compatibility with Critical Hit Effects
# v 1.25 - 2012.07.24 > Compatibility with Moving Plaforms
# v 1.26 - 2012.07.30 > Compatibility with Automatic Battlers
# v 1.27 - 2012.08.01 > Compatibility with Custom Slip Effect
# v 1.28 - 2012.08.01 > Compatibility with Custom Slip Effect v 1.01
# v 1.29 - 2012.11.03 > Fixed returning value division by 0 error.
# v 1.30 - 2012.12.13 > Compatibility with State Graphics
# v 1.31 - 2012.12.16 > Compatibility with Active Time Battle
# v 1.32 - 2012.12.24 > Compatibility with Active Time Battle v 1.01
# v 1.33 - 2012.12.30 > Compatibility with Leap Attack
# v 1.34 - 2013.01.07 > Compatibility with Critical Hit Effects v 1.01
# v 1.35 - 2013.02.13 > Compatibility with Cooperation Skills
#------------------------------------------------------------------------------
# This is the basic script for the system from Victory Engine and is
# required to use the scripts from the engine. This script offer some new
# functions to be used within many scripts of the engine.
#------------------------------------------------------------------------------
# Compatibility
# Required for the Victor Engine
#
# * Overwrite methods
# class << Cache
# def self.character(filename)
#
# class Sprite_Character < Sprite_Base
# def set_character_bitmap
#
# class Game_Battler < Game_BattlerBase
# def item_effect_recover_hp(user, item, effect)
# def item_effect_recover_mp(user, item, effect)
# def item_effect_gain_tp
#
# * Alias methods
# class Game_Interpreter
# def command_108
#
# class Window_Base < Window
# def convert_escape_characters(text)
#
#------------------------------------------------------------------------------
# Instructions:
# To instal the script, open you script editor and paste this script on
# a new section bellow the Materials section.
#
#------------------------------------------------------------------------------
# New functions
#
# * Random number between two vales
# rand_between(min, max)
# min : min value
# max : max value
# Can be called from any class, this method return an random value between
# two specific numbers
#
# * Random array value
# <Array>.random
# <Array>.random!
# Returns a random object from the array, the method .random! is destructive,
# removing the value returned from the array.
#
# * Sum of the numeric values of a array
# <Array>.sum
# Returns the sum of all numeric values
#
# * Average of all numeric values from the array
# <Array>.average(float = false)
# float : float flag
# Returns the average of all numeric values, if floa is true, the value
# returned is a float, otherwise it's a integer.
#
# * Note for events
# <Event>.note
# By default, events doesn't have note boxes. This command allows to use
# comments as note boxes, following the same format as the ones on the
# database. Returns all comments on the active page of the event.
#
# * Comment calls
# <Event>.comment_call
# Another function for comment boxes, by default, they have absolutely no
# effect in game when called. But this method allows to make the comment
# box to behave like an script call, but with the versatility of the
# note boxes. Remember that the commands will only take effect if there
# is scripts to respond to the comment code.
#
#==============================================================================
#==============================================================================
# ** Victor Engine
#------------------------------------------------------------------------------
# Setting module for the Victor Engine
#==============================================================================
module Victor_Engine
#--------------------------------------------------------------------------
# * New method: required_script
#--------------------------------------------------------------------------
def self.required_script(name, req, version, type = 0)
if type != :bellow && (!$imported[req] || $imported[req] < version)
msg = "The script '%s' requires the script\n"
case type
when :above
msg += "'%s' v%s or higher above it to work properly\n"
else
msg += "'%s' v%s or higher to work properly\n"
end
msg += "Go to http://victorscripts.wordpress.com/ to download this script."
self.exit_message(msg, name, req, version)
elsif type == :bellow && $imported[req]
msg = "The script '%s' requires the script\n"
msg += "'%s' to be put bellow it\n"
msg += "move the scripts to the proper position"
self.exit_message(msg, name, req, version)
end
end
#--------------------------------------------------------------------------
# * New method: exit_message
#--------------------------------------------------------------------------
def self.exit_message(message, name, req, version)
name = self.script_name(name)
req = self.script_name(req)
msgbox(sprintf(message, name, req, version))
exit
end
#--------------------------------------------------------------------------
# * New method: script_name
#--------------------------------------------------------------------------
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
$imported ||= {}
$imported[:ve_basic_module] = 1.35
#==============================================================================
# ** Object
#------------------------------------------------------------------------------
# This class is the superclass of all other classes.
#==============================================================================
class Object
#--------------------------------------------------------------------------
# * Include setting module
#--------------------------------------------------------------------------
include Victor_Engine
#-------------------------------------------------------------------------
# * New method: rand_between
#-------------------------------------------------------------------------
def rand_between(min, max)
min + rand(max - min + 1)
end
#--------------------------------------------------------------------------
# * New method: numeric?
#--------------------------------------------------------------------------
def numeric?
return false
end
#--------------------------------------------------------------------------
# * New method: string?
#--------------------------------------------------------------------------
def string?
return false
end
#--------------------------------------------------------------------------
# * New method: array?
#--------------------------------------------------------------------------
def array?
return false
end
#--------------------------------------------------------------------------
# * New method: float?
#--------------------------------------------------------------------------
def float?
return false
end
#--------------------------------------------------------------------------
# * New method: symbol?
#--------------------------------------------------------------------------
def symbol?
return false
end
#--------------------------------------------------------------------------
# * New method: item?
#--------------------------------------------------------------------------
def item?
return false
end
#--------------------------------------------------------------------------
# * New method: skill?
#--------------------------------------------------------------------------
def skill?
return false
end
#--------------------------------------------------------------------------
# * New method: file_exist?
#--------------------------------------------------------------------------
def file_exist?(path, filename)
$file_list ||= {}
$file_list[path + filename] ||= file_test(path, filename)
$file_list[path + filename]
end
#--------------------------------------------------------------------------
# * New method: get_file_list
#--------------------------------------------------------------------------
def file_test(path, filename)
bitmap = Cache.load_bitmap(path, filename) rescue nil
bitmap ? true : false
end
#--------------------------------------------------------------------------
# * New method: character_exist?
#--------------------------------------------------------------------------
def character_exist?(filename)
file_exist?("Graphics/Characters/", filename)
end
#--------------------------------------------------------------------------
# * New method: battler_exist?
#--------------------------------------------------------------------------
def battler_exist?(filename)
file_exist?("Graphics/Battlers/", filename)
end
#--------------------------------------------------------------------------
# * New method: face_exist?
#--------------------------------------------------------------------------
def face_exist?(filename)
file_exist?("Graphics/Faces/", filename)
end
#--------------------------------------------------------------------------
# * New method: get_filename
#--------------------------------------------------------------------------
def get_filename
"["'“‘]([^"'”‘”’]+)["'”’]"
end
#--------------------------------------------------------------------------
# * New method: get_all_values
#--------------------------------------------------------------------------
def get_all_values(value1, value2 = nil)
value2 = value1 unless value2
/<#{value1}>((?:[^<]|<[^\/])*)<\/#{value2}>/im
end
#--------------------------------------------------------------------------
# * New method: make_symbol
#--------------------------------------------------------------------------
def make_symbol(string)
string.downcase.gsub(" ", "_").to_sym
end
#--------------------------------------------------------------------------
# * New method: make_string
#--------------------------------------------------------------------------
def make_string(symbol)
symbol.to_s.gsub("_", " ").upcase
end
#--------------------------------------------------------------------------
# * New method: returning_value
#--------------------------------------------------------------------------
def returning_value(i, x)
y = [x * 2, 1].max
i % y >= x ? (x * 2) - i % y : i % y
end
#--------------------------------------------------------------------------
# New method: in_rect?
#--------------------------------------------------------------------------
def in_rect?(w, h, x1, y1, x2, y2, fx = 0)
aw, ah, ax, ay, bx, by = setup_area(w, h, x1, y1, x2, y2, fx)
bx > ax - aw && bx < ax + aw && by > ay - ah && by < ay + ah
end
#--------------------------------------------------------------------------
# New method: in_radius?
#--------------------------------------------------------------------------
def in_radius?(w, h, x1, y1, x2, y2, fx = 0)
aw, ah, ax, ay, bx, by = setup_area(w, h, x1, y1, x2, y2, fx)
((bx - ax) ** 2 / aw ** 2) + ((by - ay) ** 2 / ah ** 2) <= 1
end
#--------------------------------------------------------------------------
# New method: setup_area
#--------------------------------------------------------------------------
def setup_area(w, h, x1, y1, x2, y2, fx)
aw = w
ah = h * aw
ax = x1
ay = y1
bx = x2
by = y2
bx += fx / 4 if ax > bx
bx -= fx / 4 if ax < bx
[aw, ah, ax, ay, bx, by]
end
#--------------------------------------------------------------------------
# * New method: get_param_id
#--------------------------------------------------------------------------
def get_param_id(text)
case text.upcase
when "MAXHP", "HP" then 0
when "MAXMP", "MP" then 1
when "ATK" then 2
when "DEF" then 3
when "MAT" then 4
when "MDF" then 5
when "AGI" then 6
when "LUK" then 7
end
end
#--------------------------------------------------------------------------
# * New method: get_param_text
#--------------------------------------------------------------------------
def get_param_text(id)
case id
when 0 then "HP"
when 1 then "MP"
when 2 then "ATK"
when 3 then "DEF"
when 4 then "MAT"
when 5 then "MDF"
when 6 then "AGI"
when 7 then "LUK"
end
end
#--------------------------------------------------------------------------
# * New method: get_xparam_id
#--------------------------------------------------------------------------
def get_xparam_id(text)
case text.upcase
when "HIT" then 0
when "EVA" then 1
when "CRI" then 2
when "CEV" then 3
when "MEV" then 4
when "MRF" then 5
when "CNT" then 6
when "HRG" then 7
when "MRG" then 8
when "TRG" then 9
end
end
#--------------------------------------------------------------------------
# * New method: get_xparam_text
#--------------------------------------------------------------------------
def get_xparam_text(id)
case id
when 0 then "HIT"
when 1 then "EVA"
when 2 then "CRI"
when 3 then "CEV"
when 4 then "MEV"
when 5 then "MRF"
when 6 then "CNT"
when 7 then "HRG"
when 8 then "MRG"
when 9 then "TRG"
end
end
#--------------------------------------------------------------------------
# * New method: get_sparam_id
#--------------------------------------------------------------------------
def get_sparam_id(text)
case text.upcase
when "TGR" then 0
when "GRD" then 1
when "REC" then 2
when "PHA" then 3
when "MCR" then 4
when "TCR" then 5
when "PDR" then 6
when "MDR" then 7
when "FDR" then 8
when "EXR" then 9
end
end
#--------------------------------------------------------------------------
# * New method: get_sparam_text
#--------------------------------------------------------------------------
def get_sparam_text(id)
case id
when 0 then "TGR"
when 1 then "GRD"
when 2 then "REC"
when 3 then "PHA"
when 4 then "MCR"
when 5 then "TCR"
when 6 then "PDR"
when 7 then "MDR"
when 8 then "FDR"
when 9 then "EXR"
end
end
#--------------------------------------------------------------------------
# * New method: get_cond
#--------------------------------------------------------------------------
def get_cond(text)
case text.upcase
when "HIGHER" then ">"
when "LOWER" then "<"
when "EQUAL" then "=="
when "DIFFERENT" then "!="
else "!="
end
end
end
#==============================================================================
# ** String
#------------------------------------------------------------------------------
# The string class. Can handle character sequences of arbitrary lengths.
#==============================================================================
class String
#--------------------------------------------------------------------------
# * New method: string?
#--------------------------------------------------------------------------
def string?
return true
end
end
#==============================================================================
# ** String
#------------------------------------------------------------------------------
# The class that represents symbols.
#==============================================================================
class Symbol
#--------------------------------------------------------------------------
# * New method: symbol?
#--------------------------------------------------------------------------
def symbol?
return true
end
end
#==============================================================================
# ** Numeric
#------------------------------------------------------------------------------
# This is the abstract class for numbers.
#==============================================================================
class Numeric
#--------------------------------------------------------------------------
# * New method: numeric?
#--------------------------------------------------------------------------
def numeric?
return true
end
#--------------------------------------------------------------------------
# * New method: ceil?
#--------------------------------------------------------------------------
def ceil?
return false
end
#--------------------------------------------------------------------------
# * New method: to_ceil
#--------------------------------------------------------------------------
def to_ceil
self > 0 ? self.abs.ceil : -self.abs.ceil
end
end
#==============================================================================
# ** Float
#------------------------------------------------------------------------------
# This is the abstract class for the floating point values.
#==============================================================================
class Float
#--------------------------------------------------------------------------
# * New method: float?
#--------------------------------------------------------------------------
def float?
return true
end
#--------------------------------------------------------------------------
# * New method: ceil?
#--------------------------------------------------------------------------
def ceil?
self != self.ceil
end
end
#==============================================================================
# ** Array
#------------------------------------------------------------------------------
# This class store arbitrary Ruby objects.
#==============================================================================
class Array
#--------------------------------------------------------------------------
# * New method: array?
#--------------------------------------------------------------------------
def array?
return true
end
#-------------------------------------------------------------------------
# * New method: random
#-------------------------------------------------------------------------
def random
self[rand(size)]
end
#-------------------------------------------------------------------------
# * New method: random!
#-------------------------------------------------------------------------
def random!
self.delete_at(rand(size))
end
#---------------------------------------------------------------------------
# * New method: sum
#---------------------------------------------------------------------------
def sum
self.inject(0) {|r, n| r += (n.numeric? ? n : 0)}
end
#---------------------------------------------------------------------------
# * New method: average
#---------------------------------------------------------------------------
def average(float = false)
self.sum / [(float ? size.to_f : size.to_i), 1].max
end
#---------------------------------------------------------------------------
# * New method: next_item
#---------------------------------------------------------------------------
def next_item
item = self.shift
self.push(item)
item
end
#---------------------------------------------------------------------------
# * New method: previous_item
#---------------------------------------------------------------------------
def previous_item
item = self.pop
self.unshift(item)
item
end
end
#==============================================================================
# ** RPG::Troop::Page
#------------------------------------------------------------------------------
# This is the data class for battle events (pages).
#==============================================================================
class RPG::Troop::Page
#--------------------------------------------------------------------------
# * New method: note
#--------------------------------------------------------------------------
def note
return "" if !@list || @list.size <= 0
comment_list = []
@list.each do |item|
next unless item && (item.code == 108 || item.code == 408)
comment_list.push(item.parameters[0])
end
comment_list.join("\r\n")
end
end
#==============================================================================
# ** RPG::UsableItem
#------------------------------------------------------------------------------
# This is the superclass for skills and items.
#==============================================================================
class RPG::UsableItem < RPG::BaseItem
#--------------------------------------------------------------------------
# * New method: for_all_targets?
#--------------------------------------------------------------------------
def for_all_targets?
return false
end
#--------------------------------------------------------------------------
# * New method: element_set
#--------------------------------------------------------------------------
def element_set
[damage.element_id]
end
end
#==============================================================================
# ** RPG::Skill
#------------------------------------------------------------------------------
# This is the data class for skills.
#==============================================================================
class RPG::Skill < RPG::UsableItem
#--------------------------------------------------------------------------
# * New method: item?
#--------------------------------------------------------------------------
def item?
return false
end
#--------------------------------------------------------------------------
# * New method: skill?
#--------------------------------------------------------------------------
def skill?
return true
end
#--------------------------------------------------------------------------
# * New method: type_set
#--------------------------------------------------------------------------
def type_set
[stype_id]
end
end
#==============================================================================
# ** RPG::Item
#------------------------------------------------------------------------------
# This is the data class for items.
#==============================================================================
class RPG::Item < RPG::UsableItem
#--------------------------------------------------------------------------
# * New method: item?
#--------------------------------------------------------------------------
def item?
return true
end
#--------------------------------------------------------------------------
# * New method: skill?
#--------------------------------------------------------------------------
def skill?
return false
end
#--------------------------------------------------------------------------
# * New method: type_set
#--------------------------------------------------------------------------
def type_set
[itype_id]
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.
#==============================================================================
class << Cache
#--------------------------------------------------------------------------
# * Overwrite method: character
#--------------------------------------------------------------------------
def character(filename, hue = 0)
load_bitmap("Graphics/Characters/", filename, hue)
end
#--------------------------------------------------------------------------
# * New method: cache
#--------------------------------------------------------------------------
def cache
@cache
end
end
#==============================================================================
# ** BattleManager
#------------------------------------------------------------------------------
# This module handles the battle processing
#==============================================================================
class << BattleManager
#--------------------------------------------------------------------------
# * New method: all_battle_members
#--------------------------------------------------------------------------
def all_battle_members
$game_party.members + $game_troop.members
end
#--------------------------------------------------------------------------
# * New method: all_dead_members
#--------------------------------------------------------------------------
def all_dead_members
$game_party.dead_members + $game_troop.dead_members
end
#--------------------------------------------------------------------------
# * New method: all_movable_members
#--------------------------------------------------------------------------
def all_movable_members
$game_party.movable_members + $game_troop.movable_members
end
end
#==============================================================================
# ** Game_BattlerBase
#------------------------------------------------------------------------------
# This class handles battlers. It's used as a superclass of the Game_Battler
# classes.
#==============================================================================
class Game_BattlerBase
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :buffs
#--------------------------------------------------------------------------
# * New method: get_param
#--------------------------------------------------------------------------
def get_param(text)
case text.upcase
when "MAXHP" then self.mhp
when "MAXMP" then self.mmp
when "MAXTP" then self.max_tp
else eval("self.#{text.downcase}")
end
end
#--------------------------------------------------------------------------
# * New method: type
#--------------------------------------------------------------------------
def type
list = []
get_all_notes.scan(/<BATTLER TYPE: ((?:\w+ *,? *)+)>/i) do
$1.scan(/(\d+)/i) { list.push(make_symbol($1)) }
end
list.uniq
end
#--------------------------------------------------------------------------
# * New method: danger?
#--------------------------------------------------------------------------
def danger?
hp < mhp * 25 / 100
end
#--------------------------------------------------------------------------
# * New method: sprite
#--------------------------------------------------------------------------
def sprite
valid = SceneManager.scene_is?(Scene_Battle) && SceneManager.scene.spriteset
valid ? SceneManager.scene.spriteset.sprite(self) : nil
end
#--------------------------------------------------------------------------
# * New method: element_set
#--------------------------------------------------------------------------
def element_set(item)
element_set = item.element_set
element_set += atk_elements if item.damage.element_id < 0
element_set.delete(0)
element_set.compact
end
#--------------------------------------------------------------------------
# * New method: add_state_normal
#--------------------------------------------------------------------------
def add_state_normal(state_id, rate = 1, user = self)
chance = rate
chance *= state_rate(state_id)
chance *= luk_effect_rate(user)
add_state(state_id) if rand < chance
end
#--------------------------------------------------------------------------
# * New method: damaged?
#--------------------------------------------------------------------------
def damaged?
@result.hp_damage != 0 || @result.mp_damage != 0 || @result.tp_damage != 0
end
#--------------------------------------------------------------------------
# * New method: mtp
#--------------------------------------------------------------------------
def mtp
return 100
end
end
#==============================================================================
# ** Game_Battler
#------------------------------------------------------------------------------
# This class deals with battlers. It's used as a superclass of the Game_Actor
# and Game_Enemy classes.
#==============================================================================
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# * Overwrite method: item_effect_recover_hp
#--------------------------------------------------------------------------
def item_effect_recover_hp(user, item, effect)
value = item_value_recover_hp(user, item, effect).to_i
@result.hp_damage -= value
@result.success = true
self.hp += value
end
#--------------------------------------------------------------------------
# * Overwrite method: item_effect_recover_mp
#--------------------------------------------------------------------------
def item_effect_recover_mp(user, item, effect)
value = item_value_recover_mp(user, item, effect).to_i
@result.mp_damage -= value
@result.success = true if value != 0
self.mp += value
end
#--------------------------------------------------------------------------
# * Overwrite method: item_effect_gain_tp
#--------------------------------------------------------------------------
def item_effect_gain_tp(user, item, effect)
value = item_value_recover_tp(user, item, effect)
self.tp += value
end
#--------------------------------------------------------------------------
# * New method: item_value_recover_hp
#--------------------------------------------------------------------------
def item_value_recover_hp(user, item, effect)
value = (mhp * effect.value1 + effect.value2) * rec
value *= user.pha if item.is_a?(RPG::Item)
value
end
#--------------------------------------------------------------------------
# * New method: item_value_recover_mp
#--------------------------------------------------------------------------
def item_value_recover_mp(user, item, effect)
value = (mmp * effect.value1 + effect.value2) * rec
value *= user.pha if item.is_a?(RPG::Item)
value
end
#--------------------------------------------------------------------------
# * New method: item_value_recover_tp
#--------------------------------------------------------------------------
def item_value_recover_tp(user, item, effect)
effect.value1.to_i
end
#--------------------------------------------------------------------------
# * New method: cri_rate
#--------------------------------------------------------------------------
def cri_rate(user, item)
user.cri
end
#--------------------------------------------------------------------------
# * New method: cri_eva
#--------------------------------------------------------------------------
def cri_eva(user, item)
cev
end
#--------------------------------------------------------------------------
# * New method: setup_critical
#--------------------------------------------------------------------------
def setup_critical(user, item)
cri_rate(user, item) * (1 - cri_eva(user, item))
end
end
#==============================================================================
# ** Game_Enemy
#------------------------------------------------------------------------------
# This class handles enemy characters. It's used within the Game_Troop class
# ($game_troop).
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# * New method: id
#--------------------------------------------------------------------------
def id
@enemy_id
end
#--------------------------------------------------------------------------
# * New method: note
#--------------------------------------------------------------------------
def note
enemy ? enemy.note : ""
end
#--------------------------------------------------------------------------
# * New method: get_all_notes
#--------------------------------------------------------------------------
def get_all_notes(*args)
notes = ""
notes += note if !args.include?(:self)
states.compact.each {|state| notes += state.note } if !args.include?(:state)
notes
end
#--------------------------------------------------------------------------
# * New method: get_all_objects
#--------------------------------------------------------------------------
def get_all_objects(*args)
result = []
result += [self] if !args.include?(:self)
result += states.compact if !args.include?(:state)
result
end
#--------------------------------------------------------------------------
# * New method: level
#--------------------------------------------------------------------------
def level
return 1
end
#--------------------------------------------------------------------------
# * New method: skill_learn?
#--------------------------------------------------------------------------
def skill_learn?(skill)
skill.skill? && skills.include?(skill)
end
#--------------------------------------------------------------------------
# * New method: skills
#--------------------------------------------------------------------------
def skills
(enemy_actions | added_skills).sort.collect {|id| $data_skills[id] }
end
#--------------------------------------------------------------------------
# * New method: enemy_actions
#--------------------------------------------------------------------------
def enemy_actions
enemy.actions.collect {|action| action.skill_id }
end
end
#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
# This class handles actors. It's used within the Game_Actors class
# ($game_actors) and referenced by the Game_Party class ($game_party).
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# * New method: note
#--------------------------------------------------------------------------
def note
actor ? actor.note : ""
end
#--------------------------------------------------------------------------
# * New method: hue
#--------------------------------------------------------------------------
def hue
@hue ? @hue : 0
end
#--------------------------------------------------------------------------
# * New method: get_all_notes
#--------------------------------------------------------------------------
def get_all_notes(*args)
notes = ""
notes += note if !args.include?(:self)
notes += self.class.note if !args.include?(:class)
equips.compact.each {|equip| notes += equip.note } if !args.include?(:equip)
states.compact.each {|state| notes += state.note } if !args.include?(:state)
notes
end
#--------------------------------------------------------------------------
# * New method: get_all_objects
#--------------------------------------------------------------------------
def get_all_objects(*args)
result = []
result += [self] if !args.include?(:self)
result += [self.class] if !args.include?(:class)
result += equips.compact if !args.include?(:equip)
result += states.compact if !args.include?(:state)
result
end
#--------------------------------------------------------------------------
# * New method: in_active_party?
#--------------------------------------------------------------------------
def in_active_party?
$game_party.battle_members.include?(self)
end
#--------------------------------------------------------------------------
# * New method: in_reserve_party?
#--------------------------------------------------------------------------
def in_reserve_party?
$game_party.reserve_members.include?(self)
end
#--------------------------------------------------------------------------
# * New method: in_party?
#--------------------------------------------------------------------------
def in_party?
$game_party.all_members.include?(self)
end
#--------------------------------------------------------------------------
# * New method: map_animation
#--------------------------------------------------------------------------
def map_animation(id)
$game_map.actors.each do |member|
member.animation_id = id if member.actor == self
end
end
#--------------------------------------------------------------------------
# * New method: on_damage_floor
#--------------------------------------------------------------------------
def on_damage_floor?
$game_player.on_damage_floor?
end
end
#==============================================================================
# ** Game_Unit
#------------------------------------------------------------------------------
# This class handles units. It's used as a superclass of the Game_Party and
# Game_Troop classes.
#==============================================================================
class Game_Unit
#--------------------------------------------------------------------------
# * New method: refresh
#--------------------------------------------------------------------------
def refresh
members.each {|member| member.refresh }
end
end
#==============================================================================
# ** Game_Party
#------------------------------------------------------------------------------
# This class handles the party. It includes information on amount of gold
# and items. The instance of this class is referenced by $game_party.
#==============================================================================
class Game_Party < Game_Unit
#--------------------------------------------------------------------------
# * New method: average_level
#--------------------------------------------------------------------------
def average_level
battle_members.collect {|actor| actor.level }.average
end
#--------------------------------------------------------------------------
# * New method: reserve_members
#--------------------------------------------------------------------------
def reserve_members
all_members - battle_members
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
#--------------------------------------------------------------------------
# * New method: event_list
#--------------------------------------------------------------------------
def event_list
events.values
end
#--------------------------------------------------------------------------
# * New method: note
#--------------------------------------------------------------------------
def note
@map ? @map.note : ""
end
#--------------------------------------------------------------------------
# * New method: vehicles
#--------------------------------------------------------------------------
def vehicles
@vehicles
end
#--------------------------------------------------------------------------
# * New method: map_events
#--------------------------------------------------------------------------
def map_events
@map.events
end
#--------------------------------------------------------------------------
# * New method: actors
#--------------------------------------------------------------------------
def actors
[$game_player] + $game_player.followers.visible_followers
end
end
#==============================================================================
# ** Game_CharacterBase
#------------------------------------------------------------------------------
# This class deals with characters. Common to all characters, stores basic
# data, such as coordinates and graphics. It's used as a superclass of the
# Game_Character class.
#==============================================================================
class Game_CharacterBase
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :move_speed
attr_accessor :move_frequency
#--------------------------------------------------------------------------
# * New method: player?
#--------------------------------------------------------------------------
def player?
return false
end
#--------------------------------------------------------------------------
# * New method: event?
#--------------------------------------------------------------------------
def event?
return false
end
#--------------------------------------------------------------------------
# * New method: follower?
#--------------------------------------------------------------------------
def follower?
return false
end
#--------------------------------------------------------------------------
# * New method: vehicle?
#--------------------------------------------------------------------------
def vehicle?
return false
end
#--------------------------------------------------------------------------
# * New method: frames
#--------------------------------------------------------------------------
def frames
return 3
end
#--------------------------------------------------------------------------
# * New method: hue
#--------------------------------------------------------------------------
def hue
@hue ? @hue : 0
end
end
#==============================================================================
# ** Game_Character
#------------------------------------------------------------------------------
# This class deals with characters. It's used as a superclass of the
# Game_Player and Game_Event classes.
#==============================================================================
class Game_Character < Game_CharacterBase
#--------------------------------------------------------------------------
# * New method: move_toward_position
#--------------------------------------------------------------------------
def move_toward_position(x, y)
sx = distance_x_from(x)
sy = distance_y_from(y)
if sx.abs > sy.abs
move_straight(sx > 0 ? 4 : 6)
move_straight(sy > 0 ? 8 : 2) if !@move_succeed && sy != 0
elsif sy != 0
move_straight(sy > 0 ? 8 : 2)
move_straight(sx > 0 ? 4 : 6) if !@move_succeed && sx != 0
end
end
#--------------------------------------------------------------------------
# * New method: move_toward_position
#--------------------------------------------------------------------------
def turn_toward_position(x, y)
sx = distance_x_from(x)
sy = distance_y_from(y)
if sx.abs > sy.abs
set_direction(sx > 0 ? 4 : 6)
elsif sy != 0
set_direction(sy > 0 ? 8 : 2)
end
end
end
#==============================================================================
# ** Game_Player
#------------------------------------------------------------------------------
# This class handles the player.
# The instance of this class is referenced by $game_map.
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# * New method: player?
#--------------------------------------------------------------------------
def player?
return true
end
#--------------------------------------------------------------------------
# * New method: perform_transfer
#--------------------------------------------------------------------------
def new_map_id
@new_map_id
end
#--------------------------------------------------------------------------
# * New method: hue
#--------------------------------------------------------------------------
def hue
actor ? actor.hue : 0
end
end
#==============================================================================
# ** Game_Follower
#------------------------------------------------------------------------------
# This class handles the followers. Followers are the actors of the party
# that follows the leader in a line. It's used within the Game_Followers class.
#==============================================================================
class Game_Follower < Game_Character
#--------------------------------------------------------------------------
# * New method: follower?
#--------------------------------------------------------------------------
def follower?
return true
end
#--------------------------------------------------------------------------
# * New method: index
#--------------------------------------------------------------------------
def index
@member_index
end
#--------------------------------------------------------------------------
# * New method: gathering?
#--------------------------------------------------------------------------
def gathering?
$game_player.followers.gathering? && !gather?
end
end
#==============================================================================
# ** Game_Followers
#------------------------------------------------------------------------------
# This class handles the followers. It's a wrapper for the built-in class
# "Array." It's used within the Game_Player class.
#==============================================================================
class Game_Followers
#--------------------------------------------------------------------------
# * New method: get_actor
#--------------------------------------------------------------------------
def get_actor(id)
list = [$game_player] + visible_followers
list.select {|follower| follower.actor && follower.actor.id == id }.first
end
#--------------------------------------------------------------------------
# * Method fix: visble_folloers
#--------------------------------------------------------------------------
unless method_defined?(:visible_followers)
def visible_followers; visible_folloers; end
end
end
#==============================================================================
# ** Game_Vehicle
#------------------------------------------------------------------------------
# This class handles vehicles. It's used within the Game_Map class. If there
# are no vehicles on the current map, the coordinates is set to (-1,-1).
#==============================================================================
class Game_Vehicle < Game_Character
#--------------------------------------------------------------------------
# * New method: vehicle?
#--------------------------------------------------------------------------
def vehicle?
return true
end
#--------------------------------------------------------------------------
# * New method: map_id
#--------------------------------------------------------------------------
def map_id
@map_id
end
#--------------------------------------------------------------------------
# * New method: type
#--------------------------------------------------------------------------
def type
@type
end
#--------------------------------------------------------------------------
# * New method: aerial?
#--------------------------------------------------------------------------
def aerial?
type == :airship
end
#--------------------------------------------------------------------------
# * New method: above?
#--------------------------------------------------------------------------
def above?
aerial?
end
end
#==============================================================================
# ** Game_Event
#------------------------------------------------------------------------------
# This class deals with events. It handles functions including event page
# switching via condition determinants, and running parallel process events.
# It's used within the Game_Map class.
#==============================================================================
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# * New method: name
#--------------------------------------------------------------------------
def name
@event.name
end
#--------------------------------------------------------------------------
# * New method: event?
#--------------------------------------------------------------------------
def event?
return true
end
#--------------------------------------------------------------------------
# * New method: erased?
#--------------------------------------------------------------------------
def erased?
@erased
end
#--------------------------------------------------------------------------
# * New method: note
#--------------------------------------------------------------------------
def note
return "" if !@page || !@page.list || @page.list.size <= 0
return @notes if @notes && @page.list == @note_page
@note_page = @page.list.dup
comment_list = []
@page.list.each do |item|
next unless item && (item.code == 108 || item.code == 408)
comment_list.push(item.parameters[0])
end
@notes = comment_list.join("\r\n")
@notes
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: command_108
#--------------------------------------------------------------------------
alias :command_108_ve_basic_module :command_108
def command_108
command_108_ve_basic_module
comment_call
end
#--------------------------------------------------------------------------
# * New method: comment_call
#--------------------------------------------------------------------------
def comment_call
end
#--------------------------------------------------------------------------
# * New method: note
#--------------------------------------------------------------------------
def note
@comments ? @comments.join("\r\n") : ""
end
end
#==============================================================================
# ** Game_Animation
#------------------------------------------------------------------------------
# Classe that handles Animation data
#==============================================================================
class Game_Animation
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :ox
attr_accessor :oy
attr_accessor :rate
attr_accessor :zoom
attr_accessor :loop
attr_accessor :type
attr_accessor :map_x
attr_accessor :map_y
attr_accessor :mirror
attr_accessor :follow
attr_accessor :height
attr_accessor :bitmap1
attr_accessor :bitmap2
attr_accessor :sprites
attr_accessor :duration
attr_accessor :direction
attr_accessor :duplicated
#--------------------------------------------------------------------------
# * New method: initialize
#--------------------------------------------------------------------------
def initialize(animation, mirror, user = nil)
@animation = animation
@rate = animation.name =~ /<RATE: ([+-]?\d+)>/i ? [$1.to_i, 1].max : 4
@zoom = animation.name =~ /<ZOOM: (\d+)%?>/i ? $1.to_i / 100.0 : 1.0
@follow = animation.name =~ /<FOLLOW>/i ? true : false
@mirror = mirror
@duration = frame_max * @rate
@direction = user.anim_direction if user
@sprites = []
bellow = animation.name =~ /<BELLOW>/i
above = animation.name =~ /<ABOVE>/i
@height = bellow ? -1 : above ? 300 : 1
end
#--------------------------------------------------------------------------
# * New method: data
#--------------------------------------------------------------------------
def data
@animation
end
#--------------------------------------------------------------------------
# * New method: id
#--------------------------------------------------------------------------
def id
@animation.id
end
#--------------------------------------------------------------------------
# * New method: name
#--------------------------------------------------------------------------
def name
@animation.name
end
#--------------------------------------------------------------------------
# * New method: frame_max
#--------------------------------------------------------------------------
def frame_max
@animation.frame_max
end
#--------------------------------------------------------------------------
# * New method: position
#--------------------------------------------------------------------------
def position
@animation.position
end
#--------------------------------------------------------------------------
# * New method: animation1_name
#--------------------------------------------------------------------------
def animation1_name
@animation.animation1_name
end
#--------------------------------------------------------------------------
# * New method: animation2_name
#--------------------------------------------------------------------------
def animation2_name
@animation.animation2_name
end
#--------------------------------------------------------------------------
# * New method: animation1_hue
#--------------------------------------------------------------------------
def animation1_hue
@animation.animation1_hue
end
#--------------------------------------------------------------------------
# * New method: animation2_hue
#--------------------------------------------------------------------------
def animation2_hue
@animation.animation2_hue
end
#--------------------------------------------------------------------------
# * New method: frames
#--------------------------------------------------------------------------
def frames
@animation.frames
end
#--------------------------------------------------------------------------
# * New method: timings
#--------------------------------------------------------------------------
def timings
@animation.timings
end
end
#==============================================================================
# ** Sprite_Character
#------------------------------------------------------------------------------
# This sprite is used to display characters. It observes a instance of the
# Game_Character class and automatically changes sprite conditions.
#==============================================================================
class Sprite_Character < Sprite_Base
#--------------------------------------------------------------------------
# * Overwrite method: set_character_bitmap
#--------------------------------------------------------------------------
def set_character_bitmap
update_character_info
set_bitmap
set_bitmap_position
end
#--------------------------------------------------------------------------
# * New method: center_y
#--------------------------------------------------------------------------
def actor?
@character.is_a?(Game_Player) || @character.is_a?(Game_Follower)
end
#--------------------------------------------------------------------------
# * New method: center_y
#--------------------------------------------------------------------------
def actor
actor? ? @character.actor : nil
end
#--------------------------------------------------------------------------
# * New method: update_character_info
#--------------------------------------------------------------------------
def update_character_info
end
#--------------------------------------------------------------------------
# * New method: hue
#--------------------------------------------------------------------------
def hue
@character.hue
end
#--------------------------------------------------------------------------
# * New method: set_bitmap
#--------------------------------------------------------------------------
def set_bitmap
self.bitmap = Cache.character(set_bitmap_name, hue)
end
#--------------------------------------------------------------------------
# * New method: set_bitmap_name
#--------------------------------------------------------------------------
def set_bitmap_name
@character_name
end
#--------------------------------------------------------------------------
# * New method: set_bitmap_position
#--------------------------------------------------------------------------
def set_bitmap_position
sign = get_sign
if sign && sign.include?('$')
@cw = bitmap.width / @character.frames
@ch = bitmap.height / 4
else
@cw = bitmap.width / (@character.frames * 4)
@ch = bitmap.height / 8
end
self.ox = @cw / 2
self.oy = @ch
end
#--------------------------------------------------------------------------
# * New method: get_sign
#--------------------------------------------------------------------------
def get_sign
@character_name[/^[\!\$]./]
end
end
#==============================================================================
# ** Sprite_Battler
#------------------------------------------------------------------------------
# This sprite is used to display battlers. It observes a instance of the
# Game_Battler class and automatically changes sprite conditions.
#==============================================================================
class Sprite_Battler < Sprite_Base
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :dmg_mirror
#--------------------------------------------------------------------------
# * New method: center_x
#--------------------------------------------------------------------------
def center_x
self.ox
end
#--------------------------------------------------------------------------
# * New method: center_y
#--------------------------------------------------------------------------
def center_y
self.oy / 2
end
end
#==============================================================================
# ** Spriteset_Battle
#------------------------------------------------------------------------------
# This class brings together battle screen sprites. It's used within the
# Scene_Battle class.
#==============================================================================
class Spriteset_Battle
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :viewport1
#--------------------------------------------------------------------------
# * New method: sprite
#--------------------------------------------------------------------------
def sprite(subject)
battler_sprites.compact.select {|sprite| sprite.battler == subject }.first
end
end
#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
# This is a superclass of all windows in the game.
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# * Alias method: convert_escape_characters
#--------------------------------------------------------------------------
alias :convert_escape_ve_basic_module :convert_escape_characters
def convert_escape_characters(text)
result = text.to_s.clone
result = text_replace(result)
result = convert_escape_ve_basic_module(text)
result
end
#--------------------------------------------------------------------------
# * New method: text_replace
#--------------------------------------------------------------------------
def text_replace(result)
result.gsub!(/\r/) { "" }
result.gsub!(/\\/) { "\e" }
result
end
end
#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
# This class performs battle screen processing.
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :subject
attr_reader :spriteset
end
#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
# This class performs map screen processing.
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :spriteset
end
Спойлер Victor Engine - Light Effects:Код:#==============================================================================
# ** Victor Engine - Light Effects
#------------------------------------------------------------------------------
# Author : Victor Sant
#
# Version History:
# v 1.00 - 2011.12.21 > First release
# v 1.01 - 2011.12.23 > Compatibility with Diagonal Movement
# v 1.02 - 2011.12.24 > Better checks for images bigger than screen
# v 1.03 - 2011.12.27 > Fixed bug when teleporting to same map
# v 1.04 - 2011.12.30 > Faster Regular Expressions
# v 1.05 - 2012.01.04 > Fixed lantern direction bug
# > Fixed load fail when lights ON
# v 1.06 - 2012.01.07 > Fixed light opacity change not updating
# v 1.07 - 2012.01.13 > Fixed update delay when exiting the menu
# v 1.08 - 2012.01.15 > Fixed the positive sign on some Regular Expressions
# > Fixed the Regular Expressions problem with "" and “”
# v 1.09 - 2012.05.21 > Compatibility with Map Turn Battle
# v 1.10 - 2012.07.24 > Compatibility with Moving Platform
# > Changed actor indexing for lantern (now start at 1)
# v 1.11 - 2012.08.02 > Compatibility with Basic Module 1.27
# v 1.12 - 2013.01.07 > Fixed issue with actor lantern and map transfer
#------------------------------------------------------------------------------
# This scripts allow to add varied light effects to the maps. But it works
# different from other scripts with this function.
# Normally, light effect scripts add images above the events, and then the
# screen is tone is changed, with the images staying bellow the darker layer.
# This script add an new darkened layer, and apply the light effect images
# on this layer.
#------------------------------------------------------------------------------
# Compatibility
# Requires the script 'Victor Engine - Basic Module' v 1.27 or higher
#
# * Alias methods
# class Game_Map
# def setup(map_id)
#
# class Game_CharacterBase
# def init_public_members
# def update
#
# class Game_Event < Game_Character
# def clear_starting_flag
#
# class Spriteset_Map
# def initialize
# def update
# def dispose
#
# class Scene_Map
# def pre_transfer
#
# 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 lights must be placed on the folder "Graphics/Lights". Create a folder
# named "Lights" on the Graphics folder.
#
#------------------------------------------------------------------------------
# Comment calls note tags:
# Tags to be used in events comment box, works like a script call.
#
# <create shade>
# setting
# </create shade>
# Create a shade effect on the map, add the following values to the setting.
# opacity: x : opacity (0-255)
# red: x : red tone (0-255, can be negative)
# green: x : green tone (0-255, can be negative)
# blue: x : blue tone (0-255, can be negative)
# blend: x : fog blend type (0: normal, 1: add, 2: subtract)
#
# <actor light> <event light> <vehicle light>
# setting setting setting
# </actor light> </event light> </vehicle ligth>
# Create a light effect on actor, event or vehicle, add the following
# values to the info. The ID, index and name must be added, other values
# are optional.
# id: x : ligh effect ID
# name: "x" : ligh effect graphic filename ("filename")
# index: x : actor index, event id or (0: boat, 1: ship, 2: airship)
# opacity: x : light opacity (0-255)
# pos x: x : coordinate X adjust
# pos y: x : coordinate Y adjust
# var: x : light opacity variation
# speed: x : light variation speed
# zoom: x : ligh effect zoom (100 = default size)
#
# <map light>
# setting
# </map light>
# Create a light effect on a specific map postion, add the following
# values to the info. The ID, map_x, map_y and name must be added, other
# values are optional.
# id: x : ligh effect ID
# name: "x" : ligh effect graphic filename ("filename")
# map x: x : map X coordinate
# map y: x : map Y coordinate
# opacity: x : light opacity (0-255)
# pos x: x : coordinate X adjust
# pos y: x : coordinate Y adjust
# var: x : light opacity variation
# speed: x : light variation speed
# zoom: x : ligh effect zoom (100 = default size)
#
# <actor lantern i: o>
# <event lantern i: o>
# <vehicle lantern i: o>
# Call a lantern on the target character, lanterns are effets that
# lights the front of the character
# i : actor index, event id or (0: boat, 1: ship, 2: airship)
# o : light opacity (0-255)
#
# <light opacity id: o, d>
# This tag allows to change the light opacity gradually
# i : light effect ID
# o : new opacity (0-255)
# d : wait until complete change (60 frames = 1 second)
#
# <shade opacity: o, d>
# This tag allows to change the shade opacity gradually
# o : new opacity (0-255)
# d : wait until complete change (60 frames = 1 second)
#
# <shade tone: r, g, b, d>
# This tag allows to change the shade opacity gradually
# r : red tone (0-255, can be negative)
# g : green tone (0-255, can be negative)
# b : blue tone (0-255, can be negative)
# d : wait until complete change (60 frames = 1 second)
#
# <remove light: id>
# This tag allows remove a light effect
# id: ligh effect ID
#
#------------------------------------------------------------------------------
# Maps note tags:
# Tags to be used on the Maps note box in the database
#
# <create shade>
# setting
# </create shade>
# Create a shade effect on the map, add the following values to the setting.
# opacity: x : opacity (0-255)
# red: x : red tone (0-255, can be negative)
# green: x : green tone (0-255, can be negative)
# blue: x : blue tone (0-255, can be negative)
# blend: x : fog blend type (0: normal, 1: add, 2: subtract)
#
# <actor light> <event light> <vehicle light>
# setting setting setting
# </actor light> </event light> </vehicle ligth>
# Create a light effect on actor, event or vehicle, add the following
# values to the info. The ID, index and name must be added, other values
# are optional.
# id: x : ligh effect ID
# name: "x" : ligh effect graphic filename ("filename")
# index: x : actor index, event id or (0: boat, 1: ship, 2: airship)
# opacity: x : light opacity (0-255)
# pos x: x : coordinate X adjust
# pos y: x : coordinate Y adjust
# var: x : light opacity variation
# speed: x : light variation speed
# zoom: x : ligh effect zoom (100 = default size)
#
# <map light>
# setting
# </map light>
# Create a light effect on a specific map postion, add the following
# values to the info. The ID, map_x, map_y and name must be added, other
# values are optional.
# id: x : ligh effect ID
# name: "x" : ligh effect graphic filename ("filename")
# map x: x : map X coordinate
# map y: x : map Y coordinate
# opacity: x : light opacity (0-255)
# pos x: x : coordinate X adjust
# pos y: x : coordinate Y adjust
# var: x : light opacity variation
# speed: x : light variation speed
# zoom: x : ligh effect zoom (100 = default size)
#
# <actor lantern i: o>
# <event lantern i: o>
# <vehicle lantern i: o>
# Call a lantern on the target character, lanterns are effets that
# lights the front of the character
# i : actor index, event id or (0: boat, 1: ship, 2: airship)
# o : light opacity (0-255)
#
#------------------------------------------------------------------------------
# Comment boxes note tags:
# Tags to be used on events Comment boxes. They're different from the
# comment call, they're called always the even refresh.
#
# <custom light>
# settings
# </custom light>
# Create a custom light effect on actor, event or vehicle, add the following
# values to the settings. The name must be added, other values
# are optional.
# name: "x" : ligh effect graphic filename ("filename")
# opacity: x : light opacity (0-255)
# pos x: x : coordinate X adjust
# pos y: x : coordinate Y adjust
# var: x : light opacity variation
# speed: x : light variation speed
# zoom: x : ligh effect zoom (100 = default size)
#
# <simple light: o>
# <simple lamp: o>
# <simple torch: o>
# <simple window 1: o>
# <simple window 2: o>
# Simple light shortcuts
# o : new opacity (0-255)
#
# <flash light: o>
# <flash lamp: o>
# <flash torch: o>
# <flash window 1: o>
# <flash window 2: o>
# Flashing light shortcuts
# o : new opacity (0-255)
#
# <lantern: o>
# Lanterns shortcut
# o : new opacity (0-255)
#
#------------------------------------------------------------------------------
# Additional instructions:
#
# The lights are placed on the shade, so you *must* create a shade in order
# to display the lights. No shade, no lights.
#
# The IDs of the light effects are used as identifiers. Don't use the
# same value for different light spots, if you do so, one light will
# replace the other. Also the IDs are used as referece to when
# removing lights and changing light opacity.
#
# The actor lanter use the actor position in the party, NOT the actor ID.
# So the if you want a lantern for the first character, use
# <actor lantern 1: o> (o = opacity)
#
# About the error on line 1062: this is a USER error made by BAD setup.
# this happen when you assign a light effect to a event id that don't exist
# at the map. So please: DON'T REPORT IT ANYMORE.
#
#==============================================================================
#==============================================================================
# ** Victor Engine
#------------------------------------------------------------------------------
# Setting module for the Victor Engine
#==============================================================================
module Victor_Engine
#--------------------------------------------------------------------------
# * 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
$imported ||= {}
$imported[:ve_light_effects] = 1.11
Victor_Engine.required(:ve_light_effects, :ve_basic_module, 1.27, :above)
Victor_Engine.required(:ve_light_effects, :ve_map_battle, 1.00, :bellow)
#==============================================================================
# ** 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: lights
#--------------------------------------------------------------------------
def self.lights(filename)
self.load_bitmap('Graphics/Lights/', filename)
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 :lights
attr_reader :shade
attr_accessor :remove_light
#--------------------------------------------------------------------------
# * Alias method: clear
#--------------------------------------------------------------------------
alias :clear_ve_light_effects :clear
def clear
clear_ve_light_effects
clear_lights
end
#--------------------------------------------------------------------------
# * New method: clear_lights
#--------------------------------------------------------------------------
def clear_lights
@lights = {}
@remove_light = []
@shade = Game_ShadeEffect.new
end
#--------------------------------------------------------------------------
# * New method: lights
#--------------------------------------------------------------------------
def lights
@lights ||= {}
end
#--------------------------------------------------------------------------
# * New method: remove_light
#--------------------------------------------------------------------------
def remove_light
@remove_light ||= []
end
#--------------------------------------------------------------------------
# * New method: shade
#--------------------------------------------------------------------------
def shade
@shade ||= Game_ShadeEffect.new
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
#--------------------------------------------------------------------------
# * Alias method: setup
#--------------------------------------------------------------------------
alias :setup_ve_light_effects :setup
def setup(map_id)
setup_ve_light_effects(map_id)
setup_lights_effect
end
#--------------------------------------------------------------------------
# * New method: setup_lights_effect
#--------------------------------------------------------------------------
def setup_lights_effect
setup_map_shade(note)
setup_map_lights(:actor, note)
setup_map_lights(:event, note)
setup_map_lights(:vehicle, note)
setup_map_lights(:map, note)
setup_map_lantern(:actor, note)
setup_map_lantern(:event, note)
setup_map_lantern(:vehicle, note)
end
#--------------------------------------------------------------------------
# * New method: setup_map_shade
#--------------------------------------------------------------------------
def setup_map_shade(text)
if text =~ get_all_values("CREATE SHADE")
info = $1.dup
shade = @screen.shade
shade.show
shade.opacity = info =~ /OPACITY: (\d+)/i ? $1.to_i : 192
shade.blend = info =~ /BLEND: (\d+)/i ? $1.to_i : 2
red = info =~ /RED: (\d+)/i ? $1.to_i : 0
green = info =~ /GREEN: (\d+)/i ? $1.to_i : 0
blue = info =~ /BLUE: (\d+)/i ? $1.to_i : 0
shade.set_color(red, green, blue)
end
end
#--------------------------------------------------------------------------
# * New method: setup_map_lights
#--------------------------------------------------------------------------
def setup_map_lights(type, text)
value = get_regexp_value(type)
text.scan(get_all_values("#{value} LIGHT")) do
light = setup_light($1.dup, type)
@screen.lights[light.id] = light if light.id
end
end
#--------------------------------------------------------------------------
# * New method: setup_map_lantern
#--------------------------------------------------------------------------
def setup_map_lantern(type, text)
value = get_regexp_value(type)
regexp = /<#{value} LANTERN (\d+): (\d+)>/i
text.scan(regexp) do |index, opacity|
target = get_font(type, index.to_i)
next unless target
target.lantern = opacity.to_i
target.update_lantern
end
end
#--------------------------------------------------------------------------
# * New method: get_regexp_value
#--------------------------------------------------------------------------
def get_regexp_value(type)
case type
when :actor then "ACTOR"
when :event then "EVENT"
when :vehicle then "VEHICLE"
when :map then "MAP"
end
end
#--------------------------------------------------------------------------
# * New method: setup_light
#--------------------------------------------------------------------------
def setup_light(info, type)
light = Game_LightEffect.new
light.name = info =~ /NAME: #{get_filename}/i ? $1.dup : ""
light.id = info =~ /ID: (\w+)/i ? $1.to_s : 0
light.id = info =~ /ID: (\d+)/i ? $1.to_i : light.id
light.x = info =~ /POS X: ([+-]?\d+)/i ? $1.to_i : 0
light.y = info =~ /POS Y: ([+-]?\d+)/i ? $1.to_i : 0
light.speed = info =~ /SPEED: (\d+)/i ? $1.to_i : 0
light.zoom = info =~ /ZOOM: (\d+)/i ? $1.to_f : 100.0
light.opacity = info =~ /OPACITY: (\d+)/i ? $1.to_i : 192
light.variance = info =~ /VAR: (\d+)/i ? $1.to_i : 0
if type == :map
map_x = info =~ /MAP X: (\d+)/i ? $1.to_i : 0
map_y = info =~ /MAP Y: (\d+)/i ? $1.to_i : 0
light.info = {x: map_x, y: map_y}
else
index = info =~ /INDEX: (\d+)/i ? $1.to_i : 0
light.info = {type => index}
end
light
end
#--------------------------------------------------------------------------
# * New method: set_light
#--------------------------------------------------------------------------
def set_light(id, name, info, op = 0, x = 0, y = 0, v = 0, s = 0, z = 100)
light = Game_LightEffect.new
light.id = id
light.name = name
light.info = info
light.opacity = op.to_i
light.x = x.to_i
light.y = y.to_i
light.variance = v.to_i
light.speed = s.to_i
light.zoom = z.to_f
light
end
#--------------------------------------------------------------------------
# * New method: get_font
#--------------------------------------------------------------------------
def get_font(type, i)
case type
when :actor then actors[i - 1]
when :event then events[i]
when :vehicle then vehicles[i]
end
end
end
#==============================================================================
# ** Game_CharacterBase
#------------------------------------------------------------------------------
# This class deals with characters. Common to all characters, stores basic
# data, such as coordinates and graphics. It's used as a superclass of the
# Game_Character class.
#==============================================================================
class Game_CharacterBase
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :lantern
#--------------------------------------------------------------------------
# * Alias method: init_public_members
#--------------------------------------------------------------------------
alias :init_public_members_ve_light_effects :init_public_members
def init_public_members
init_public_members_ve_light_effects
@lantern = 0
end
#--------------------------------------------------------------------------
# * Alias method: update
#--------------------------------------------------------------------------
alias :update_ve_light_effects :update
def update
update_ve_light_effects
update_lantern
end
#--------------------------------------------------------------------------
# * New method: update_lantern
#--------------------------------------------------------------------------
def update_lantern(forced = false)
diag = $imported[:ve_diagonal_move] && diagonal?
if @lantern != 0 && ((!diag && @lantern_direction != @direction) ||
(diag && @lantern_direction != @diagonal) || forced)
@lantern_direction = (diag ? @diagonal : @direction)
light = setup_lantern
$game_map.screen.lights[light.id] = light
elsif @lantern == 0 && @lantern_direction
id = event? ? "EL#{@id}" : "AL#{@id}"
$game_map.screen.remove_light.push(id) if $game_map.screen.remove_light
@lantern_direction = nil
end
end
#--------------------------------------------------------------------------
# * New method: setup_lantern
#--------------------------------------------------------------------------
def setup_lantern
id = event? ? "EL#{@id}" : "AL#{@id}"
type = event? ? :event : :actor
case @lantern_direction
when 1
name = 'lantern_downleft'
value = [id, name, {type => @id}, @lantern, -48, 48]
when 3
name = 'lantern_downright'
value = [id, name, {type => @id}, @lantern, 48, 48]
when 2
name = 'lantern_down'
value = [id, name, {type => @id}, @lantern, 0, 64]
when 4
name = 'lantern_left'
value = [id, name, {type => @id}, @lantern, -64, 0]
when 6
name = 'lantern_right'
value = [id, name, {type => @id}, @lantern, 64, 0]
when 7
name = 'lantern_upleft'
value = [id, name, {type => @id}, @lantern, -48, -48]
when 8
name = 'lantern_up'
value = [id, name, {type => @id}, @lantern, 0, -64,]
when 9
name = 'lantern_upright'
value = [id, name, {type => @id}, @lantern, 48, -48]
end
$game_map.set_light(*value)
end
end
#==============================================================================
# ** Game_Event
#------------------------------------------------------------------------------
# This class deals with events. It handles functions including event page
# switching via condition determinants, and running parallel process events.
# It's used within the Game_Map class.
#==============================================================================
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# * Alias method: clear_starting_flag
#--------------------------------------------------------------------------
alias :clear_starting_flag_ve_light_effects :clear_starting_flag
def clear_starting_flag
clear_starting_flag_ve_light_effects
@lantern = 0
$game_map.screen.remove_light.push("EV#{@id}")
refresh_lights if @page
end
#--------------------------------------------------------------------------
# * New method: refresh_lights
#--------------------------------------------------------------------------
def refresh_lights
case note
when /<SIMPLE LIGHT: (\d+)?>/i
set_light("EV#{@id}", "light", $1 ? $1 : 255)
when /<SIMPLE LAMP: (\d+)?>/i
set_light("EV#{@id}", "lamp", $1 ? $1 : 255)
when /<SIMPLE TORCH: (\d+)?>/i
set_light("EV#{@id}", "torch", $1)
when /<SIMPLE WINDOW (\d+): (\d+)?>/i
adj = $1 == "1" ? 0 : 14
set_light("EV#{@id}", "window", $2 ? $2 : 255, 0, 0, 0, adj)
when /<FLASH LIGHT: (\d+)?>/i
set_light("EV#{@id}", "light", $1 ? $1 : 255, 30, 1)
when /<FLASH LAMP: (\d+)?>/i
set_light("EV#{@id}", "lamp", $1 ? $1 : 255, 30, 1)
when /<FLASH TORCH: (\d+)?>/i
set_light("EV#{@id}", "torch", $1 ? $1 : 255, 30, 1)
when /<FLASH WINDOW (\d+): (\d+)?>/i
adj = $1 == "1" ? 0 : 14
set_light("EV#{@id}", "window", $2 ? $2 : 255, 30, 1, 0, adj)
when get_all_values("CUSTOM LIGHT")
info = $1.dup
n = info =~ /NAME: #{get_filename}/i ? $1.dup : ""
x = info =~ /POS X: ([+-]?\d+)/i ? $1.to_i : 0
y = info =~ /POS Y: ([+-]?\d+)/i ? $1.to_i : 0
s = info =~ /SPEED: (\d+)/i ? $1.to_i : 0
z = info =~ /ZOOM: (\d+)/i ? $1.to_f : 100.0
o = info =~ /OPACITY: (\d+)/i ? $1.to_i : 192
v = info =~ /VAR: (\d+)/i ? $1.to_i : 0
set_light("EV#{@id}", n, o, v, s, x, y, z)
when /<LANTERN(?:: (\d+))?>/i
@lantern = ($1 ? $1.to_i : 255)
end
end
#--------------------------------------------------------------------------
# * New method: set_light
#--------------------------------------------------------------------------
def set_light(id, name, op = 255, v = 0, s = 0, x = 0, y = 0, z = 100)
value = [id, name, {:event => @id}, op, x, y, v, s, z].compact
$game_map.screen.lights[id] = $game_map.set_light(*value)
$game_map.screen.remove_light.delete(id)
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_light_effects :comment_call
def comment_call
call_create_lights
call_change_shade_opacity
call_change_shade_tone
call_change_light_opacity
call_remove_light
comment_call_ve_light_effects
end
#--------------------------------------------------------------------------
# * New method: create_lights
#--------------------------------------------------------------------------
def call_create_lights
$game_map.setup_map_shade(note)
$game_map.setup_map_lights(:actor, note)
$game_map.setup_map_lights(:event, note)
$game_map.setup_map_lights(:vehicle, note)
$game_map.setup_map_lights(:map, note)
$game_map.setup_map_lantern(:actor, note)
$game_map.setup_map_lantern(:event, note)
$game_map.setup_map_lantern(:vehicle, note)
end
#--------------------------------------------------------------------------
# * New method: call_change_shade_opacity
#--------------------------------------------------------------------------
def call_change_shade_opacity
return if !$game_map.screen.shade.visible
note.scan(/<SHADE OPACITY: ((?:\d+,? *){2})>/i) do
if $1 =~ /(\d+) *,? *(\d+)?/i
duration = $2 ? $2.to_i : 0
$game_map.screen.shade.change_opacity($1.to_i, duration)
end
end
end
#--------------------------------------------------------------------------
# * New method: call_change_shade_tone
#--------------------------------------------------------------------------
def call_change_shade_tone
return if !$game_map.screen.shade.visible
note.scan(/<SHADE TONE: ((?:\d+,? *){4})>/i) do
if $1 =~ /(\d+) *, *(\d+) *, *(\d+) *, *(\d+)/i
$game_map.screen.shade.change_color($1.to_i, $2.to_i, $3.to_i, $4.to_i)
end
end
end
#--------------------------------------------------------------------------
# * New method: call_change_light_opacity
#--------------------------------------------------------------------------
def call_change_light_opacity
return if !$game_map.screen.shade.visible
note.scan(/<LIGHT OPACITY (\d+): ((?:\d+,? *){2})>/i) do
light = $game_map.screen.lights[$1.to_i]
if light && $2 =~ /(\d+) *,? *(\d+)?/i
duration = $2 ? $2.to_i : 0
light.change_opacity($1.to_i, duration)
end
end
end
#--------------------------------------------------------------------------
# * New method: call_remove_light
#--------------------------------------------------------------------------
def call_remove_light
note.scan(/<REMOVE LIGHT: (\d+)>/i) do
$game_map.screen.remove_light.push($1.to_i)
end
end
end
#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
# This class brings together map screen sprites, tilemaps, etc. It's used
# within the Scene_Map class.
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# * Alias method: initialize
#--------------------------------------------------------------------------
alias :initialize_ve_light_effects :initialize
def initialize
initialize_ve_light_effects
2.times { update_light(true) }
end
#--------------------------------------------------------------------------
# * Alias method: update
#--------------------------------------------------------------------------
alias :update_ve_light_effects :update
def update
update_ve_light_effects
update_light
end
#--------------------------------------------------------------------------
# * Alias method: dispose
#--------------------------------------------------------------------------
alias :dispose_ve_light_effects :dispose
def dispose
dispose_ve_light_effects
dispose_light unless SceneManager.scene_is?(Scene_Map)
end
#--------------------------------------------------------------------------
# * New method: update_light
#--------------------------------------------------------------------------
def update_light(forced = false)
return unless Graphics.frame_count % 2 == 0 || forced
update_shade
update_effects
end
#--------------------------------------------------------------------------
# * New method: dispose_light
#--------------------------------------------------------------------------
def dispose_light
if @light_effect
@light_effect.dispose
@light_effect = nil
@screen_shade = nil
end
end
#--------------------------------------------------------------------------
# * New method: update_shade
#--------------------------------------------------------------------------
def update_shade
if !@light_effect && $game_map.screen.shade.visible
refresh_lights
elsif $game_map.screen.shade.visible && @light_effect
@light_effect.update
elsif @light_effect && !$game_map.screen.shade.visible
dispose_light
end
end
#--------------------------------------------------------------------------
# * New method: refresh_lights
#--------------------------------------------------------------------------
def refresh_lights
@light_effect.dispose if @light_effect
@screen_shade = $game_map.screen.shade
@light_effect = Sprite_Light.new(@screen_shade, @viewport2)
$game_map.event_list.each {|event| event.refresh_lights }
@light_effect.update
end
#--------------------------------------------------------------------------
# * New method: update_effects
#--------------------------------------------------------------------------
def update_effects
return if !@light_effect || $game_map.screen.lights.empty?
$game_map.screen.lights.keys.each {|key| create_light(key) }
$game_map.screen.remove_light.clear
end
#--------------------------------------------------------------------------
# * New method: create_light
#--------------------------------------------------------------------------
def create_light(key)
effect = @light_effect.lights[key]
return if remove_light(key)
return if effect && effect.light == $game_map.screen.lights[key]
@light_effect.create_light($game_map.screen.lights[key])
end
#--------------------------------------------------------------------------
# * New method: remove_light
#--------------------------------------------------------------------------
def remove_light(key)
return false if !$game_map.screen.remove_light.include?(key)
@light_effect.remove_light(key)
$game_map.screen.lights.delete(key)
return true
end
end
#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
# This class performs the map screen processing.
#==============================================================================
class Scene_Map
#--------------------------------------------------------------------------
# * Alias method: pre_transfer
#--------------------------------------------------------------------------
alias :pre_transfer_ve_light_effects :pre_transfer
def pre_transfer
pre_transfer_ve_light_effects
if $game_player.new_map_id != $game_map.map_id
@spriteset.dispose_light
$game_map.screen.clear_lights
end
end
#--------------------------------------------------------------------------
# * Alias method: post_transfer
#--------------------------------------------------------------------------
alias :post_transfer_ve_light_effects :post_transfer
def post_transfer
$game_map.actors.each {|actor| actor.update_lantern(true) }
post_transfer_ve_light_effects
end
end
#==============================================================================
# ** Game_ShadeEffect
#------------------------------------------------------------------------------
# This class handles the shade layer data
#==============================================================================
class Game_ShadeEffect
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :visible
attr_reader :color
attr_accessor :blend
attr_accessor :opacity
#--------------------------------------------------------------------------
# * initialize
#--------------------------------------------------------------------------
def initialize
init_opacity
init_color
end
#--------------------------------------------------------------------------
# * init_opacity
#--------------------------------------------------------------------------
def init_opacity
@visible = false
@opacity = 0
@opacity_target = 0
@opacity_duration = 0
end
#--------------------------------------------------------------------------
# * init_color
#--------------------------------------------------------------------------
def init_color
@blend = 0
@color = Color.new(0, 0, 0, 0)
@color_duration = 0
@color_target = Color.new(0, 0, 0, 0)
end
#--------------------------------------------------------------------------
# * show
#--------------------------------------------------------------------------
def show
@visible = true
end
#--------------------------------------------------------------------------
# * hide
#--------------------------------------------------------------------------
def hide
@visible = false
end
#--------------------------------------------------------------------------
# * set_color
#--------------------------------------------------------------------------
def set_color(r = 0, g = 0, b = 0)
@color = get_colors(r, g, b)
@color_target = @color.clone
end
#--------------------------------------------------------------------------
# * change_opacity
#--------------------------------------------------------------------------
def change_opacity(op, d)
@opacity_target = op
@opacity_duration = [d, 0].max
@opacity = @opacity_target if @opacity_duration == 0
end
#--------------------------------------------------------------------------
# * change_color
#--------------------------------------------------------------------------
def change_color(r, g, b, d)
@color_target = get_colors(r, g, b)
@color_duration = [d, 0].max
@color = @color_target.clone if @color_duration == 0
end
#--------------------------------------------------------------------------
# * get_colors
#--------------------------------------------------------------------------
def get_colors(r, g, b)
color = Color.new(255 - r, 255 - g, 255 - b, 255) if @blend == 2
color = Color.new(r, g, b, 255) if @blend != 2
color
end
#--------------------------------------------------------------------------
# * update
#--------------------------------------------------------------------------
def update
update_opacity
update_color
end
#--------------------------------------------------------------------------
# * update_opacity
#--------------------------------------------------------------------------
def update_opacity
return if @opacity_duration == 0
d = @opacity_duration
@opacity = (@opacity * (d - 1) + @opacity_target) / d
@opacity_duration -= 1
end
#--------------------------------------------------------------------------
# * update_color
#--------------------------------------------------------------------------
def update_color
return if @color_duration == 0
d = @color_duration
@color.red = (@color.red * (d - 1) + @color_target.red) / d
@color.green = (@color.green * (d - 1) + @color_target.green) / d
@color.blue = (@color.blue * (d - 1) + @color_target.blue) / d
@color_duration -= 1
end
end
#==============================================================================
# ** Game_LightEffect
#------------------------------------------------------------------------------
# This class handles the light sprite data
#==============================================================================
class Game_LightEffect
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :id
attr_accessor :name
attr_accessor :info
attr_accessor :opacity
attr_accessor :x
attr_accessor :y
attr_accessor :variance
attr_accessor :speed
attr_accessor :zoom
attr_accessor :opacity_target
attr_accessor :opacity_duration
#--------------------------------------------------------------------------
# * change_opacity
#--------------------------------------------------------------------------
def change_opacity(op, d)
@opacity_target = op
@opacity_duration = [d, 0].max
@opacity = @opacity_target if @opacity_duration == 0
end
end
#==============================================================================
# ** Game_LightBitmap
#------------------------------------------------------------------------------
# This class handles the bitmpas of each light spot
#==============================================================================
class Game_LightBitmap
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :light
attr_reader :bitmap
attr_reader :opacity
attr_reader :x
attr_reader :y
#--------------------------------------------------------------------------
# * initialize
#--------------------------------------------------------------------------
def initialize(light)
@light = light
init_basic
update
end
#--------------------------------------------------------------------------
# * init_basic
#--------------------------------------------------------------------------
def init_basic
@bitmap = Cache.lights(@light.name)
@target = set_target
@opacity = @light.opacity
@speed = @light.speed
@variance = 0.0
@light.opacity_duration = 0
@light.opacity_target = 0
end
#--------------------------------------------------------------------------
# * width
#--------------------------------------------------------------------------
def width
@bitmap.width * @light.zoom / 100.0
end
#--------------------------------------------------------------------------
# * height
#--------------------------------------------------------------------------
def height
@bitmap.height * @light.zoom / 100.0
end
#--------------------------------------------------------------------------
# * update
#--------------------------------------------------------------------------
def update
update_position
update_opacity
update_variance
end
#--------------------------------------------------------------------------
# * update_position
#--------------------------------------------------------------------------
def update_position
@target.is_a?(Game_Character) ? character_position : map_position
end
#--------------------------------------------------------------------------
# * character_position
#--------------------------------------------------------------------------
def character_position
@x = $game_map.adjust_x(@target.real_x) * 32 - width / 2 + @light.x + 16
@y = $game_map.adjust_y(@target.real_y) * 32 - height / 2 + @light.y + 16
end
#--------------------------------------------------------------------------
# * map_position
#--------------------------------------------------------------------------
def map_position
@x = $game_map.adjust_x(@target[:x]) * 32 - width / 2 + @light.x + 16
@y = $game_map.adjust_y(@target[:y]) * 32 - height / 2 + @light.y + 16
end
#--------------------------------------------------------------------------
# * change_opacity
#--------------------------------------------------------------------------
def change_opacity(op, d)
@light.opacity_target = op
@light.opacity_duration = [d, 0].max
@light.opacity = @light.opacity_target if @light.opacity_duration == 0
end
#--------------------------------------------------------------------------
# * update_opacity
#--------------------------------------------------------------------------
def update_opacity
return if @light.opacity_duration == 0
d = @light.opacity_duration
@light.opacity = (@light.opacity * (d - 1) + @light.opacity_target) / d
@light.opacity_duration -= 1
end
#--------------------------------------------------------------------------
# * update_variance
#--------------------------------------------------------------------------
def update_variance
@variance += @speed
@speed *= -1 if @variance.abs > @light.variance.abs
@opacity = [[@light.opacity + @variance, 0].max, 255].min
end
#--------------------------------------------------------------------------
# * dispose
#--------------------------------------------------------------------------
def dispose
@bitmap.dispose
end
#--------------------------------------------------------------------------
# * set_target
#--------------------------------------------------------------------------
def set_target
if @light.info.keys.include?(:actor)
target = $game_map.actors[@light.info[:actor] - 1]
elsif @light.info.keys.include?(:event)
target = $game_map.events[@light.info[:event]]
elsif @light.info.keys.include?(:vehicle)
target = $game_map.vehicles[@light.info[:vehicle]]
else
target = @light.info
end
target
end
end
#==============================================================================
# ** Sprite_Light
#------------------------------------------------------------------------------
# This sprite is used to display the light effects
#==============================================================================
class Sprite_Light < Sprite_Base
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :lights
#--------------------------------------------------------------------------
# * initialize
#--------------------------------------------------------------------------
def initialize(shade, viewport)
super(viewport)
@shade = shade
self.bitmap = Bitmap.new(Graphics.width, Graphics.height)
self.blend_type = @shade.blend
self.opacity = @shade.opacity
self.z = 100
@lights = {}
end
#--------------------------------------------------------------------------
# * map_x
#--------------------------------------------------------------------------
def map_x
$game_map.adjust_x($game_map.display_x)
end
#--------------------------------------------------------------------------
# * map_y
#--------------------------------------------------------------------------
def map_y
$game_map.adjust_y($game_map.display_y)
end
#--------------------------------------------------------------------------
# * update
#--------------------------------------------------------------------------
def update
super
self.ox = map_x
self.oy = map_y
update_opacity
update_lights
end
#--------------------------------------------------------------------------
# * update lights
#--------------------------------------------------------------------------
def update_lights
rect = Rect.new(map_x, map_y, Graphics.width, Graphics.height)
self.bitmap.fill_rect(rect, color)
draw_light_effects
end
#--------------------------------------------------------------------------
# * color
#--------------------------------------------------------------------------
def color
@shade.color
end
#--------------------------------------------------------------------------
# * draw_light_effects
#--------------------------------------------------------------------------
def draw_light_effects
@lights.values.each do |light|
light.update
next if !on_screen?(light)
draw_light(light)
end
end
#--------------------------------------------------------------------------
# * on_sceen?
#--------------------------------------------------------------------------
def on_screen?(light)
ax1 = light.x
ay1 = light.y
ax2 = light.x + light.width
ay2 = light.y + light.height
bx1 = map_x
by1 = map_y
bx2 = map_x + Graphics.width
by2 = map_y + Graphics.height
check1 = ax1.between?(bx1, bx2) || ax2.between?(bx1, bx2) ||
ax1 < bx1 && ax2 > bx2
check2 = ay1.between?(by1, by2) || ay2.between?(by1, by2) ||
ay1 < by1 && ay2 > by2
check1 && check2
end
#--------------------------------------------------------------------------
# * draw_light
#--------------------------------------------------------------------------
def draw_light(light)
img = light.bitmap
rect = Rect.new(light.x, light.y, light.width, light.height)
self.bitmap.stretch_blt(rect, img, img.rect, light.opacity)
end
#--------------------------------------------------------------------------
# * update_opacity
#--------------------------------------------------------------------------
def update_opacity
@shade.update
self.opacity = @shade.opacity
self.blend_type = @shade.blend
end
#--------------------------------------------------------------------------
# * create_light
#--------------------------------------------------------------------------
def create_light(light)
remove_light(light.id)
@lights[light.id] = Game_LightBitmap.new(light)
end
#--------------------------------------------------------------------------
# * remove_light
#--------------------------------------------------------------------------
def remove_light(id)
@lights.delete(id) if @lights[id]
end
#--------------------------------------------------------------------------
# * dispose
#--------------------------------------------------------------------------
def dispose
super
@lights.values.each {|light| light.dispose unless light.bitmap.disposed? }
end
end
Вот тебе пример: https://yadi.sk/d/3cFLyFYvwsoPM
Так есть идеи ?