# ▽△▽ XRXSv52. 属性活性エネルギー (BaST専用ver.) ▽△▽ # # publish 2011/ 1/ 5 # update - /22a # #============================================================================== # カスタマイズポイント #============================================================================== module XRXSV52 # # 活性エネルギー1つにつき上昇する属性一致スキルの「基本ダメージ」上昇量 # EnergyPowerUp = 0 # # 活性エネルギー属性として扱う属性ID配列 #  (格闘属性・斬撃属性などを対象外にし、 #   炎水などに限定するための機能です) # Elements = [9,10,11,12,13,14,15,16] # # 属性アイコンインデックス (式 : Icons[属性ID] = アイコンインデックス ) # Icons = [] Icons[9] = 104 Icons[10] = 105 Icons[11] = 106 Icons[12] = 107 Icons[13] = 108 Icons[14] = 109 Icons[15] = 110 Icons[16] = 111 # # 活性エネルギー最大保持数 # MAX = 8 # # 最大オーバー時の処理 (0:蓄積しなくなる、 1:古いものから消える) # ThenOver = 1 # # \en_plus[] が記述されたスキル使用時、 # []内に指定された属性の活性エネルギーを追加します。 # # フィールド活性を表示する? # FieldEnergyEnable = true end #============================================================================== # マテリアル対応 #============================================================================== class Material end #============================================================================== # 属性アイコンの描画への対応 #============================================================================== class Window_Base < Window def draw_element_icon(element_id, x, y, enabled = true) icon_index = XRXSV52::Icons[element_id] draw_icon(icon_index, x, y, enabled) if icon_index end end #============================================================================== # 活性エネルギーによるスキルのパワーアップ #============================================================================== if XRXSV52::EnergyPowerUp >= 1 class Game_BattleAction alias xrxsv52_skill skill def skill skill = xrxsv52_skill if skill skill = skill.dup for element_id in (self.friends_unit.element_energies + $game_map.element_energies) if skill.element_set.include?(element_id) if skill.base_damage >= 1 skill.base_damage += XRXSV52::EnergyPowerUp elsif skill.base_damage <= -1 skill.base_damage -= XRXSV52::EnergyPowerUp end end end end return skill end end end #============================================================================== # ユニット・マップ保持の属性活性エネルギー #============================================================================== class Game_Unit def element_energies @element_energies ||= [] return @element_energies end case XRXSV52::ThenOver when 1 def add_energy(obj) self.element_energies.pop while self.element_energies.size >= XRXSV52::MAX self.element_energies.unshift(obj) end else def add_energy(obj) if self.element_energies.size < XRXSV52::MAX self.element_energies.unshift(obj) end end end def remove_energy(obj) i = self.element_energies.index(obj) if i self.element_energies.delete_at(i) end end end class Game_Map def element_energies @element_energies ||= [] return @element_energies end end #============================================================================== # スキルの使用可能判定/生成属性 #============================================================================== class RPG::UsableItem def en_costs set = [] self.note.gsub(/\\en_cost\[(.+?)\]/) do for str in $1.split(/,/) set.push(str.to_i) if XRXSV52::Elements.include?(str.to_i) end end return set end def en_needs set = [] self.note.gsub(/\\en_need\[(.+?)\]/) do for str in $1.split(/,/) set.push(str.to_i) if XRXSV52::Elements.include?(str.to_i) end end return set end def en_plus_set set = [] self.note.gsub(/\\en_plus\[(.+?)\]/) do for str in $1.split(/,/) set.push(str.to_i) if XRXSV52::Elements.include?(str.to_i) end end return set end end module XRXSV52_BattlerEx def skill_can_use?(skill) set2 = (self.action.friends_unit.element_energies + $game_map.element_energies) for element_id in skill.en_needs set_index = set2.index(element_id) if set_index set2.delete_at(set_index) else return false end end if not self.action.friends_unit.en_cost_ok?(skill.en_costs) return false end return super(skill) end end class Game_Actor < Game_Battler include XRXSV52_BattlerEx end class Game_Enemy < Game_Battler include XRXSV52_BattlerEx end #============================================================================== # スキル判定に利用する ユニットのエネルギー処理 #============================================================================== class Game_Unit def en_cost_ok?(en_costs) set2 = (self.element_energies + $game_map.element_energies) for element_id in en_costs set_index = set2.index(element_id) if set_index set2.delete_at(set_index) else return false end end return true end def pay_en_costs(en_costs) field_energy_used = false for element_id in en_costs if not field_energy_used and $game_map.element_energies.include?(element_id) field_energy_used = true next end self.remove_energy(element_id) end end end #============================================================================== # スキルアクション実行時の処理 #============================================================================== class Scene_Battle < Scene_Base alias xrxsv52_execute_action_skill execute_action_skill def execute_action_skill xrxsv52_remove_energy_cost xrxsv52_execute_action_skill xrxsv52_skill_energize end def xrxsv52_remove_energy_cost skill = @active_battler.action.skill if @active_battler.set_spells.include?(skill) @active_battler.set_spells.delete(skill) else @active_battler.action.friends_unit.pay_en_costs(skill.en_costs) end @energy_window.refresh if @energy_window end def xrxsv52_skill_energize skill = @active_battler.action.skill if skill for element_id in skill.en_plus_set @active_battler.action.friends_unit.add_energy(element_id) end end @energy_window.refresh if @energy_window end end #============================================================================== # BaSTへの登録 #============================================================================== module XRXSV52_ExtraWindows def create_extra_windows @energy_window = Window_ElementEnergy.new super end def dispose_extra_windows super @energy_window.dispose end end class Scene_Battle < Scene_Base include XRXSV52_ExtraWindows end #============================================================================== # 属性活性エネルギー表示ウィンドウ #============================================================================== class Window_ElementEnergy < Window_Base def initialize super(-16,-16,Graphics.width + 32, 88) self.opacity = 0 refresh end def refresh self.contents.clear w = self.contents.width / 2 dest_rect = Rect.new(0,0,w, 28) skin_rect = Rect.new(0,64,64,64) self.contents.stretch_blt(dest_rect, self.windowskin, skin_rect, 96) dest_rect = Rect.new(w,0,w, 28) skin_rect = Rect.new(0,64,64,64) self.contents.stretch_blt(dest_rect, self.windowskin, skin_rect,192) dest_rect = Rect.new(0,0,w, 16) skin_rect = Rect.new(80,0,32,16) self.contents.stretch_blt(dest_rect, self.windowskin, skin_rect, 96) dest_rect = Rect.new(w,0,w, 16) skin_rect = Rect.new(80,0,32,16) self.contents.stretch_blt(dest_rect, self.windowskin, skin_rect, 192) # draw_x = Graphics.width / 2 + 32 for i in 0...XRXSV52::MAX obj = $game_party.element_energies[i] if obj.is_a?(Material) icon_index = obj.item.icon_index draw_icon(icon_index, draw_x, 4) else draw_element_icon(obj.to_i, draw_x, 4) end draw_x += 28 end draw_x = Graphics.width / 2 - 32 - 24 for i in 0...XRXSV52::MAX element_id = $game_troop.element_energies[i] if element_id.to_i >= 1 draw_element_icon(element_id, draw_x, 4) end draw_x -= 28 end if XRXSV52::FieldEnergyEnable draw_x = Graphics.width / 2 - 12 w = Graphics.width / 2 - 16 dest_rect = Rect.new(w, 0, 32, 28) skin_rect = Rect.new(0,64,64,64) self.contents.clear_rect(dest_rect) self.contents.stretch_blt(dest_rect, self.windowskin, skin_rect, 128) skin_rect = Rect.new(64,0,16,16) self.contents.blt(w, 0, self.windowskin, skin_rect, 192) skin_rect = Rect.new(112,0,16,16) self.contents.blt(w + 16, 0, self.windowskin, skin_rect, 192) skin_rect = Rect.new(64,48,16,16) self.contents.blt(w, 16, self.windowskin, skin_rect, 192) skin_rect = Rect.new(112,48,16,16) self.contents.blt(w+16, 16, self.windowskin, skin_rect, 192) draw_y = 4 for i in 0...$game_map.element_energies.size element_id = $game_map.element_energies[i] if element_id.to_i >= 1 draw_element_icon(element_id, draw_x, draw_y) draw_y += 8 end end end end end