Mochila Estilo Diablo No RPG Maker XP

19 de novembro de 2013

Item System Diablo Style é um script desenvolvido por DarkSchneider que adiciona em um game ou projeto desenvolvido no RPG Maker XP um sistema de inventario (ou mochila) estilo Diablo.

O script parece que nunca saiu em fase de beta e o visual não é dos melhores, embora dê pro gasto.

Veja a screenshot:

Mochila Estilo Diablo No RPG Maker XP

Se você manjar de RGSS, pode até incrementar se quiser. Apesar disto, a grande vantagem dele é que ele é bem simples de instalar, bastando apenas inserir acima do Main o código abaixo:

#==============================================================================
#  Item System Diablo Style
#------------------------------------------------------------------------------
#  By DarkSchneider 
#  www.rpg2s.net
#------------------------------------------------------------------------------
#  Credit to Schwarz for draw_line
#==============================================================================

class Scene_Item2
 def initialize(actor_index = 0)
   @actor_index = actor_index
 end
 
 def main
   # Make help window, item window
   s1 = "Usar"
   s2 = "Mover"
   s3 = "Eliminar"
   @command_window = Window_Command.new(193, [s1, s2 , s3])
   @command_window.y = 64
   @help_window = Window_Help.new
   @grid = Window_Grid.new(@actor_index)
   @grid.active = false
   # Associate help window
   @grid.help_window = @help_window
   # Make target window (set to invisible / inactive)
   @target_window = Window_Target.new
   @target_window.visible = false
   @target_window.active = false
   @window_pc = Window_Base.new(0,192,193,287)
   @window_pc.contents = Bitmap.new(161,255)
   @window_pc.draw_actor_name($game_party.actors[@actor_index], 10, 0)
   @window_pc.draw_actor_picture($game_party.actors[@actor_index], 80, 250)
   # 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
   @cursor_icon.dispose if @cursor_icon != nil
   # Dispose of windows
   @command_window.dispose
   @help_window.dispose
   #@item_window.dispose
   @target_window.dispose
   @grid.dispose
   @window_pc.dispose
 end
 #--------------------------------------------------------------------------
 # * Frame Update
 #--------------------------------------------------------------------------
 def update
   # Update windows
   @command_window.update
   @help_window.update
   @target_window.update
   @grid.update
   if @command_window.active
     update_command
     return
   end
   # If item window is active: call update_item
   if @grid.active
     case @grid.mode
     when 0
       update_usa
     when 1
       @cursor_icon = Cursor_Icon.new if @cursor_icon == nil
       @cursor_icon.visible = false
       update_muovi
     when 2
       update_lascia
     when 3
       @cursor_icon.update
       update_muovi2
     end
     return
   end
   # If target window is active: call update_target
   if @target_window.active
     update_target
     return
   end
 end
 
 def update_command
   # 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(0)
   return
 end
   if Input.trigger?(Input::C)
     # Branch by command window cursor position
     case @command_window.index
     when 0  # use
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       @command_window.active = false
       @grid.active = true
       @grid.set = 0
       @grid.mode = @command_window.index
     when 1  # move
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Make status window active
       @command_window.active = false
       @grid.active = true
       @grid.set = 0
       @grid.mode = @command_window.index
     when 2  # drop
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Make status window active
       @command_window.active = false
       @grid.active = true
       @grid.set = 0
       @grid.mode = @command_window.index
     end
     return
   end
 end
 #--------------------------------------------------------------------------
 # * Frame Update (when item window is active)
 #--------------------------------------------------------------------------
 def update_usa
   # 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
     @command_window.active = true
     @grid.active = false
     @grid.set = - 1
     return
   end
   # If C button was pressed
   if Input.trigger?(Input::C)
     # Get currently selected data on the item window
     @item = @grid.item
     # If not a use item
     unless @item.is_a?(RPG::Item)
       # Play buzzer SE
       $game_system.se_play($data_system.buzzer_se)
       return
     end
     # If it can't be used
     unless $game_party.item_can_use?(@item.id)
       # Play buzzer SE
       $game_system.se_play($data_system.buzzer_se)
       return
     end
     # Play decision SE
     $game_system.se_play($data_system.decision_se)
     # If effect scope is an ally
     if @item.scope >= 3
       # Activate target window
       @grid.active = false
       #@target_window.x = (@item_window.index + 1) % 2 * 304
       @target_window.visible = true
       @target_window.active = true
       # Set cursor position to effect scope (single / all)
       if @item.scope == 4 || @item.scope == 6
         @target_window.index = -1
       else
         @target_window.index = 0
       end
     # If effect scope is other than an ally
     else
       # If command event ID is valid
       if @item.common_event_id > 0
         # Command event call reservation
         $game_temp.common_event_id = @item.common_event_id
         # Play item use SE
         $game_system.se_play(@item.menu_se)
         # If consumable
         if @item.consumable
           # Decrease used items by 1
           $game_party.lose_item(@item.id, 1, false)
           # Draw item window item
           @grid.delete_item
         end
         # Switch to map screen
         $scene = Scene_Map.new
         return
       end
     end
     return
   end
 end
 #--------------------------------------------------------------------------
 # * Frame Update (when target window is active)
 #--------------------------------------------------------------------------
 def update_target
   # If B button was pressed
   if Input.trigger?(Input::B)
     # Play cancel SE
     $game_system.se_play($data_system.cancel_se)
     # If unable to use because items ran out
     unless $game_party.item_can_use?(@item.id) 
       # Remake item window contents
       @grid.refresh
     end
     # Erase target window
     @grid.active = true
     @target_window.visible = false
     @target_window.active = false
     return
   end
   # If C button was pressed
   if Input.trigger?(Input::C)
     # If items are used up
     if @grid.item_del?
       # Play buzzer SE
       $game_system.se_play($data_system.buzzer_se)
       return
     end
     # If target is all
     if @target_window.index == -1
       # Apply item effects to entire party
       used = false
       for i in $game_party.actors
         used |= i.item_effect(@item)
       end
     end
     # If single target
     if @target_window.index >= 0
       # Apply item use effects to target actor
       target = $game_party.actors[@target_window.index]
       used = target.item_effect(@item)
     end
     # If an item was used
     if used
       # Play item use SE
       $game_system.se_play(@item.menu_se)
       # If consumable
       if @item.consumable
         # Decrease used items by 1
         $game_party.lose_item(@item.id, 1, false)
         # Redraw item window item
         @grid.delete_item
       end
       # Remake target window contents
       @target_window.refresh
       # If all party members are dead
       if $game_party.all_dead?
         # Switch to game over screen
         $scene = Scene_Gameover.new
         return
       end
       # If common event ID is valid
       if @item.common_event_id > 0
         # Common event call reservation
         $game_temp.common_event_id = @item.common_event_id
         # Switch to map screen
         $scene = Scene_Map.new
         return
       end
     end
     # If item wasn't used
     unless used
       # Play buzzer SE
       $game_system.se_play($data_system.buzzer_se)
     end
     return
   end
 end
 
 def update_muovi
   
   if Input.trigger?(Input::B)
     # Play cancel SE
     $game_system.se_play($data_system.cancel_se)
     # Switch to menu screen
     @command_window.active = true
     @grid.active = false
     @grid.set = - 1
     return
   end
   
   if Input.trigger?(Input::C)
     if @grid.item != nil
     @grid.get_item
     bitmap = Bitmap.new(32,32)
     x = 4 + (@grid.cursor_rect.width == 32 ? 0 : 18)
     y = 4 + (@grid.cursor_rect.height == 32 ? 0 : 32)
     bitmap.blt(0,0,@grid.contents,Rect.new(@grid.cursor_rect.x + x, 
     @grid.cursor_rect.y + y,@grid.cursor_rect.width,@grid.cursor_rect.height))

     @cursor_icon.refresh(bitmap, @grid.item_saved[1])
     @grid.cursor_rect.width = @cursor_icon.bitmap.width
     @grid.cursor_rect.height = @cursor_icon.bitmap.height
     @cursor_icon.x = @grid.cursor_rect.x + @grid.x + 16
     @cursor_icon.y = @grid.cursor_rect.y + @grid.y + 16
     @cursor_icon.visible = true
     @grid.delete_item

     @grid.mode = 3
     end
     return
   end
 end
 
 def update_lascia
   if Input.trigger?(Input::B)
     # Play cancel SE
     $game_system.se_play($data_system.cancel_se)
     # Switch to menu screen
     @command_window.active = true
     @grid.active = false
     @grid.set = - 1
     return
   end
   if Input.trigger?(Input::C)
     if @grid.item != nil
       @grid.delete_item
     end
     return
   end
 end
 
 def update_muovi2
   @grid.cursor_rect.width = @cursor_icon.bitmap.width
   @grid.cursor_rect.height = @cursor_icon.bitmap.height
   @cursor_icon.x = @grid.cursor_rect.x + @grid.x + 16
   @cursor_icon.y = @grid.cursor_rect.y + @grid.y + 16
   if @grid.empty?
     @cursor_icon.blink_on
     @cursor_icon.tone.set(0,0,0,0)
   else
     @cursor_icon.blink_off
     @cursor_icon.tone.set(0,0,0,255)
   end
   
   if Input.trigger?(Input::B)
     # Play cancel SE
     $game_system.se_play($data_system.cancel_se)
     # Switch to menu screen
     @grid.redraw_item(false)
     @grid.mode = 1
     return
   end
   if Input.trigger?(Input::C)
     if @grid.empty?
       @grid.redraw_item
       @cursor_icon.visible = false
       @grid.mode = 1
     end
     return
   end
 end
end


class Window_Selectable < Window_Base
 alias old_initialize initialize
 def initialize(x, y, width, height)
   old_initialize(x, y, width, height)
   if self.is_a?(Window_Grid)
     @x = 0
     @y = 0
   end
 end
 
 alias old_update update
 def update
   if !self.is_a?(Window_Grid)
     old_update
     return
   end
   super
   item = $game_party.actors[@actor_index].item_grid
   # If cursor is movable
   if self.active and @item_max > 0 and @x >= 0
     # If pressing down on the directional buttons
     if Input.repeat?(Input::DOWN)
       @y = -1 if @y == item.size - (self.cursor_rect.height == 96 ? 3 : 1)
       @y += 2 if item[@y][@x][1] == "w" or item[@y][@x][1] == "a"
       if item[@y + 1][@x][1] == "r" and item[@y + 1][@x - 1][1] == "a"
         @x -= 1
       end
       @y += 1
       $game_system.se_play($data_system.cursor_se)
     end
     # If the up directional button was pressed
     if Input.repeat?(Input::UP)
       @y = item.size if @y - 1 == -1
       @y -= 2 if item[@y - 1][@x][1] == "e" or item[@y - 1][@x][1] == "r"
       @x -= 1 if item[@y - 1][@x - 1][1] == "a"
       @y -= 1
       
       $game_system.se_play($data_system.cursor_se)
     end
     # If the right directional button was pressed
     if Input.repeat?(Input::RIGHT)
       if @x + (self.cursor_rect.width == 64 ? 2 : 1) == item[@y].size
         @x = 0
         @y -= 1 if item[@y - 1][@x][1] == "a"
         @y -= 2 if item[@y - 2][@x][1] == "a"
       else 
       @x += 1 if item[@y][@x][1] == "a"
       if item[@y][@x + 1][1] == "r"
         @y -= 1 if item[@y - 1][@x + 1][1] == "a"
         @y -= 2 if item[@y - 2][@x + 1][1] == "a"
       end
       if item[@y][@x + 1][1] == "e"
         @y -= 1
         @y -= 1 if item[@y - 1][@x + 1][1] == "w"
       end
         @x += 1
       end
       $game_system.se_play($data_system.cursor_se)
     end
     # If the left directional button was pressed
     if Input.repeat?(Input::LEFT)
       @x = item[@y].size if @x - 1 == -1
       if item[@y][@x - 1][1] == "r"
         @x -= 1
         @y -= 1 if item[@y - 1][@x - 1][1] == "a"
         @y -= 2 if item[@y - 2][@x - 1][1] == "a"
       end
       if item[@y][@x - 1][1] == "e"
         @y -= 1
         @y -= 1 if item[@y - 1][@x - 1][1] == "w"
       end
       @x -= 1
       $game_system.se_play($data_system.cursor_se)
     end
   end
   # Update help text (update_help is defined by the subclasses)
   if self.active and @help_window != nil
     update_help
   end
   # Update cursor rectangle
   update_cursor_rect
 end
end

class Window_Grid < Window_Selectable
 
 attr_accessor :mode
 attr_reader :item_saved
 
 def initialize(actor_index)
   super(192,64,448,416)
   self.contents = Bitmap.new(width - 32, height - 32) #icone oggetti
   self.opacity = 0
   @window = Window_Base.new(x , y , width, height) #griglia bianca
   @window.contents = Bitmap.new(width - 32, height - 32)
   @window.z = self.z - 4
   @grid_color = Sprite.new    #colori oggetti
   @grid_color.bitmap = Bitmap.new(width - 32, height - 32)
   @grid_color.x = self.x + 16
   @grid_color.y = self.y + 16
   @grid_color.z = @window.z + 2
   @actor_index = actor_index
   @mode = 0
   @mini_help = Mini_Help.new
   self.set = -1
   n = self.contents.width / 32
   m = self.contents.height / 32
   @column_max = n
   draw_grid
   refresh
 end
 
 def draw_grid
   @window.contents.fill_rect(0, 0, width - 32, height - 32, Color.new(255,255,255))
   i = 0
   color = Color.new(0,0,0)
   while i < self.contents.height
     draw_line(0, i, self.contents.width, i, color)
     i += 32
   end
   i = 0
   while i < self.contents.width
     draw_line(i, 0, i, self.contents.width, color)
     i += 32
   end
 end
 
 def draw_line(sx, sy, ex, ey, color)
   rad = Math.atan2(ey-sy, ex-sx)
   dx = Math.cos(rad)
   dy = Math.sin(rad)
   while (sx - ex).abs > 1 || (sy - ey).abs > 1
     sx += dx
     sy += dy
     @window.contents.set_pixel(sx, sy, color)
   end
 end
 
 def refresh
   @item_max = 0
   item = $game_party.actors[@actor_index].item_grid
   for i in 0..item.size - 1
     for j in 0..item[i].size - 1
       if item[i][j][0]!= 0 and item[i][j][1] != "r" and item[i][j][1] != "e"
         @item_max += 1
       end
     end
   end
   
   for i in 0..item.size - 1
     for j in 0..item[i].size - 1
       draw_item(item[i][j][0], item[i][j][1], i , j)
     end
   end
 end
 
 def update_cursor_rect
   # If cursor position is less than 0
   if @x < 0
     self.cursor_rect.empty
     return
   end
   # Calculate cursor width
   case $game_party.actors[@actor_index].item_grid[@y][@x][1]
   when "i"
     cursor_width = 32
     cursor_height = 32
   when "w"
     cursor_width = 32
     cursor_height = 96
   when "a"
     cursor_width = 64
     cursor_height = 96
   else
     cursor_width = 32
     cursor_height = 32
   end
   # Calculate cursor coordinates
   x = @x * 32
   y = @y * 32
   # Update cursor rectangle
   self.cursor_rect.set(x, y, cursor_width, cursor_height)
 end
 
 def delete_item
   case $game_party.actors[@actor_index].item_grid[@y][@x][1]
   when "i"
     @grid_color.bitmap.fill_rect(@x*32+1, @y*32+1, 31, 31, Color.new(0,0,0,0))
     self.contents.fill_rect(@x*32, @y*32, 32, 32, Color.new(0,0,0,0))
     $game_party.actors[@actor_index].item_grid[@y][@x][0] = 0
     $game_party.actors[@actor_index].item_grid[@y][@x][1] = ""
   when "w"
     @grid_color.bitmap.fill_rect(@x*32+1, @y*32+1, 31, 95, Color.new(0,0,0,0))
     self.contents.fill_rect(@x*32, @y*32 + 4 + 32, 32, 32, Color.new(0,0,0,0))
     $game_party.actors[@actor_index].item_grid[@y][@x][0] = 0
     $game_party.actors[@actor_index].item_grid[@y][@x][1] = ""
     $game_party.actors[@actor_index].item_grid[@y + 1][@x][0] = 0
     $game_party.actors[@actor_index].item_grid[@y + 1][@x][1] = ""
     $game_party.actors[@actor_index].item_grid[@y + 2][@x][0] = 0
     $game_party.actors[@actor_index].item_grid[@y + 2][@x][1] = ""
   when "a"
     @grid_color.bitmap.fill_rect(@x*32+1, @y*32+1, 63, 95, Color.new(0,0,0,0))
     self.contents.fill_rect(@x*32 + 18, @y*32 + 4 + 32, 32, 32, Color.new(0,0,0,0))
     $game_party.actors[@actor_index].item_grid[@y][@x][0] = 0
     $game_party.actors[@actor_index].item_grid[@y][@x][1] = ""
     $game_party.actors[@actor_index].item_grid[@y + 1][@x][0] = 0
     $game_party.actors[@actor_index].item_grid[@y + 1][@x][1] = ""
     $game_party.actors[@actor_index].item_grid[@y + 2][@x][0] = 0
     $game_party.actors[@actor_index].item_grid[@y + 2][@x][1] = ""
     $game_party.actors[@actor_index].item_grid[@y][@x + 1][0] = 0
     $game_party.actors[@actor_index].item_grid[@y][@x + 1][1] = ""
     $game_party.actors[@actor_index].item_grid[@y + 1][@x + 1][0] = 0
     $game_party.actors[@actor_index].item_grid[@y + 1][@x + 1][1] = ""
     $game_party.actors[@actor_index].item_grid[@y + 2][@x + 1][0] = 0
     $game_party.actors[@actor_index].item_grid[@y + 2][@x + 1][1] = ""
   end
 end
   
 def item
   i = $game_party.actors[@actor_index].item_grid[@y][@x][0]
   case $game_party.actors[@actor_index].item_grid[@y][@x][1]
   when "i"
     return $data_items[i]
   when "w"
     return $data_weapons[i]
   when "a"
     return $data_armors[i]
   else return nil
   end
 end
 
 def item_del?
   if $game_party.actors[@actor_index].item_grid[@y][@x][0] == 0
     # Unusable
     return true
   else
     return false
   end
 end
 
 def dispose
   super
   @window.dispose
   @grid_color.dispose
   @mini_help.dispose
 end
 
 def update_help
   @mini_help.contents.font.color = (($game_party.item_can_use?(item.id) and item.is_a?(RPG::Item))? normal_color : disabled_color)
   @help_window.set_text(item == nil ? "" : item.description)
   @mini_help.set_text(item == nil ? "" : item.name)
   @mini_help.visible = false if item == nil
   @mini_help.x = self.cursor_rect.x +  self.cursor_rect.width + 192 + 
   (self.contents.width - self.cursor_rect.x - self.cursor_rect.width < @mini_help.width ? -@mini_help.width : 18)
   @mini_help.y = self.cursor_rect.y + self.cursor_rect.height + 64 +
   (self.contents.height - self.cursor_rect.y - self.cursor_rect.height < @mini_help.height ? -@mini_help.height : 18)
 end
 
 def get_item
   @item_saved = [$game_party.actors[@actor_index].item_grid[@y][@x][0], 
   $game_party.actors[@actor_index].item_grid[@y][@x][1], @x, @y]
 end
 
 def redraw_item(f = true)
   if f
     x = 4 + (@x * 32)
     y = @y * 32
   else
     x = 4 + (@item_saved[2] * 32)
     y = @item_saved[3] * 32
     tx = @x
     ty = @y
     @x = @item_saved[2]
     @y = @item_saved[3]
   end
   draw_item(@item_saved[0], @item_saved[1], @y , @x)
   case @item_saved[1]
   when "i"
     $game_party.actors[@actor_index].item_grid[@y][@x][0] = @item_saved[0]
     $game_party.actors[@actor_index].item_grid[@y][@x][1] = @item_saved[1]
   when "w"
     $game_party.actors[@actor_index].item_grid[@y][@x][0] = @item_saved[0]
     $game_party.actors[@actor_index].item_grid[@y][@x][1] = @item_saved[1]
     $game_party.actors[@actor_index].item_grid[@y + 1][@x][0] = @item_saved[0]
     $game_party.actors[@actor_index].item_grid[@y + 1][@x][1] = "e"
     $game_party.actors[@actor_index].item_grid[@y + 2][@x][0] = @item_saved[0]
     $game_party.actors[@actor_index].item_grid[@y + 2][@x][1] = "e"
   when "a"
     $game_party.actors[@actor_index].item_grid[@y][@x][0] = @item_saved[0]
     $game_party.actors[@actor_index].item_grid[@y][@x][1] = @item_saved[1]
     $game_party.actors[@actor_index].item_grid[@y + 1][@x][0] = @item_saved[0]
     $game_party.actors[@actor_index].item_grid[@y + 1][@x][1] = "r"
     $game_party.actors[@actor_index].item_grid[@y + 2][@x][0] = @item_saved[0]
     $game_party.actors[@actor_index].item_grid[@y + 2][@x][1] = "r"
     $game_party.actors[@actor_index].item_grid[@y][@x + 1][0] = @item_saved[0]
     $game_party.actors[@actor_index].item_grid[@y][@x + 1][1] = "r"
     $game_party.actors[@actor_index].item_grid[@y + 1][@x + 1][0] = @item_saved[0]
     $game_party.actors[@actor_index].item_grid[@y + 1][@x + 1][1] = "r"
     $game_party.actors[@actor_index].item_grid[@y + 2][@x + 1][0] = @item_saved[0]
     $game_party.actors[@actor_index].item_grid[@y + 2][@x + 1][1] = "r"
   end
   @x = tx if @x != tx and tx != nil
   @y = ty if @y != ty and ty != nil
 end
 
 def empty?
   case @item_saved[1]
   when "i" 
     return true if $game_party.actors[@actor_index].item_grid[@y][@x][1] == ""
   when "w"
     if $game_party.actors[@actor_index].item_grid[@y][@x][1] == "" and 
       $game_party.actors[@actor_index].item_grid[@y + 1][@x][1] == "" and 
       $game_party.actors[@actor_index].item_grid[@y + 2][@x][1] == ""
     
     return true
   end
   when "a"
     if $game_party.actors[@actor_index].item_grid[@y][@x][1] == "" and 
       $game_party.actors[@actor_index].item_grid[@y + 1][@x][1] == "" and 
       $game_party.actors[@actor_index].item_grid[@y + 2][@x][1] == "" and 
       $game_party.actors[@actor_index].item_grid[@y][@x + 1][1] == "" and 
       $game_party.actors[@actor_index].item_grid[@y + 1][@x + 1][1] == "" and 
       $game_party.actors[@actor_index].item_grid[@y + 2][@x + 1][1] == ""
     
       return true
     end
   end
   return false
 end
 
 def set=(set)
   @x = set
   @y = set
   @mini_help.visible = (set == 0 ? true : false) 
 end

 
 def draw_item(item_id, type, i , j)
   if type == "i" and
     $game_party.item_can_use?($data_items[item_id].id)
     opacity = 255
   else
     opacity = 128
   end
       
   if item_id != 0
     case type
     when "i"
       x = 4 + (j * 32)
       y = i * 32
       bitmap = RPG::Cache.icon($data_items[item_id].icon_name)
       @grid_color.bitmap.fill_rect(j*32+1, i*32+1, 31, 31, Color.new(0,0,200))
       self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
     when "w"
       x = 4 + (j * 32)
       y = i * 32
       bitmap = RPG::Cache.icon($data_weapons[item_id].icon_name)
       @grid_color.bitmap.fill_rect(j*32+1, i*32+1, 31, 95, Color.new(200,0,0))
       self.contents.blt(x, y + 4 + 32, bitmap, Rect.new(0, 0, 24, 24), opacity)
     when "a"
       x = 4 + (j * 32)
       y = i * 32
       bitmap = RPG::Cache.icon($data_armors[item_id].icon_name)
       @grid_color.bitmap.fill_rect(j*32+1, i*32+1, 63, 95, Color.new(0,200,0))
       self.contents.blt(x + 18, y + 4 + 32, bitmap, Rect.new(0, 0, 24, 24), opacity)
     end
   end
 end
end

class Mini_Help < Window_Base
 alias old_initialize initialize
 def initialize
   super(0, 0, 180, 40)
   self.contents = Bitmap.new(width - 32, height - 32)
   self.contents.font.size = 14
   self.back_opacity = 170
   self.z = 102
   self.visible = false
 end
 
 def set_text(text, align = 1)
   # If at least one part of text and alignment differ from last time
   if text != @text or align != @align
     # Redraw text
     self.contents.clear
     #self.contents.font.color = normal_color
     self.contents.draw_text(4, -12, self.width - 40, 32, text, align)
     #self.width = self.contents.text_size(text).width
     @text = text
     @align = align
     @actor = nil
   end
   self.visible = true
 end
end

class Game_Actor < Game_Battler
 attr_accessor :item_grid
 alias old_initialize initialize
 def initialize(actor_id)
   old_initialize(actor_id)
   @item_grid = Array.new(12)
   for i in 0..@item_grid.size - 1
     @item_grid[i] = Array.new(13)
     for k in 0..@item_grid[i].size - 1
       @item_grid[i][k] = Array.new(2)
       @item_grid[i][k][0] = 0
       @item_grid[i][k][1] = ""
     end
   end
 end

end

class Game_Party
 
 def gain_item(item_id, n)
   if item_id > 0
     for k in 1..n
       for i in 0..self.actors.size - 1
        break if set_item(item_id, "i", i) == nil
       end
     end
   end
 end
 
 def gain_weapon(weapon_id, n)
   if weapon_id > 0
     for k in 1..n
       for i in 0..self.actors.size - 1
         break if set_item(weapon_id, "w", i) == nil
       end
     end
   end
 end
 
 def gain_armor(armor_id, n)
   if armor_id > 0
     for k in 1..n
       for i in 0..self.actors.size - 1
         break if set_item(armor_id, "a", i) == nil
       end
     end
   end
 end
 
 def lose_item(item_id, n, random = true)
   if random == true
     if item_id > 0
       for k in 1..n
         del_item(item_id, "i")
       end
     end
   end
   @items[item_id] = [[item_number(item_id) + -n, 0].max, 99].min
 end
 
 def lose_weapon(weapon_id, n, random = true)
   if random == true
     if weapon_id > 0
       for k in 1..n
         del_item(weapon_id, "w")
       end
     end
   end
   @weapons[weapon_id] = [[weapon_number(weapon_id) + -n, 0].max, 99].min
 end

 def lose_armor(armor_id, n, random = true)
   if random == true
     if armor_id > 0
       for k in 1..n
         del_item(armor_id, "a")
       end
     end
   end
   @armors[armor_id] = [[armor_number(armor_id) + -n, 0].max, 99].min
 end
 
 def set_item(item_id, type, i)
     for a in 0..self.actors[i].item_grid.size - 1
       for b in 0..self.actors[i].item_grid[a].size - 1
         if self.actors[i].item_grid[a][b][0] == 0
           case type
           when "i"
             self.actors[i].item_grid[a][b][0] = item_id
             self.actors[i].item_grid[a][b][1] = type
             @items[item_id] = [[item_number(item_id) + 1, 0].max, 99].min
             return
           when "w"
             if a < self.actors[i].item_grid.size - 2
             if self.actors[i].item_grid[a + 1][b][0] == 0 and 
               self.actors[i].item_grid[a + 2][b][0] == 0

               self.actors[i].item_grid[a][b][0] = item_id
               self.actors[i].item_grid[a][b][1] = type
               self.actors[i].item_grid[a + 1][b][0] = item_id
               self.actors[i].item_grid[a + 1][b][1] = "e"
               self.actors[i].item_grid[a + 2][b][0] = item_id
               self.actors[i].item_grid[a + 2][b][1] = "e"
               @weapons[item_id] = [[weapon_number(item_id) + 1, 0].max, 99].min
               return
             end
             end
           when "a"
             if b < self.actors[i].item_grid[a].size - 1 and a < self.actors[i].item_grid.size - 2
             if self.actors[i].item_grid[a + 1][b][0] == 0 and self.actors[i].item_grid[a + 2][b][0] == 0 and 
               self.actors[i].item_grid[a][b + 1][0] == 0 and 
               self.actors[i].item_grid[a + 1][b + 1][0] == 0 and self.actors[i].item_grid[a + 2][b + 1][0] == 0
               
               self.actors[i].item_grid[a][b][0] = item_id
               self.actors[i].item_grid[a][b][1] = type
               self.actors[i].item_grid[a + 1][b][0] = item_id
               self.actors[i].item_grid[a + 1][b][1] = "r"
               self.actors[i].item_grid[a + 2][b][0] = item_id
               self.actors[i].item_grid[a + 2][b][1] = "r"
               self.actors[i].item_grid[a][b + 1][0] = item_id
               self.actors[i].item_grid[a][b + 1][1] = "r"
               self.actors[i].item_grid[a + 1][b + 1][0] = item_id
               self.actors[i].item_grid[a + 1][b + 1][1] = "r"
               self.actors[i].item_grid[a + 2][b + 1][0] = item_id
               self.actors[i].item_grid[a + 2][b + 1][1] = "r"
               @armors[item_id] = [[armor_number(item_id) + 1, 0].max, 99].min
               return
             end
             end
           end
         end
       end
     end
 end
 
 def del_item(item_id, type)
   for i in 0..self.actors.size - 1
     for a in 0..self.actors[i].item_grid.size - 1
       for b in 0..self.actors[i].item_grid[a].size - 1
         if self.actors[i].item_grid[a][b][0] == item_id and 
           self.actors[i].item_grid[a][b][1] == type
           
           case type
           when "i"
             self.actors[i].item_grid[a][b][0] = 0
             self.actors[i].item_grid[a][b][1] = ""
             return
           when "w"
               self.actors[i].item_grid[a][b][0] = 0
               self.actors[i].item_grid[a][b][1] = ""
               self.actors[i].item_grid[a + 1][b][0] = 0
               self.actors[i].item_grid[a + 1][b][1] = ""
               self.actors[i].item_grid[a + 2][b][0] = 0
               self.actors[i].item_grid[a + 2][b][1] = ""
               return
           when "a"
               self.actors[i].item_grid[a][b][0] = 0
               self.actors[i].item_grid[a][b][1] = ""
               self.actors[i].item_grid[a + 1][b][0] = 0
               self.actors[i].item_grid[a + 1][b][1] = ""
               self.actors[i].item_grid[a + 2][b][0] = 0
               self.actors[i].item_grid[a + 2][b][1] = ""
               self.actors[i].item_grid[a][b + 1][0] = 0
               self.actors[i].item_grid[a][b + 1][1] = ""
               self.actors[i].item_grid[a + 1][b + 1][0] = 0
               self.actors[i].item_grid[a + 1][b + 1][1] = ""
               self.actors[i].item_grid[a + 2][b + 1][0] = 0
               self.actors[i].item_grid[a + 2][b + 1][1] = ""
               return
           end
         end
       end
     end
   end
 end
end


class Cursor_Icon < RPG::Sprite
 def initialize
   super
   @color = Color.new(255,255,0,150)
   @rect = Rect.new(0, 0, 24, 24)
 end
 
 def refresh(bitmap, item)
   case item
   when "i"
     x = 4
     y = 4
     width = 32
     height = 32
   when "w"
     x = 4
     y = 36
     width = 32
     height = 96
   when "a"
     x = 22
     y = 36
     width = 64
     height = 96
   end
   if self.bitmap == nil or (self.bitmap.width != width or self.bitmap.height != height)
     self.bitmap = Bitmap.new(width, height)
   else
     self.bitmap.clear
   end
   self.bitmap.fill_rect(0,0,width,height, @color)
   self.bitmap.blt(x, y , bitmap, @rect)
   self.z = 9999
 end
end

class Window_Base
 def draw_actor_picture(actor, x, y)
   bitmap = RPG::Cache.battler(actor.character_name, actor.character_hue)
   cw = bitmap.width
   ch = bitmap.height
   src_rect = Rect.new(0, 0, cw, ch)
   self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
 end
end

class Scene_Menu
   def update_command
   # If B button was pressed
   if Input.trigger?(Input::B)
     # Play cancel SE
     $game_system.se_play($data_system.cancel_se)
     # Switch to map screen
     $scene = Scene_Map.new
     return
   end
   # If C button was pressed
   if Input.trigger?(Input::C)
     # If command other than save or end game, and party members = 0
     if $game_party.actors.size == 0 and @command_window.index < 4
       # Play buzzer SE
       $game_system.se_play($data_system.buzzer_se)
       return
     end
     # Branch by command window cursor position
     case @command_window.index
     when 0  # item
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Switch to item screen
       @command_window.active = false
       @status_window.active = true
       @status_window.index = 0
     when 1  # skill
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Make status window active
       @command_window.active = false
       @status_window.active = true
       @status_window.index = 0
     when 2  # equipment
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Make status window active
       @command_window.active = false
       @status_window.active = true
       @status_window.index = 0
     when 3  # status
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Make status window active
       @command_window.active = false
       @status_window.active = true
       @status_window.index = 0
     when 4  # save
       # If saving is forbidden
       if $game_system.save_disabled
         # Play buzzer SE
         $game_system.se_play($data_system.buzzer_se)
         return
       end
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Switch to save screen
       $scene = Scene_Save.new
     when 5  # end game
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Switch to end game screen
       $scene = Scene_End.new
     end
     return
   end
 end
 #--------------------------------------------------------------------------
 # * Frame Update (when status window is active)
 #--------------------------------------------------------------------------
 def update_status
   # If B button was pressed
   if Input.trigger?(Input::B)
     # Play cancel SE
     $game_system.se_play($data_system.cancel_se)
     # Make command window active
     @command_window.active = true
     @status_window.active = false
     @status_window.index = -1
     return
   end
   # If C button was pressed
   if Input.trigger?(Input::C)
     # Branch by command window cursor position
     case @command_window.index
     when 0
       $game_system.se_play($data_system.decision_se)
       $scene = Scene_Item2.new(@status_window.index)
     when 1  # skill
       # If this actor's action limit is 2 or more
       if $game_party.actors[@status_window.index].restriction >= 2
         # Play buzzer SE
         $game_system.se_play($data_system.buzzer_se)
         return
       end
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Switch to skill screen
       $scene = Scene_Skill.new(@status_window.index)
     when 2  # equipment
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Switch to equipment screen
       $scene = Scene_Equip.new(@status_window.index)
     when 3  # status
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Switch to status screen
       $scene = Scene_Status.new(@status_window.index)
     end
     return
   end
 end
end

Observação: se você gostou deste post ou ele lhe foi útil de alguma forma, por favor considere apoiar financeiramente a Gaming Room. Fico feliz só de ajudar, mas a contribuição do visitante é muito importante para que este site continua existindo e para que eu possa continuar provendo este tipo de conteúdo e melhorar cada vez mais. Clique aqui e saiba como. Obrigado!

Deixe um comentário

Inscreva-se na nossa newsletter!