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.

Major Item-System Project

My idea is for a system intended to be applied to adventure/puzzler games, though it could really work for just about any RPG. In particular, I plan to use it for Naruto:NKD. What I want is a full item system revamp, so I'll break it down into several sections to make it easier to explain.


---999 Items---
The basic straightforward 999 Items mod. It needs to also allow for 999 items to be purchased from a shop.


---Extra Accessory Slot---
I need there to be two accessory slots for every character.



---ITEM MENU--- SEMI RESOLVED - Only needs Item Details now.
Items are subdivided into catigory. The ones I specifically need for NKD are "Weapons", "Armor", "Medicine", "Scrolls", "Food", "Materials", "Collectables", "Other Items". I need some way to be able to tag items to show which catigory they'll be listed under. It'd be convenient to be able to tag a number or symbol onto each item name. For example, if the first character of an item name in the database is @, then it's a medicine. If it's a #, it's a scroll, and so on.

Secondly, I want to have item details. The way I picture it is, along the top of the screen are two rows of four buttons, one for each catigory. Below it on the left is a single-column list of the items in the current catigory. To the right of that is the details box, which lists a details for each item from a txt file.



---ITEM PUZZLES---
This is where it gets interesting! With all my NPCs and at several points in the game I plan to give them interaction menus. These are simple, basic choice menus. A choice for "Talk", a choice for "Shop" if they buy/sell, a choice for any other unique functions of the particular NPC... And an "Item" choice. Selecting Item will call up a script that displays a window listing all of my Other Items. One column wide, four rows tall, scrollable. No detail window required. A player can scroll down the list of items and select an item. If that item can be used on that NPC/event, it goes down one fork. If not, it goes down another fork.

For example, if a character claims to have dropped something very important to them at the Shodai's Shrine, and I find an Heirloom Necklace at the Shodai's Shrine, I can give it to them. However, if I instead hand them a dead rat, I'd get a very different reaction from them.




---COMPATIBILITY---
I'm not working with the SDK. I am, however, using Prexus's "PrexCraft" crafting system (version 2.0), as well as ccoa's UMS.
 
First: I'll most likely not be able to do this because of a serious lack of time (I even don't have time for my own game...), but I'm able to help you out with a few things... maybe this also helps the person who'll do this.

For the item limit cap of 999, you only need to change Game_Party.gain_item() to/like this:
Code:
  def gain_item(item_id, n)
    if item_id > 0
      @items[item_id] = [[item_number(item_id) + n, 0].max, 999].min
    end
  end

For the extra accessory slot, you need a little more, but there's already a script somewhere that does exactly that... dunno from who, though...

The item division in several menues would be something very easy if you won't stick with your '@item/#item' idea... you can easily do it with element tags... check your Window_Item.refresh method... you'll find something like this inside:
Code:
    for i in 1...$data_items.size
      if $game_party.item_number(i) > 0
        @data.push($data_items[i])
      end
    end
This block of code pushes the items to the window. To restrict it to several elements, do this:
Code:
    for i in 1...$data_items.size
      if $game_party.item_number(i) > 0
        if $data_items[i].element_set.include?(9)
          @data.push($data_items[i])
        end
      end
    end
You can easily make out the new conditional branch... it checks if the item has the element #9 tagged and only pushes he item to the window if it is. Just copy the window 7 times and change the element number to the special number you need for this window, so you end up with 8 identical windows with 8 different element tags.
BTW, you can do the same thing for the NPC item window, just copy the last window and change it's size.
 
I can help a bit I extracted most of this from the scripts I did for Pale, but no setting it up this time it's a plug and play 999 items script (I wasn't sure if you included weapons and armors when you said items or not, so I included them, if you don't want them just say and I'll edit this):
Code:
class Game_Party
  #--------------------------------------------------------------------------
  # * Gain Items (or lose)
  #     item_id : item ID
  #     n       : quantity
  #--------------------------------------------------------------------------
  def gain_item(item_id, n)
    # Update quantity data in the hash.
    if item_id > 0
      @items[item_id] = [[item_number(item_id) + n, 0].max, 999].min
    end
  end
  #--------------------------------------------------------------------------
  # * Gain Weapons (or lose)
  #     weapon_id : weapon ID
  #     n         : quantity
  #--------------------------------------------------------------------------
  def gain_weapon(weapon_id, n)
    # Update quantity data in the hash.
    if weapon_id > 0
      @weapons[weapon_id] = [[weapon_number(weapon_id) + n, 0].max, 999].min
    end
  end
  #--------------------------------------------------------------------------
  # * Gain Armor (or lose)
  #     armor_id : armor ID
  #     n        : quantity
  #--------------------------------------------------------------------------
  def gain_armor(armor_id, n)
    # Update quantity data in the hash.
    if armor_id > 0
      @armors[armor_id] = [[armor_number(armor_id) + n, 0].max, 999].min
    end
  end
end

class Window_ShopBuy < Window_Selectable
  #--------------------------------------------------------------------------
  # * Draw Item
  #     index : item number
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    # Get items in possession
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    # If price is less than money in possession, and amount in possession is
    # not 99, then set to normal text color. Otherwise set to disabled color
    if item.price <= $game_party.gold and number < 999
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4
    y = index * 32
    rect = Rect.new(x, y, self.width - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 88, 32, item.price.to_s, 2)
  end
end

class Scene_Shop
  #--------------------------------------------------------------------------
  # * Frame Update (when buy window is active)
  #--------------------------------------------------------------------------
  def update_buy
    # Set status window item
    @status_window.item = @buy_window.item
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Change windows to initial mode
      @command_window.active = true
      @dummy_window.visible = true
      @buy_window.active = false
      @buy_window.visible = false
      @status_window.visible = false
      @status_window.item = nil
      # Erase help text
      @help_window.set_text("")
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Get item
      @item = @buy_window.item
      # If item is invalid, or price is higher than money possessed
      if @item == nil or @item.price > $game_party.gold
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Get items in possession count
      case @item
      when RPG::Item
        number = $game_party.item_number(@item.id)
      when RPG::Weapon
        number = $game_party.weapon_number(@item.id)
      when RPG::Armor
        number = $game_party.armor_number(@item.id)
      end
      # If 99 items are already in possession
      if number == 999
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Play decision SE
      $game_system.se_play($data_system.decision_se)
      # Calculate maximum amount possible to buy
      max = @item.price == 0 ? 999 : $game_party.gold / @item.price
      max = [max, 999 - number].min
      # Change windows to quantity input mode
      @buy_window.active = false
      @buy_window.visible = false
      @number_window.set(@item, max, @item.price)
      @number_window.active = true
      @number_window.visible = true
    end
  end
end
 
Actually, all I wanted 999 of was normal items, not weapons or armors, though it's not a huge deal.

I appreciate all the help with the 999 items thing, but the Item Menu and Item Puzzles are the really important things I need help with.
 
I was bored just now and felt the urge to script something again... well, why not being kind here and there ^_^ I took an attempt on your script, we'll see if you like it. Note that it' unfinished because I'm deadly tired right now :P But I'll finish it if you like it so far... of course you can tell me what to change, too...

Code:
#==============================================================================
# Advanced Item Menu
#------------------------------------------------------------------------------
# Script by BlueScope
#==============================================================================

class Window_Item < Window_Selectable
  #--------------------------------------------------------------------------
  def initialize(tag_id)
    super(0, 96, 320, 382)
    @column_max = 1
    @tag_id = tag_id
    refresh
    self.index = 0
    self.active = false
    if $game_temp.in_battle
      self.y = 64
      self.height = 256
      self.back_opacity = 160
    end
  end
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    for i in 1...$data_items.size
      if $game_party.item_number(i) > 0
        if $data_items[i].element_set.include?(@tag_id)
          @data.push($data_items[i])
        end
      end
    end
    unless $game_temp.in_battle
      for i in 1...$data_weapons.size
        if $game_party.weapon_number(i) > 0
          if $data_items[i].element_set.include?(@tag_id)
            @data.push($data_weapons[i])
          end
        end
      end
      for i in 1...$data_armors.size
        if $game_party.armor_number(i) > 0
          if $data_items[i].element_set.include?(@tag_id)
            @data.push($data_armors[i])
          end
        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 draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    if item.is_a?(RPG::Item) and
       $game_party.item_can_use?(item.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % 1 * (288 + 32)
    y = index / 1 * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    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
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
  #--------------------------------------------------------------------------
end


class Window_ItemCategory < Window_Selectable
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 640, 96)
    self.contents = Bitmap.new(width - 32, height - 32)
    @commands = ["Weapons", "Armor", "Medicine", "Scrolls", "Food", "Materials", "Collectables", "Other Items"]
    @item_max = 8
    @column_max = 4
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i)
    end
  end
  #--------------------------------------------------------------------------
  def draw_item(index)
    x = 4 + index % 4 * 160
    y = index / 4 * 32
    rect = Rect.new(x, y, 128 - 10, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index], 1)
  end
  #--------------------------------------------------------------------------
  def update_cursor_rect
    x = index % 4 * 160
    y = index / 4 * 32
    self.cursor_rect.set(x, y, 128, 32)
  end
  #--------------------------------------------------------------------------
end


class Window_Target < Window_Selectable
  #--------------------------------------------------------------------------
  def initialize
    super(320, 96, 320, 382)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.z += 10
    @item_max = $game_party.actors.size
    refresh
  end
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...$game_party.actors.size
      x = 4
      y = i * 116
      actor = $game_party.actors[i]
      draw_actor_name(actor, x, y)
      draw_actor_class(actor, x + 144, y)
      draw_actor_level(actor, x + 8, y + 32)
      draw_actor_state(actor, x + 8, y + 64)
      draw_actor_hp(actor, x + 152, y + 32)
      draw_actor_sp(actor, x + 152, y + 64)
    end
  end
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index <= -2
      self.cursor_rect.set(0, (@index + 10) * 116, self.width - 32, 96)
    elsif @index == -1
      self.cursor_rect.set(0, 0, self.width - 32, @item_max * 116 - 20)
    else
      self.cursor_rect.set(0, @index * 116, self.width - 32, 96)
    end
  end
  #--------------------------------------------------------------------------
end


class Scene_ItemAdvanced
  #--------------------------------------------------------------------------
  def main
    @category_window = Window_ItemCategory.new
    @target_window = Window_Target.new
    @target_window.visible = false
    @target_window.active = false
    @dummy_window = Window_Base.new(0, 96, 320, 382)
    @dummy_window.z = 1
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @category_window.dispose
    if @item_window != nil
      @item_window.dispose
    end
    @target_window.dispose
    @dummy_window.dispose
  end
  #--------------------------------------------------------------------------
  def update
    @category_window.update
    if @item_window != nil
      @item_window.update
    end
    @target_window.update
    if @category_window.active
      update_category
      return
    end
    if @item_window.active
      update_item
      return
    end
    if @target_window.active
      update_target
      return
    end
  end
  #--------------------------------------------------------------------------
  def update_category
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Menu.new(0)
      return
    end
    if Input.trigger?(Input::C)
      @category_window.active = false
      @item_window = Window_Item.new(@category_window.index + 1)
      @item_window.active = true
    end
  end
  #--------------------------------------------------------------------------
  def update_item
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @item_window.active = false
      @item_window.visible = false
      @category_window.active = true
      return
    end
    if Input.trigger?(Input::C)
      @item = @item_window.item
      unless @item.is_a?(RPG::Item)
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      unless $game_party.item_can_use?(@item.id)
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.decision_se)
      if @item.scope >= 3
        @item_window.active = false
        @target_window.visible = true
        @target_window.active = true
        if @item.scope == 4 || @item.scope == 6
          @target_window.index = -1
        else
          @target_window.index = 0
        end
      else
        if @item.common_event_id > 0
          $game_temp.common_event_id = @item.common_event_id
          $game_system.se_play(@item.menu_se)
          if @item.consumable
            $game_party.lose_item(@item.id, 1)
            @item_window.draw_item(@item_window.index)
          end
          $scene = Scene_Map.new
          return
        end
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  def update_target
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      unless $game_party.item_can_use?(@item.id)
        @item_window.refresh
      end
      @item_window.active = true
      @target_window.visible = false
      @target_window.active = false
      return
    end
    if Input.trigger?(Input::C)
      if $game_party.item_number(@item.id) == 0
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      if @target_window.index == -1
        used = false
        for i in $game_party.actors
          used |= i.item_effect(@item)
        end
      end
      if @target_window.index >= 0
        target = $game_party.actors[@target_window.index]
        used = target.item_effect(@item)
      end
      if used
        $game_system.se_play(@item.menu_se)
        if @item.consumable
          $game_party.lose_item(@item.id, 1)
          @item_window.draw_item(@item_window.index)
        end
        @target_window.refresh
        if $game_party.all_dead?
          $scene = Scene_Gameover.new
          return
        end
        if @item.common_event_id > 0
          $game_temp.common_event_id = @item.common_event_id
          $scene = Scene_Map.new
          return
        end
      end
      unless used
        $game_system.se_play($data_system.buzzer_se)
      end
      return
    end
  end
  #--------------------------------------------------------------------------
end

It's pretty much plug and play, you just need to change '$scene = Scene_item.new' in Scene_Menu to '$scene = Scene_itemAdvanced.new'... note that this script uses the first 8 element tags, but if you already have them in use, shift the number by searching this line in my script pretty much at the top:
Code:
@tag_id = tag_id
Now let's say you have the first 8 element tags already covered, then use the tags 9 to 17 by changing the line to this:
Code:
@tag_id = tag_id + 8

Have fun...

PS: Thanks to Yeyinde for answering me a stupid question of mine :P (I should scripot while I'm fully awake, I guess... ~.~)
 
My fault again... stupid cheap errors -.-

Code:
#==============================================================================
# Advanced Item Menu
#------------------------------------------------------------------------------
# Script by BlueScope
#==============================================================================

class Window_Item < Window_Selectable
  #--------------------------------------------------------------------------
  def initialize(tag_id)
    super(0, 96, 320, 382)
    @column_max = 1
    @tag_id = tag_id
    refresh
    self.index = 0
    self.active = false
    if $game_temp.in_battle
      self.y = 64
      self.height = 256
      self.back_opacity = 160
    end
  end
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    for i in 1...$data_items.size
      if $game_party.item_number(i) > 0
        if $data_items[i].element_set.include?(@tag_id)
          @data.push($data_items[i])
        end
      end
    end
    unless $game_temp.in_battle
      for i in 1...$data_weapons.size
        if $game_party.weapon_number(i) > 0
          if $data_weapons[i].element_set.include?(@tag_id)
            @data.push($data_weapons[i])
          end
        end
      end
      for i in 1...$data_armors.size
        if $game_party.armor_number(i) > 0
          if $data_armors[i].element_set.include?(@tag_id)
            @data.push($data_armors[i])
          end
        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 draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    if item.is_a?(RPG::Item) and
       $game_party.item_can_use?(item.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % 1 * (288 + 32)
    y = index / 1 * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    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
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
  #--------------------------------------------------------------------------
end


class Window_ItemCategory < Window_Selectable
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 640, 96)
    self.contents = Bitmap.new(width - 32, height - 32)
    @commands = ["Weapons", "Armor", "Medicine", "Scrolls", "Food", "Materials", "Collectables", "Other Items"]
    @item_max = 8
    @column_max = 4
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i)
    end
  end
  #--------------------------------------------------------------------------
  def draw_item(index)
    x = 4 + index % 4 * 160
    y = index / 4 * 32
    rect = Rect.new(x, y, 128 - 10, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index], 1)
  end
  #--------------------------------------------------------------------------
  def update_cursor_rect
    x = index % 4 * 160
    y = index / 4 * 32
    self.cursor_rect.set(x, y, 128, 32)
  end
  #--------------------------------------------------------------------------
end


class Window_Target < Window_Selectable
  #--------------------------------------------------------------------------
  def initialize
    super(320, 96, 320, 382)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.z += 10
    @item_max = $game_party.actors.size
    refresh
  end
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...$game_party.actors.size
      x = 4
      y = i * 116
      actor = $game_party.actors[i]
      draw_actor_name(actor, x, y)
      draw_actor_class(actor, x + 144, y)
      draw_actor_level(actor, x + 8, y + 32)
      draw_actor_state(actor, x + 8, y + 64)
      draw_actor_hp(actor, x + 152, y + 32)
      draw_actor_sp(actor, x + 152, y + 64)
    end
  end
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index <= -2
      self.cursor_rect.set(0, (@index + 10) * 116, self.width - 32, 96)
    elsif @index == -1
      self.cursor_rect.set(0, 0, self.width - 32, @item_max * 116 - 20)
    else
      self.cursor_rect.set(0, @index * 116, self.width - 32, 96)
    end
  end
  #--------------------------------------------------------------------------
end


class Scene_ItemAdvanced
  #--------------------------------------------------------------------------
  def main
    @category_window = Window_ItemCategory.new
    @target_window = Window_Target.new
    @target_window.visible = false
    @target_window.active = false
    @dummy_window = Window_Base.new(0, 96, 320, 382)
    @dummy_window.z = 1
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @category_window.dispose
    if @item_window != nil
      @item_window.dispose
    end
    @target_window.dispose
    @dummy_window.dispose
  end
  #--------------------------------------------------------------------------
  def update
    @category_window.update
    if @item_window != nil
      @item_window.update
    end
    @target_window.update
    if @category_window.active
      update_category
      return
    end
    if @item_window.active
      update_item
      return
    end
    if @target_window.active
      update_target
      return
    end
  end
  #--------------------------------------------------------------------------
  def update_category
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Menu.new(0)
      return
    end
    if Input.trigger?(Input::C)
      @category_window.active = false
      @item_window = Window_Item.new(@category_window.index + 1)
      @item_window.active = true
    end
  end
  #--------------------------------------------------------------------------
  def update_item
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @item_window.active = false
      @item_window.visible = false
      @category_window.active = true
      return
    end
    if Input.trigger?(Input::C)
      @item = @item_window.item
      unless @item.is_a?(RPG::Item)
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      unless $game_party.item_can_use?(@item.id)
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.decision_se)
      if @item.scope >= 3
        @item_window.active = false
        @target_window.visible = true
        @target_window.active = true
        if @item.scope == 4 || @item.scope == 6
          @target_window.index = -1
        else
          @target_window.index = 0
        end
      else
        if @item.common_event_id > 0
          $game_temp.common_event_id = @item.common_event_id
          $game_system.se_play(@item.menu_se)
          if @item.consumable
            $game_party.lose_item(@item.id, 1)
            @item_window.draw_item(@item_window.index)
          end
          $scene = Scene_Map.new
          return
        end
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  def update_target
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      unless $game_party.item_can_use?(@item.id)
        @item_window.refresh
      end
      @item_window.active = true
      @target_window.visible = false
      @target_window.active = false
      return
    end
    if Input.trigger?(Input::C)
      if $game_party.item_number(@item.id) == 0
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      if @target_window.index == -1
        used = false
        for i in $game_party.actors
          used |= i.item_effect(@item)
        end
      end
      if @target_window.index >= 0
        target = $game_party.actors[@target_window.index]
        used = target.item_effect(@item)
      end
      if used
        $game_system.se_play(@item.menu_se)
        if @item.consumable
          $game_party.lose_item(@item.id, 1)
          @item_window.draw_item(@item_window.index)
        end
        @target_window.refresh
        if $game_party.all_dead?
          $scene = Scene_Gameover.new
          return
        end
        if @item.common_event_id > 0
          $game_temp.common_event_id = @item.common_event_id
          $scene = Scene_Map.new
          return
        end
      end
      unless used
        $game_system.se_play($data_system.buzzer_se)
      end
      return
    end
  end
  #--------------------------------------------------------------------------
end
 
Hopefully the last time now... I tested it this time ^_^"

Code:
#==============================================================================
# Advanced Item Menu
#------------------------------------------------------------------------------
# Script by BlueScope
#==============================================================================

class Window_Item < Window_Selectable
  #--------------------------------------------------------------------------
  def initialize(tag_id)
    super(0, 96, 320, 382)
    @column_max = 1
    @tag_id = tag_id
    refresh
    self.index = 0
    self.active = false
    if $game_temp.in_battle
      self.y = 64
      self.height = 256
      self.back_opacity = 160
    end
  end
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    for i in 1...$data_items.size
      if $game_party.item_number(i) > 0 and $data_items[i].element_set.include?(@tag_id)
        @data.push($data_items[i])
      end
    end
    unless $game_temp.in_battle
      for i in 1...$data_weapons.size
        if $game_party.weapon_number(i) > 0 and @tag_id == 1
          @data.push($data_weapons[i])
        end
      end
      for i in 1...$data_armors.size
        if $game_party.armor_number(i) > 0 and @tag_id == 2
          @data.push($data_armors[i])
        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 draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    if item.is_a?(RPG::Item) and
       $game_party.item_can_use?(item.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % 1 * (288 + 32)
    y = index / 1 * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    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
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
  #--------------------------------------------------------------------------
end


class Window_ItemCategory < Window_Selectable
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 640, 96)
    self.contents = Bitmap.new(width - 32, height - 32)
    @commands = ["Weapons", "Armor", "Medicine", "Scrolls", "Food", "Materials", "Collectables", "Other Items"]
    @item_max = 8
    @column_max = 4
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i)
    end
  end
  #--------------------------------------------------------------------------
  def draw_item(index)
    x = 4 + index % 4 * 160
    y = index / 4 * 32
    rect = Rect.new(x, y, 128 - 10, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index], 1)
  end
  #--------------------------------------------------------------------------
  def update_cursor_rect
    x = index % 4 * 160
    y = index / 4 * 32
    self.cursor_rect.set(x, y, 128, 32)
  end
  #--------------------------------------------------------------------------
end


class Window_Target < Window_Selectable
  #--------------------------------------------------------------------------
  def initialize
    super(320, 96, 320, 382)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.z += 10
    @item_max = $game_party.actors.size
    refresh
  end
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...$game_party.actors.size
      x = 4
      y = i * 116
      actor = $game_party.actors[i]
      draw_actor_name(actor, x, y)
      draw_actor_class(actor, x + 144, y)
      draw_actor_level(actor, x + 8, y + 32)
      draw_actor_state(actor, x + 8, y + 64)
      draw_actor_hp(actor, x + 152, y + 32)
      draw_actor_sp(actor, x + 152, y + 64)
    end
  end
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index <= -2
      self.cursor_rect.set(0, (@index + 10) * 116, self.width - 32, 96)
    elsif @index == -1
      self.cursor_rect.set(0, 0, self.width - 32, @item_max * 116 - 20)
    else
      self.cursor_rect.set(0, @index * 116, self.width - 32, 96)
    end
  end
  #--------------------------------------------------------------------------
end


class Scene_ItemAdvanced
  #--------------------------------------------------------------------------
  def main
    @category_window = Window_ItemCategory.new
    @target_window = Window_Target.new
    @target_window.visible = false
    @target_window.active = false
    @dummy_window = Window_Base.new(0, 96, 320, 382)
    @dummy_window.z = 1
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @category_window.dispose
    if @item_window != nil
      @item_window.dispose
    end
    @target_window.dispose
    @dummy_window.dispose
  end
  #--------------------------------------------------------------------------
  def update
    @category_window.update
    if @item_window != nil
      @item_window.update
    end
    @target_window.update
    if @category_window.active
      update_category
      return
    end
    if @item_window.active
      update_item
      return
    end
    if @target_window.active
      update_target
      return
    end
  end
  #--------------------------------------------------------------------------
  def update_category
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Menu.new(0)
      return
    end
    if Input.trigger?(Input::C)
      @category_window.active = false
      @item_window = Window_Item.new(@category_window.index + 1)
      @item_window.active = true
    end
  end
  #--------------------------------------------------------------------------
  def update_item
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @item_window.active = false
      @item_window.visible = false
      @category_window.active = true
      return
    end
    if Input.trigger?(Input::C)
      @item = @item_window.item
      unless @item.is_a?(RPG::Item)
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      unless $game_party.item_can_use?(@item.id)
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.decision_se)
      if @item.scope >= 3
        @item_window.active = false
        @target_window.visible = true
        @target_window.active = true
        if @item.scope == 4 || @item.scope == 6
          @target_window.index = -1
        else
          @target_window.index = 0
        end
      else
        if @item.common_event_id > 0
          $game_temp.common_event_id = @item.common_event_id
          $game_system.se_play(@item.menu_se)
          if @item.consumable
            $game_party.lose_item(@item.id, 1)
            @item_window.draw_item(@item_window.index)
          end
          $scene = Scene_Map.new
          return
        end
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  def update_target
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      unless $game_party.item_can_use?(@item.id)
        @item_window.refresh
      end
      @item_window.active = true
      @target_window.visible = false
      @target_window.active = false
      return
    end
    if Input.trigger?(Input::C)
      if $game_party.item_number(@item.id) == 0
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      if @target_window.index == -1
        used = false
        for i in $game_party.actors
          used |= i.item_effect(@item)
        end
      end
      if @target_window.index >= 0
        target = $game_party.actors[@target_window.index]
        used = target.item_effect(@item)
      end
      if used
        $game_system.se_play(@item.menu_se)
        if @item.consumable
          $game_party.lose_item(@item.id, 1)
          @item_window.draw_item(@item_window.index)
        end
        @target_window.refresh
        if $game_party.all_dead?
          $scene = Scene_Gameover.new
          return
        end
        if @item.common_event_id > 0
          $game_temp.common_event_id = @item.common_event_id
          $scene = Scene_Map.new
          return
        end
      end
      unless used
        $game_system.se_play($data_system.buzzer_se)
      end
      return
    end
  end
  #--------------------------------------------------------------------------
end
 
Okay, here's a bunch for you...

Code:
#==============================================================================
# Advanced Item Menu
#------------------------------------------------------------------------------
# Script by BlueScope, draw_wrap_text method by Trickster
#==============================================================================

class Bitmap
  #--------------------------------------------------------------------------
  def draw_wrap_text(x,y,width, height, text)
    array = text.split
    for i in array
      word = i + ' '
      word_width = text_size(word).width
      if x + word_width > width
        y += height
        x = 0
      end
      self.draw_text(x, y, word_width, height, word)
      x += word_width
    end
  end
  #--------------------------------------------------------------------------
end


class Window_ItemCategory < Window_Selectable
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 640, 96)
    self.contents = Bitmap.new(width - 32, height - 32)
    @commands = ["Weapons", "Armor", "Medicine", "Scrolls", "Food", "Materials", "Collectables", "Other Items"]
    @item_max = 8
    @column_max = 4
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i)
    end
  end
  #--------------------------------------------------------------------------
  def draw_item(index)
    x = 4 + index % 4 * 160
    y = index / 4 * 32
    rect = Rect.new(x, y, 128 - 10, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index], 1)
  end
  #--------------------------------------------------------------------------
  def update_cursor_rect
    x = index % 4 * 160
    y = index / 4 * 32
    self.cursor_rect.set(x, y, 128, 32)
  end
  #--------------------------------------------------------------------------
end


class Window_Item < Window_Selectable
  #--------------------------------------------------------------------------
  def initialize(tag_id)
    super(0, 96, 320, 382)
    @column_max = 1
    @tag_id = tag_id
    refresh
    self.index = 0
    self.active = false
    if $game_temp.in_battle
      self.y = 64
      self.height = 256
      self.back_opacity = 160
    end
  end
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    for i in 1...$data_items.size
      if $game_party.item_number(i) > 0 and $data_items[i].element_set.include?(@tag_id)
        @data.push($data_items[i])
      end
    end
    unless $game_temp.in_battle
      for i in 1...$data_weapons.size
        if $game_party.weapon_number(i) > 0 and @tag_id == 1
          @data.push($data_weapons[i])
        end
      end
      for i in 1...$data_armors.size
        if $game_party.armor_number(i) > 0 and @tag_id == 2
          @data.push($data_armors[i])
        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 draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    if item.is_a?(RPG::Item) and
       $game_party.item_can_use?(item.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % 1 * (288 + 32)
    y = index / 1 * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 228, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 244, y, 36, 32, number.to_s, 2)
  end
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
  #--------------------------------------------------------------------------
end


class Window_ItemDescription < Window_Base
  #--------------------------------------------------------------------------
  def initialize
    super(320, 96, 320, 382)
    self.z = 1
    self.contents = Bitmap.new(width - 32, height - 32)
  end
  #--------------------------------------------------------------------------
  def refresh(item)
    self.contents.clear
    if item != nil
      @itemname = item
      filename = "Data/ItemDescriptions.txt"
      if FileTest.exist?(filename)
        file = File.open(filename)
        content = file.readlines
      end
      for line in 0..content.size
        if content[line].include?("*" + @itemname)
          @description = content[line+1]
          break
        else
          return
        end
      end
      self.contents.draw_text(0, 0, self.width-40, 32, @itemname, 1)
      self.contents.fill_rect(0, 48, self.width-40, 1, normal_color)
      self.contents.draw_wrap_text(0, 64, self.width-40, 32, @description.to_s)
    end
  end
  #--------------------------------------------------------------------------
end


class Window_Target < Window_Selectable
  #--------------------------------------------------------------------------
  def initialize
    super(320, 96, 320, 382)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.z += 10
    @item_max = $game_party.actors.size
    refresh
  end
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...$game_party.actors.size
      x = 4
      y = 1 + i * 70
      actor = $game_party.actors[i]
      draw_actor_name(actor, x, y)
      draw_actor_state(actor, x + 144, y)
      draw_actor_hp(actor, x, y + 32)
      draw_actor_sp(actor, x + 144, y + 32)
    end
  end
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index <= -2
      self.cursor_rect.set(0, 1 + (@index + 10) * 70, self.width - 32, 64)
    elsif @index == -1
      self.cursor_rect.set(0, 0, self.width - 32, 1 + @item_max * 70 - 20)
    else
      self.cursor_rect.set(0, 1 + @index * 70, self.width - 32, 64)
    end
  end
  #--------------------------------------------------------------------------
end


class Scene_ItemAdvanced
  #--------------------------------------------------------------------------
  def main
    @category_window = Window_ItemCategory.new
    @description_window = Window_ItemDescription.new
    @target_window = Window_Target.new
    @target_window.visible = false
    @target_window.active = false
    @dummy_window = Window_Base.new(0, 96, 320, 382)
    @dummy_window.z = 1
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @category_window.dispose
    if @item_window != nil
      @item_window.dispose
    end
    @description_window.dispose
    @target_window.dispose
    @dummy_window.dispose
  end
  #--------------------------------------------------------------------------
  def update
    @category_window.update
    if @item_window != nil
      @item_window.update
    end
    @target_window.update
    if @category_window.active
      update_category
      return
    end
    if @item_window.active
      update_item
      return
    end
    if @target_window.active
      update_target
      return
    end
  end
  #--------------------------------------------------------------------------
  def update_category
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Menu.new(0)
      return
    end
    if Input.trigger?(Input::C)
      @category_window.active = false
      @item_window = Window_Item.new(@category_window.index + 1)
      @item_window.active = true
      @item = @item_window.item
      @description_window.refresh(@item.name)
    end
  end
  #--------------------------------------------------------------------------
  def update_item
    if Input.trigger?(Input::UP) or Input.trigger?(Input::DOWN)
      @item = @item_window.item
      @description_window.refresh(@item.name)
    end
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @item_window.active = false
      @item_window.visible = false
      @category_window.active = true
      @description_window.contents.clear
      return
    end
    if Input.trigger?(Input::C)
      @item = @item_window.item
      unless @item.is_a?(RPG::Item)
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      unless $game_party.item_can_use?(@item.id)
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.decision_se)
      if @item.scope >= 3
        @item_window.active = false
        @target_window.visible = true
        @target_window.active = true
        if @item.scope == 4 || @item.scope == 6
          @target_window.index = -1
        else
          @target_window.index = 0
        end
      else
        if @item.common_event_id > 0
          $game_temp.common_event_id = @item.common_event_id
          $game_system.se_play(@item.menu_se)
          if @item.consumable
            $game_party.lose_item(@item.id, 1)
            @item_window.draw_item(@item_window.index)
          end
          $scene = Scene_Map.new
          return
        end
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  def update_target
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      unless $game_party.item_can_use?(@item.id)
        @item_window.refresh
      end
      @item_window.active = true
      @target_window.visible = false
      @target_window.active = false
      return
    end
    if Input.trigger?(Input::C)
      if $game_party.item_number(@item.id) == 0
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      if @target_window.index == -1
        used = false
        for i in $game_party.actors
          used |= i.item_effect(@item)
        end
      end
      if @target_window.index >= 0
        target = $game_party.actors[@target_window.index]
        used = target.item_effect(@item)
      end
      if used
        $game_system.se_play(@item.menu_se)
        if @item.consumable
          $game_party.lose_item(@item.id, 1)
          @item_window.draw_item(@item_window.index)
        end
        @target_window.refresh
        if $game_party.all_dead?
          $scene = Scene_Gameover.new
          return
        end
        if @item.common_event_id > 0
          $game_temp.common_event_id = @item.common_event_id
          $scene = Scene_Map.new
          return
        end
      end
      unless used
        $game_system.se_play($data_system.buzzer_se)
      end
      return
    end
  end
  #--------------------------------------------------------------------------
end

Here's a sample of what the txt file should look like (which belongs into Data/ directory and has to be named ItemDescriptions.txt, BTW):

Code:
*Potion
Stupid simple potion... used to cure a few HP points here and there and to test the description window (which is why this text is so incredibly long).

It works like the following:
*Itemname = Name of the Item in the Database. You don't need to setup anything else.
Line below: Item Description... might be as long as you wish, just don't include returns. Make sure to check if the window is large enough for your text, though.

As a side note, you can add as many empty lines and comments and all that as long as you keep that syntax with the description line below the item name. You also should prevent using stars for other purposes than identify descriptions with to prevent unwanted misinterpretations.


Code:
#==============================================================================
# Item Limit Script
#------------------------------------------------------------------------------
# Script by BlueScope
#==============================================================================

class Game_Party
  #--------------------------------------------------------------------------
  def gain_item(item_id, n)
    if item_id > 0
      @items[item_id] = [[item_number(item_id) + n, 0].max, 999].min
    end
  end
  #--------------------------------------------------------------------------
  def gain_weapon(weapon_id, n)
    if weapon_id > 0
      @weapons[weapon_id] = [[weapon_number(weapon_id) + n, 0].max, 999].min
    end
  end
  #--------------------------------------------------------------------------
  def gain_armor(armor_id, n)
    if armor_id > 0
      @armors[armor_id] = [[armor_number(armor_id) + n, 0].max, 999].min
    end
  end
  #--------------------------------------------------------------------------
end


class Scene_Shop
  #--------------------------------------------------------------------------
  def update_buy
    @status_window.item = @buy_window.item
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @command_window.active = true
      @dummy_window.visible = true
      @buy_window.active = false
      @buy_window.visible = false
      @status_window.visible = false
      @status_window.item = nil
      @help_window.set_text("")
      return
    end
    if Input.trigger?(Input::C)
      @item = @buy_window.item
      if @item == nil or @item.price > $game_party.gold
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      case @item
      when RPG::Item
        number = $game_party.item_number(@item.id)
      when RPG::Weapon
        number = $game_party.weapon_number(@item.id)
      when RPG::Armor
        number = $game_party.armor_number(@item.id)
      end
      if number == 999
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.decision_se)
      max = @item.price == 0 ? 999 : $game_party.gold / @item.price
      max = [max, 999 - number].min
      @buy_window.active = false
      @buy_window.visible = false
      @number_window.set(@item, max, @item.price)
      @number_window.active = true
      @number_window.visible = true
    end
  end
  #--------------------------------------------------------------------------
end


class Window_ShopBuy < Window_Selectable
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    if item.price <= $game_party.gold and number < 999
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4
    y = index * 32
    rect = Rect.new(x, y, self.width - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 88, 32, item.price.to_s, 2)
  end
  #--------------------------------------------------------------------------
end

A few-minutes job on the 999 items thing... works in both item menu and shop window.


PS: No credit needed from my side, but Trick might want himself mentioned for the M&C Library cutout...
 

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