- Joined
- Dec 22, 2014
- Messages
- 359
- Reaction score
- 111
- First Language
- English
- Primarily Uses
- RMVXA
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:

Code is here, people can use it as-is if they really want to.
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.
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:

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
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.
Attachments
-
1.4 MB Views: 0

