RPG Maker Forums

Found an old script request post and I wanted to see how the final result looked.
Got it to work and did minor changes to code, but there's a part of it that looks really bad on startup.

How it looks like:
upload_2019-4-3_12-3-20.png

Code is here, people can use it as-is if they really want to.
Code:
#===============================================================================
# Michael Customized Parthanandix's Simple Horizontal Menu
# Derived from Parthanandix's Simple Horizontal Menu
# Minor edits by TV.Ghost
# Link: https://forums.rpgmakerweb.com/index.php?threads/please-help-me-to-complete-item-menu.21987/
#===============================================================================
module HelpText
  # Change the help text below for each of the menu options.
  Item_Help = "Use an item."
  Status_Help = "View your status."
  Equip_Help = "Equip armor or weapons."
  Skill_Help = "Use a skill."
  Formation_Help = "Change formation."
  Load_Help = "Load game data."
  Cancel_Help = "Exit the menu."
  End_Help = "Quit game."
  # This is to display help text when selecting an actor for a personal command.
  Select_Actor_Help = "Choose an actor."
end
#==============================================================================
#==============================================================================
#~ class Window_ItemList < Window_Selectable
#~   def initialize(x, y, width, height)
#~     super
#~     @category = :none
#~     @data = []
#~   end
#~   def category=(category)
#~     return if @category == category
#~     @category = category
#~     refresh
#~     self.oy = 0
#~   end
#~   def col_max;
#~     return 2;
#~   end
#~   def item_max;
#~     @data ? @data.size : 1;
#~   end
#~   def item;
#~     @data && index >= 0 ? @data[index] : nil;
#~   end
#~   def current_item_enabled?;
#~     enable?(@data[index]);
#~   end
#~   def include?(item)
#~     case @category
#~     when :item
#~       item.is_a?(RPG::Item) || item.is_a?(RPG::Weapon) || item.is_a?(RPG::Armor)
#~     else
#~       false
#~     end
#~   end
#~   def enable?(item);
#~     $game_party.usable?(item);
#~   end
#~   def make_item_list
#~     @data = $game_party.all_items.select {|item| include?(item) }
#~     @data.push(nil) if include?(nil)
#~   end
#~   def select_last;
#~     select(@data.index($game_party.last_item.object) || 0);
#~   end
#~   def draw_item(index)
#~     item = @data[index]
#~     if item
#~       rect = item_rect(index)
#~       rect.width -= 4
#~       draw_item_name(item, rect.x, rect.y, enable?(item))
#~       draw_item_number(rect, item)
#~     end
#~   end
#~   def draw_item_number(rect, item)
#~     draw_text(rect, sprintf(":%2d", $game_party.item_number(item)), 2)
#~   end
#~   def update_help;
#~     @help_window.set_item(item);
#~   end
#~   def refresh;
#~     make_item_list;
#~     create_contents;
#~     draw_all_items;
#~   end
#~ end
#==============================================================================
#==============================================================================
class Window_Parthanandix < Window_HorzCommand
  attr_reader :item_window
  def make_command_list
    add_command(Vocab::item, :item)
    add_command(Vocab::continue, :load)
    add_command(Vocab::game_end, :game_end)
    add_command(Vocab::cancel, :cancel)
  end
  def window_width
    return Graphics.width
  end
  def update
    super
    @item_window.category = :item if @item_window
  end
  def item_window=(item_window)
    @item_window = item_window
    ##update
  end
  def col_max
    return item_max
  end
  def update_help
    super
    case self.index
      when 0
        @help_window.set_text(HelpText::Item_Help)
      when 1
        @help_window.set_text(HelpText::Load_Help)
      when 2
        @help_window.set_text(HelpText::End_Help)
      when 3
        @help_window.set_text(HelpText::Cancel_Help)
    end 
    end
  end
#==============================================================================
#==============================================================================
class Window_MenuStatus < Window_Selectable
      
  def window_width
    return 544
  end
        
  def window_height
    return 320
  end
        
  def draw_item(index)
    actor = $game_party.members[index]
    enabled = $game_party.battle_members.include?(actor)
    rect = item_rect(index)
    draw_item_background(index)
    draw_character(actor.character_name, actor.character_index, rect.x + 70 , rect.y + 54)
    draw_actor_simple_status(actor, rect.x + 108, rect.y)
  end
        
  def draw_item_background(index)
    if index == @pending_index
      contents.fill_rect(item_rect(index), pending_color)
    end
  end
        
  def draw_actor_simple_status(actor, x, y)
    draw_actor_name(actor, x + 40, y)
    draw_actor_level(actor, x + 40, y + line_height * 1)
    draw_actor_icons(actor, x + 40, y + line_height * 2)
    draw_actor_class(actor, x + 200, y)
    draw_actor_hp(actor, x + 200, y + line_height * 1)
    draw_actor_mp(actor, x + 200, y + line_height * 2)
  end
        
end
#==============================================================================
#==============================================================================
class Window_NewHelp < Window_Base
      
  def initialize(line_number = 1)
    super(0, 0, 344, fitting_height(line_number))
  end
 
  def set_text(text)
    if text != @text
      @text = text
      refresh
    end
  end
        
  def clear
    set_text("")
  end
 
  def set_item(item)
    set_text(item ? item.description : "")
  end
    
  def refresh
    contents.clear
    draw_text_ex(4, 0, @text)
  end
 
  end

class Scene_Map < Scene_Base
 
  def call_menu
    Sound.play_ok
    SceneManager.call(Scene_derived_by_michael)
    Window_MenuCommand::init_command_position
  end

end
#==============================================================================
#==============================================================================
class Scene_derived_by_michael < Scene_Base
    
  def start
    super
    create_background
    @actor = $game_party.menu_actor
    create_gold_window
    create_actor_window
    create_help_window
    create_command_window
    create_item_window
  end
        
  def create_background
    @bgs = Sprite.new
    @bgs.bitmap = SceneManager.background_bitmap
    @bgs.color.set(16, 16, 16, 128)
  end
        
  def create_command_window
    @command_window = Window_Parthanandix.new(0,0)
    @command_window.viewport = @viewport
    @command_window.help_window = @help_window
    @command_window.set_handler(:item, method(:command_item))
    @command_window.set_handler(:load, method(:command_load))
    @command_window.set_handler(:game_end, method(:command_game_end))
    @command_window.set_handler(:cancel, method(:on_personal_cancel))
    @command_window.set_handler(:cancel, method(:return_scene))
  end
        
  def command_item
    @item_window.activate
    @item_window.select_last
  end
        
  def command_load
    SceneManager.call(Scene_Load)
  end
 
  def command_game_end
    SceneManager.call(Scene_End)
  end
        
  def on_personal_cancel
    return_scene
  end
        
  def create_gold_window
    @gold_window = Window_Gold.new
    @gold_window.x = 0
    @gold_window.y = 368
    @gold_window.width = 200
  end
        
  def create_actor_window
    @actor_window = Window_MenuActor.new
    @actor_window.height = Graphics.height - @gold_window.height
    @actor_window.set_handler(:ok, method(:on_actor_ok))
    @actor_window.set_handler(:cancel, method(:on_actor_cancel))
  end
        
  def item
    @item_window.item
  end
        
  def user
    $game_party.movable_members.max_by {|member| member.pha }
  end
        
  def cursor_left?
    @item_window.index % 2 == 0;
  end
        
  def show_sub_window(window)
    width_remain = Graphics.width - window.width
    window.x = cursor_left? ? width_remain : 0
    @viewport.rect.x = @viewport.ox = cursor_left? ? 0 : window.width
    @viewport.rect.width = width_remain
    window.show.activate
  end
        
  def hide_sub_window(window)
    @viewport.rect.x = @viewport.ox = 0
    @viewport.rect.width = Graphics.width
    window.hide.deactivate
    activate_item_window
  end
        
  def on_actor_ok
    (item_usable?) ? use_item : Sound.play_buzzer
  end
        
  def on_actor_cancel
    hide_sub_window(@actor_window)
  end
        
  def determine_item
    if item.for_friend?
      show_sub_window(@actor_window)
      @actor_window.select_for_item(item)
    else
      use_item
      activate_item_window
    end
  end
        
  def activate_item_window
    @item_window.refresh
    @item_window.activate
  end
        
  def item_target_actors
    if !item.for_friend?
      []
    elsif item.for_all?
      $game_party.members
    else
      [$game_party.members[@actor_window.index]]
    end
  end
        
  def item_usable?
    user.usable?(item) && item_effects_valid?;
  end
        
  def item_effects_valid?
    item_target_actors.any? do
      |target| target.item_test(user, item)
    end
  end
      
  def use_item_to_actors
    item_target_actors.each do
    |target| item.repeats.times { target.item_apply(user, item) }
    end
  end
      
  def use_item
    play_se_for_item
    user.use_item(item)
    use_item_to_actors
    check_common_event
    check_gameover
    @actor_window.refresh
  end
      
  def check_common_event;
    SceneManager.goto(Scene_Map) if $game_temp.common_event_reserved?;
  end
      
  def create_help_window
    @help_window = Window_NewHelp.new
    @help_window.z = @actor_window.z - 1
    @help_window.x = 200
    @help_window.y = 368
  end
    
  def create_item_window
    @item_window = Window_ItemList.new(0, 48, Graphics.width, Graphics.height - 96)
    @item_window.viewport = @viewport
    @item_window.help_window = @help_window
    @item_window.set_handler(:ok, method(:on_item_ok))
    @item_window.set_handler(:cancel, method(:on_item_cancel))
    @command_window.item_window = @item_window
  end
        
  def on_item_ok;
    $game_party.last_item.object = item;
    determine_item;
    ##evev
  end
        
  def on_item_cancel;
    @item_window.unselect;
    @command_window.activate;
  end
        
  def play_se_for_item;
    Sound.play_use_item;
  end
        
#~   def use_item;
#~     super
#~     @item_window.redraw_current_item
#~   end
        
  def next_actor;
    @actor = $game_party.menu_actor_next;
    on_actor_change;
  end
        
  def prev_actor;
    @actor = $game_party.menu_actor_prev;
    on_actor_change;
  end
        
  def on_actor_change;
  end
        
  def terminate;
    super;
    dispose_background;
  end
        
  def dispose_background;
    @bgs.dispose;
  end
        
end

class Window_Gold < Window_Base
 
  def window_width
    200
  end
 
end
Hashed out ItemList because it's just a copy of the default code from what it seems. There's a split second after the menu gets loaded up before the item list shows up (if you have any items). Before the items are drawn, the item window is empty.
Guessing the item window gets force-activated which then leads it to drawing the item icons and text. How would someone get rid of that delay, though?

Original post: https://forums.rpgmakerweb.com/index.php?threads/please-help-me-to-complete-item-menu.21987/
Demo attached below, added an event that just gives you a bunch of items so you can test it super quick.

Latest Threads

Latest Profile Posts

Our latest feature is an interview with... me?!

People4_2 (Capelet off and on) added!

Just beat the last of us 2 last night and starting jedi: fallen order right now, both use unreal engine & when I say i knew 80% of jedi's buttons right away because they were the same buttons as TLOU2 its ridiculous, even the same narrow hallway crawl and barely-made-it jump they do. Unreal Engine is just big budget RPG Maker the way they make games nearly identical at its core lol.
Can someone recommend some fun story-heavy RPGs to me? Coming up with good gameplay is a nightmare! I was thinking of making some gameplay platforming-based, but that doesn't work well in RPG form*. I also was thinking of removing battles, but that would be too much like OneShot. I don't even know how to make good puzzles!
one bad plugin combo later and one of my followers is moonwalking off the screen on his own... I didn't even more yet on the new map lol.

Forum statistics

Threads
106,034
Messages
1,018,447
Members
137,820
Latest member
georg09byron
Top