Sub-menu Tab
#1
Brick 
Hi people! I'm trying to get a CMS for my project and I wish to pack some options into 1 inside of a tab-window, something like this option from Star Ocean CMS

[Image: examplemenu.png]


Help much appreciated ^^

EDIT: The Window_Command from my menu is actually on the other side (right-side)
I'm looking for a scripter to help me with my proyect. Need some minor adjustments-modifications and some larger codes. The larger ones will be remunerated :) Thanks beforehand.
Reply }
#2
I have this kind of menu in my current project. It's in xp, so I don't know which version you use.
I'm unsure who to give credit to though besides Rafidelis.

The script overrides your standard window script.
The code regarding the pop-up menu can be found on code lines 68 to 73.
Closing the extra menu on 99.
The scenes it directs to are called in 111 to 133.
The pop-up menu is called in 184 to 187.

I'm sorry I can't explain it more thoroughly to you, but I hope it helps.

Code
Upcoming RPG XP project: Legends of the Flaming Falcons
In a distant future an ancient threat stirs...heroes of old take up their arms once more.
For my writing project that includes my rmxp project I'm also maintaining a private wiki; if you wish to follow me, let me know.
My developer blog can be found here:
http://the-otherworld-tales.blogspot.be/

[Image: Gazeteer%20-%20Pherione.gif]
Gazetteer responsible for Pherione's Developer Interviews. My thread here.


More info or questions? PM me
Reply }
#3
Thanks a lot! But, I don't know if it is triggered by your piece of script (I copyed the parts you said on my own menu) but an error in line 17 from Window_Base crashed the game (Window_Base 17 NoMethodError- undefined method 'windowskin_name' for nil:NilClass):

class Window_Base < Window
#--------------------------------------------------------------------------
# * Object Initialization
# x : window x-coordinate
# y : window y-coordinate
# width : window width
# height : window height
#--------------------------------------------------------------------------
def initialize(x, y, width, height)
super()
@windowskin_name = $game_system.windowskin_name <---- this seems to be the conflict
self.windowskin = RPG::Cache.windowskin(@windowskin_name)
self.x = x
self.y = y
self.width = width
self.height = height
self.z = 100
end

Any ideas?
I'm looking for a scripter to help me with my proyect. Need some minor adjustments-modifications and some larger codes. The larger ones will be remunerated :) Thanks beforehand.
Reply }
#4
The script I gave you doesn't change anything to the way the game calls its windowskin so it shouldn't be giving that error. In fact the script simply calls the game's window methods to draw itself in the same style your menu window should be to prevent discrepancy with the rest of your game.

In human language: The script I gave you, bases itself upon the standard script for its windows so it wouldn't appear different from the rest of your window. That's why it shouldn't be giving that error, unless you have overridden the standard script. (not adjusted it, but overridden)

Are you using any other custom menus and if so, which ones?
Upcoming RPG XP project: Legends of the Flaming Falcons
In a distant future an ancient threat stirs...heroes of old take up their arms once more.
For my writing project that includes my rmxp project I'm also maintaining a private wiki; if you wish to follow me, let me know.
My developer blog can be found here:
http://the-otherworld-tales.blogspot.be/

[Image: Gazeteer%20-%20Pherione.gif]
Gazetteer responsible for Pherione's Developer Interviews. My thread here.


More info or questions? PM me
Reply }
#5
This is my entire Window_Base:

Code:
#*********************************************************
#Final Fantasy VII menu setup
#*********************************************************
#To use:
#If you do not want Faces, go to line 94
#and change delete the # of draw_actor_graphic
#and put a # infront of draw_actor_face
#
#Create a new folder in the Characters folder, and call it Faces
#Adding faces: add a 80x80 picture with the same name as the characterset it
#corrosponds with in the Faces folder


#========================================
#�ˇ Window_Base
#--------------------------------------------------------------------------------
# Setting functions for the "Base"
#========================================


class Window_Base < Window

def draw_actor_face(actor, x, y)
face = RPG::Cache.character("Faces/" + actor.character_name + ".png" , actor.character_hue)
fw = face.width
fh = face.height
src_rect = Rect.new(0, 0, fw, fh)
self.contents.blt(x - fw / 23, y - fh, face, src_rect)
end
end
def draw_actor_battler_graphic(actor, x, y)
  bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue)
  cw = bitmap.width
  ch = bitmap.height
  src_rect = Rect.new(0, 0, cw, ch)
  self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
end

#========================================
#�ˇ Game_Map
#--------------------------------------------------------------------------------
# Setting functions for the Map
#========================================
class Game_Map

def name
$map_infos[@map_id]
end
end

#========================================
#�ˇ Window_Title
#--------------------------------------------------------------------------------
# Setting functions for the Title
#========================================
class Scene_Title
$map_infos = load_data("Data/MapInfos.rxdata")
for key in $map_infos.keys
$map_infos[key] = $map_infos[key].name
end
end




#==============================================================================
# �ˇ Window_MenuStatus
#------------------------------------------------------------------------------
#  Sets up the Choosing.
#==============================================================================

class Window_MenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# Set up
#--------------------------------------------------------------------------
def initialize
  super(0, 0, 560, 454)
  self.contents = Bitmap.new(width - 32, height - 32)
  self.contents.font.name = "Corbel"
  self.contents.font.size = 18
  refresh
  self.active = false
  self.index = -1
end
#--------------------------------------------------------------------------
# Drawing Info on Screen
#--------------------------------------------------------------------------
def refresh
  self.contents.clear
  @item_max = $game_party.actors.size
  for i in 0...$game_party.actors.size
    x = 94
    y = i * 110
    actor = $game_party.actors[i]
    draw_actor_face(actor, 12, y + 90) #To get rid of the Face, put a "#" before the draw_ of this line
  #  draw_actor_graphic(actor, 48, y + 65) #and delete the "#" infront of draw of this line
    draw_actor_name(actor, x, y)
    draw_actor_level(actor, x + 144, y)
    draw_actor_state(actor, x + 280, y )
    draw_actor_exp(actor, x+ 144, y + 38)
    draw_actor_hp(actor, x, y + 38)
    draw_actor_sp(actor, x, y + 58)

  end
end
#--------------------------------------------------------------------------
# Update of Cursor
#--------------------------------------------------------------------------
def update_cursor_rect
  if @index < 0
    self.cursor_rect.empty
  else
    self.cursor_rect.set(0, @index * 110, self.width - 32, 96)
  end
end
end

#=======================================#
# �ˇWindow_GameStats                                                             #
# written by AcedentProne                                                          #
#------------------------------------------------------------------------------#

class Window_GameStats < Window_Base
def initialize
super(0, 0, 160, 60)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Corbel"
self.contents.font.size = 18
refresh
end

def refresh
self.contents.clear
#Drawing gold into separate commas by Dubealex
case $game_party.gold
   when 0..9999
     gold = $game_party.gold
   when 10000..99999
     gold = $game_party.gold.to_s
     array = gold.split(//)
     gold = array[0].to_s+array[1].to_s+","+array[2].to_s+array[3].to_s+array[4].to_s
   when 100000..999999
     gold = $game_party.gold.to_s
     array = gold.split(//)
     gold = array[0].to_s+array[1].to_s+array[2].to_s+","+array[3].to_s+array[4].to_s+array[5].to_s
   when 1000000..9999999
     gold = $game_party.gold.to_s
     array = gold.split(//)
     gold = array[0].to_s+","+array[1].to_s+array[2].to_s+array[3].to_s+","+array[4].to_s+array[5].to_s+array[6].to_s
   end
#Draw Gold
self.contents.font.color = system_color
gold_word = $data_system.words.gold.to_s
cx = contents.text_size(gold_word).width
cx2=contents.text_size(gold.to_s).width
self.contents.draw_text(4, 4, 120-cx-2, 32, gold_word)
self.contents.font.color = normal_color
self.contents.draw_text(124-cx2+1, 4, cx2, 32, gold.to_s, 2)
self.contents.font.color = system_color
# Draw "Time"
@total_sec = Graphics.frame_count / Graphics.frame_rate
hour = @total_sec / 60 / 60
min = @total_sec / 60 % 60
sec = @total_sec % 60
text = sprintf("%02d:%02d:%02d", hour, min, sec)
self.contents.font.color = normal_color
self.contents.draw_text(4, -10, 120, 32, text, 2)
self.contents.font.color = system_color
self.contents.draw_text(4, -10, 120, 32, "Time")
end
# Extra Window

@command_window_extra = Window_Command.new(160,["Bestiary", "Quest", "Journal", "Achieve.", "Guide", "Load"]
@command_window_extra.x = @command_window.width - 50
@command_window_extra.y = 120
@command_window_extra.z = @command_window.z + @status_window.z
@command_window_extra.active = false
    @command_window_extra.visible = false
    end
#--------------------------------------------------------------------------
# Update of The count
#--------------------------------------------------------------------------
def update
super
if Graphics.frame_count / Graphics.frame_rate != @total_sec
   refresh
end
end

#==============================================================================
# �ˇ Window_Mapname
#------------------------------------------------------------------------------
# �@Draws the Map name
#==============================================================================

class Window_Mapname < Window_Base
#--------------------------------------------------------------------------
# Set up
#--------------------------------------------------------------------------
def initialize
super(0, 0, 320, 44)
self.contents = Bitmap.new(width - 60, height - 32)
self.contents.font.name = "Corbel"
self.contents.font.size = 17
refresh
end
#--------------------------------------------------------------------------
# Draws info on screen
#--------------------------------------------------------------------------
def refresh
self.contents.clear

# Map Name
#map = $game_map.name
self.contents.font.color = system_color
self.contents.draw_text(4, -10, 220, 32, "Location")
self.contents.font.color =  normal_color
self.contents.draw_text(175, -10, 80, 32, $game_map.name)
end
end

#==============================================================================
# �ˇ Scene_Menu
#------------------------------------------------------------------------------
# FF7 menu layout as requested by AcedentProne.
#==============================================================================

class Scene_Menu
#--------------------------- edit-------------------------------
attr_reader :status_window
#/--------------------------- edit-------------------------------

def initialize(menu_index = 0)
@menu_index = menu_index
end
def main
    
    s1 = $data_system.words.item
    s2 = $data_system.words.skill
    s3 = $data_system.words.equip
    s4 = "Estado"
    s5 = "Eones"
    s6 = "Turbo"    
    s7 = "Diario"
    s8 = "Formación"
    s9 = "Configuración"
    s10 = "Salir"


#--------------------------- edit-------------------------------  
# Command menu
   @command_window = Window_MenuIcons.new(160, [s1, s2, s3, s4, s5, s6, s7, s8, s9, s10])
@command_window.x = 640 - @command_window.width
@command_window.y = 480
@command_window.z = 110
@command_window.index = @menu_index
#If certain options are avaliable
    if $game_party.actors.size == 0
      @command_window.disable_item(0)
      @command_window.disable_item(1)
      @command_window.disable_item(2)
      @command_window.disable_item(3)
      @command_window.disable_item(5)
    end
if $game_party.actors.size <= 1 #
      @command_window.disable_item(7)
    end
    if $game_system.save_disabled
      @command_window.disable_item(6)
end
#Showing location window
@map = Window_Mapname.new
@map.x = 640 - @map.width
@map.y = 0 - @map.height - 1
@map.z = 110
#Showing the game stats
@game_stats_window = Window_GameStats.new
@game_stats_window.x = 0 - @game_stats_window.width
@game_stats_window.y = 480 - @map.height - @game_stats_window.height
@game_stats_window.z =110
  
#Showing the Menu Status window
@status_window = Window_MenuStatus.new
@status_window.x = 640
@status_window.y = 8
@status_window.z = 100

    
Graphics.transition
loop do
   Graphics.update
   Input.update
   update
   if $scene != self
     break
   end
end
Graphics.freeze
@command_window.dispose
@game_stats_window.dispose
@status_window.dispose
@map.dispose
@command_window_extra.dispose
end
#--------------------------------------------------------------------------
#Defining the delay
#--------------------------------------------------------------------------
def delay(seconds)
for i in 0...(seconds * 1)
   sleep 0.01
   Graphics.update
end
end
#--------------------------------------------------------------------------
# Updating
#--------------------------------------------------------------------------
def update
@command_window.update
@game_stats_window.update
@status_window.update
@map.update
@command_window_extra.update
# If command window is active: call update_command
if @command_window.active
update_command
return
end
# If status window is active: call update_status
if @status_window.active
update_status
return
end

if Input.trigger?(Input::C) and @command_window_extra.active
case @command_window_extra.index
  when 0 #Bestiary
  $game_system.se_play($data_system.decision_se)
  $scene = Scene_Bestiary.new

   when 1 #Quest
  $game_system.se_play($data_system.decision_se)
  $scene = Scene_Quest.new

  when 2 #Journal
  $game_system.se_play($data_system.decision_se)
  $scene = Scene_Biography.new

  when 3 #Achievements
  $game_system.se_play($data_system.decision_se)
  $scene = Scene_Achievements.new
  
  when 4 #help
  $game_system.se_play($data_system.decision_se)
  $scene = Scene_Achievements.new
  
  when 5 #Load
  $game_system.se_play($data_system.decision_se)
  $scene = Scene_MenuLoad.new
end

elsif Input.trigger?(Input::B) and @command_window_extra.active
@command_window.active = true
@command_window_extra.visible = false
@command_window_extra.active = false


#Moving Windows inplace
gamepos = 640 - @game_stats_window.width
mappos = 480 - @map.height - 1
if @command_window.y > 0
@command_window.y -= 60
end
if @game_stats_window.x < gamepos
@game_stats_window.x += 80
end
if @map.y < mappos
@map.y += 80
end
if @status_window.x > 0
   @status_window.x -= 80
end
#Saying if options are active
if @command_window.active
   update_command
   return
end
if @status_window.active
   update_status
   return
end
end
#--------------------------------------------------------------------------
# Updating the Command Selection
#--------------------------------------------------------------------------
def update_command
# If B button is pushed
if Input.trigger?(Input::B)
   # Plays assigned SE
   $game_system.se_play($data_system.cancel_se)
   #Looping for moving windows out
    loop do
     if @command_window.y < 480
      @command_window.y += 40
     end
     if @game_stats_window.x > 0 - @game_stats_window.width
      @game_stats_window.x -= 40
     end
     if @map.y > 0 - @map.height
      @map.y -= 40
     end
     if @status_window.x < 640
      @status_window.x += 40
     end
     delay(0.5)
     if @status_window.x >= 640
      break
    end
   end
  # Go to Map
$scene = Scene_Map.new
   return
end
# If C button is pused
if Input.trigger?(Input::C)
   # Checks actor size
   if $game_party.actors.size == 0 and @command_window.index < 4
     # plays SE
     $game_system.se_play($data_system.buzzer_se)
     return
   end
   case @command_window.index
   when 0  
     $game_system.se_play($data_system.decision_se)
     loop do
     if @command_window.y < 480
      @command_window.y += 40
     end
     if @game_stats_window.x > 0 - @game_stats_window.width
      @game_stats_window.x -= 40
     end
     if @map.y > 0 - @map.height
      @map.y -= 40
     end
     if @status_window.x < 640
      @status_window.x += 40
     end
     delay(0.5)
     if @status_window.x >= 640
      break
    end
   end
     $scene = Scene_Item.new
   when 1
     $game_system.se_play($data_system.decision_se)
     @command_window.active = false
     @status_window.active = true
     @status_window.index = 0
      when 2  
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
   when 3  
     $game_system.se_play($data_system.decision_se)
     @command_window.active = false
     @status_window.active = true
     @status_window.index = 0
   when 4  #Quests; mover de aquí
     $game_system.se_play($data_system.decision_se)
     $game_temp.quest_menu_calling = true
     $scene = Scene_Quests.new
   when 5  # limit
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Make status window active
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
   when 7  # Order
        #Change Party Order by Yargovish
        $game_system.se_play($data_system.decision_se)
        @checker = 0
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 8  # Opciones
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Make status window active
        $scene = Scene_ColorWindow.new
      when 6 #extras
        @command_window.active = false
        @command_window_extra.active = true
        @command_window_extra.visible = true
    
   when 9
     $game_system.se_play($data_system.decision_se)
     loop do
     if @command_window.y < 480
      @command_window.y += 40
     end
     if @game_stats_window.x > 0 - @game_stats_window.width
      @game_stats_window.x -= 40
     end
     if @map.y > 0 - @map.height
      @map.y -= 40
     end
     if @status_window.x < 640
      @status_window.x += 40
     end
     delay(0.5)
     if @status_window.x >= 640
      break
    end
   end
      $scene = Scene_End.new
   return
end
end
#--------------------------------------------------------------------------
# Updating Status Screen
#--------------------------------------------------------------------------
def update_status
if Input.trigger?(Input::B)
   $game_system.se_play($data_system.cancel_se)
   @command_window.active = true
   @status_window.active = false
   @status_window.index = -1
   return
end
if Input.trigger?(Input::C)
   case @command_window.index
        when 1  # ƒXƒLƒ‹
        # ‚�‚ĚƒAƒNƒ^�[‚ĚŤs“���ŚŔ‚Ş 2 ˆČŹă‚̏ꍇ
        if $game_party.actors[@status_window.index].restriction >= 2
          # ƒuƒU�[ SE ‚đ‰‰‘t
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # Śˆ’č SE ‚đ‰‰‘t
        $game_system.se_play($data_system.decision_se)
        # ƒXƒLƒ‹‰ć–Ę‚ɐŘ‚č‘�‚�
        $scene = Scene_Skill.new(@status_window.index)
        when 2
     $game_system.se_play($data_system.decision_se)
     loop do
     if @command_window.y < 480
      @command_window.y += 40
     end
     if @game_stats_window.x > 0 - @game_stats_window.width
      @game_stats_window.x -= 40
     end
     if @map.y > 0 - @map.height
      @map.y -= 40
     end
     if @status_window.x < 640
      @status_window.x += 40
     end
     delay(0.5)
     if @status_window.x >= 640
      break
    end
   end
     $scene = Scene_Equip.new(@status_window.index)
   when 3
     $game_system.se_play($data_system.decision_se)
     loop do
     if @command_window.y < 480
      @command_window.y += 40
     end
     if @game_stats_window.x > 0 - @game_stats_window.width
      @game_stats_window.x -= 40
     end
     if @map.y > 0 - @map.height
      @map.y -= 40
     end
     if @status_window.x < 640
      @status_window.x += 40
     end
     delay(0.5)
     if @status_window.x >= 640
      break
    end
   end
     $scene = Scene_Status.new(@status_window.index)
      when 5  # limits
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to skill screen
        $scene = Scene_LimitMenu.new(@status_window.index)
      when 7  #Order
        #Change Party Order by Yargovish
        $game_system.se_play($data_system.decision_se)
        if @checker == 0
          @changer = $game_party.actors[@status_window.index]
          @where = @status_window.index
          @checker = 1
        else
          $game_party.actors[@where] = $game_party.actors[@status_window.index]
          $game_party.actors[@status_window.index] = @changer
          @checker = 0
          @status_window.refresh
          $game_player.refresh #
   end
   return
end
end
end
end
end
end

EDIT: This problem has already been solved, it was another script indeed, however I still have problems with the code:

I have isolated the script from the rest and I get a different error:

Syntax error on line 174:

Code:
@command_window_extra.x = @command_window.width - 50


This is gonna drive me crazy >_< hahahh
I'm looking for a scripter to help me with my proyect. Need some minor adjustments-modifications and some larger codes. The larger ones will be remunerated :) Thanks beforehand.
Reply }
#6
Your error isn't on line 174 as it says. (wish rmxp had intellisense sometimes)
It's on line 173. You forgot to close your round brackets when defining the menu.
This line: @command_window_extra = Window_Command.new(160,["Bestiary", "Quest", "Journal", "Achieve.", "Guide", "Load"]
Has to become: @command_window_extra = Window_Command.new(160,["Bestiary", "Quest", "Journal", "Achieve.", "Guide", "Load"])

That should fix things. Now hope for no more errors ^^
Upcoming RPG XP project: Legends of the Flaming Falcons
In a distant future an ancient threat stirs...heroes of old take up their arms once more.
For my writing project that includes my rmxp project I'm also maintaining a private wiki; if you wish to follow me, let me know.
My developer blog can be found here:
http://the-otherworld-tales.blogspot.be/

[Image: Gazeteer%20-%20Pherione.gif]
Gazetteer responsible for Pherione's Developer Interviews. My thread here.


More info or questions? PM me
Reply }


Possibly Related Threads…
Thread Author Replies Views Last Post
   Need help with my menu - Current issue is item grid layout LilyFrog 41 39,135 09-24-2018, 02:03 AM
Last Post: LilyFrog
   Special Items Separate Menu Diorm 41 42,122 02-10-2018, 06:06 PM
Last Post: Diorm
Question  Mog Menu script: help me stop the crazy picture movement during transitions Zachariad 4 9,799 05-31-2017, 05:10 AM
Last Post: Zachariad
   XAIL MENU from RPG VX ACE to RPG XP RASHIDA12 46 51,865 05-02-2016, 08:08 PM
Last Post: RASHIDA12
Tongue  Healing Spell doesn't work right in Menu? Bounty Hunter Lani 8 12,429 01-15-2015, 07:45 PM
Last Post: Bounty Hunter Lani
   My Options Menu needs help firestalker 0 3,275 08-11-2014, 02:31 PM
Last Post: firestalker
   Vx Ace Custom Menu help? Skitzen 1 5,377 10-07-2013, 03:10 PM
Last Post: JayRay
   Dargor's Large Party script and shop menu Simon Greedwell 2 6,547 08-28-2013, 10:12 PM
Last Post: Simon Greedwell
   Help with Shop Menu [RPG Maker XP] JackMonty 6 12,902 05-23-2013, 10:14 AM
Last Post: JackMonty
   Help with Compact Menu Selection Script JackMonty 4 7,211 09-19-2012, 10:56 PM
Last Post: JackMonty



Users browsing this thread: 1 Guest(s)