И так что то никто не ответил. Спрошу прямо. Можно ли с помощью скрипта проверить является ли участок в определенных координатах проходимым.
И так что то никто не ответил. Спрошу прямо. Можно ли с помощью скрипта проверить является ли участок в определенных координатах проходимым.
Мой канал на Yotube: Канал Alexandr_5
Если не говорю движок то это RPG Maker MZ Steam версия!
Последний раз редактировалось Alexandr_7; 15.10.2016 в 09:14.
Мой канал на Yotube: Канал Alexandr_5
Если не говорю движок то это RPG Maker MZ Steam версия!
Ребят , а как сделать что бы свет исходил от кристалла к примеру ?
Если ты говоришь о движке 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
Последний раз редактировалось Alisa; 15.10.2016 в 12:06.
Спойлер Мои проекты:
Замороженные:
Каменная слеза
Ключ 2
Sagittarius
Конкурсные:
Я не боюсь
Дандженариум
Зелёные: Миссия Джонни
Страхи
Остров палача
Завершённые:
Ключ
Тема с ретро ресурсами
У меня М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
YouTube-канал Мэйкерского Засланца - http://www.youtube.com/channel/UCCny...MakerZaslanetz
Группа в ВК - https://vk.com/public120874868
Спойлер :
Ну и немного большой и чистой любви
Спойлер :Гость - Так! Мы отошли от темы! Ваши предложения, кого нужно забанить, чтобы не было срачей и тралей?
Kerloeda - сосало завали, не с тобой говорю, ты уже показал какой ты собеседник.
Алюка - «Нам насрать на низшие существа!» — раздался пронзительный голос со стороны параши.
Но пацаны, как всегда, не обратили внимания на это визгливое кукареканье.
Доктор СИД - же в который раз захожу на форум и вижу одну флудоту, срачи, троллоту жирности 100%, бессмысленные или идиотские темы, и безыгорье. Всё в говне, всё засрали, черт вас дери!
Так есть идеи ?
Эту тему просматривают: 19 (пользователей: 0 , гостей: 19)
Социальные закладки