#▽△▽ XRXSv9. BaST-VX.CP1. 行動メンバーリスト ▽△▽ # # publish 2010/ 3/ 5 # update - 11/ 1/ 5 # #============================================================================== # カスタマイズポイント #============================================================================== module XRXSV9 # # 画像スキン(Graphics/System) # BattleCPLineW = "BattleCPLineW" BattleCPLineS = "BattleCPLineS" BattleCPBack = "BattleCPBack" # # 用語 # CPEnemy_S = "ENEMY" CPEnemyIndex = ["A","B","C","D","E","F","G","H"] CPBoss_S = "BOSS" # # 先頭エネミーをボス表記するトループID配列 # CPBossBattleTroopID = [28,29,30] end #============================================================================== # ボスバトル?の取得 #============================================================================== class Game_Troop < Game_Unit def boss? return XRXSV9::CPBossBattleTroopID.include?(@troop_id) end end #============================================================================== # カウンター行動への対応 #============================================================================== class Game_BattleAction attr_accessor :counter end #============================================================================== # CPセット #============================================================================== class Spriteset_CP #-------------------------------------------------------------------------- # ○ オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(members, info_viewport = nil) @members = members @sprites = [] @reserve_actions = [] create_sprites @line_sprite1 = Sprite.new @line_sprite1.bitmap = (Cache.system(XRXSV9::BattleCPLineS) rescue nil) @line_sprite1.x = self.x - 16 @line_sprite1.y = self.y - 10 @line_sprite1.z = self.z @line_sprite2 = Sprite.new @line_sprite2.bitmap = (Cache.system(XRXSV9::BattleCPLineW) rescue nil) @line_sprite2.x = self.x - 16 @line_sprite2.z = self.z @opacity = 255 refresh() end def create_sprites for sprite in @sprites sprite.dispose end @sprites.clear for member in @members sprite = Sprite_CP.new(member) sprite.x = self.x @sprites.push(sprite) end end def reset_members(members) @members = members create_sprites refresh end #-------------------------------------------------------------------------- # 位置 #-------------------------------------------------------------------------- def x return Graphics.width - 80 end def y n = 128 * Graphics.height / 416 n = Graphics.height - n - self.display_max * 24 - 12 return n end def z return 202 end #-------------------------------------------------------------------------- # 最大ライン数 #-------------------------------------------------------------------------- def display_max n = 10 * Graphics.height / 416 return n end def default_standby_lines return 2 end #-------------------------------------------------------------------------- # 可視状態 #-------------------------------------------------------------------------- def visible=(b) if b refresh else for sprite in @sprites sprite.visible = false end end @line_sprite1.visible = b @line_sprite2.visible = b end #-------------------------------------------------------------------------- # ○ 状態更新 #-------------------------------------------------------------------------- def refresh(reserve_actions = nil) if reserve_actions != nil @reserve_actions = reserve_actions end all_battlers = @members.dup displayed_battlers = [] y = self.y n = 0 for action in @reserve_actions next if action.counter battler = action.battler next if displayed_battlers.include?(battler) i = @members.index(battler) @sprites[i].visible = (battler.exist? and (n < self.display_max)) next unless battler.exist? next if i == nil @sprites[i].y = y + n * 24 displayed_battlers.push(battler) n += 1 end n = [n, self.default_standby_lines].max y += n * 24 @line_sprite2.y = y y += 10 member = @members - displayed_battlers member.sort!{|a, b| b.cp_per48 - a.cp_per48 } for battler in member i = @members.index(battler) @sprites[i].visible = (battler.exist? and (n < self.display_max)) next unless battler.exist? next if i == nil @sprites[i].y = y y += 24 n += 1 end update end #-------------------------------------------------------------------------- # ○ フレーム更新 #-------------------------------------------------------------------------- def update for sprite in @sprites sprite.update end if $game_troop.interpreter.running? or $game_message.visible self.opacity -= 32 if self.opacity > 0 else self.opacity += 32 if self.opacity < 255 end end #-------------------------------------------------------------------------- # ○ 解放 #-------------------------------------------------------------------------- def dispose for sprite in @sprites sprite.dispose end @line_sprite1.dispose @line_sprite2.dispose end #-------------------------------------------------------------------------- # 不透明度の設定 #-------------------------------------------------------------------------- def opacity return @opacity end def opacity=(n) @opacity = n for sprite in @sprites sprite.opacity = n end @line_sprite1.opacity = n @line_sprite2.opacity = n end end #============================================================================== # CPスプライト #============================================================================== class Sprite_CP < Sprite_Base attr_reader :battler #-------------------------------------------------------------------------- # ○ オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(battler) super(nil) @battler = battler make_sprite make_back_sprite self.z = 202 end #-------------------------------------------------------------------------- # ○ スプライトの作成 #-------------------------------------------------------------------------- def make_sprite if @battler.is_a?(Game_Actor) bitmap = @battler.miniface rescue Bitmap.new(48,24) else bitmap = Bitmap.new(48, 24) index = @battler.index index -= 1 if $game_troop.boss? enemy_s = (index == -1 ? XRXSV9::CPBoss_S : XRXSV9::CPEnemy_S) index_s = (index == -1 ? nil : XRXSV9::CPEnemyIndex[@battler.index]) n = (index == -1 ? 18 : 10) face = Bitmap.new(48, 24) face.fill_rect(face.rect, Color.new(0, 0, 0, 160)) face.font.color = Color.new(255, 128, 128, 255) face.font.size = n face.draw_text(9, 22 - n, 25, n, enemy_s) if index_s face.font.color = Color.new(255, 255, 255, 255) face.font.size = 20 face.draw_text(36, 2,10,20, index_s) end bitmap.stretch_blt(bitmap.rect, face, face.rect) end self.bitmap = bitmap end def make_back_sprite sprite = Sprite_Base.new sprite.bitmap = (Cache.system(XRXSV9::BattleCPBack) rescue nil) @back_sprite = sprite end #-------------------------------------------------------------------------- # ○ フレーム更新 #-------------------------------------------------------------------------- def update self.ox = (@battler.cp_per48 - 48) self.opacity = @back_sprite.opacity end #-------------------------------------------------------------------------- # ○ 解放/位置 #-------------------------------------------------------------------------- def dispose @back_sprite.dispose super end def x=(n) @back_sprite.x = n super end def y=(n) @back_sprite.y = n super end def z=(n) @back_sprite.y = n - 1 super end def visible=(b) @back_sprite.visible = b super end def opacity=(n) @back_sprite.opacity = n super(@battler.cp_max? ? n : n/2) end end