Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Ring Actor Battle Command Menu

Ring Actor Battle Command Menu

~Explanation of Request~
When used, after selecting 'Fight' in the first menu after entering battle, the script will display icons around the first actor. As the player selects what they want each actor to do, the ring of icons will show up the actor the player is currently selecting commands for. If the player enters, say, an item menu, the ring will dissapear.

Also, with this, new commands will have their own menu now. Say, an actor knows these skills: Jump, Hammer, Fireball, and the player selects the command Jump. The skill Jump will appear in that menu, but not Hammer, Fireball, etc. Sort of like commands in this script (see spoiler)
Code:
#==============================================================================

# Individual Battle Commands

# by Atoa

# Based on Charlie Lee script

# Modified by Atoa, to work with ACBS

#==============================================================================

# Following some suggestions, i've made some changes to the individual

# battle commands script

#

# Now you can not only add an command to an skill, you can also add an command

# to an actor (like in RM2000/2003/VX) and add an skill directly to an command

# so if you select the command, the skill will be used without opening the

# skill menu

# 

# 

# IMPORTANT: If you using the Add-On 'Atoa ATB' or 'Atoa CTB', put this script

# *bellow* the ATB/CTB Add-On.

#==============================================================================

 

module N01

  # Do not remove or change these lines

  Skill_Command = {}

  Actor_Command = {}

  Usable_Command = {}

  # Do not remove or change these lines

 

  # Show command list in status menu?

  Show_Commands_In_Menu = true

  

  # Position of command window in status menu

  Menu_Commands_Postition = [16,160]

  # Note: you must edit the status menu, or the command window will stay above

  # other informations

  

  # Command Window Border Opacity

  Command_Window_Border_Opacity = 255

  

  # Command Window Back Opacity

  Command_Window_Back_Opacity = 160

    

  # Max number of commands shown

  Max_Commands_Shown = 5

 

  # Skill Commands.

  # These commands appear automatically when an actor learn one of the skill

  # that is part of the command.

  #

  # Skill_Command[Command_Name] = [Skills_IDs]

  #

  Skill_Command['Magic'] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 

    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,

    35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,

    54, 55, 56]

  

  Skill_Command['Techs'] = [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,

    69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80]

  

  Skill_Command['Unite'] = [98,99,100,101,102,103]

  

  Skill_Command['Overdrive'] = [119]

 

  Skill_Command['Summon'] = [120,121,122,123]

 

  # Actor Commands.

  # These are the commands linked to the actors, they will be shown even if

  # the actor has none of the skill of this command.

  # You can add the same command for different actors, the list of skills shown

  # will be separated for each

  #

  # Actor_Command[Command_Name] = {Actor_id => [Skills_IDs]}

  #

  Actor_Command['Skill'] = {1 => [85,86,89,93,118], 2 => [84,87,88,93,105,106,107],

    3 => [96,108,109,111,112,114]}

   

  Actor_Command['Wizzardry'] = {4 => [95,110,113,115,116,117]}

  

  # Usable Commands.

  # These commands are linked directly to an skill. Once you choose one of them

  # you will use without opening the skill menu.

  # This command appear automatically once the actor learn the skill linked to

  # the command. The skill linked to the command aren't shown in the skill

  # menu outside battle

  #

  # Direct_Comman[Command_Name] = Skill_ID

  #

  Usable_Command['Steal'] = 83

  

  Usable_Command['Cat Form'] = 97

  

  Usable_Command['Return Summon'] = 124

end

 

#==============================================================================

# ? Atoa Module

#==============================================================================

$atoa_script['SBS Individual Commands'] = true

 

#==============================================================================

# ? Game_Actor

#==============================================================================

class Game_Actor

  #--------------------------------------------------------------------------

  include N01

  #--------------------------------------------------------------------------

  attr_accessor :individual_commands

  #--------------------------------------------------------------------------

  alias acbs_setup_ibc setup

  def setup(actor_id)

    acbs_setup_ibc(actor_id)

    @individual_commands = []

  end

  #--------------------------------------------------------------------------

  def refresh_commands

    @individual_commands = []

    for i in [email=0...@skills.size]0...@skills.size[/email]

      skill = $data_skills[@skills[i]]

      if skill != nil

        for command in Skill_Command.dup

          if command[1].include?(skill.id) and not @individual_commands.include?(command[0])

            @individual_commands << command[0]

          end

        end

        for command in Usable_Command.dup

          if command[1] == skill.id and not @individual_commands.include?(command[0])

            @individual_commands << command[0]

          end

        end        

      end

    end

    for command in Actor_Command.dup

      if command[1].include?(@actor_id) and not @individual_commands.include?(command[0])

        @individual_commands << command[0]

      end

    end

  end

end

 

#==============================================================================

# ? Game_Party

#==============================================================================

class Game_Party

  #--------------------------------------------------------------------------

  include N01

  #--------------------------------------------------------------------------

  alias acbs_add_actor_ibc add_actor

  #--------------------------------------------------------------------------

  def add_actor(actor_id)

    acbs_add_actor_ibc(actor_id)

    actor = $game_actors[actor_id]

    actor.refresh_commands

  end

end

 

#==============================================================================

# ? Scene_Battle

#==============================================================================

class Scene_Battle

  #--------------------------------------------------------------------------

  include N01

  #--------------------------------------------------------------------------

  attr_accessor :escape_name

  #--------------------------------------------------------------------------

  alias acbs_phase3_setup_command_window_ibc phase3_setup_command_window

  def phase3_setup_command_window

    acbs_phase3_setup_command_window_ibc

    @active_battler.refresh_commands

    s1 = $data_system.words.attack

    s2 = $data_system.words.item

    s3 = $data_system.words.guard

    s4 = @escape_name if @escape_type == 0

    @individual_commands = [s1] + @active_battler.individual_commands + [s2, s3]

    if @escape_type == 0

      @individual_commands = [s1]+  @active_battler.individual_commands + [s2, s3, s4]

    end

    @actor_command_window.dispose

    @actor_command_window = Window_Command.new(160, @individual_commands, @active_battler)

    comand_size = (@individual_commands.size >= 5 ? 5 : @individual_commands.size)

    @actor_command_window.x = COMMAND_WINDOW_POSITION[0]

    @actor_command_window.y = COMMAND_WINDOW_POSITION[1] + 120 - 24 * comand_size 

    @actor_command_window.opacity = Command_Window_Border_Opacity

    @actor_command_window.back_opacity = Command_Window_Back_Opacity

    @actor_command_window.z = 4500

    @actor_command_window.index = 0

    @actor_command_window.active = true

    @actor_command_window.visible = true

    @active_battler_window.refresh(@active_battler)

    @active_battler_window.visible = BATTLER_NAME_WINDOW

    @active_battler_window.x = COMMAND_WINDOW_POSITION[0]

    @active_battler_window.y = COMMAND_WINDOW_POSITION[1] + 56 - 24 * comand_size 

    @active_battler_window.z = 4500

  end

  #--------------------------------------------------------------------------

  alias acbs_update_phase3_basic_command_ibc update_phase3_basic_command

  def update_phase3_basic_command

    @direct_command = false

    if Input.trigger?(Input::B)

      $game_system.se_play($data_system.cancel_se)

      phase3_prior_actor

      return

    end

    if Input.trigger?(Input::C)

      @command_name = @actor_command_window.commands[@actor_command_window.index]

      case @command_name

      when $data_system.words.attack

        $game_system.se_play($data_system.decision_se)

        @active_battler.current_action.kind = 0

        @active_battler.current_action.basic = 0

        start_enemy_select

      when $data_system.words.guard 

        $game_system.se_play($data_system.decision_se)

        @active_battler.current_action.kind = 0

        @active_battler.current_action.basic = 1

        phase3_next_actor

      when $data_system.words.item

        $game_system.se_play($data_system.decision_se)

        @active_battler.current_action.kind = 2

        start_item_select

      when @escape_name

        if $game_temp.battle_can_escape == false

          $game_system.se_play($data_system.buzzer_se)

          return

        end

        $game_system.se_play($data_system.decision_se)

        update_phase2_escape

        return

      end

      if @active_battler != nil and 

        @active_battler.individual_commands.include?(@command_name)

        if Usable_Command.include?(@command_name)

          unless @active_battler.skill_can_use?(Usable_Command[@command_name])

            $game_system.se_play($data_system.buzzer_se)

            return

          end

          @active_battler.current_action.kind = 1

          @commands_category = @command_name

          @direct_command = true

          start_command_select(Usable_Command[@command_name])

        else

          $game_system.se_play($data_system.decision_se)

          @active_battler.current_action.kind = 1

          @commands_category = @command_name

          start_skill_select

        end

      end

      return

    end

    acbs_update_phase3_basic_command_ibc

  end

  #--------------------------------------------------------------------------

  alias acbs_start_skill_select_ibc start_skill_select

  def start_skill_select

    acbs_start_skill_select_ibc

    @skill_window.dispose

    @skill_window = Window_Skill.new(@active_battler, @commands_category)

    @skill_window.help_window = @help_window

  end

  #--------------------------------------------------------------------------

  def start_command_select(skill_id)

    if Input.trigger?(Input::C)

      @skill = $data_skills[skill_id]

      if @skill.nil? or not @active_battler.skill_can_use?(@skill.id)

        $game_system.se_play($data_system.buzzer_se)

        return

      end

      $game_system.se_play($data_system.decision_se)

      @active_battler.current_action.skill_id = @skill.id

      if @skill.extension.include?("TARGETALL")

        start_select_all_battlers

        return

      elsif @skill.scope == 2 or (@skill.scope < 3 and @skill.extension.include?("RANDOMTARGET"))

        start_select_all_enemies

        return

      elsif @skill.scope == 4 or (@skill.scope > 2 and @skill.extension.include?("RANDOMTARGET"))

        start_select_all_actors

        return

      end

      if @skill.scope == 1

        start_enemy_select

      elsif @skill.scope == 3 or @skill.scope == 5

        start_actor_select

      else

        phase3_next_actor

      end

      return

    end

  end

  #--------------------------------------------------------------------------

  def active_command_window

    @actor_command_window.active = true

    @actor_command_window.visible = true

    @help_window.visible = false

    @active_battler_window.visible = true if BATTLER_NAME_WINDOW

  end

  #--------------------------------------------------------------------------

  alias acbs_update_phase3_enemy_select_ibc update_phase3_enemy_select

  def update_phase3_enemy_select

    if Input.trigger?(Input::B) and @direct_command

      $game_system.se_play($data_system.cancel_se)

      end_enemy_select

      active_command_window

      return

    end

    if Input.trigger?(Input::C) and @direct_command

      $game_system.se_play($data_system.decision_se)

      @active_battler.current_action.target_index = @enemy_arrow.index

      end_enemy_select

      phase3_next_actor

      @help_window.visible = false

      return

    end

    acbs_update_phase3_enemy_select_ibc

  end

  #--------------------------------------------------------------------------

  alias acbs_update_phase3_actor_select_ibc update_phase3_actor_select

  def update_phase3_actor_select

    if Input.trigger?(Input::B) and @direct_command

      $game_system.se_play($data_system.cancel_se)

      end_actor_select

      active_command_window

      return

    end

    if Input.trigger?(Input::C) and @direct_command

      $game_system.se_play($data_system.decision_se)

      @active_battler.current_action.target_index = @actor_arrow.index

      end_actor_select

      phase3_next_actor

      @help_window.visible = false

      return

    end

    acbs_update_phase3_actor_select_ibc

  end

  #--------------------------------------------------------------------------

  alias acbs_update_phase3_select_all_enemies_ibc update_phase3_select_all_enemies

  def update_phase3_select_all_enemies

    @enemy_arrow_all.update_multi_arrow

    if Input.trigger?(Input::B) and @direct_command

      $game_system.se_play($data_system.cancel_se)

      end_select_all_enemies

      active_command_window

      return

    end

    if Input.trigger?(Input::C) and @direct_command

      $game_system.se_play($data_system.decision_se)

      end_select_all_enemies

      phase3_next_actor

      @help_window.visible = false

      return

    end

    acbs_update_phase3_select_all_enemies_ibc

  end

  #--------------------------------------------------------------------------

  alias acbs_update_phase3_select_all_actors_ibc update_phase3_select_all_actors

  def update_phase3_select_all_actors

    @actor_arrow_all.update_multi_arrow

    if Input.trigger?(Input::B) and @direct_command

      $game_system.se_play($data_system.cancel_se)

      end_select_all_actors

      active_command_window

      return

    end

    if Input.trigger?(Input::C) and @direct_command

      $game_system.se_play($data_system.decision_se)

      end_select_all_actors

      phase3_next_actor

      @help_window.visible = false

      return

    end

    acbs_update_phase3_select_all_actors_ibc

  end      

  #--------------------------------------------------------------------------

  alias acbs_update_phase3_select_all_battlers_ibc update_phase3_select_all_battlers

  def update_phase3_select_all_battlers

    @battler_arrow_all.update_multi_arrow

    if Input.trigger?(Input::B) and @direct_command

      $game_system.se_play($data_system.cancel_se)

      end_select_all_battlers

      active_command_window

      return

    end

    if Input.trigger?(Input::C) and @direct_command

      $game_system.se_play($data_system.decision_se)

      end_select_all_battlers

      phase3_next_actor

      @help_window.visible = false

      return

    end

    acbs_update_phase3_select_all_battlers_ibc

  end      

end

 

#==============================================================================

# ? Window_Skill

#==============================================================================

class Window_Skill < Window_Selectable

  #--------------------------------------------------------------------------

  include N01

  #--------------------------------------------------------------------------

  def initialize(actor, skill_command_type = '')

    super(0, 128, 640, 352)

    @skill_command_type = skill_command_type

    @actor = actor

    @column_max = 2

    refresh

    self.index = 0

    if $game_temp.in_battle

      self.y = 320

      self.height = 160

      self.z = 900

      self.back_opacity = MENU_OPACITY

    end

  end

  #--------------------------------------------------------------------------

  def refresh

    if self.contents != nil

      self.contents.dispose

      self.contents = nil

    end

    @data = []

    for i in [email=0...@actor.skills.size]0...@actor.skills.size[/email]

      skill = $data_skills[@actor.skills[i]]

      if skill != nil and $game_temp.in_battle and skill_in_command?(skill)

        @data << skill

      elsif skill != nil and not $game_temp.in_battle

        for command in  Usable_Command.dup

          @data << skill unless command[1] == skill.id or @data.include?(skill)

        end

      end

    end

    @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

  #--------------------------------------------------------------------------

  def skill_in_command?(skill)

    if Skill_Command[@skill_command_type] != nil and 

       Skill_Command[@skill_command_type].include?(skill.id)

      return true 

    elsif Actor_Command[@skill_command_type] != nil and

       Actor_Command[@skill_command_type].include?(@actor.id) and

       Actor_Command[@skill_command_type][@actor.id].include?(skill.id)

      return true 

    end

    return false

  end

end

 

#==============================================================================

# ? Window_Command

#==============================================================================

class Window_Command < Window_Selectable

  #--------------------------------------------------------------------------

  include N01

  #--------------------------------------------------------------------------

  attr_accessor :commands

  #--------------------------------------------------------------------------

  def initialize(width, commands, battler = nil)

    if $scene.is_a?(Scene_Battle)

      comand_size = (commands.size >= 5 ? 192 : commands.size * 32 + 32)

      max_comand = Max_Commands_Shown * 32 + 32

    else

      comand_size =  commands.size * 32 + 32

      max_comand = comand_size

    end

    comand_size = [comand_size, max_comand].min

    super(0, 0, width, comand_size)

    @battler = battler

    @item_max = commands.size

    @commands = commands

    self.contents = Bitmap.new(width - 32, @item_max * 32)

    refresh

    self.index = 0

  end

  #--------------------------------------------------------------------------

  def refresh

    self.contents.clear

    for i in 0...@item_max

      if $scene.is_a?(Scene_Battle) and @battler != nil and 

         Usable_Command.include?(@commands[i]) and not

         @battler.skill_can_use?(Usable_Command[@commands[i]])

        draw_item(i, disabled_color)

      elsif $scene.is_a?(Scene_Battle) and @commands[i] == $scene.escape_name and 

         $game_temp.battle_can_escape == false

        draw_item(i, disabled_color)

      else

        draw_item(i, normal_color)

      end

    end

  end

end

 

#==============================================================================

# ? Scene_Status

#==============================================================================

class Scene_Status

  #--------------------------------------------------------------------------

  include N01

  #--------------------------------------------------------------------------

  alias acbs_main_scenestatus_ibc main

  def main

    set_command_window if Show_Commands_In_Menu

    acbs_main_scenestatus_ibc

    @command_window.dispose if Show_Commands_In_Menu

  end

  #--------------------------------------------------------------------------

  def set_command_window

    actor = $game_party.actors[@actor_index]

    actor.refresh_commands

    s1 = $data_system.words.attack

    s2 = $data_system.words.item

    s3 = $data_system.words.guard

    @individual_commands = [s1] + actor.individual_commands + [s2, s3]

    @command_window = Window_Command.new(160, @individual_commands, actor)

    @command_window.x = Menu_Commands_Postition[0]

    @command_window.y = Menu_Commands_Postition[1]

    @command_window.z = 1000

    @command_window.active = false

    @command_window.index = -1

  end

end


~Features Desired~

  • Compatible with Tankentai XP
    Icons are displayed in a ring. If the player presses left or right, the ring will go counter/clockwise and make a sound. When in a different menu other than selecting an actor, the ring will dissapear. While choosing, one icon should be normal with nothing applied (the one that the player has it's imaginary cursor over at that moment) and the rest should be dimmed or transparent. Transparent preferably.
    Also, with this, new commands will have their own menu now. Say, an actor knows these skills: Jump, Hammer, Fireball, and the player selects the defined-in-the-script command Jump. The skill Jump will appear in that menu, but not Hammer, Fireball, etc. because in the script only Jump was defined to appear. Sort of like commands in the script above (see spoiler above)
    Should be compatible with Dargor's Large Party if it's needed--though I'd like it so I could use script commands so we could still pick party members in battle :D
    Display 7 blocks or more if possible

~Example~
hqdefault.jpg

Sort of like that, except with 7 blocks. :-X

It's pretty big but it's not like I'm requesting a whole battle system. Thanks if you take this on.
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top