Chaos Project

RPG Maker => RPG Maker Scripts => Script Troubleshooting => Topic started by: Zexion on February 28, 2012, 07:55:20 pm

Title: Items/skills stop displaying after a certain amount.
Post by: Zexion on February 28, 2012, 07:55:20 pm
I'm trying to edit some item and skill menus to fit in my small resolution, but I'm having problems with it.

Lets say the actor has like 10 different items. In the window it will show 6 items then blank spaces, but keeps showing the items description. You can still use the item in battle and stuff but you cant see it in the menu...wtf?
Same thing for skills but it only shows the first skill
Item Window
Spoiler: ShowHide
#==============================================================================
# ** Window_Item
#------------------------------------------------------------------------------
#  This window displays items in possession on the item and battle screens.
#==============================================================================

class Window_Item < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(100, 32, 200, 416)
    @column_max = 1
    refresh
    self.index = 0
    # If in battle, move window to center of screen
    # and make it semi-transparent
    if $game_temp.in_battle
      self.y = 64
      self.height = 100
      self.back_opacity = 180
      self.windowskin = RPG::Cache.windowskin("BattleSkin")
    end
  end
  #--------------------------------------------------------------------------
  # * Get Item
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    # Add item
    for i in 1...$data_items.size
      if $game_party.item_number(i) > 0
        @data.push($data_items[i])
      end
    end
    # Also add weapons and items if outside of battle
    unless $game_temp.in_battle
      for i in 1...$data_weapons.size
        if $game_party.weapon_number(i) > 0
          @data.push($data_weapons[i])
        end
      end
      for i in 1...$data_armors.size
        if $game_party.armor_number(i) > 0
          @data.push($data_armors[i])
        end
      end
    end
    # If item count is not 0, make a bit map and draw all items
    @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
  #--------------------------------------------------------------------------
  # * Draw Item
  #     index : item number
  #--------------------------------------------------------------------------
  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 % 2 * (288 + 32)
    y = index / 2 * 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.font.name = "Khmer UI"
      self.contents.font.size = 14
    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 + 120, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 128, y, 24, 32, number.to_s, 2)
  end
  #--------------------------------------------------------------------------
  # * Help Text Update
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
end

skill window
Spoiler: ShowHide
#==============================================================================
# ** Window_Skill
#------------------------------------------------------------------------------
#  This window displays usable skills on the skill and battle screens.
#==============================================================================

class Window_Skill < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     actor : actor
  #--------------------------------------------------------------------------
  def initialize(actor)
    super(100, 32, 200, 100)
    @actor = actor
    @column_max = 1
    refresh
    self.index = 0
    # If in battle, move window to center of screen
    # and make it semi-transparent
    if $game_temp.in_battle
      self.y = 64
      self.height = 100
      self.back_opacity = 180
      self.windowskin = RPG::Cache.windowskin("BattleSkin")
     
    end
  end
  #--------------------------------------------------------------------------
  # * Acquiring Skill
  #--------------------------------------------------------------------------
  def skill
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    for i in 0...@actor.skills.size
      skill = $data_skills[@actor.skills[i]]
      if skill != nil
        @data.push(skill)
      end
    end
    # If item count is not 0, make a bit map and draw all items
    @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
  #--------------------------------------------------------------------------
  # * Draw Item
  #     index : item number
  #--------------------------------------------------------------------------
  def draw_item(index)
    skill = @data[index]
    if @actor.skill_can_use?(skill.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % 2 * (288 + 32)
    y = index * 2 / 32
    rect = Rect.new(x, y, 200, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(skill.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
      self.contents.font.name = "Khmer UI"
      self.contents.font.size = 14
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
    self.contents.draw_text(x + 100, y, 48, 32, skill.sp_cost.to_s, 2)
  end
  #--------------------------------------------------------------------------
  # * Help Text Update
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.skill == nil ? "" : self.skill.description)
  end
end


If you are able to fix it please tell me what you changed incase this happens again.
Title: Re: Items/skills stop displaying after a certain amount.
Post by: KK20 on February 28, 2012, 09:32:25 pm
Biggest thing I can see wrong are your coordinates for drawing the items. This part located in 'draw_item':
    x = 4 + index % 2 * (288 + 32)
  y = index / 2 * 32
The twos in these two equations were meant for 2 column windows. But you have indicated that you want only 1 column. So your fix is most likely:
    x = 4
  y = index * 32


I thought it had something to do with the bitmap's height (because I ran into that issue recently), but that wasn't the problem.
Title: Re: Items/skills stop displaying after a certain amount.
Post by: Zexion on February 29, 2012, 10:24:03 pm
Thank you so much :P how did you know what coordinates to use though?
Title: Re: Items/skills stop displaying after a certain amount.
Post by: KK20 on February 29, 2012, 11:14:07 pm
Honestly, I didn't really think about that. I just only came in, noticed that the equations were written for 2 column windows, changed it to draw 1 a column window, and posted. I figured that, from my answer, you would be able to figure out what numbers worked best for x and y.

Now since you said your resolution is half the standard RMXP, your y-coordinate would probably be written as y = index * 16. But I don't know what works best for you since I can't test it (I don't have your game :I ).

I don't get why RMXP didn't write the equations like this:
x = 4 + index % @column_max * (self.width / @column_max)
y = index / @column_max * 32