#============================================================================== # [ZTBS] -Zenith Tactical Battle System- タクティカルバトルシステム #  〜+B20:行動順表示〜      by 水夜 #  ver0.90  Zenith Creation (http://zenith.ifdef.jp/) #------------------------------------------------------------------------------ # マップ上での戦略的なバトルを実現。 #============================================================================== class Game_Enemy def description case self.id #============================================================================== # ↓↓設定箇所は説明の下にあります↓↓ #============================================================================== #------------------------------------------------------------------------------ # when エネミーID # return "説明" # ※ 改行は御馴染みの「\n」を使うっス。 #============================================================================== # ここより下が設定箇所です #============================================================================== when 1 # ゴーダー return <<-"EOM" いかにも小悪党といった容姿だが、 人望は厚い山賊の頭領。 襲うのは俗に言う越○屋系だけだが、 仲間に危害を加える者にも容赦しない。 EOM when 10 # 根暗マンさー return <<-"EOM" 根暗なアンデッドの術士。 炎と闇の属性の術を使える、 そのためか炎には弱くない。 だが実は闇属性に耐性がない。 EOM else return "" end end end class Bitmap < Object #-------------------------------------------------------------------------- # ● 複数行の描画 #-------------------------------------------------------------------------- def draw_multy_text(x, y, w, h, text, align = 0) words = text.split(/\n/) for i in 0...words.size draw_text(x, y + h * i, w, h, words[i], align) end end end #============================================================================== # ■ Window_TActors #============================================================================== class Window_TActors < Window_Selectable #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :data # データ #-------------------------------------------------------------------------- # ● オブジェクト初期化 # actor : アクター #-------------------------------------------------------------------------- def initialize super(0, 64, 320, 416) @status = Window_TStatus.new(nil) @temp_index = -1 refresh self.index = 0 end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose @status.dispose super end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh if self.contents != nil self.contents.dispose self.contents = nil end if defined?(XRXS_CP_SYSTEM) @data = ($game_system.tactics_actors.keys + $game_system.tactics_enemies.keys) @data.sort!{|a, b| if $game_system.tactics_actors[a] != nil result_a = $game_system.tactics_actors[a] else result_a = $game_system.tactics_enemies[a] end if $game_system.tactics_actors[b] != nil result_b = $game_system.tactics_actors[b] else result_b = $game_system.tactics_enemies[b] end result_b.cp_lineamount <=> result_a.cp_lineamount } @data += $game_system.tactics_dead_actors.keys else @data = ($game_system.tactics_actors.keys + $game_system.tactics_dead_actors.keys) @data.sort!{|a, b| if $game_system.tactics_actors[a] != nil result_a = $game_system.tactics_actors[a] else result_a = $game_system.tactics_dead_actors[a] end if $game_system.tactics_actors[b] != nil result_b = $game_system.tactics_actors[b] else result_b = $game_system.tactics_dead_actors[b] end result_a.id <=> result_b.id } @data += $game_system.tactics_enemies.keys.sort end # 項目数が 0 でなければビットマップを作成し、全項目を描画 @item_max = @data.size if @item_max > 0 self.contents = Bitmap.new(width - 32, row_max * 32) for i in 0...@item_max draw_item(i) end end end #-------------------------------------------------------------------------- # ● 項目の描画 # index : 項目番号 #-------------------------------------------------------------------------- def draw_item(index) if $game_system.tactics_actors.keys.include?(@data[index]) battler = $game_system.tactics_actors[@data[index]] self.contents.font.color = normal_color elsif $game_system.tactics_dead_actors.keys.include?(@data[index]) battler = $game_system.tactics_dead_actors[@data[index]] self.contents.font.color = disabled_color else battler = $game_system.tactics_enemies[@data[index]] self.contents.font.color = knockout_color end x = 4 y = index * 32 self.contents.draw_text(x, y, 120, 32, battler.name) self.contents.font.color = normal_color draw_actor_state(battler, x + 136, y) end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super if @temp_index != @index @temp_index = @index if $game_system.tactics_actors.keys.include?(@data[index]) @status.battler = $game_system.tactics_actors[@data[index]] elsif $game_system.tactics_dead_actors.keys.include?(@data[index]) @status.battler = $game_system.tactics_dead_actors[@data[index]] else @status.battler = $game_system.tactics_enemies[@data[index]] end end end end #============================================================================== # ■ WindowTStatus #============================================================================== class Window_TStatus < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # battler : バトラー #-------------------------------------------------------------------------- def initialize(battler = nil) super(320, 64, 320, 416) self.contents = Bitmap.new(width - 32, height - 32) self.back_opacity = 160 self.z = 700 @battler = battler @cache = Bitmap.new(288, 384) @cache_battler = nil refresh end #-------------------------------------------------------------------------- # ● バトラーの設定 #-------------------------------------------------------------------------- def battler=(battler) if @cache_battler == battler @battler = battler self.contents.clear self.contents.blt(0, 0, @cache, Rect.new(0, 0, 288, 384)) elsif @battler != battler @battler = battler refresh @cache.clear @cache.blt(0, 0, self.contents, Rect.new(0, 0, 288, 384)) @cache_battler = @battler end end #-------------------------------------------------------------------------- # ● 顔グラフィックの描画 # actor : アクター # x : 描画先 X 座標 # y : 描画先 Y 座標 #-------------------------------------------------------------------------- def draw_face(x, y) begin bitmap = RPG::Cache.picture("face@#{@battler.name}") src_rect = Rect.new(0, 0, bitmap.width, bitmap.height) self.contents.blt(x, y, bitmap, src_rect) rescue Errno::ENOENT end end #-------------------------------------------------------------------------- # ● パラメータの描画 # actor : アクター # x : 描画先 X 座標 # y : 描画先 Y 座標 # type : パラメータの種類 (0〜6) #-------------------------------------------------------------------------- def draw_actor_parameter(actor, x, y, type) case type when 0 parameter_name = $data_system.words.atk parameter_value = actor.atk when 1 parameter_name = $data_system.words.pdef parameter_value = actor.pdef when 2 parameter_name = $data_system.words.mdef parameter_value = actor.mdef when 3 parameter_name = $data_system.words.str parameter_value = actor.str when 4 parameter_name = $data_system.words.dex parameter_value = actor.dex when 5 parameter_name = $data_system.words.agi parameter_value = actor.agi when 6 parameter_name = $data_system.words.int parameter_value = actor.int end self.contents.font.color = system_color self.contents.draw_text(x, y, 96, 32, parameter_name) self.contents.font.color = normal_color self.contents.draw_text(x + 96, y, 36, 32, parameter_value.to_s, 2) end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh return if @battler == nil self.contents.clear if @battler.is_a?(Game_Actor) begin draw_face(0, 0) rescue Errno::ENOENT end draw_actor_name(@battler, 112, 0) draw_actor_class(@battler, 112, 24) draw_actor_level(@battler, 112, 48) draw_actor_state(@battler, 224, 48) draw_actor_hp(@battler, 0, 96, 172) draw_actor_sp(@battler, 0, 120, 172) draw_actor_parameter(@battler, 0, 144, 0) draw_actor_parameter(@battler, 144, 144, 1) draw_actor_parameter(@battler, 0, 168, 2) draw_actor_parameter(@battler, 144, 168, 3) draw_actor_parameter(@battler, 0, 192, 4) draw_actor_parameter(@battler, 144, 192, 5) draw_actor_parameter(@battler, 0, 216, 6) self.contents.font.color = system_color self.contents.draw_text(0, 252, 96, 32, $data_system.words.weapon) draw_item_name($data_weapons[@battler.weapon_id], 80, 252) self.contents.font.color = system_color self.contents.draw_text(0, 276, 96, 32, $data_system.words.armor1) draw_item_name($data_armors[@battler.armor1_id], 80, 276) self.contents.font.color = system_color self.contents.draw_text(0, 300, 96, 32, $data_system.words.armor2) draw_item_name($data_armors[@battler.armor2_id], 80, 300) self.contents.font.color = system_color self.contents.draw_text(0, 324, 96, 32, $data_system.words.armor3) draw_item_name($data_armors[@battler.armor3_id], 80, 324) self.contents.font.color = system_color self.contents.draw_text(0, 348, 96, 32, $data_system.words.armor4) draw_item_name($data_armors[@battler.armor4_id], 80, 348) else begin draw_face(0, 0) rescue Errno::ENOENT end draw_actor_name(@battler, 112, 0) draw_actor_level(@battler, 112, 48) if Game_Enemy.method_defined?("level") draw_actor_state(@battler, 224, 48) draw_actor_hp(@battler, 0, 96, 172) draw_actor_sp(@battler, 0, 120, 172) draw_actor_parameter(@battler, 0, 144, 0) draw_actor_parameter(@battler, 144, 144, 1) draw_actor_parameter(@battler, 0, 168, 2) draw_actor_parameter(@battler, 144, 168, 3) draw_actor_parameter(@battler, 0, 192, 4) draw_actor_parameter(@battler, 144, 192, 5) draw_actor_parameter(@battler, 0, 216, 6) self.contents.draw_multy_text(0, 252, 288, 24, @battler.description) end end end