じ☆ve冰风 发表于 4 天前

2 Actor Menu (Now With 2 Actor BattleHud) VX

2 Actor Menu With Battle Hud VX
Version 1.01 With Screen Shots
Credit: See Script Header
Can Be Redistributed So Long As The Relevant People Are Credited

Please Note The Script Is Long Because Of Editing Various Scenes And Windows And Dont Know How To Shorten Them Down As Of Yet But I Will Get There

Spoiler: Screenshots







Spoiler: Script                Code:       
#----------------------------------------------------------------------------# 2 Actor Menu & 2 Actor BattleHud# Face Battle Hud Originaly Dark Gaia (www.darkgaia@live.com.au)# Location Window By Roninator2 (forums.rpgmakerweb.com)#Edited To A 2 Actor By Stulee1 (forums.rpgmakerweb.com# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# Insert this script under Materials and above Main. This script is compatible# with any other script that doesn't modify the Battle Status window.# **Not to be used with Tankentai ABS battle system**# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# Credit if used. Free for use in commercial projects.#----------------------------------------------------------------------------#--------------------------------------------------------------------------# Set Up Your Battle HUD#--------------------------------------------------------------------------# You can customise aspects of your battle HUD here.FONT_SIZE = 20 # Size of the font in the battle window.STATUS_FONT = ["Verdana"] #Name of the font used in the battle window.# End of customisation section.#==============================================================================# ** Window_MenuStatus#------------------------------------------------------------------------------#This window displays party member status on the menu screen.#==============================================================================class Window_MenuStatus < Window_Selectable#--------------------------------------------------------------------------# * Object Initialization#   x : window X coordinate#   y : window Y coordinate#--------------------------------------------------------------------------def initialize(x, y)    super(x, y, 384, 233)    refresh    self.active = false    self.index = -1end#--------------------------------------------------------------------------# * Refresh#--------------------------------------------------------------------------def refresh    self.contents.clear    @item_max = $game_party.members.size    for actor in $game_party.members      draw_actor_face(actor, 2, actor.index * 96 + 2, 92)      x = 104      y = actor.index * 96 + WLH / 2      draw_actor_name(actor, x, y)      draw_actor_class(actor, x + 120, y)      draw_actor_level(actor, x, y + WLH * 1)      draw_actor_state(actor, x, y + WLH * 2)      draw_actor_hp(actor, x + 120, y + WLH * 1)      draw_actor_mp(actor, x + 120, y + WLH * 2)    endend#--------------------------------------------------------------------------# * Update cursor#--------------------------------------------------------------------------def update_cursor    if @index < 0               # No cursor      self.cursor_rect.empty    elsif @index < @item_max    # Normal      self.cursor_rect.set(0, @index * 96, contents.width, 96)    elsif @index >= 100         # Self      self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96)    else                        # All      self.cursor_rect.set(0, 0, contents.width, @item_max * 96)    endendend#==============================================================================# ** Scene_Menu#------------------------------------------------------------------------------#This class performs the menu screen processing.#==============================================================================class Scene_Menu < Scene_Base#--------------------------------------------------------------------------# * Object Initialization#   menu_index : command cursor's initial position#--------------------------------------------------------------------------def initialize(menu_index = 0)    @menu_index = menu_indexend#--------------------------------------------------------------------------# * Start processing#--------------------------------------------------------------------------def start    super    create_menu_background    create_command_window    @gold_window = Window_Gold.new(0, 175)    @status_window = Window_MenuStatus.new(160, 0)end#--------------------------------------------------------------------------# * Termination Processing#--------------------------------------------------------------------------def terminate    super    dispose_menu_background    @command_window.dispose    @gold_window.dispose    @status_window.disposeend#--------------------------------------------------------------------------# * Frame Update#--------------------------------------------------------------------------def update    super    update_menu_background    @command_window.update    @gold_window.update    @status_window.update    if @command_window.active      update_command_selection    elsif @status_window.active      update_actor_selection    endend#--------------------------------------------------------------------------# * Create Command Window#--------------------------------------------------------------------------def create_command_window    s1 = Vocab::item    s2 = Vocab::skill    s3 = Vocab::equip    s4 = Vocab::status    s5 = Vocab::save    s6 = Vocab::game_end    @command_window = Window_Command.new(160, )    @command_window.index = @menu_index    if $game_party.members.size == 0          # If number of party members is 0      @command_window.draw_item(0, false)   # Disable item      @command_window.draw_item(1, false)   # Disable skill      @command_window.draw_item(2, false)   # Disable equipment      @command_window.draw_item(3, false)   # Disable status    end    if $game_system.save_disabled             # If save is forbidden      @command_window.draw_item(4, false)   # Disable save    endend#--------------------------------------------------------------------------# * Update Command Selection#--------------------------------------------------------------------------def update_command_selection    if Input.trigger?(Input::B)      Sound.play_cancel      $scene = Scene_Map.new    elsif Input.trigger?(Input::C)      if $game_party.members.size == 0 and @command_window.index < 4      Sound.play_buzzer      return      elsif $game_system.save_disabled and @command_window.index == 4      Sound.play_buzzer      return      end      Sound.play_decision      case @command_window.index      when 0      # Item      $scene = Scene_Item.new      when 1,2,3# Skill, equipment, status      start_actor_selection      when 4      # Save      $scene = Scene_File.new(true, false, false)      when 5      # End Game      $scene = Scene_End.new      end    endend#--------------------------------------------------------------------------# * Start Actor Selection#--------------------------------------------------------------------------def start_actor_selection    @command_window.active = false    @status_window.active = true    if $game_party.last_actor_index < @status_window.item_max      @status_window.index = $game_party.last_actor_index    else      @status_window.index = 0    endend#--------------------------------------------------------------------------# * End Actor Selection#--------------------------------------------------------------------------def end_actor_selection    @command_window.active = true    @status_window.active = false    @status_window.index = -1end#--------------------------------------------------------------------------# * Update Actor Selection#--------------------------------------------------------------------------def update_actor_selection    if Input.trigger?(Input::B)      Sound.play_cancel      end_actor_selection    elsif Input.trigger?(Input::C)      $game_party.last_actor_index = @status_window.index      Sound.play_decision      case @command_window.index      when 1# skill      $scene = Scene_Skill.new(@status_window.index)      when 2# equipment      $scene = Scene_Equip.new(@status_window.index)      when 3# status      $scene = Scene_Status.new(@status_window.index)      end    endendendclass Window_Location < Window_Basedef refresh    self.contents.clear    self.contents.font.color = normal_color    self.contents.draw_text(0, -5, 500, 20, find_map_name, 1)enddef find_map_name    name = "no where"    id = $game_map.map_id.to_s    data = load_data("Data/MapInfos.rvdata")    map_name = data[$game_map.map_id].name    if !map_name.include?(id)      name = map_name    end    return nameendendclass Scene_Menu < Scene_Basedef start    super    create_menu_background    create_command_window    @gold_window = Window_Gold.new(0, 175)    @status_window = Window_MenuStatus.new(160, 0)    @location_window = Window_Location.new(0,232,545,48)    @location_window.refreshenddef terminate    super    dispose_menu_background    @command_window.dispose    @gold_window.dispose    @status_window.dispose    @location_window.disposeendendclass Window_BattleStatus#--------------------------------------------------------------------------# ? Initialize#--------------------------------------------------------------------------def initialize    super(0, 0, 208, 128)    @column_max = 4    refresh    self.active = false    self.opacity = 255      def update_cursor                self.cursor_rect.emptyendend#--------------------------------------------------------------------------# ? Window_BattleStatus#--------------------------------------------------------------------------def draw_item(index)    x = index * 96    rect = Rect.new(x, 0, 96, 96)    self.contents.clear_rect(rect)    self.contents.font.color = normal_color    actor = $game_party.members       draw_actor_face(actor, x + 1, -9, 74)    draw_actor_state(actor, x + 72, WLH * 3)    self.contents.font.color = hp_color(actor)    self.contents.font.name = STATUS_FONT    self.contents.font.size = FONT_SIZE    draw_actor_hp(actor, x + 2, WLH * 2, 80)    draw_actor_mp(actor, x + 2, WLH * 3, 70)   endend#--------------------------------------------------------------------------# * Start party command selection#--------------------------------------------------------------------------def start_party_command_selection    if $game_temp.in_battle      @status_window.refresh      @status_window.index = @actor_index = -1      @active_battler = nil      @info_viewport.visible = true      @message_window.visible = false      @party_command_window.active = true      @party_command_window.index = 0      @actor_command_window.active = false      $game_party.clear_actions      if $game_troop.surprise or not $game_party.inputable?      start_main      end    endend#==============================================================================# ** Window_ActorCommand#------------------------------------------------------------------------------#This window is used to select actor commands, such as "Attack" or "Skill".#==============================================================================class Window_ActorCommand < Window_Command#--------------------------------------------------------------------------# * Object Initialization#--------------------------------------------------------------------------def initialize    super(128, [], 1, 4)    self.active = falseend#--------------------------------------------------------------------------# * Setup#   actor : actor#--------------------------------------------------------------------------def setup(actor)    s1 = Vocab::attack    s2 = Vocab::skill    s3 = Vocab::guard    s4 = Vocab::item    if actor.class.skill_name_valid   # Skill command name is valid?      s2 = actor.class.skill_name       # Replace command name    end    @commands =     @item_max = 4    refresh    self.index = 0endend#--------------------------------------------------------------------------# * Create Information Display Viewport#--------------------------------------------------------------------------def create_info_viewport    @info_viewport = Viewport.new(0, 288, 544, 128)    @info_viewport.z = 100    @status_window = Window_BattleStatus.new    @party_command_window = Window_PartyCommand.new    @actor_command_window = Window_ActorCommand.new    @status_window.viewport = @info_viewport    @party_command_window.viewport = @info_viewport    @actor_command_window.viewport = @info_viewport    @party_command_window.x = 40    @status_window.x = 168    @actor_command_window.x = 170    @info_viewport.visible = falseend#==============================================================================# ** Scene_Battle#------------------------------------------------------------------------------#This class performs battle screen processing.#==============================================================================class Scene_Battle < Scene_Base#--------------------------------------------------------------------------# * Start processing#--------------------------------------------------------------------------def start    super    $game_temp.in_battle = true    @spriteset = Spriteset_Battle.new    @message_window = Window_BattleMessage.new    @action_battlers = []    create_info_viewportend#--------------------------------------------------------------------------# * Post-Start Processing#--------------------------------------------------------------------------def post_start    super    process_battle_startend#--------------------------------------------------------------------------# * Termination Processing#--------------------------------------------------------------------------def terminate    super    dispose_info_viewport    @message_window.dispose    @spriteset.dispose    unless $scene.is_a?(Scene_Gameover)      $scene = nil if $BTEST    endend#--------------------------------------------------------------------------# * Basic Update Processing#   main : Call from main update method#--------------------------------------------------------------------------def update_basic(main = false)    Graphics.update unless main   # Update game screen    Input.update unless main      # Update input information    $game_system.update             # Update timer    $game_troop.update            # Update enemy group    @spriteset.update               # Update sprite set    @message_window.update          # Update message windowend#--------------------------------------------------------------------------# * Wait a set amount of time#   duration : Wait time (number of frames)#   no_fast: Fast forward disabled#    A method for inserting a wait during scene class update processing.#    As a rule, update is called once for each frame, but during battle it#    can be difficult to grasp the processing flow, so this method is used##    as an exception.#--------------------------------------------------------------------------def wait(duration, no_fast = false)    for i in 0...duration      update_basic      break if not no_fast and i >= duration / 2 and show_fast?    endend#--------------------------------------------------------------------------# * Wait Until Message Display has Finished#--------------------------------------------------------------------------def wait_for_message    @message_window.update    while $game_message.visible      update_basic    endend#--------------------------------------------------------------------------# * Wait Until Animation Display has Finished#--------------------------------------------------------------------------def wait_for_animation    while @spriteset.animation?      update_basic    endend#--------------------------------------------------------------------------# * Determine Fast Forward#--------------------------------------------------------------------------def show_fast?    return (Input.press?(Input::A) or Input.press?(Input::C))end#--------------------------------------------------------------------------# * Frame Update#--------------------------------------------------------------------------def update    super    update_basic(true)    update_info_viewport                  # Update information viewport    if $game_message.visible      @info_viewport.visible = false      @message_window.visible = true    end    unless $game_message.visible          # Unless displaying a message      return if judge_win_loss            # Determine win/loss results      update_scene_change      if @target_enemy_window != nil      update_target_enemy_selection   # Select target enemy      elsif @target_actor_window != nil      update_target_actor_selection   # Select target actor      elsif @skill_window != nil      update_skill_selection            # Select skill      elsif @item_window != nil      update_item_selection             # Select item      elsif @party_command_window.active      update_party_command_selection    # Select party command      elsif @actor_command_window.active      update_actor_command_selection    # Select actor command      else      process_battle_event            # Battle event processing      process_action                  # Battle action      process_battle_event            # Battle event processing      end    endend#--------------------------------------------------------------------------# * Create Information Display Viewport#--------------------------------------------------------------------------def create_info_viewport    @info_viewport = Viewport.new(0, 288, 544, 128)    @info_viewport.z = 100    @status_window = Window_BattleStatus.new    @party_command_window = Window_PartyCommand.new    @actor_command_window = Window_ActorCommand.new    @status_window.viewport = @info_viewport    @party_command_window.viewport = @info_viewport    @actor_command_window.viewport = @info_viewport    @party_command_window.x = 40    @status_window.x = 168    @actor_command_window.x = 375    @info_viewport.visible = falseend#--------------------------------------------------------------------------# * Dispose of Information Display Viewport#--------------------------------------------------------------------------def dispose_info_viewport    @status_window.dispose    @party_command_window.dispose    @actor_command_window.dispose    @info_viewport.disposeend#--------------------------------------------------------------------------# * Update Information Display Viewport#--------------------------------------------------------------------------def update_info_viewport    @party_command_window.update    @actor_command_window.update    @status_window.update    if @party_command_window.active and @info_viewport.ox > 0      @info_viewport.ox -= 16    elsif @actor_command_window.active and @info_viewport.ox < 128      @info_viewport.ox += 16    endend#--------------------------------------------------------------------------# * Battle Event Processing#--------------------------------------------------------------------------def process_battle_event    loop do      return if judge_win_loss      return if $game_temp.next_scene != nil      $game_troop.interpreter.update      $game_troop.setup_battle_event      wait_for_message      process_action if $game_troop.forcing_battler != nil      return unless $game_troop.interpreter.running?      update_basic    endend#--------------------------------------------------------------------------# * Determine Win/Loss Results#--------------------------------------------------------------------------def judge_win_loss    if $game_temp.in_battle      if $game_party.all_dead?      process_defeat      return true      elsif $game_troop.all_dead?      process_victory      return true      else      return false      end    else      return true    endend#--------------------------------------------------------------------------# * End Battle#   result : Results (0: win, 1: escape, 2:lose)#--------------------------------------------------------------------------def battle_end(result)    if result == 2 and not $game_troop.can_lose      call_gameover    else      $game_party.clear_actions      $game_party.remove_states_battle      $game_troop.clear      if $game_temp.battle_proc != nil      $game_temp.battle_proc.call(result)      $game_temp.battle_proc = nil      end      unless $BTEST      $game_temp.map_bgm.play      $game_temp.map_bgs.play      end      $scene = Scene_Map.new      @message_window.clear      Graphics.fadeout(30)    end    $game_temp.in_battle = falseend#--------------------------------------------------------------------------# * Go to Command Input for Next Actor#--------------------------------------------------------------------------def next_actor    loop do      if @actor_index == $game_party.members.size-1      start_main      return      end      @status_window.index = @actor_index += 1      @active_battler = $game_party.members[@actor_index]      if @active_battler.auto_battle      @active_battler.make_action      next      end      break if @active_battler.inputable?    end    start_actor_command_selectionend#--------------------------------------------------------------------------# * Go to Command Input of Previous Actor#--------------------------------------------------------------------------def prior_actor    loop do      if @actor_index == 0      start_party_command_selection      return      end      @status_window.index = @actor_index -= 1      @active_battler = $game_party.members[@actor_index]      next if @active_battler.auto_battle      break if @active_battler.inputable?    end    start_actor_command_selectionend#--------------------------------------------------------------------------# * Start party command selection#--------------------------------------------------------------------------def start_party_command_selection    if $game_temp.in_battle      @status_window.refresh      @status_window.index =@actor_index = -1      @active_battler = nil      @info_viewport.visible = true      @message_window.visible = false      @party_command_window.active = true      @party_command_window.index = 0      @actor_command_window.active = false      $game_party.clear_actions      if $game_troop.surprise or not $game_party.inputable?      start_main      end    endend#--------------------------------------------------------------------------# * Update Party Command Selection#--------------------------------------------------------------------------def update_party_command_selection    if Input.trigger?(Input::C)      case @party_command_window.index      when 0# Fight      Sound.play_decision      @status_window.index = @actor_index = -1      next_actor      when 1# Escape      if $game_troop.can_escape == false          Sound.play_buzzer          return      end      Sound.play_decision      process_escape      end    endend#--------------------------------------------------------------------------# * Start Actor Command Selection#--------------------------------------------------------------------------def start_actor_command_selection    @party_command_window.active = false    @actor_command_window.setup(@active_battler)    @actor_command_window.active = true    @actor_command_window.index = 0end#--------------------------------------------------------------------------# * Update Actor Command Selection#--------------------------------------------------------------------------def update_actor_command_selection    if Input.trigger?(Input::B)      Sound.play_cancel      prior_actor    elsif Input.trigger?(Input::C)      case @actor_command_window.index      when 0# Attack      Sound.play_decision      @active_battler.action.set_attack      start_target_enemy_selection      when 1# Skill      Sound.play_decision      start_skill_selection      when 2# Guard      Sound.play_decision      @active_battler.action.set_guard      next_actor      when 3# Item      Sound.play_decision      start_item_selection      end    endend#--------------------------------------------------------------------------# * Start Target Enemy Selection#--------------------------------------------------------------------------def start_target_enemy_selection    @target_enemy_window = Window_TargetEnemy.new    @target_enemy_window.y = @info_viewport.rect.y    @info_viewport.rect.x += @target_enemy_window.width    @info_viewport.ox += @target_enemy_window.width    @target_enemy_window.x = 70    @actor_command_window.active = falseend#--------------------------------------------------------------------------# * End Target Enemy Selection#--------------------------------------------------------------------------def end_target_enemy_selection    @info_viewport.rect.x -= @target_enemy_window.width    @info_viewport.ox -= @target_enemy_window.width    @target_enemy_window.dispose    @target_enemy_window = nil    if @actor_command_window.index == 0      @actor_command_window.active = true    endend#--------------------------------------------------------------------------# * Update Target Enemy Selection#--------------------------------------------------------------------------def update_target_enemy_selection    @target_enemy_window.update    if Input.trigger?(Input::B)      Sound.play_cancel      end_target_enemy_selection    elsif Input.trigger?(Input::C)      Sound.play_decision      @active_battler.action.target_index = @target_enemy_window.enemy.index      end_target_enemy_selection      end_skill_selection      end_item_selection      next_actor    endend#--------------------------------------------------------------------------# * Start Target Actor Selection#--------------------------------------------------------------------------def start_target_actor_selection    @target_actor_window = Window_BattleStatus.new    @target_actor_window.index = 0    @target_actor_window.active = true    @target_actor_window.y = @info_viewport.rect.y    @info_viewport.rect.x += @target_actor_window.width    @info_viewport.ox += @target_actor_window.width    @actor_command_window.active = falseend#--------------------------------------------------------------------------# * End Target Actor Selection#--------------------------------------------------------------------------def end_target_actor_selection    @info_viewport.rect.x -= @target_actor_window.width    @info_viewport.ox -= @target_actor_window.width    @target_actor_window.dispose    @target_actor_window = nilend#--------------------------------------------------------------------------# * Update Target Actor Selection#--------------------------------------------------------------------------def update_target_actor_selection    @target_actor_window.update    if Input.trigger?(Input::B)      Sound.play_cancel      end_target_actor_selection    elsif Input.trigger?(Input::C)      Sound.play_decision      @active_battler.action.target_index = @target_actor_window.index      end_target_actor_selection      end_skill_selection      end_item_selection      next_actor    endend#--------------------------------------------------------------------------# * Start Skill Selection#--------------------------------------------------------------------------def start_skill_selection    @help_window = Window_Help.new    @skill_window = Window_Skill.new(0, 56, 554, 232, @active_battler)    @skill_window.help_window = @help_window    @actor_command_window.active = falseend#--------------------------------------------------------------------------# * End Skill Selection#--------------------------------------------------------------------------def end_skill_selection    if @skill_window != nil      @skill_window.dispose      @skill_window = nil      @help_window.dispose      @help_window = nil    end    @actor_command_window.active = trueend#--------------------------------------------------------------------------# * Update Skill Selection#--------------------------------------------------------------------------def update_skill_selection    @skill_window.active = true    @skill_window.update    @help_window.update    if Input.trigger?(Input::B)      Sound.play_cancel      end_skill_selection    elsif Input.trigger?(Input::C)      @skill = @skill_window.skill      if @skill != nil      @active_battler.last_skill_id = @skill.id      end      if @active_battler.skill_can_use?(@skill)      Sound.play_decision      determine_skill      else      Sound.play_buzzer      end    endend#--------------------------------------------------------------------------# * Confirm Skill#--------------------------------------------------------------------------def determine_skill    @active_battler.action.set_skill(@skill.id)    @skill_window.active = false    if @skill.need_selection?      if @skill.for_opponent?      start_target_enemy_selection      else      start_target_actor_selection      end    else      end_skill_selection      next_actor    endend#--------------------------------------------------------------------------# * Start Item Selection#--------------------------------------------------------------------------def start_item_selection    @help_window = Window_Help.new    @item_window = Window_Item.new(0, 56, 544, 232)    @item_window.help_window = @help_window    @actor_command_window.active = falseend#--------------------------------------------------------------------------# * End Item Selection#--------------------------------------------------------------------------def end_item_selection    if @item_window != nil      @item_window.dispose      @item_window = nil      @help_window.dispose      @help_window = nil    end    @actor_command_window.active = trueend#--------------------------------------------------------------------------# * Update Item Selection#--------------------------------------------------------------------------def update_item_selection    @item_window.active = true    @item_window.update    @help_window.update    if Input.trigger?(Input::B)      Sound.play_cancel      end_item_selection    elsif Input.trigger?(Input::C)      @item = @item_window.item      if @item != nil      $game_party.last_item_id = @item.id      end      if $game_party.item_can_use?(@item)      Sound.play_decision      determine_item      else      Sound.play_buzzer      end    endend#--------------------------------------------------------------------------# * Confirm Item#--------------------------------------------------------------------------def determine_item    @active_battler.action.set_item(@item.id)    @item_window.active = false    if @item.need_selection?      if @item.for_opponent?      start_target_enemy_selection      else      start_target_actor_selection      end    else      end_item_selection      next_actor    endend#--------------------------------------------------------------------------# * Battle Start Processing#--------------------------------------------------------------------------def process_battle_start    @message_window.clear    wait(10)    for name in $game_troop.enemy_names      text = sprintf(Vocab::Emerge, name)      $game_message.texts.push(text)    end    if $game_troop.preemptive      text = sprintf(Vocab::Preemptive, $game_party.name)      $game_message.texts.push(text)    elsif $game_troop.surprise      text = sprintf(Vocab::Surprise, $game_party.name)      $game_message.texts.push(text)    end    wait_for_message    @message_window.clear    make_escape_ratio    process_battle_event    start_party_command_selectionend#--------------------------------------------------------------------------# * Create Escape Ratio#--------------------------------------------------------------------------def make_escape_ratio    actors_agi = $game_party.average_agi    enemies_agi = $game_troop.average_agi    @escape_ratio = 150 - 100 * enemies_agi / actors_agiend#--------------------------------------------------------------------------# * Escape Processing#--------------------------------------------------------------------------def process_escape    @info_viewport.visible = false    @message_window.visible = true    text = sprintf(Vocab::EscapeStart, $game_party.name)    $game_message.texts.push(text)    if $game_troop.preemptive      success = true    else      success = (rand(100) < @escape_ratio)    end    Sound.play_escape    if success      wait_for_message      battle_end(1)    else      @escape_ratio += 10      $game_message.texts.push('\.' + Vocab::EscapeFailure)      wait_for_message      $game_party.clear_actions      start_main    endend#--------------------------------------------------------------------------# * Victory Processing#--------------------------------------------------------------------------def process_victory    @info_viewport.visible = false    @message_window.visible = true    RPG::BGM.stop    $game_system.battle_end_me.play    unless $BTEST      $game_temp.map_bgm.play      $game_temp.map_bgs.play    end    display_exp_and_gold    display_drop_items    display_level_up    battle_end(0)end#--------------------------------------------------------------------------# * Display Gained Experience and Gold#--------------------------------------------------------------------------def display_exp_and_gold    exp = $game_troop.exp_total    gold = $game_troop.gold_total    $game_party.gain_gold(gold)    text = sprintf(Vocab::Victory, $game_party.name)    $game_message.texts.push('\|' + text)    if exp > 0      text = sprintf(Vocab::ObtainExp, exp)      $game_message.texts.push('\.' + text)    end    if gold > 0      text = sprintf(Vocab::ObtainGold, gold, Vocab::gold)      $game_message.texts.push('\.' + text)    end    wait_for_messageend#--------------------------------------------------------------------------# * Display Gained Drop Items#--------------------------------------------------------------------------def display_drop_items    drop_items = $game_troop.make_drop_items    for item in drop_items      $game_party.gain_item(item, 1)      text = sprintf(Vocab::ObtainItem, item.name)      $game_message.texts.push(text)    end    wait_for_messageend#--------------------------------------------------------------------------# * Display Level Up#--------------------------------------------------------------------------def display_level_up    exp = $game_troop.exp_total    for actor in $game_party.existing_members      last_level = actor.level      last_skills = actor.skills      actor.gain_exp(exp, true)    end    wait_for_messageend#--------------------------------------------------------------------------# * Defeat Processing#--------------------------------------------------------------------------def process_defeat    @info_viewport.visible = false    @message_window.visible = true    text = sprintf(Vocab::Defeat, $game_party.name)    $game_message.texts.push(text)    wait_for_message    battle_end(2)end#--------------------------------------------------------------------------# * Execute Screen Switch#--------------------------------------------------------------------------def update_scene_change    case $game_temp.next_scene    when "map"      call_map    when "gameover"      call_gameover    when "title"      call_title    else      $game_temp.next_scene = nil    endend#--------------------------------------------------------------------------# * Switch to Map Screen#--------------------------------------------------------------------------def call_map    $game_temp.next_scene = nil    battle_end(1)end#--------------------------------------------------------------------------# * Switch to Game Over Screen#--------------------------------------------------------------------------def call_gameover    $game_temp.next_scene = nil    $scene = Scene_Gameover.new    @message_window.clearend#--------------------------------------------------------------------------# * Switch to Title Screen#--------------------------------------------------------------------------def call_title    $game_temp.next_scene = nil    $scene = Scene_Title.new    @message_window.clear    Graphics.fadeout(60)end#--------------------------------------------------------------------------# * Start Execution of Battle Processing#--------------------------------------------------------------------------def start_main    $game_troop.increase_turn    @info_viewport.visible = false    @info_viewport.ox = 0    @message_window.visible = true    @party_command_window.active = false    @actor_command_window.active = false    @status_window.index = @actor_index = -1    @active_battler = nil    @message_window.clear    $game_troop.make_actions    make_action_orders    wait(20)end#--------------------------------------------------------------------------# * Create Action Orders#--------------------------------------------------------------------------def make_action_orders    @action_battlers = []    unless $game_troop.surprise      @action_battlers += $game_party.members    end    unless $game_troop.preemptive      @action_battlers += $game_troop.members    end    for battler in @action_battlers      battler.action.make_speed    end    @action_battlers.sort! do |a,b|      b.action.speed - a.action.speed    endend#--------------------------------------------------------------------------# * Battle Action Processing#--------------------------------------------------------------------------def process_action    return if judge_win_loss    return if $game_temp.next_scene != nil    set_next_active_battler    if @active_battler == nil      turn_end      return    end    @message_window.clear    wait(5)    @active_battler.white_flash = true    unless @active_battler.action.forcing      @active_battler.action.prepare    end    if @active_battler.action.valid?      execute_action    end    unless @active_battler.action.forcing      @message_window.clear      remove_states_auto      display_current_state    end    @active_battler.white_flash = false    @message_window.clearend#--------------------------------------------------------------------------# * Execute Battle Actions#--------------------------------------------------------------------------def execute_action    case @active_battler.action.kind    when 0# Basic      case @active_battler.action.basic      when 0# Attack      execute_action_attack      when 1# Guard      execute_action_guard      when 2# Escape      execute_action_escape      when 3# Wait      execute_action_wait      end    when 1# Skill      execute_action_skill    when 2# Item      execute_action_item    endend#--------------------------------------------------------------------------# * End Turn#--------------------------------------------------------------------------def turn_end    $game_troop.turn_ending = true    $game_party.slip_damage_effect    $game_troop.slip_damage_effect    $game_party.do_auto_recovery    $game_troop.preemptive = false    $game_troop.surprise = false    process_battle_event    $game_troop.turn_ending = false    start_party_command_selectionend#--------------------------------------------------------------------------# * Set Next Battler to Act#    When the event command is being performed, set#    that battler and remove him from the list. Otherwise, get from top of#    list. If an actor that is not currently in the party is obtained (may#    occur if the index is nil, just after leaving via a battle event, etc.)#    it is skipped.#--------------------------------------------------------------------------def set_next_active_battler    loop do      if $game_troop.forcing_battler != nil      @active_battler = $game_troop.forcing_battler      @action_battlers.delete(@active_battler)      $game_troop.forcing_battler = nil      else      @active_battler = @action_battlers.shift      end      return if @active_battler == nil      return if @active_battler.index != nil    endend#--------------------------------------------------------------------------# * Natural Removal of States#--------------------------------------------------------------------------def remove_states_auto    last_st = @active_battler.states    @active_battler.remove_states_auto    if @active_battler.states != last_st      wait(5)      display_state_changes(@active_battler)      wait(30)      @message_window.clear    endend#--------------------------------------------------------------------------# * Show Current State#--------------------------------------------------------------------------def display_current_state    state_text = @active_battler.most_important_state_text    unless state_text.empty?      wait(5)      text = @active_battler.name + state_text      @message_window.add_instant_text(text)      wait(45)      @message_window.clear    endend#--------------------------------------------------------------------------# * Execute Battle Action: Attack#--------------------------------------------------------------------------def execute_action_attack    text = sprintf(Vocab::DoAttack, @active_battler.name)    @message_window.add_instant_text(text)    targets = @active_battler.action.make_targets    display_attack_animation(targets)    wait(20)    for target in targets      target.attack_effect(@active_battler)      display_action_effects(target)    endend#--------------------------------------------------------------------------# * Execute Battle Action: Guard#--------------------------------------------------------------------------def execute_action_guard    text = sprintf(Vocab::DoGuard, @active_battler.name)    @message_window.add_instant_text(text)    wait(45)end#--------------------------------------------------------------------------# * Execute Battle Action: Escape#--------------------------------------------------------------------------def execute_action_escape    text = sprintf(Vocab::DoEscape, @active_battler.name)    @message_window.add_instant_text(text)    @active_battler.escape    Sound.play_escape    wait(45)end#--------------------------------------------------------------------------# * Execute Battle Action: Wait#--------------------------------------------------------------------------def execute_action_wait    text = sprintf(Vocab::DoWait, @active_battler.name)    @message_window.add_instant_text(text)    wait(45)end#--------------------------------------------------------------------------# * Execute Battle Action: Skill#--------------------------------------------------------------------------def execute_action_skill    skill = @active_battler.action.skill    text = @active_battler.name + skill.message1    @message_window.add_instant_text(text)    unless skill.message2.empty?      wait(10)      @message_window.add_instant_text(skill.message2)    end    targets = @active_battler.action.make_targets    display_animation(targets, skill.animation_id)    @active_battler.mp -= @active_battler.calc_mp_cost(skill)    $game_temp.common_event_id = skill.common_event_id    for target in targets      target.skill_effect(@active_battler, skill)      display_action_effects(target, skill)    endend#--------------------------------------------------------------------------# * Execute Battle Action: Item#--------------------------------------------------------------------------def execute_action_item    item = @active_battler.action.item    text = sprintf(Vocab::UseItem, @active_battler.name, item.name)    @message_window.add_instant_text(text)    targets = @active_battler.action.make_targets    display_animation(targets, item.animation_id)    $game_party.consume_item(item)    $game_temp.common_event_id = item.common_event_id    for target in targets      target.item_effect(@active_battler, item)      display_action_effects(target, item)    endend#--------------------------------------------------------------------------# * Show Animation#   targets      : Target array#   animation_id : Animation ID (-1: same as normal attack)#--------------------------------------------------------------------------def display_animation(targets, animation_id)    if animation_id < 0      display_attack_animation(targets)    else      display_normal_animation(targets, animation_id)    end    wait(20)    wait_for_animationend#--------------------------------------------------------------------------# * Show Attack Animation#   targets : Target array#    If enemy, play the sound effect and wait#    a moment. If actor, take dual wielding into account (display left hand#    weapon reversed)#--------------------------------------------------------------------------def display_attack_animation(targets)    if @active_battler.is_a?(Game_Enemy)      Sound.play_enemy_attack      wait(15, true)    else      aid1 = @active_battler.atk_animation_id      aid2 = @active_battler.atk_animation_id2      display_normal_animation(targets, aid1, false)      display_normal_animation(targets, aid2, true)    end    wait_for_animationend#--------------------------------------------------------------------------# * Show Normal Animation#   targets      : Target array#   animation_id : Animation ID#   mirror       : Flip horizontal#--------------------------------------------------------------------------def display_normal_animation(targets, animation_id, mirror = false)    animation = $data_animations    if animation != nil      to_screen = (animation.position == 3)       # Is the positon "screen"?      for target in targets.uniq      target.animation_id = animation_id      target.animation_mirror = mirror      wait(20, true) unless to_screen         # If for one, wait      end      wait(20, true) if to_screen               # If for all, wait    endend#--------------------------------------------------------------------------# * Show Action Results#   target : Target#   obj    : Skill or item#--------------------------------------------------------------------------def display_action_effects(target, obj = nil)    unless target.skipped      line_number = @message_window.line_number      wait(5)      display_critical(target, obj)      display_damage(target, obj)      display_state_changes(target, obj)      if line_number == @message_window.line_number      display_failure(target, obj) unless target.states_active?      end      if line_number != @message_window.line_number      wait(30)      end      @message_window.back_to(line_number)    endend#--------------------------------------------------------------------------# * Show Critical Hit#   target : Target#   obj    : Skill or item#--------------------------------------------------------------------------def display_critical(target, obj = nil)    if target.critical      if target.actor?      text = Vocab::CriticalToActor      else      text = Vocab::CriticalToEnemy      end      @message_window.add_instant_text(text)      wait(20)    endend#--------------------------------------------------------------------------# * Show Damage#   target : Target#   obj    : Skill or item#--------------------------------------------------------------------------def display_damage(target, obj = nil)    if target.missed      display_miss(target, obj)    elsif target.evaded      display_evasion(target, obj)    else      display_hp_damage(target, obj)      display_mp_damage(target, obj)    endend#--------------------------------------------------------------------------# * Show Miss#   target : Target#   obj    : Skill or item#--------------------------------------------------------------------------def display_miss(target, obj = nil)    if obj == nil or obj.physical_attack      if target.actor?      text = sprintf(Vocab::ActorNoHit, target.name)      else      text = sprintf(Vocab::EnemyNoHit, target.name)      end      Sound.play_miss    else      text = sprintf(Vocab::ActionFailure, target.name)    end    @message_window.add_instant_text(text)    wait(30)end#--------------------------------------------------------------------------# * Show Escape#   target : Target#   obj    : Skill or item#--------------------------------------------------------------------------def display_evasion(target, obj = nil)    if target.actor?      text = sprintf(Vocab::ActorEvasion, target.name)    else      text = sprintf(Vocab::EnemyEvasion, target.name)    end    Sound.play_evasion    @message_window.add_instant_text(text)    wait(30)end#--------------------------------------------------------------------------# * Show HP Damage#   target : Target#   obj    : Skill or item#--------------------------------------------------------------------------def display_hp_damage(target, obj = nil)    if target.hp_damage == 0                # No damage      return if obj != nil and obj.damage_to_mp      return if obj != nil and obj.base_damage == 0      fmt = target.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage      text = sprintf(fmt, target.name)    elsif target.absorbed                   # Absorb      fmt = target.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain      text = sprintf(fmt, target.name, Vocab::hp, target.hp_damage)    elsif target.hp_damage > 0            # Damage      if target.actor?      text = sprintf(Vocab::ActorDamage, target.name, target.hp_damage)      Sound.play_actor_damage      $game_troop.screen.start_shake(5, 5, 10)      else      text = sprintf(Vocab::EnemyDamage, target.name, target.hp_damage)      Sound.play_enemy_damage      target.blink = true      end    else                                    # Recovery      fmt = target.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery      text = sprintf(fmt, target.name, Vocab::hp, -target.hp_damage)      Sound.play_recovery    end    @message_window.add_instant_text(text)    wait(30)end#--------------------------------------------------------------------------# * Show MP Damage#   target : Target#   obj    : Skill or item#--------------------------------------------------------------------------def display_mp_damage(target, obj = nil)    return if target.dead?    return if target.mp_damage == 0    if target.absorbed                      # Absorb      fmt = target.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain      text = sprintf(fmt, target.name, Vocab::mp, target.mp_damage)    elsif target.mp_damage > 0            # Damage      fmt = target.actor? ? Vocab::ActorLoss : Vocab::EnemyLoss      text = sprintf(fmt, target.name, Vocab::mp, target.mp_damage)    else                                    # Recovery      fmt = target.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery      text = sprintf(fmt, target.name, Vocab::mp, -target.mp_damage)      Sound.play_recovery    end    @message_window.add_instant_text(text)    wait(30)end#--------------------------------------------------------------------------# * Show State Change#   target : Target#   obj    : Skill or item#--------------------------------------------------------------------------def display_state_changes(target, obj = nil)    return if target.missed or target.evaded    return unless target.states_active?    if @message_window.line_number < 4      @message_window.add_instant_text("")    end    display_added_states(target, obj)    display_removed_states(target, obj)    display_remained_states(target, obj)    if @message_window.last_instant_text.empty?      @message_window.back_one    else      wait(10)    endend#--------------------------------------------------------------------------# * Show Added State#   target : Target#   obj    : Skill or item#--------------------------------------------------------------------------def display_added_states(target, obj = nil)    for state in target.added_states      if target.actor?      next if state.message1.empty?      text = target.name + state.message1      else      next if state.message2.empty?      text = target.name + state.message2      end      if state.id == 1                      # Incapacitated      target.perform_collapse      end      @message_window.replace_instant_text(text)      wait(20)    endend#--------------------------------------------------------------------------# * Show Removed State#   target : Target#   obj    : Skill or item#--------------------------------------------------------------------------def display_removed_states(target, obj = nil)    for state in target.removed_states      next if state.message4.empty?      text = target.name + state.message4      @message_window.replace_instant_text(text)      wait(20)    endend#--------------------------------------------------------------------------# * Show Unchanged State#   target : Target#   obj    : Skill or item#    Used when trying to put someone to sleep who is already asleep, etc.#--------------------------------------------------------------------------def display_remained_states(target, obj = nil)    for state in target.remained_states      next if state.message3.empty?      text = target.name + state.message3      @message_window.replace_instant_text(text)      wait(20)    endend#--------------------------------------------------------------------------# * Show Failure#   target : Target (actor)#   obj    : Skill or item#--------------------------------------------------------------------------def display_failure(target, obj)    text = sprintf(Vocab::ActionFailure, target.name)    @message_window.add_instant_text(text)    wait(20)endend










本贴来自国际rpgmaker官方论坛作者:stulee1处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/2-actor-menu-now-with-2-actor-battlehud-vx.141140/
页: [1]
查看完整版本: 2 Actor Menu (Now With 2 Actor BattleHud) VX