View Full Version: SIB Advanced Equip

RPGXP Unlimited > Scripts Archive > SIB Advanced Equip


Title: SIB Advanced Equip
Description: By SIBruno


Nickz - July 7, 2006 12:32 PM (GMT)
This script is really good, its a custom equip screen. It was made by SIBruno and also says in the script to use freely and give credit. The script goes above main. Try it out, much better than the default.

CODE
#===================================================
# ■ SIB Advanced Equip
#===================================================
# For more infos and update, visit:
# www.dubealex.com (Creation Asylum)
#
# Created Entirely by SIBruno
# shaun.bruno@mail.utexas.edu
# Use freely and give credit! :)
#
# Special Thanks:
# Creation Asylum
#
# Jan 30, 2006
#===================================================

$AEfont = "Tahoma"
$AEsize = 22

class Window_Base < Window
 #--------------------------------------------------------------------------
 # * SIBRUNO Draw Parameter color
 #     actor : actor
 #     x     : draw spot x-coordinate
 #     y     : draw spot y-coordinate
 #     type  : parameter type (0-6)
 #     value : parameter value
 #     colorNum: color for parameter
 #--------------------------------------------------------------------------
 def draw_sib_parameter(actor, x, y, type, value, colorNum)
   parameter_value = value
   case type
   when 0
     parameter_name = $data_system.words.atk
   when 1
     parameter_name = $data_system.words.pdef
   when 2
     parameter_name = $data_system.words.mdef
   when 3
     parameter_name = $data_system.words.str
   when 4
     parameter_name = $data_system.words.dex
   when 5
     parameter_name = $data_system.words.agi
   when 6
     parameter_name = $data_system.words.int
   end
   self.contents.font.color = system_color
   self.contents.draw_text(x, y, 120, 32, parameter_name)
   self.contents.font.color = text_color(colorNum)
   self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)
 end
end

class Window_EquipLeft < Window_Base
 #--------------------------------------------------------------------------
 # * Object Initialization
 #     actor : actor
 #--------------------------------------------------------------------------
 def initialize(actor)
   super(0, 64, 302, 416) #previous super(0, 64, 272, 192)
   self.contents = Bitmap.new(width - 32, height - 32)
   self.contents.font.name = $AEfont  # "Equip" left side (Status) window font
   self.contents.font.size = $AEsize
   @actor = actor
   refresh
 end
 #--------------------------------------------------------------------------
 # * Refresh
 #--------------------------------------------------------------------------
 def refresh
   self.contents.clear
   #-----SIBRUNO EQUIP LEFT-----
   draw_actor_graphic(@actor, 40, 112)
   draw_actor_name(@actor, 4, 0)
   draw_actor_class(@actor, 4 + 144, 0)
   
   xPos  = 50
   xVar  = 180
   yAtk  = 124
   yPDef = 156
   yMDef = 188
   yStr  = 252
   yDex  = 284
   yAgi  = 316
   yInt  = 348
   
   draw_actor_hp(@actor, 96, 32, 172)
   draw_actor_sp(@actor, 96, 64, 172)
     
   # Atk
   if @new_atk != nil
     if @actor.atk < @new_atk
       draw_sib_parameter(@actor, xPos, yAtk, 0, @new_atk, 7)
       self.contents.font.color = text_color(3)
     elsif @actor.atk > @new_atk
       draw_sib_parameter(@actor, xPos, yAtk, 0, @new_atk, 7)
       self.contents.font.color = text_color(2)
     else
       draw_sib_parameter(@actor, xPos, yAtk, 0, @new_atk, 8)
     end
     atk_var = @new_atk - @actor.atk
     if atk_var != 0
       atktxt = ""
       if atk_var > 0
         atktxt = "+" + atk_var.to_s
       else
         atktxt = atk_var.to_s
       end
       self.contents.draw_text(xPos + xVar, yAtk, 36, 32, atktxt, 2)
     end
   else
     draw_actor_parameter(@actor, xPos, yAtk, 0)
   end
   
   # Phy Def
   if @new_pdef != nil
     if @actor.pdef < @new_pdef
       draw_sib_parameter(@actor, xPos, yPDef, 1, @new_pdef, 7)
       self.contents.font.color = text_color(3)
     elsif @actor.pdef > @new_pdef
       draw_sib_parameter(@actor, xPos, yPDef, 1, @new_pdef, 7)
       self.contents.font.color = text_color(2)
     else
       draw_sib_parameter(@actor, xPos, yPDef, 1, @new_pdef, 8)
     end
     pdef_var = @new_pdef - @actor.pdef
     if pdef_var != 0
       pdeftxt = ""
       if pdef_var > 0
         pdeftxt = "+" + pdef_var.to_s
       else
         pdeftxt = pdef_var.to_s
       end
       self.contents.draw_text(xPos + xVar, yPDef, 36, 32, pdeftxt, 2)
     end
   else
     draw_actor_parameter(@actor, xPos, yPDef, 1)
   end
   
   # Mag Def
   if @new_mdef != nil
     if @actor.mdef < @new_mdef
       draw_sib_parameter(@actor, xPos, yMDef, 2, @new_mdef, 7)
       self.contents.font.color = text_color(3)
     elsif @actor.mdef > @new_mdef
       draw_sib_parameter(@actor, xPos, yMDef, 2, @new_mdef, 7)
       self.contents.font.color = text_color(2)
     else
       draw_sib_parameter(@actor, xPos, yMDef, 2, @new_mdef, 8)
     end
     mdef_var = @new_mdef - @actor.mdef
     if mdef_var != 0
       mdeftxt = ""
       if mdef_var > 0
         mdeftxt = "+" + mdef_var.to_s
       else
         mdeftxt = mdef_var.to_s
       end
       self.contents.draw_text(xPos + xVar, yMDef, 36, 32, mdeftxt, 2)
     end
   else
     draw_actor_parameter(@actor, xPos, yMDef, 2)
   end
   
   # Str
   if @new_str != nil
     if @actor.str < @new_str
       draw_sib_parameter(@actor, xPos, yStr, 3, @new_str, 7)
       self.contents.font.color = text_color(3)
     elsif @actor.str > @new_str
       draw_sib_parameter(@actor, xPos, yStr, 3, @new_str, 7)
       self.contents.font.color = text_color(2)
     else
       draw_sib_parameter(@actor, xPos, yStr, 3, @new_str, 8)
     end
     str_var = @new_str - @actor.str
     if str_var != 0
       strtxt = ""
       if str_var > 0
         strtxt = "+" + str_var.to_s
       else
         strtxt = str_var.to_s
       end
       self.contents.draw_text(xPos + xVar, yStr, 36, 32, strtxt, 2)
     end
   else
     draw_actor_parameter(@actor, xPos, yStr, 3)
   end
   
   #Dex
   if @new_dex != nil
     if @actor.dex < @new_dex
       draw_sib_parameter(@actor, xPos, yDex, 4, @new_dex, 7)
       self.contents.font.color = text_color(3)
     elsif @actor.dex > @new_dex
       draw_sib_parameter(@actor, xPos, yDex, 4, @new_dex, 7)
       self.contents.font.color = text_color(2)
     else
       draw_sib_parameter(@actor, xPos, yDex, 4, @new_dex, 8)
     end
     dex_var = @new_dex - @actor.dex
     if dex_var != 0
       dextxt = ""
       if dex_var > 0
         dextxt = "+" + dex_var.to_s
       else
         dextxt = dex_var.to_s
       end
       self.contents.draw_text(xPos + xVar, yDex, 36, 32, dextxt, 2)
     end
   else
     draw_actor_parameter(@actor, xPos, yDex, 4)
   end
   
   #Agi
   if @new_agi != nil
     if @actor.agi < @new_agi
       draw_sib_parameter(@actor, xPos, yAgi, 5, @new_agi, 7)
       self.contents.font.color = text_color(3)
     elsif @actor.agi > @new_agi
       draw_sib_parameter(@actor, xPos, yAgi, 5, @new_agi, 7)
       self.contents.font.color = text_color(2)
     else
       draw_sib_parameter(@actor, xPos, yAgi, 5, @new_agi, 8)
     end
     agi_var = @new_agi - @actor.agi
     if agi_var != 0
       agitxt = ""
       if agi_var > 0
         agitxt = "+" + agi_var.to_s
       else
         agitxt = agi_var.to_s
       end
       self.contents.draw_text(xPos + xVar, yAgi, 36, 32, agitxt, 2)
     end
   else
     draw_actor_parameter(@actor, xPos, yAgi, 5)
   end
   
   #Int
   if @new_int != nil
     if @actor.int < @new_int
       draw_sib_parameter(@actor, xPos, yInt, 6, @new_int, 7)
       self.contents.font.color = text_color(3)
     elsif @actor.int > @new_int
       draw_sib_parameter(@actor, xPos, yInt, 6, @new_int, 7)
       self.contents.font.color = text_color(2)
     else
       draw_sib_parameter(@actor, xPos, yInt, 6, @new_int, 8)
     end
     int_var = @new_int - @actor.int
     if int_var != 0
       inttxt = ""
       if int_var > 0
         inttxt = "+" + int_var.to_s
       else
         inttxt = int_var.to_s
       end
       self.contents.draw_text(xPos + xVar, yInt, 36, 32, inttxt, 2)
     end
   else
     draw_actor_parameter(@actor, xPos, yInt, 6)
   end
   
end
 
 #--------------------------------------------------------------------------
 # ● Set parameters after changing equipment
 #     new_atk  : attack power after changing equipment
 #     new_pdef : physical defense after changing equipment
 #     new_mdef : magic defense after changing equipment
 #     new_str : str after changing equipment
 #     new_dex : dex after changing equipment
 #     new_agi : agi after changing equipment
 #     new_int : int after changing equipment
 #--------------------------------------------------------------------------
   def set_new_parameters(new_atk, new_pdef, new_mdef,  
                       new_str, new_dex, new_agi, new_int)
   if @new_atk != new_atk or @new_pdef != new_pdef or @new_mdef != new_mdef or
     @new_str != new_str or
     @new_dex != new_dex or @new_agi != new_agi or @new_int != new_int
     
     @new_atk = new_atk
     @new_pdef = new_pdef
     @new_mdef = new_mdef
     @new_str = new_str
     @new_dex = new_dex
     @new_agi = new_agi
     @new_int = new_int
     refresh
   end
 end
end

class Window_EquipRight < Window_Selectable
 #--------------------------------------------------------------------------
 # * Object Initialization
 #     actor : actor
 #--------------------------------------------------------------------------
 def initialize(actor)
   super(302, 64, 338, 192)#Previous super(272, 64, 368, 192)
   self.contents = Bitmap.new(width - 32, height - 32)
   self.contents.font.name = $AEfont # "Equip" right side (Equiped Items) window font
   self.contents.font.size = $AEsize
   @actor = actor
   refresh
   self.index = -1
 end
 #--------------------------------------------------------------------------
 # * Item Acquisition
 #--------------------------------------------------------------------------
 def item
   return @data[self.index]
 end
 #--------------------------------------------------------------------------
 # ● Refresh
 #--------------------------------------------------------------------------
   def refresh
   self.contents.clear
   @data = []
   @data.push($data_weapons[@actor.weapon_id])
   @data.push($data_armors[@actor.armor1_id])
   @data.push($data_armors[@actor.armor2_id])
   @data.push($data_armors[@actor.armor3_id])
   @data.push($data_armors[@actor.armor4_id])
   @item_max = @data.size
   self.contents.font.color = system_color
   self.contents.draw_text(4, 32 * 0, 92, 32, $data_system.words.weapon)
   self.contents.draw_text(4, 32 * 1, 92, 32, $data_system.words.armor1)
   self.contents.draw_text(4, 32 * 2, 92, 32, $data_system.words.armor2)
   self.contents.draw_text(4, 32 * 3, 92, 32, $data_system.words.armor3)
   self.contents.draw_text(5, 32 * 4, 92, 32, $data_system.words.armor4)
   draw_item_name(@data[0], 92, 32 * 0)
   draw_item_name(@data[1], 92, 32 * 1)
   draw_item_name(@data[2], 92, 32 * 2)
   draw_item_name(@data[3], 92, 32 * 3)
   draw_item_name(@data[4], 92, 32 * 4)
 end
 #--------------------------------------------------------------------------
 # ● Help Text Update
 #--------------------------------------------------------------------------
 def update_help
   @help_window.set_text(self.item == nil ? "" : self.item.description)
 end
end

#==============================================================================
# ** Window_EquipItem
#------------------------------------------------------------------------------
#  This window displays choices when opting to change equipment on the
#  equipment screen.
#==============================================================================

class Window_EquipItem < Window_Selectable
 #--------------------------------------------------------------------------
 # * Object Initialization
 #     actor      : actor
 #     equip_type : equip region (0-3)
 #--------------------------------------------------------------------------
 def initialize(actor, equip_type)
   super(302, 256, 338, 224)  #Previous super(0, 256, 640, 224)
   @actor = actor
   @equip_type = equip_type
   @column_max = 1 #Previous 2
   refresh
   self.active = false
   self.index = -1
 end
 #--------------------------------------------------------------------------
 # * Item Acquisition
 #--------------------------------------------------------------------------
 def item
   return @data[self.index]
 end
 #--------------------------------------------------------------------------
 # * Refresh
 #--------------------------------------------------------------------------
 def refresh
   if self.contents != nil
     self.contents.dispose
     self.contents = nil
   end
   @data = []
   # Add equippable weapons
   if @equip_type == 0
     weapon_set = $data_classes[@actor.class_id].weapon_set
     for i in 1...$data_weapons.size
       if $game_party.weapon_number(i) > 0 and weapon_set.include?(i)
         @data.push($data_weapons[i])
       end
     end
   end
   # Add equippable armor
   if @equip_type != 0
     armor_set = $data_classes[@actor.class_id].armor_set
     for i in 1...$data_armors.size
       if $game_party.armor_number(i) > 0 and armor_set.include?(i)
         if $data_armors[i].kind == @equip_type-1
           @data.push($data_armors[i])
         end
       end
     end
   end
   # Add blank page
   @data.push(nil)
   # Make a bit map and draw all items
   @item_max = @data.size
   self.contents = Bitmap.new(width - 32, row_max * 32)
   self.contents.font.name = $AEfont  # "Equip" bottom (Item List) window font
   self.contents.font.size = $AEsize
   for i in 0...@item_max-1
     draw_item(i)
   end
 end
 #--------------------------------------------------------------------------
 # * Draw Item
 #     index : item number
 #--------------------------------------------------------------------------
 def draw_item(index)
   item = @data[index]
   x = index#previous x = 4 + index % 2 * (288 + 32)
   y = index * 32 #previous y = index / 2 * 32
   case item
   when RPG::Weapon
     number = $game_party.weapon_number(item.id)
   when RPG::Armor
     number = $game_party.armor_number(item.id)
   end
   bitmap = RPG::Cache.icon(item.icon_name)
   self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
   self.contents.font.color = normal_color
   self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
   self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
   self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
 end
 #--------------------------------------------------------------------------
 # * Help Text Update
 #--------------------------------------------------------------------------
 def update_help
   @help_window.set_text(self.item == nil ? "" : self.item.description)
 end
end

#==============================================================================
# ** Scene_Equip
#------------------------------------------------------------------------------
#  This class performs equipment screen processing.
#==============================================================================

class Scene_Equip
 #--------------------------------------------------------------------------
 # * Object Initialization
 #     actor_index : actor index
 #     equip_index : equipment index
 #--------------------------------------------------------------------------
 def initialize(actor_index = 0, equip_index = 0)
   @actor_index = actor_index
   @equip_index = equip_index
 end
 #--------------------------------------------------------------------------
 # * Main Processing
 #--------------------------------------------------------------------------
 def main
   # Get actor
   @actor = $game_party.actors[@actor_index]
   # Make windows
   @help_window = Window_Help.new
   @left_window = Window_EquipLeft.new(@actor)
   @right_window = Window_EquipRight.new(@actor)
   @item_window1 = Window_EquipItem.new(@actor, 0)
   @item_window2 = Window_EquipItem.new(@actor, 1)
   @item_window3 = Window_EquipItem.new(@actor, 2)
   @item_window4 = Window_EquipItem.new(@actor, 3)
   @item_window5 = Window_EquipItem.new(@actor, 4)
   # Associate help window
   @right_window.help_window = @help_window
   @item_window1.help_window = @help_window
   @item_window2.help_window = @help_window
   @item_window3.help_window = @help_window
   @item_window4.help_window = @help_window
   @item_window5.help_window = @help_window
   # Set cursor position
   @right_window.index = @equip_index
   refresh
   # Execute transition
   Graphics.transition
   # Main loop
   loop do
     # Update game screen
     Graphics.update
     # Update input information
     Input.update
     # Frame update
     update
     # Abort loop if screen is changed
     if $scene != self
       break
     end
   end
   # Prepare for transition
   Graphics.freeze
   # Dispose of windows
   @help_window.dispose
   @left_window.dispose
   @right_window.dispose
   @item_window1.dispose
   @item_window2.dispose
   @item_window3.dispose
   @item_window4.dispose
   @item_window5.dispose
 end
 #--------------------------------------------------------------------------
 # * Refresh
 #--------------------------------------------------------------------------
 def refresh
   # Set item window to visible
   @item_window1.visible = (@right_window.index == 0)
   @item_window2.visible = (@right_window.index == 1)
   @item_window3.visible = (@right_window.index == 2)
   @item_window4.visible = (@right_window.index == 3)
   @item_window5.visible = (@right_window.index == 4)
   # Get currently equipped item
   item1 = @right_window.item
   # Set current item window to @item_window
   case @right_window.index
   when 0
     @item_window = @item_window1
   when 1
     @item_window = @item_window2
   when 2
     @item_window = @item_window3
   when 3
     @item_window = @item_window4
   when 4
     @item_window = @item_window5
   end
   # If right window is active
   if @right_window.active
     # Erase parameters for after equipment change
     @left_window.set_new_parameters(nil, nil, nil, nil, nil, nil,
                                     nil)
   end
   # If item window is active
   if @item_window.active
     # Get currently selected item
     item2 = @item_window.item
     # Change equipment
     last_hp = @actor.hp
     last_sp = @actor.sp
     @actor.equip(@right_window.index, item2 == nil ? 0 : item2.id)
     # Get parameters for after equipment change
     new_atk = @actor.atk
     new_pdef = @actor.pdef
     new_mdef = @actor.mdef
     new_str  = @actor.str
     new_dex  = @actor.dex
     new_agi  = @actor.agi
     new_int  = @actor.int
     # Return equipment
     @actor.equip(@right_window.index, item1 == nil ? 0 : item1.id)
     @actor.hp = last_hp
     @actor.sp = last_sp
     # Draw in left window
     @left_window.set_new_parameters(new_atk, new_pdef, new_mdef, new_str, new_dex, new_agi,
                                     new_int)
   end
 end
 #--------------------------------------------------------------------------
 # * Frame Update
 #--------------------------------------------------------------------------
 def update
   # Update windows
   @left_window.update
   @right_window.update
   @item_window.update
   refresh
   # If right window is active: call update_right
   if @right_window.active
     update_right
     return
   end
   # If item window is active: call update_item
   if @item_window.active
     update_item
     return
   end
 end
 #--------------------------------------------------------------------------
 # * Frame Update (when right window is active)
 #--------------------------------------------------------------------------
 def update_right
   # If B button was pressed
   if Input.trigger?(Input::B)
     # Play cancel SE
     $game_system.se_play($data_system.cancel_se)
     # Switch to menu screen
     $scene = Scene_Menu.new(2)
     return
   end
   # If C button was pressed
   if Input.trigger?(Input::C)
     # If equipment is fixed
     if @actor.equip_fix?(@right_window.index)
       # Play buzzer SE
       $game_system.se_play($data_system.buzzer_se)
       return
     end
     # Play decision SE
     $game_system.se_play($data_system.decision_se)
     # Activate item window
     @right_window.active = false
     @item_window.active = true
     @item_window.index = 0
     return
   end
   # If R button was pressed
   if Input.trigger?(Input::R)
     # Play cursor SE
     $game_system.se_play($data_system.cursor_se)
     # To next actor
     @actor_index += 1
     @actor_index %= $game_party.actors.size
     # Switch to different equipment screen
     $scene = Scene_Equip.new(@actor_index, @right_window.index)
     return
   end
   # If L button was pressed
   if Input.trigger?(Input::L)
     # Play cursor SE
     $game_system.se_play($data_system.cursor_se)
     # To previous actor
     @actor_index += $game_party.actors.size - 1
     @actor_index %= $game_party.actors.size
     # Switch to different equipment screen
     $scene = Scene_Equip.new(@actor_index, @right_window.index)
     return
   end
 end
 #--------------------------------------------------------------------------
 # * Frame Update (when item window is active)
 #--------------------------------------------------------------------------
 def update_item
   # If B button was pressed
   if Input.trigger?(Input::B)
     # Play cancel SE
     $game_system.se_play($data_system.cancel_se)
     # Activate right window
     @right_window.active = true
     @item_window.active = false
     @item_window.index = -1
     return
   end
   # If C button was pressed
   if Input.trigger?(Input::C)
     # Play equip SE
     $game_system.se_play($data_system.equip_se)
     # Get currently selected data on the item window
     item = @item_window.item
     # Change equipment
     @actor.equip(@right_window.index, item == nil ? 0 : item.id)
     # Activate right window
     @right_window.active = true
     @item_window.active = false
     @item_window.index = -1
     # Remake right window and item window contents
     @right_window.refresh
     @item_window.refresh
     return
   end
 end
end


Heres a screenshot:
user posted image

SCMike - July 7, 2006 04:59 PM (GMT)
Post screenshots? Explain exactly what it does that is different from the normal? You need more detail, please.

Blazinks - July 8, 2006 01:29 AM (GMT)
Wow that suberb!! love it!
Though i can't use it since it doesn't have what I need... But if I was gona make a medival game, thats DEFINTLY what I'll use.

To Mike; It reorders all the menus and stuff making it look cooler. :D

Nickz - July 8, 2006 04:05 AM (GMT)
Screenshot added.

SCMike - July 8, 2006 04:29 AM (GMT)
Sad...I haven't used the DMS (Default Menu System) in so long...I've forgotten what it looks like. I use Diego's CMS 100% now. Haven't made a game that doesn't use it (if the game has a menu that is).

Marked - July 8, 2006 05:32 AM (GMT)
I think you can combine them, this is just a custom equip scene. If you have played my demo, you would have seen this script in it.

SCMike - July 8, 2006 05:53 AM (GMT)
Yeah. Unless someone posts one, though, that allows for 11 items to be equipped onto a character, then no...I'm not gonna use any custom equip screen. Diego's is custom enough for me.

Marked - July 8, 2006 06:58 AM (GMT)
11 is a lot to be equiped. Wouldn't it be a bad thing to have heaps of items that you are able to equip, I dont know because I havent got the script. Isnt that the script you are working on?




* Hosted for free by InvisionFree