I guess I finished most of the things.
As you can see, the follower faces will change position automatically, depending on the party size, they will be always centered and lined up horizontally.
Now, I have no idea what to do with the empty space between the player info and the follower info.
I suppose you can just put a picture logo there with the name of your game or something with a background script. I wanted to add a picture option myself too, but I just can't figure out how to dispose any sprites properly in any scene, so I just passed on that one, sorry.
I also have no idea what to do with the "Followers" text and line when there are no followers yet. It feels a bit empty looking at all the space there then.
I am waiting for some suggestions/requests to do something with these empty places, so if you want to show anything there, just tell me.
I could try to make some kind of help text display there, so it shows different text when you move the cursor on the main menu scene if you want.
The player info has been changed, made the gauges longer, re-positioned some info (actor name, level).
You can change the Y position of the player info and follower info however you want at the settings.
You can change the color of the boxes, borders, the divider line and XP gauge.
You can choose what to display, parameters or variables, and you can choose which variables/parameters to use and what text to display for them.
You can change the "Followers" text above the divider line, you can change "XP" text on the XP gauge too.
If you have more than 4 party members, an ugly little arrow will show up at the bottom of the info window. To avoid that, try to not get more than 4 party members at once. You wrote that you won't have more than 3 main characters (1 hero and 2 companions) and some occasional guests, so I can only hope that you will have max 3 followers. If not, let me know and I will try to fix it.
Also, I haven't managed to fix the item/skill use issue, so it is still possible to use any recovery item/skill regardless if it has any effect on the actor or not. I'm hitting walls on this one. >.>
You wrote that you won't have any MP in the game, so I can only hope that this won't bother you, because I wasted almost all my free time to try to fix this, and not in the mood to try another round of it.
Spoiler
module CustomMenu1 # <-- No touchy-touchy! #-------------------------------------------------------------------------------# Variable and Param Display Settings#-------------------------------------------------------------------------------# Set the displayed variables here and the text for them.#-------------------------------------------------------------------------------Variable_Display = true # Set this to true if you want to show variables instead # of parameters from the database as your stats. # The below settings will only works if 'Variable_Display' is set to true!Variable1 = 1 # 1st displayed variable (top one)Variable2 = 2 # 2nd displayed variable (bottom one)VariableText1 = "Pride" # Text displayed for the 1st variable (top one)VariableText2 = "Morale" # Text displayed for the 2nd variable (bottom one)# The below settings will only work if 'Variable_Display' is set to false!Param1 = 2 # The 1st displayed parameter's IDParam2 = 3 # The 2nd displayed parameter's ID# The text shown for the parameters can be setup in the database under the 'Terms'# tab at the 'Parameters' settings. The param IDs and their name by default are:# 0 - MaxHP, 1 - MaxMP, 2 - ATK, 3 - DEF, 4 - MAT, 5 - MDF, 6 - AGI, 7 - LUK#-------------------------------------------------------------------------------# Text Options#-------------------------------------------------------------------------------# Some text display options.#-------------------------------------------------------------------------------XPText = "XP" # Text shown on the XP barFollowerText = "Followers" # Text shown above the follower face display area#-------------------------------------------------------------------------------# XP Gauge Settings#-------------------------------------------------------------------------------# Set the colors of the XP gauge here.#-------------------------------------------------------------------------------XPGaugeColor1 = [ 70,200, 70,100] # Color for the left side of XP gaugeXPGaugeColor2 = [ 90,200, 90,250] # Color for the right side of XP gauge# [ R , G , B , A ]#-------------------------------------------------------------------------------# Vertical Position Settings#-------------------------------------------------------------------------------# Set the Y position of player and follower information here.#-------------------------------------------------------------------------------Y_Offset_P = 0 # The vertical offset for all the player information shownY_Offset_F = 60 # The vertical offset for all the follower information shown#-------------------------------------------------------------------------------# Color options of visuals#-------------------------------------------------------------------------------# Set the color options for various graphical things shown in the here.#-------------------------------------------------------------------------------DivLineColor1 = [220,220,220,250] # The upper color for the divider line (2px)DivLineColor2 = [ 60, 60, 60,250] # The lower color for the divider line (1px)# [ R , G , B , A ]PlayerBoxC1 = [ 60, 60, 60,120] # The color of the player info boxPlayerBoxC2 = [200,200, 40,250] # The color of the player info border# [ R , G , B , A ]FollowerBoxC1 = [ 60, 60, 60,120] # The color of the follower info boxesFollowerBoxC2 = [ 40,200, 40,250] # The color of the follower info borders# [ R , G , B , A ]end # <-- No touchy-touchy! #==============================================================================# ■ Window_Base#==============================================================================class Window_Base < Window #-------------------------------------------------------------------------- # * new method: exp_rate #-------------------------------------------------------------------------- def exp_rate(actor) @cur_exp = actor.exp - actor.current_level_exp @next_exp = actor.next_level_exp - actor.current_level_exp rate = @cur_exp * 1.0 / @next_exp rate = [[rate, 1.0].min, 0.0].max end #-------------------------------------------------------------------------- # * overwrite method: draw_actor_face #-------------------------------------------------------------------------- alias sixth_draw_face121 draw_actor_face def draw_actor_face(actor, x, y, enabled = true) if SceneManager.scene_is?(Scene_Menu) if actor.index == 0 yop = CustomMenu1::Y_Offset_P bx = 2 by = 2 + yop bw = contents.width - 4 bh = line_height * 5 + 6 color1 = Color.new(*CustomMenu1::playerBoxC2) contents.fill_rect(bx, by, bw, bh, color1) color = Color.new(*CustomMenu1::playerBoxC1) contents.fill_rect(bx + 2, by + 2, bw - 4, bh - 4, color) draw_face(actor.face_name, actor.face_index, x + 5, y + 5 + yop, enabled) elsif actor.index == 1 if $game_party.members.size == 2 x = contents.width/2 - 48 elsif $game_party.members.size == 3 x = contents.width/4 - 48 else x = contents.width/6 - 48 end y += CustomMenu1::Y_Offset_F color1 = Color.new(*CustomMenu1::FollowerBoxC2) contents.fill_rect(x - 4, y + 94, 104, 130, color1) color = Color.new(*CustomMenu1::FollowerBoxC1) contents.fill_rect(x - 2, y + 96, 100, 126, color) draw_face(actor.face_name, actor.face_index, x, y + 98, enabled) elsif actor.index == 2 if $game_party.members.size == 3 x = contents.width/4*3 - 48 else x = contents.width/6*3 - 48 end y += CustomMenu1::Y_Offset_F color1 = Color.new(*CustomMenu1::FollowerBoxC2) contents.fill_rect(x - 4, y - 4, 104, 130, color1) color = Color.new(*CustomMenu1::FollowerBoxC1) contents.fill_rect(x - 2, y - 2, 100, 126, color) draw_face(actor.face_name, actor.face_index, x, y, enabled) elsif actor.index == 3 y += CustomMenu1::Y_Offset_F x = contents.width/6*5 - 48 color1 = Color.new(*CustomMenu1::FollowerBoxC2) contents.fill_rect(x - 4, y - 102, 104, 130, color1) color = Color.new(*CustomMenu1::FollowerBoxC1) contents.fill_rect(x - 2, y - 100, 100, 126, color) draw_face(actor.face_name, actor.face_index, x, y - 98, enabled) else y += CustomMenu1::Y_Offset_F draw_face(actor.face_name, actor.face_index, x, y + 98, enabled) end else sixth_draw_face121(actor, x, y, enabled = true) end end #-------------------------------------------------------------------------- # * overwrite method: draw_current_and_max_values - Yanfly code! Anti-text shrink! #-------------------------------------------------------------------------- def draw_current_and_max_values(dx, dy, dw, current, max, color1, color2) total = current.to_s + "/" + max.to_s if dw < text_size(total).width + text_size(Vocab.hp).width change_color(color1) draw_text(dx, dy, dw, line_height, current.to_s, 2) else xr = dx + text_size(Vocab.hp).width dw -= text_size(Vocab.hp).width change_color(color2) text = "/" + max.to_s draw_text(xr, dy, dw, line_height, text, 2) dw -= text_size(text).width change_color(color1) draw_text(xr, dy, dw, line_height, current.to_s, 2) end end #-------------------------------------------------------------------------- # overwrite method: draw_actor_simple_status #-------------------------------------------------------------------------- def draw_actor_simple_status(actor, dx, dy) if actor.index == 0 dy -= line_height / 2 dx += 5 if SceneManager.scene_is?(Scene_Menu) dy += 5 if SceneManager.scene_is?(Scene_Menu) yop = 0 yop = CustomMenu1::Y_Offset_P if SceneManager.scene_is?(Scene_Menu) yo = CustomMenu1::Y_Offset_F draw_actor_name(actor, dx, dy + yop) draw_actor_icons(actor, 0, dy + line_height * 4 + 3 + yop) dw = contents.width - dx - 4 # 124 dw -= 5 if SceneManager.scene_is?(Scene_Menu) color1 = Color.new(*CustomMenu1::XPGaugeColor1) color2 = Color.new(*CustomMenu1::XPGaugeColor2) draw_gauge(dx, dy + line_height * 2 + yop, dw, exp_rate(actor), color1, color2) color1 = color2 = normal_color draw_current_and_max_values(dx, dy + line_height * 2 + yop, dw, @cur_exp, @next_exp, color1, color2) change_color(system_color) draw_text(dx, dy + yop, dw - 24, line_height, Vocab::level_a + " ", 2) draw_text(dx, dy + line_height * 2 + yop, dw, line_height, CustomMenu1::XPText) if CustomMenu1::Variable_Display == true draw_text(dx, dy + line_height * 3 + yop, dw, line_height, CustomMenu1::VariableText1) draw_text(dx, dy + line_height * 4 + yop, dw, line_height, CustomMenu1::VariableText2) else draw_text(dx, dy + line_height * 3 + yop, dw, line_height, Vocab::param(CustomMenu1::param1)) draw_text(dx, dy + line_height * 4 + yop, dw, line_height, Vocab::param(CustomMenu1::param2)) end draw_text(0, dy + line_height * 6 + yo, contents.width, line_height, CustomMenu1::FollowerText, 1) change_color(normal_color) draw_text(dx, dy + yop, dw, line_height, actor.level.to_s, 2) draw_actor_hp(actor, dx, dy + line_height * 1 + yop, dw) change_color(normal_color) if CustomMenu1::Variable_Display == true draw_text(dx, dy + line_height * 3 + yop, dw, line_height, "#{$game_variables[CustomMenu1::Variable1]}", 2) draw_text(dx, dy + line_height * 4 + yop, dw, line_height, "#{$game_variables[CustomMenu1::Variable2]}", 2) else draw_text(dx, dy + line_height * 3 + yop, dw, line_height, actor.param(CustomMenu1::param1), 2) draw_text(dx, dy + line_height * 4 + yop, dw, line_height, actor.param(CustomMenu1::param2), 2) end color1 = Color.new(*CustomMenu1::DivLineColor1) color2 = Color.new(*CustomMenu1::DivLineColor2) contents.fill_rect(0, dy + line_height * 7 + yo, contents.width, 2, color1) contents.fill_rect(0, dy + line_height * 7 + 2 + yo, contents.width, 1, color2) elsif actor.index == 1 dy -= line_height / 2 dy += CustomMenu1::Y_Offset_F if $game_party.members.size == 2 dx = contents.width/2 - 48 elsif $game_party.members.size == 3 dx = contents.width/4 - 48 else dx = contents.width/6 - 48 end draw_text(dx - 1, dy + 98*2, 100, line_height, actor.name, 1) elsif actor.index == 2 dy -= line_height / 2 dy += CustomMenu1::Y_Offset_F if $game_party.members.size == 3 dx = contents.width/4*3 - 48 else dx = contents.width/6*3 - 48 end draw_text(dx - 1, dy + 98, 100, line_height, actor.name, 1) elsif actor.index == 3 dy -= line_height / 2 dy += CustomMenu1::Y_Offset_F dx = contents.width/6*5 - 48 draw_text(dx - 1, dy, 100, line_height, actor.name, 1) else dy -= line_height / 2 dy += CustomMenu1::Y_Offset_F dx = contents.width/6*5 - 48 draw_text(dx - 1, dy + 98, 100, line_height, actor.name, 1) end endend#==============================================================================# ■ Scene_MenuBase#==============================================================================class Scene_MenuBase < Scene_Base #-------------------------------------------------------------------------- # overwrite method: next_actor #-------------------------------------------------------------------------- def next_actor on_actor_change end #-------------------------------------------------------------------------- # overwrite method: prev_actor #-------------------------------------------------------------------------- def prev_actor on_actor_change endend#==============================================================================# ■ Scene_ItemBase#==============================================================================class Scene_ItemBase < Scene_MenuBase #-------------------------------------------------------------------------- # overwrite method: determine_item #-------------------------------------------------------------------------- def determine_item if item.for_friend? @actor_window.index = 0 use_item activate_item_window#~ show_sub_window(@actor_window)#~ @actor_window.select_for_item(item) else use_item activate_item_window end endend#==============================================================================# ■ Scene_Menu#==============================================================================class Scene_Menu < Scene_MenuBase #-------------------------------------------------------------------------- # overwrite method: create_command_window #-------------------------------------------------------------------------- alias sixth_rid_select112 create_command_window def create_command_window sixth_rid_select112 @command_window.set_handler:)skill, method:)on_personal_ok)) @command_window.set_handler:)equip, method:)on_personal_ok)) @command_window.set_handler:)status, method:)on_personal_ok)) endend
The code is not the best, not cleaned up entirely but works.
If you find any bugs, report them to me.
And if you have anything else you want in the menu, just tell me and I will try to do it.
Ohh, and sorry for the slow-poke work.