# ▽△▽ XRXSv9. BaST-VX.PW1. アタックパワー&ガードパワー ▽△▽ # # publish 2011/ 1/14 # update - /22b # # ※動作のためには #  ・「ターンシフトエンジン」 #  ・「ベーシックセッティング」(4:パワー減算) #  ・「属性活性エネルギー」が必要です。 # #============================================================================== # カスタマイズポイント #============================================================================== module XRXSV9 # # アタックパワーに表示するアイコンインデックス(物理,物防,魔力,精神 の順) # ( 神聖属性などによるMND攻撃は #  XRXSV44.「ベーシックセッティング」側で設定されます ) # PWIconIndexATK = 1 PWIconIndexDEF = 52 PWIconIndexSPI = 20 PWIconIndexMND = 20 # # ナンバー描画に使うナンバー画像(Graphics/System) # PWNumberS = "NumberL" # # ナンバーぴったりSE # PWSetSE = RPG::SE.new("Open3", 80, 150) # # パワー表示にかける時間[単位:F] (10,20,30,45以外) (回転時間・保持時間) # PWNumberD = 14 PWNumberD2 = 42 end #============================================================================== # パワー変化スキルの処理 #============================================================================== module XRXS_RPGSkillPower def power_increase n = 0 self.note.gsub(/\\pow\[([+-]*?[0-9]+?)\]/) do n += $1.to_i end return n end end class RPG::UsableItem include XRXS_RPGSkillPower end class Scene_Battle < Scene_Base alias xrxsv9ex1_display_failure display_failure def display_failure(target, obj) if obj.is_a?(RPG::UsableItem) and obj.power_increase != 0 return end xrxsv9ex1_display_failure(target, obj) end end #============================================================================== # パワーの初期設定と表示 #============================================================================== class Scene_Battle < Scene_Base def battler_power_initialize for battler in self.members basic_skill = nil for skill in battler.skills if skill.base_damage >= 1 basic_skill = skill break end end battler.power_set(basic_skill) end end end #============================================================================== # パワーの表示と、ダメージ計算用のパワー値をセット(「パワー減算」に必須の処理) #============================================================================== class Scene_Battle < Scene_Base def display_power(targets, action) return if @quick_mode @active_action.battler.power_set(@active_action.skill) if @active_action.skill and @active_action.skill.base_damage <= 0 @active_action.battler.display_power_on = false end if @active_action.skill and @active_action.skill.base_damage >= 1 wait(XRXSV9::PWNumberD) else for target in targets target.display_power_on = false end end end end #============================================================================== # パワー表示のクリア - アクション内部 #============================================================================== class Scene_Battle < Scene_Base def clear_power(targets) obj = (@active_action.skill or @active_action.item) for target in targets if obj.is_a?(RPG::UsableItem) target.power_increase_turn = target.power_increase_turn.to_i + obj.power_increase end if obj and obj.power_reset target.power_increase_turn = 0 end if @quick_mode changed = false battler = (@active_action_saved ? @active_action_saved.battler : nil) if target != battler and target.display_power_type.to_i >= 1 last_power = target.power target.power_refresh changed |= (last_power != target.power) target.display_power_on = true if changed end if battler and battler.power >= 1 last_power = battler.power battler.power_refresh changed |= (last_power != battler.power) end wait(XRXSV9::PWNumberD) if changed else @active_battler.display_power_clear = true target.display_power_clear = true end end end end #============================================================================== # パワー表示のオールクリア #============================================================================== class Scene_Battle < Scene_Base def allclear_power for battler in self.members battler.display_power_clear = true end end end #============================================================================== # バトラースプライト - パワー表示処理 #============================================================================== class Game_Battler #attr_accessor :power #attr_accessor :display_power_type #attr_accessor :display_power_on attr_accessor :display_power_clear attr_accessor :display_spells_on end class Sprite_Battler < Sprite_Base alias xrxsv9pw1_setup_new_effect setup_new_effect def setup_new_effect xrxsv9pw1_setup_new_effect if @battler.display_spells_on @setspells_sprite ||= Sprite_SetSpells.new(self) @setspells_sprite.refresh @battler.display_spells_on = false end if @battler.display_power_on @power_sprite ||= Sprite_ActionPower.new @power_sprite.set(@battler.display_power_type, @battler.power) @power_sprite.x = self.x @power_sprite.y = self.y - 36 @battler.display_power_on = nil end if @battler.display_power_clear @power_sprite.dispose if @power_sprite @power_sprite = nil @battler.display_power_type = nil @battler.display_power_clear = nil end end alias xrxsv9pw1_update_effect update_effect def update_effect xrxsv9pw1_update_effect if @power_sprite @power_sprite.update end end alias xrxsv9pw1_dispose dispose def dispose @setspells_sprite.dispose if @setspells_sprite xrxsv9pw1_dispose end end #============================================================================== # セットスペルスプライト #============================================================================== class Sprite_SetSpells < Sprite_Base def initialize(battler_sprite) @battler_sprite = battler_sprite super() self.bitmap = Bitmap.new(120, 24) icon_index = 20 @icon_rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24) refresh end def refresh n = @battler_sprite.battler.set_spells.size self.bitmap.clear for i in 0...n self.bitmap.blt(24 * i, 0, Cache.system("Iconset"), @icon_rect) end self.x = @battler_sprite.x self.y = @battler_sprite.y self.ox = n * 12 end end #============================================================================== # パワー表示スプライト - 共通項 #============================================================================== class Sprite_ActionPower < Sprite_Base def initialize super() self.bitmap = Cache.system("Iconset") @type = 0 type_reset self.ox = 24 self.oy = 24 number_skin = Cache.system(XRXSV17::NumberL) @number_sprite = RapidNumber.new(0,0,number_skin) @number_sprite.set(0) @power = 0 @power_dest = 0 @moved = false @speed = 8 end def number_zoom return 1 end def icon_index case @type when 0 i = XRXSV9::PWIconIndexATK when 1 i = XRXSV9::PWIconIndexDEF when 2 i = XRXSV9::PWIconIndexSPI when 3 i = XRXSV9::PWIconIndexMND end return i end def type_reset i = self.icon_index self.src_rect = Rect.new(i % 16 * 24, i / 16 * 24, 24, 24) end def dispose @number_sprite.dispose super end def set(type, power) if @type != type @type = type type_reset end if @power_dest != power @power_dest = power @speed = [((@power_dest - @power).abs + XRXSV9::PWNumberD - 1) / XRXSV9::PWNumberD, 1].max reset_position end end def update super if @power != @power_dest n = @power_dest - @power @power = (n >= 1 ? [@power + @speed, @power_dest].min : [@power - @speed, @power_dest].max) @number_sprite.set(@power) @moved = true if @power == @power_dest @moved = false XRXSV9::PWSetSE.play end end end def moving? return @moved end def x=(n) super reset_position end def y=(n) super reset_position end def reset_position p = @power_dest.to_i n = 0 while p >= 1 p /= 10 n += 1 end n = 1 if n == 0 w = Cache.system(XRXSV17::NumberL).width / 10 @number_sprite.x = self.x + n * w @number_sprite.y = self.y end end #============================================================================== # --- ラピッドナンバー スプライトシステム --- #============================================================================== class RapidNumber def initialize(x, y, skin, viewport = nil) @viewport = viewport @skin = skin @x = x @y = y @z = 105 @opacity = 255 @w = skin.rect.width / 10 @h = skin.rect.height @sprites = [] @number_bitmaps = [] rect = Rect.new(0, 0, @w, @h) for i in 0..9 rect.x = i * @w bitmap = Bitmap.new(@w, @h) bitmap.blt(0, 0, @skin, rect) @number_bitmaps[i] = bitmap end end def set(number) number_digits = [] loop do number_digits.push(number % 10) number /= 10 break if number == 0 end need_reset = false for i in 0...number_digits.size if @sprites[i] == nil @sprites[i] = Sprite.new(@viewport) need_reset = true end @sprites[i].bitmap = @number_bitmaps[number_digits[i]] end for i in number_digits.size...@sprites.size @sprites[i].bitmap = nil end reset if need_reset end def reset for i in 0...@sprites.size sprite = @sprites[i] sprite.x = @x - @w * i sprite.y = @y sprite.z = @z sprite.ox = @w sprite.oy = @h sprite.opacity = @opacity end end def x=(n) @x = n reset end def y=(n) @y = n reset end def z=(n) @z = n reset end def viewport=(viewport) @sprites.each{|sprite| sprite.viewport = viewport } end def dispose @sprites.each{|sprite| sprite.dispose } end def opacity=(n) @opacity = n reset end end