#============================================================================== # ■ Scene_Party #------------------------------------------------------------------------------ # Minkoff's Party Switching System #============================================================================== class Scene_Party #-------------------------------------------------------------------------- # ● Configuration #-------------------------------------------------------------------------- def config $actor_available[3] = true $actor_available[4] = true $actor_available[5] = true end #-------------------------------------------------------------------------- # ● Main #-------------------------------------------------------------------------- def main s1 = "Add Member" s2 = "Del Member" s3 = "Cancel" @command_window = Window_Command.new(160, [s1, s2, s3]) @command_window.back_opacity = 180 @command_window.index = 0 @party_window = Window_Party.new @party_window.back_opacity = 180 @party_window.x = 0 @party_window.y = 128 @reserve_window = Window_Reserves.new @reserve_window.back_opacity = 180 @reserve_window.x = 160 @reserve_window.y = 0 @spriteset = Spriteset_Map.new Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @command_window.dispose @party_window.dispose @reserve_window.dispose @spriteset.dispose end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update @command_window.update @party_window.update @reserve_window.update @spriteset.update if @command_window.active update_command return end if @party_window.active update_party return end if @reserve_window.active update_reserve return end end #-------------------------------------------------------------------------- # ● Update Command Window #-------------------------------------------------------------------------- def update_command if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end if Input.trigger?(Input::C) case @command_window.index when 0 $game_system.se_play($data_system.decision_se) @command_window.active = false @reserve_window.active = true @reserve_window.index = 0 when 1 $game_system.se_play($data_system.decision_se) @command_window.active = false @party_window.active = true @party_window.index = 0 when 2 $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new end return end end #-------------------------------------------------------------------------- # ● Update Party Window #-------------------------------------------------------------------------- def update_party if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) @command_window.active = true @party_window.active = false @party_window.index = -1 return end if Input.trigger?(Input::C) if $game_party.actors.size == 1 $game_system.se_play($data_system.buzzer_se) else $game_system.se_play($data_system.decision_se) $game_party.remove_actor($game_party.actors[@party_window.index].id) @reserve_window.refresh @party_window.refresh end return end end #-------------------------------------------------------------------------- # ● Update Reserve Window #-------------------------------------------------------------------------- def update_reserve if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) @command_window.active = true @reserve_window.active = false @reserve_window.index = -1 return end if Input.trigger?(Input::C) if $game_party.actors.size == 4 $game_system.se_play($data_system.buzzer_se) else $game_system.se_play($data_system.decision_se) $game_party.add_actor(@reserve_window.current[@reserve_window.index].id) @reserve_window.refresh @party_window.refresh end return end end end #============================================================================== # ■ Window_Party #============================================================================== class Window_Party < Window_Selectable #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize super(0, 0, 160, 352) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = $fontface self.contents.font.size = $fontsize refresh self.active = false self.index = -1 end #-------------------------------------------------------------------------- # ● Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear @item_max = $game_party.actors.size for i in 0...$game_party.actors.size x = 8 y = i * 84 actor = $game_party.actors[i] draw_actor_graphic(actor, x + 96, y + 56) draw_actor_name(actor, x, y) draw_actor_level(actor, x, y + 24) end end #-------------------------------------------------------------------------- # ● Update Cursor #-------------------------------------------------------------------------- def update_cursor_rect if @index < 0 self.cursor_rect.empty else self.cursor_rect.set(0, @index * 84, 128, 64) end end end #============================================================================== # ■ Window_Reserves #============================================================================== class Window_Reserves < Window_Selectable #-------------------------------------------------------------------------- # ● Make Reserves Readable #-------------------------------------------------------------------------- attr_reader :current #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize super(0, 0, 480, 480) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = $fontface self.contents.font.size = $fontsize @offset = 0 refresh self.active = false self.index = -1 end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update super return unless self.active if Input.repeat?(Input::RIGHT) and @offset < @reserves.size - 4 $game_system.se_play($data_system.cursor_se) @offset += 4 refresh elsif Input.repeat?(Input::LEFT) and @offset > 0 $game_system.se_play($data_system.cursor_se) @offset -= 4 refresh end end #-------------------------------------------------------------------------- # ● Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear @reserves = [] @current = [] for i in 1...$game_actors.data.size if $actor_available[i] and !$game_party.actors.include?($game_actors[i]) @reserves.push($game_actors[i]) end end for i in 0..3 @current.push(@reserves[i + @offset]) if @reserves[i + @offset] end @item_max = @current.size for i in 0..@current.size x = 64 y = i * 116 actor = @current[i] if actor draw_actor_graphic(actor, x - 40, y + 80) draw_actor_name(actor, x, y) draw_actor_class(actor, x + 144, y) draw_actor_level(actor, x, y + 32) draw_actor_state(actor, x + 90, y + 32) draw_actor_exp(actor, x, y + 64) draw_actor_hp(actor, x + 236, y + 32) draw_actor_sp(actor, x + 236, y + 64) end end @index = [@index, @item_max - 1].min end #-------------------------------------------------------------------------- # ● Update Cursor #-------------------------------------------------------------------------- def update_cursor_rect if @index < 0 self.cursor_rect.empty else self.cursor_rect.set(0, @index * 116, self.width - 32, 96) end end end #============================================================================== # ■ Scene_Title #============================================================================== class Scene_Title #-------------------------------------------------------------------------- # ● New Game #-------------------------------------------------------------------------- alias party_switching_command_new_game command_new_game def command_new_game party_switching_command_new_game $actor_available = [] for i in 1...$game_actors.data.size unless $game_party.actors.include?($game_actors[i]) $actor_available[i] = false else $actor_available[i] = true end end Scene_Party.new.config end end #============================================================================== # ■ Game_Actors #============================================================================== class Game_Actors #-------------------------------------------------------------------------- # ● Make Data Readable #-------------------------------------------------------------------------- attr_reader :data end