XAS Battle Script (Multiple Skill Menus)

aaronrandall

Warper
Member
Joined
Feb 25, 2016
Messages
3
Reaction score
0
Primarily Uses
N/A
So I am using the Xas Battle System and I was wondering if it would be easy enough to make multiple menus for different types of skills?


For example, when you press Q and W it sifts between the Items and the skills. But I want it to be a little bit more organized so I want each skill type (Red Magic, White Magic, etc) to have its own menu. i wouldnt mind omitting the item screen entirely. So Id want to be able to press Q and W to sift through the different skill type menus.


The menu in question (please dont mind the horrible place holder graphics)


http://i.imgur.com/bMjg5sr.png


This is the script that deals with the quick tool selection menu

#==============================================================================
# ■ +++ MOG - XAS QUICK TOOL SELECT (v1.0) +++
#==============================================================================
# By Moghunter
# http://www.atelier-rgss.com
#==============================================================================
# Activates a window that allows the player to quickly choose the skills,
# equipment and items used in XAS. 
#===============================================================================
module QUICK_TOOL_SELECT
  # Button that activates the fast selection window.
  QUICK_TOOL_SELECT_BUTTON = Input::L
  # Enable sliding window.
  ENALBLE_SLIDE = true
end


#==============================================================================
# ■ Game_Player 
#==============================================================================
class Game_Player < Game_Character
  
  #--------------------------------------------------------------------------
  # ● Update Action Command
  #--------------------------------------------------------------------------  
  alias quick_tool_update_action_command update_action_command
  def update_action_command
      update_quick_tool_button
      quick_tool_update_action_command
  end
  
  #--------------------------------------------------------------------------
  # ● Update Quick Tool Button
  #--------------------------------------------------------------------------    
  def update_quick_tool_button
      if Input.trigger?(QUICK_TOOL_SELECT::QUICK_TOOL_SELECT_BUTTON)
         return unless can_use_quick_tool_button?        
         SceneManager.call(Scene_Quick_Skill_Tool)
      end  
  end
  
  #--------------------------------------------------------------------------
  # ● Can Use Quick Tool Button
  #--------------------------------------------------------------------------      
  def can_use_quick_tool_button?
      return false if self.battler.shield
      return false if self.battler.x_charge_action[2] > 0
      return true
  end  
  
end  


#==============================================================================
# ■ Window_Skill_Tool
#==============================================================================
class Window_Skill_Tool < Window_Selectable
  
 #--------------------------------------------------------------------------
 # ● Initialize
 #--------------------------------------------------------------------------  
  def initialize(actor)
      size_x = 285
      size_y = 200
      center_x = (544 - size_x) / 2
      center_y = (416 - size_y) / 2
      super(center_x , center_y, size_x, size_y)
      @actor = actor
      self.z = 9999
      select(0)      
      activate          
      refresh
  end
 
 #------------------------------------------------------------------------------
 # ● Col Max
 #------------------------------------------------------------------------------       
  def col_max
      return 8
  end
    
 #------------------------------------------------------------------------------
 # ● Item Max
 #------------------------------------------------------------------------------         
  def item_max
      return @item_max == nil ? 0 : @item_max 
  end   
  
 #--------------------------------------------------------------------------
 # ● Skill
 #--------------------------------------------------------------------------  
  def skill
      return @data[self.index]
  end
  
 #--------------------------------------------------------------------------
 # ● Refresh
 #--------------------------------------------------------------------------  
  def refresh
      @data = []
      for skill in @actor.skills
        if skill.note =~ /<Duration = (\d+)>/
           @data.push(skill)
        end   
      end
      @item_max = @data.size
      create_contents
      for i in 0...@item_max
        draw_item(i)
      end
  end
    
 #--------------------------------------------------------------------------
 # ● Draw Item
 #--------------------------------------------------------------------------  
  def draw_item(index)
      rect = item_rect(index)
      self.contents.clear_rect(rect)
      skill = @data[index]
      if skill != nil
         rect.width -= 4
         draw_icon(skill.icon_index, rect.x, rect.y, true)
      end
  end


 #--------------------------------------------------------------------------
 # ● Item Rect
 #--------------------------------------------------------------------------  
  def item_rect(index)
      rect = Rect.new(0, 0, 0, 0)
      rect.width = 24
      rect.height = 24
      rect.x = index % col_max * 32
      rect.y = index / col_max * 24
      return rect
  end
  
 #--------------------------------------------------------------------------
 # ● Cursor Page Down
 #--------------------------------------------------------------------------    
  def cursor_pagedown
  end
  
 #--------------------------------------------------------------------------
 # ● Cursor Page Up
 #--------------------------------------------------------------------------      
  def cursor_pageup
  end


 #--------------------------------------------------------------------------
 # ● Update Help
 #--------------------------------------------------------------------------        
  def update_help
      @help_window.set_text(skill == nil ? "" : (skill.name + " - " + skill.description))
  end  
 
end


#==============================================================================
# ■ Window_Item_Tool
#==============================================================================
class Window_Item_Tool < Window_Selectable
  
 #--------------------------------------------------------------------------
 # ● Initialize
 #--------------------------------------------------------------------------  
  def initialize(actor)
      size_x = 285
      size_y = 200
      center_x = (544 - size_x) / 2
      center_y = (416 - size_y) / 2
      super(center_x , center_y, size_x, size_y)
      @actor = actor
      @column_max = 8
      self.z = 9999
      select(0)
      activate      
      refresh
  end
 
 #------------------------------------------------------------------------------
 # ● Col Max
 #------------------------------------------------------------------------------       
  def col_max
      return 8
  end
    
 #------------------------------------------------------------------------------
 # ● Item Max
 #------------------------------------------------------------------------------         
  def item_max
      return @item_max == nil ? 0 : @item_max 
  end   
 
 #--------------------------------------------------------------------------
 # ● Item
 #--------------------------------------------------------------------------  
  def item
      return @data[self.index]
  end
  
 #--------------------------------------------------------------------------
 # ● Refresh
 #--------------------------------------------------------------------------  
  def refresh
      @data = []
      for item in $game_party.items
        if item.note =~ /<Action ID = (\d+)>/ 
            @data.push(item)
        end   
      end
      for weapon in $game_party.weapons
          if weapon.note =~ /<Action ID = (\d+)>/ and @actor.equippable?(weapon)
             @data.push(weapon)        
          end
      end
      for armor in $game_party.armors
          if armor.note =~ /<Action>/ and @actor.equippable?(armor)
             @data.push(armor)        
          end
      end      
      @item_max = @data.size
      create_contents
      for i in 0...@item_max
        draw_item(i)
      end
  end
    
 #--------------------------------------------------------------------------
 # ● Draw Item
 #--------------------------------------------------------------------------  
  def draw_item(index)
      rect = item_rect(index)
      self.contents.clear_rect(rect)
      item = @data[index]
      if item != nil
         rect.width -= 4
         draw_icon(item.icon_index, rect.x, rect.y, true)
      end
  end


 #--------------------------------------------------------------------------
 # ● Item Rect
 #--------------------------------------------------------------------------  
  def item_rect(index)
      rect = Rect.new(0, 0, 0, 0)
      rect.width = 24
      rect.height = 24
      rect.x = index % col_max * 32
      rect.y = index / col_max * 24
      return rect
  end
  
 #--------------------------------------------------------------------------
 # ● Cursor Page Down
 #--------------------------------------------------------------------------    
  def cursor_pagedown
  end
  
 #--------------------------------------------------------------------------
 # ● Cursor Page Up
 #--------------------------------------------------------------------------      
  def cursor_pageup
  end
  
 #--------------------------------------------------------------------------
 # ● Update Help
 #--------------------------------------------------------------------------        
  def update_help
      @help_window.set_text(item == nil ? "" : (item.name + " - " + item.description))
  end  
  
end


#==============================================================================
# ■ Scene Quick Skill Tool
#==============================================================================
class Scene_Quick_Skill_Tool < Scene_Base
  include QUICK_TOOL_SELECT
 #--------------------------------------------------------------------------
 # ● Initialize
 #--------------------------------------------------------------------------  
  def initialize
      @actor = $game_party.members[0]
  end
  
 #--------------------------------------------------------------------------
 # ● Start
 #--------------------------------------------------------------------------  
  def start
      super
      @spriteset = Spriteset_Map.new
      @viewport = Viewport.new(0, 0, 544, 416)
      @viewport.rect.set(0, 0, 544, 416)
      @viewport.ox = 0  
      @viewport.z = 9999
      @help_window = Window_Help.new
      @help_window.viewport = @viewport      
      @skill_window = Window_Skill_Tool.new(@actor)
      @skill_window.viewport = @viewport
      @skill_window.help_window = @help_window  
      create_text_sprite
      setup_slide
  end
 
 #--------------------------------------------------------------------------
 # ● Setup Slide
 #--------------------------------------------------------------------------      
  def setup_slide 
      return unless ENALBLE_SLIDE
      @orig_x = @skill_window.x      
      @skill_window.x -= 100
      @skill_window.opacity = 0
      @skill_window.contents_opacity = 0
      @text.x = @skill_window.x 
      @text.opacity = @skill_window.opacity
      @help_window.x += 100
      @help_window.opacity = @skill_window.opacity
      @help_window.contents_opacity = @skill_window.contents_opacity      
  end
    
 #--------------------------------------------------------------------------
 # ● Create Text Sprite
 #--------------------------------------------------------------------------    
  def create_text_sprite
     @text = Sprite.new
     @text.bitmap = Bitmap.new(@skill_window.width,@skill_window.height + 32)
     @text.z = 10000
     @text.bitmap.font.size = 16
     @text.bitmap.font.bold = true
     @text.bitmap.font.name = "Georgia"  
     text_string = "Skill"
     @text.bitmap.draw_text(0, 0, @skill_window.width, 32, text_string.to_s,1) 
     @text.bitmap.font.size = 14
     text_string = "L      Item Select      R"
     @text.bitmap.draw_text(0, @skill_window.height + 5, @skill_window.width, 32, text_string.to_s,1) 
     @text.x = @skill_window.x
     @text.y = @skill_window.y - 20    
  end  
  
 #--------------------------------------------------------------------------
 # ● Perform Transition
 #--------------------------------------------------------------------------    
  def perform_transition
      if ENALBLE_SLIDE
         Graphics.transition(0)
      else   
         Graphics.transition(10)
      end  
  end
  
 #--------------------------------------------------------------------------
 # ● Terminate
 #--------------------------------------------------------------------------  
  def terminate
      super
      @spriteset.dispose
      @text.bitmap.dispose
      @text.dispose
      unless @help_window.disposed?
         @help_window.dispose
         @skill_window.dispose
      end   
  end


  #--------------------------------------------------------------------------
  # ● Pre-Terminate
  #--------------------------------------------------------------------------
  def pre_terminate
      super
      update_slide_terminate 
  end  
  
 #--------------------------------------------------------------------------
 # ● Update Slide Terminate
 #--------------------------------------------------------------------------    
  def update_slide_terminate 
      return unless ENALBLE_SLIDE
      for i in 0..10
          @skill_window.x -= 10
          @help_window.x += 10
          @skill_window.opacity -= 25
          @skill_window.contents_opacity -= 25      
          @text.x = @skill_window.x 
          @text.opacity = @skill_window.opacity
          @help_window.opacity = @skill_window.opacity
          @help_window.contents_opacity = @skill_window.contents_opacity             
         Graphics.update  
      end  
  end
  
 #--------------------------------------------------------------------------
 # ● Update
 #--------------------------------------------------------------------------  
  def update
      super
      @spriteset.update
      update_skill_selection
      update_slide
  end
  
 #--------------------------------------------------------------------------
 # ● Update Slide
 #--------------------------------------------------------------------------      
  def update_slide
      return unless ENALBLE_SLIDE
      return if @skill_window.x == @orig_x
      @skill_window.x += 10
      @help_window.x -= 10
      @skill_window.opacity += 25
      @skill_window.contents_opacity += 25      
      if @skill_window.x  >= @orig_x      
         @skill_window.x = @orig_x 
         @help_window.x = 0
         @skill_window.opacity = 255
         @skill_window.contents_opacity = 255
      end
      @text.x = @skill_window.x 
      @text.opacity = @skill_window.opacity
      @help_window.opacity = @skill_window.opacity
      @help_window.contents_opacity = @skill_window.contents_opacity      
  end  
  
 #--------------------------------------------------------------------------
 # ● Update Skill Selection
 #--------------------------------------------------------------------------  
  def update_skill_selection
      if Input.trigger?(Input::B)
         Sound.play_cancel
         SceneManager.call(Scene_Map)
      elsif Input.trigger?(Input::R) or Input.trigger?(Input::L)
         Sound.play_cursor
         SceneManager.call(Scene_Quick_Item_Tool)
      elsif Input.trigger?(Input::C)
         @skill = @skill_window.skill
         return if @skill == nil 
         @actor.skill_id = @skill.id
         Sound.play_equip    
      end
  end


end


#==============================================================================
# ■ Scene Quick Item Tool
#==============================================================================
class Scene_Quick_Item_Tool < Scene_Base
 include QUICK_TOOL_SELECT
 #--------------------------------------------------------------------------
 # ● Initialize
 #--------------------------------------------------------------------------  
  def initialize
      @actor = $game_party.members[0]
  end
  
 #--------------------------------------------------------------------------
 # ● Start
 #--------------------------------------------------------------------------  
  def start
      super
      @spriteset = Spriteset_Map.new
      @viewport = Viewport.new(0, 0, 544, 416)
      @viewport.rect.set(0, 0, 544, 416)
      @viewport.ox = 0  
      @viewport.z = 9999
      @help_window = Window_Help.new
      @help_window.viewport = @viewport      
      @item_window = Window_Item_Tool.new(@actor)
      @item_window.viewport = @viewport
      @item_window.help_window = @help_window
      create_text_sprite
      setup_slide
  end
 
 #--------------------------------------------------------------------------
 # ● Setup Slide
 #--------------------------------------------------------------------------      
  def setup_slide 
      return unless ENALBLE_SLIDE
      @orig_x = @item_window.x      
      @item_window.x -= 100
      @item_window.opacity = 0
      @item_window.contents_opacity = 0
      @text.x = @item_window.x 
      @text.opacity = @item_window.opacity
      @help_window.x += 100
      @help_window.opacity = @item_window.opacity
      @help_window.contents_opacity = @item_window.contents_opacity      
  end
    
 #--------------------------------------------------------------------------
 # ● Create Text Sprite
 #--------------------------------------------------------------------------    
  def create_text_sprite
     @text = Sprite.new
     @text.bitmap = Bitmap.new(@item_window.width,@item_window.height + 32)
     @text.z = 10000
     @text.bitmap.font.size = 16
     @text.bitmap.font.bold = true
     @text.bitmap.font.name = "Georgia"  
     text_string = "Item"
     @text.bitmap.draw_text(0, 0, @item_window.width, 32, text_string.to_s,1) 
     @text.bitmap.font.size = 14
     text_string = "L      Skill Select      R"
     @text.bitmap.draw_text(0, @item_window.height + 5, @item_window.width, 32, text_string.to_s,1) 
     @text.x = @item_window.x 
     @text.y = @item_window.y - 20    
  end  
  
 #--------------------------------------------------------------------------
 # ● Perform Transition
 #--------------------------------------------------------------------------    
  def perform_transition
      if ENALBLE_SLIDE
         Graphics.transition(0)
      else   
         Graphics.transition(10)
      end  
  end  


 #--------------------------------------------------------------------------
 # ● Terminate
 #--------------------------------------------------------------------------  
  def terminate
      super
      @spriteset.dispose
      @text.bitmap.dispose
      @text.dispose
      unless @help_window.disposed?
         @help_window.dispose
         @item_window.dispose
      end   
  end


  #--------------------------------------------------------------------------
  # ● Pre-Terminate
  #--------------------------------------------------------------------------
  def pre_terminate
      super
      update_slide_terminate 
  end    
 
 #--------------------------------------------------------------------------
 # ● Update Slide Terminate
 #--------------------------------------------------------------------------    
  def update_slide_terminate 
      return unless ENALBLE_SLIDE
      for i in 0..10
          @item_window.x -= 10
          @help_window.x += 10
          @item_window.opacity -= 25
          @item_window.contents_opacity -= 25      
          @text.x = @item_window.x 
          @text.opacity = @item_window.opacity
          @help_window.opacity = @item_window.opacity
          @help_window.contents_opacity = @item_window.contents_opacity             
          Graphics.update  
      end  
  end   
 
 #--------------------------------------------------------------------------
 # ● Update
 #--------------------------------------------------------------------------  
  def update
      super
      @spriteset.update
      update_item_selection
      update_slide
  end
  
 #--------------------------------------------------------------------------
 # ● Update Slide
 #--------------------------------------------------------------------------      
  def update_slide
      return unless ENALBLE_SLIDE
      return if @item_window.x == @orig_x
      @item_window.x += 10
      @help_window.x -= 10
      @item_window.opacity += 25
      @item_window.contents_opacity += 25      
      if @item_window.x  >= @orig_x      
         @item_window.x = @orig_x 
         @help_window.x = 0
         @item_window.opacity = 255
         @item_window.contents_opacity = 255
      end
      @text.x = @item_window.x 
      @text.opacity = @item_window.opacity
      @help_window.opacity = @item_window.opacity
      @help_window.contents_opacity = @item_window.contents_opacity      
  end    
  
 #--------------------------------------------------------------------------
 # ● Update Item Selection
 #--------------------------------------------------------------------------  
  def update_item_selection
      if Input.trigger?(Input::B)
         Sound.play_cancel
         SceneManager.call(Scene_Map)
         return
      elsif Input.trigger?(Input::R) or Input.trigger?(Input::L)
         Sound.play_cursor
         SceneManager.call(Scene_Quick_Skill_Tool)
         return
      elsif Input.trigger?(XAS_BUTTON::ACTION_2_BUTTON)   
            @item = @item_window.item
            return if @item == nil
            if @item.is_a?(RPG::Weapon)
               if @actor.dual_wield?
                  @actor.change_equip(1, @item) 
               else
                  @actor.change_equip(0, @item) 
               end  
             elsif @item.is_a?(RPG::Armor)
                   @actor.change_equip(1, @item) 
             elsif @item.is_a?(RPG::Item)   
                   @actor.item_id = @item.id
             end  
             Sound.play_equip
            return 
      elsif Input.trigger?(Input::C)
         @item = @item_window.item
         return if @item == nil 
         case @item
              when RPG::Item
                @actor.item_id = @item.id
              when RPG::Weapon
                @actor.change_equip(0, @item)                
              when RPG::Armor
                @actor.change_equip(1, @item) 
          end         
         Sound.play_equip
         @item_window.refresh
         return
      end
  end


end


$mog_rgss3_xas_quick_tool_select = true
 
Last edited by a moderator:

Kes

Veteran
Veteran
Joined
Aug 3, 2012
Messages
22,299
Reaction score
11,713
First Language
English
Primarily Uses
RMVXA
I've moved this thread to RGSSx Script Support. Please be sure to post your threads in the correct forum next time. Thank you.
 

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

Latest Threads

Latest Profile Posts

Don't forget, aspiring writers: Personality isn't what your characters do, it is WHY they do it.
Hello! I would like to know if there are any pluggings or any way to customize how battles look?
I was thinking that when you start the battle for it to appear the eyes of your characters and opponents sorta like Ace Attorney.
Sadly I don't know how that would be possible so I would be needing help! If you can help me in any way I would really apreciate it!
The biggest debate we need to complete on which is better, Waffles or Pancakes?
rux
How is it going? :D
Day 9 of giveaways! 8 prizes today :D

Forum statistics

Threads
106,049
Messages
1,018,546
Members
137,835
Latest member
yetisteven
Top