Tweaks to Reno-s--Joker's Ring Menu

Started by zephrael, May 28, 2013, 05:33:18 am

Previous topic - Next topic

zephrael

May 28, 2013, 05:33:18 am Last Edit: May 28, 2013, 05:38:33 am by zephrael
Here's the code:
Spoiler: ShowHide
#===============================================================================
# ■ Ring Menu Modification by Reno-s--Joker v 1.2
#===============================================================================
# This is a simple aesthetic modification to this awesome Ring Menu I found.
# It makes a small change to the actor selection window, making it available
# at all times instead of popping up on the side of the screen when it's needed.
# It also integrates the location window into the player select window, and I
# have added an animated status window.
# Note that this mod reduces the area of the screen where the ring menu looks
# good/is visible. You can remove the show player location function to counter
# this.
#
# This updated version features a suggestion by Starrodkirby86 for the addon
# windows to be moved to the top or bottom of the screen according to the
# player's position.
# It also includes a request by Kagutsuchi for the encounter chance to appear
# in the menu and some other minor script modifications.
#
# I've also included an experimental version of the ring menu for the title
# screen.
#
# In v 1.2, I have included a feature which moves the ring menu when the player
# is at the edges of the screen, the credits for which go to Landith and Aqua.
#
# If you have any issues with my modification, please report them at
# chaos-project.org
# Original script authors see below.
#===============================================================================
# ■ Ring Menu - Show Player Location - Release #1 (Edited By Dubealex)
#===============================================================================
# For more infos and update, visit:
# rmxp.dubealex.com [OR] X-RPG V2 Forum
#
# Original Ring Menu by: 和希 (From XRXS)
# Original Edit and Fix by: Maki
# Show Player Location Version by: Dubealex
#
# You can customize this script at line #35 - Have fun !!
# If you want to show more stuff, its easy to do, just ask, and I will release
# new version of this edited script !
#
# alex@dubealex.com
#===============================================================================

#===============================================================================
# ▼ CLASS Scene_Menu Begins
#===============================================================================
class Scene_Menu
#--------------------------------------------------------------------------
# œ ƒIƒuƒWƒFƒNƒg‰Šú‰»
#     menu_index : ƒRƒ}ƒ"ƒh,̃J[ƒ\ƒ‹‰ŠúˆÊ'u
#     I modified it to get rid of unnecessary config variables
#--------------------------------------------------------------------------
def initialize(menu_index = 0, actor_index = 0)
  @menu_index = menu_index
  @actor_index = actor_index # New addition for new window
  $ring_menu_text=[]
  $chara_select=[]
  @window_opacity=[]
 
#-------------------------------------------------------------------------------
# ■ Ring Menu Customization Section: (By Dubealex)
#-------------------------------------------------------------------------------
# Those variables defines how the script will act.
# Simply change the value by those you want.
# Remember that changing the font size has its limitation due to text space
# allocation.
#
# This section has been modified to remove some unused variables
   
# ▼ SHOW LOCATION WINDOW SETTINS:
   @window_opacity[0]=200                             # Border Opacity
   @window_opacity[1]=32                             # Background Opacity
   
# ▼  TEXT SETTINGS FOR INSIDE THE RING MENU:
   $ring_menu_text[0]="Tahoma"      # Font Type
   $ring_menu_text[1]="Inventory"         # Items Menu Text
   $ring_menu_text[2]="Skills"          # Skills Menu Text
   $ring_menu_text[3]="Equip"         # Equip Menu Text
   $ring_menu_text[4]="Attributes"          # Stats Menu Text
   $ring_menu_text[5]="Save Game"          # Save Menu Text
   $ring_menu_text[6]="End Game"           # Quit Menu Text
   $ring_menu_text[7]=0                  # Font Color
   $ring_menu_text[8]=22                # Font Size
   
# ▼  CHARACTER SELECTION WINDOW SETTINGS :
   $chara_select[0]="Tahoma"       # Font Type
   $chara_select[1]=0                   # Font Color
   $chara_select[5]=22                  # Font Size
   $chara_select[2]=255               # Window Border Opacity
   $chara_select[3]=130               # Window Background Opacity
   $chara_select[4]="windows kin"  # Window Skin to use
#-------------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
# Main
#--------------------------------------------------------------------------
def main
  @actor = $game_party.actors[@actor_index]
  # Setup for all the new windows
  @playtime_window = Window_PlayTime.new
     @playtime_window.x = 492
     @playtime_window.opacity = @window_opacity[0]
     @playtime_window.back_opacity = @window_opacity[1]
   @steps_window = Window_Steps.new
     @steps_window.x = 0
     @steps_window.opacity = @window_opacity[0]
     @steps_window.back_opacity = @window_opacity[1]
   @gold_window = Window_Gold.new
     @gold_window.x = 492
     @gold_window.opacity = @window_opacity[0]
     @gold_window.back_opacity = @window_opacity[1]
   @status_window = Window_Status.new(@actor)
     @status_window.active = false
     @status_window.x = 80
     @status_window.z = 1999
     @status_window.opacity = @window_opacity[0]
     @status_window.back_opacity = 200
 
  # ƒXƒvƒ‰ƒCƒgƒZƒbƒg,ðì¬
  @spriteset = Spriteset_Map.new
  # ƒRƒ}ƒ"ƒhƒEƒBƒ"ƒhƒE,ðì¬
 
  # This section by Dubealex makes the menu appear centred around the actor.
  # In version 1.2 it incorporates the option for an edge screen hiding fix
  # (where parts of the menu can't be seen near the edges of the screen) by
  # Landith and Aqua.
  # Set it to true or false in the config.
  unless RM_CFG::Edge_Hide_Fix == true
    px = $game_player.screen_x - 15
    py = $game_player.screen_y - 24
  else
    if $game_player.screen_x >= 576
      px = $game_player.screen_x - 15 - 64
    elsif $game_player.screen_x <= 64
      px = $game_player.screen_x - 15 + 64
    else
      px = $game_player.screen_x - 15
    end
   if $game_player.screen_y >= 416
    py = $game_player.screen_y - 24 - 64
   elsif $game_player.screen_y <= 64
    py = $game_player.screen_y - 24 + 64
   else
    py = $game_player.screen_y - 24
   end
 end
  @command_window = Window_RingMenu.new(px,py)
 
  @command_window.index = @menu_index
  # ƒp[ƒeƒBl",ª 0 l,̏ꍇ
   # If number of party members is 0
     if $game_party.actors.size == 0
       # Disable items, skills, equipment, status and save
       @command_window.disable_item(0)
       @command_window.disable_item(1)
       @command_window.disable_item(2)
       @command_window.disable_item(3)
       @command_window.disable_item(4)
     end
  @command_window.z = 100
   # If save is forbidden
     if $game_system.save_disabled
       # Disable save
       @command_window.disable_item(4)
     end
  # ƒXƒe[ƒ^ƒXƒEƒBƒ"ƒhƒE,ðì¬
  @party_window = Window_RingMenuParty.new
  @party_window.x = 148
  @party_window.z = 200
  @party_window.height = 128
  @party_window.opacity=255
  @party_window.back_opacity=255
  @party_window.visible = true
  @party_window.active = false
 
#--------------------------------------------------------------------------
# This new section was suggested by Starrodkirby86 - Thanks! ;)
# It determines where to move the addon menu windows according to the player's
# position - to the top or to the bottom of the screen.
#--------------------------------------------------------------------------  
   if $game_player.screen_y < 352
    @playtime_window.y = 352
    @steps_window.y = 352
    @gold_window.y = 416
    @status_window.y = -320
    @party_window.y = 352
   elsif $game_player.screen_y >= 352
    @playtime_window.y = 0
    @steps_window.y = 0
    @gold_window.y = 64
    @status_window.y = 800
    @party_window.y = 0
   end
 
  # ƒgƒ‰ƒ"ƒWƒVƒ‡ƒ"ŽÀs
  Graphics.transition
  # ƒƒCƒ"ƒ‹[ƒv
  loop do
    # ƒQ[ƒ€‰æ-Ê,ðXV
    Graphics.update
    # "ü--͏î•ñ,ðXV
    Input.update
    # ƒtƒŒ[ƒ€XV
    update
    # ‰æ-Ê,ªØ,è'Ö,í,Á,½,烋[ƒv,ð'†'f
    if $scene != self
      break
    end
  end
  # ƒgƒ‰ƒ"ƒWƒVƒ‡ƒ"€"õ
  Graphics.freeze
  # ƒXƒvƒ‰ƒCƒgƒZƒbƒg,ð‰ð•ú
  @spriteset.dispose
  # ƒEƒBƒ"ƒhƒE,ð‰ð•ú
  @playtime_window.dispose
  @steps_window.dispose
  @gold_window.dispose
  @status_window.dispose
  @command_window.dispose
  @party_window.dispose
end
#--------------------------------------------------------------------------
# œ ƒtƒŒ[ƒ€XV
#--------------------------------------------------------------------------
def update
  # ƒEƒBƒ"ƒhƒE,ðXV
  @playtime_window.update
  @steps_window.update
  @gold_window.update
  @status_window.update
  @command_window.update
  # ƒRƒ}ƒ"ƒhƒEƒBƒ"ƒhƒE,ªƒAƒNƒeƒBƒu,̏ꍇ: update_command ,ðŒÄ,Ô
  if @command_window.active
    update_command
    return
  end
  # ƒXƒe[ƒ^ƒXƒEƒBƒ"ƒhƒE,ªƒAƒNƒeƒBƒu,̏ꍇ: update_party ,ðŒÄ,Ô
  if @party_window.active
    @party_window.update
    update_party
    return
  end
  if @status_window.active
    if $game_player.screen_y < 352
      if @status_window.y < 16
        @status_window.y += 16 # This animates the window
      end
    elsif $game_player.screen_y >= 352
      if @status_window.y > 144
        @status_window.y -= 16 # This animates the window
      end
    end
      update_playerstatus
     return
   end
 end
 def update_playerstatus
   if Input.trigger?(Input::B)
     $game_system.se_play($data_system.cancel_se)
     if $game_player.screen_y < 352
       @status_window.y = -320
     else
       @status_window.y = 800
     end
     @status_window.active = false
     @party_window.active = true
   end
 end
#--------------------------------------------------------------------------
 # * Frame Update (when command window is active)
 #--------------------------------------------------------------------------
 def update_command
  # B ƒ{ƒ^ƒ",ª‰Ÿ,³,ê,½ê‡
  if Input.trigger?(Input::B)
    # ƒLƒƒƒ"ƒZƒ‹ SE ,ð‰‰'t
    $game_system.se_play($data_system.cancel_se)
    # ƒ}ƒbƒv‰æ-Ê,ɐØ,è'Ö,¦
    $scene = Scene_Map.new
    return
  end
  # C ƒ{ƒ^ƒ",ª‰Ÿ,³,ê,½ê‡
  if Input.trigger?(Input::C)
    # ƒp[ƒeƒBl",ª 0 l,ŁAƒZ[ƒuAƒQ[ƒ€I--¹ˆÈŠO,̃Rƒ}ƒ"ƒh,̏ꍇ
    if $game_party.actors.size == 0 and @command_window.index < 4
      # ƒuƒU[ SE ,ð‰‰'t
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    # ƒRƒ}ƒ"ƒhƒEƒBƒ"ƒhƒE,̃J[ƒ\ƒ‹ˆÊ'u,Å•ªŠò
    case @command_window.index
   when 0  # item
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Switch to item screen
       $scene = Scene_Item.new
   when 1  # skill
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Make status window active
       @command_window.active = false
       @party_window.active = true
       @party_window.visible = true
       @party_window.index = 0
   when 2  # equipment
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Make status window active
       @command_window.active = false
       @party_window.active = true
       @party_window.visible = true
       @party_window.index = 0
   when 3 # Status selected
       $game_system.se_play($data_system.decision_se)
       @command_window.active = false
       @party_window.active = true
       @party_window.visible = true
       @party_window.index = 0
   when 4  # save
       # If saving is forbidden
       if $game_system.save_disabled
         # Play buzzer SE
         $game_system.se_play($data_system.buzzer_se)
         return
       end
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Switch to save screen
       $scene = Scene_Save.new
   when 5  # end game
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Switch to end game screen
       $scene = Scene_End.new
   end
   return
 end
  # ƒAƒjƒ[ƒVƒ‡ƒ"'†,È,çƒJ[ƒ\ƒ‹,̏ˆ--,ðs,í,È,¢
  return if @command_window.animation?
  # ªor© ƒ{ƒ^ƒ",ª‰Ÿ,³,ê,½ê‡
  if Input.press?(Input::UP) or  Input.press?(Input::LEFT)
    $game_system.se_play($data_system.cursor_se)
    @command_window.setup_move_move(Window_RingMenu::MODE_MOVEL)
    return
  end
  # «or¨ ƒ{ƒ^ƒ",ª‰Ÿ,³,ê,½ê‡
  if Input.press?(Input::DOWN) or  Input.press?(Input::RIGHT)
    $game_system.se_play($data_system.cursor_se)
    @command_window.setup_move_move(Window_RingMenu::MODE_MOVER)
    return
  end
end
#--------------------------------------------------------------------------
# œ ƒtƒŒ[ƒ€XV (ƒXƒe[ƒ^ƒXƒEƒBƒ"ƒhƒE,ªƒAƒNƒeƒBƒu,̏ꍇ)
#--------------------------------------------------------------------------
def update_party
  # B ƒ{ƒ^ƒ",ª‰Ÿ,³,ê,½ê‡
  if Input.trigger?(Input::B)
    # ƒLƒƒƒ"ƒZƒ‹ SE ,ð‰‰'t
    $game_system.se_play($data_system.cancel_se)
    # ƒRƒ}ƒ"ƒhƒEƒBƒ"ƒhƒE,ðƒAƒNƒeƒBƒu,É,·,é
    @command_window.active = true
    @party_window.active = false
    @party_window.index = -1
    return
  end
  # C ƒ{ƒ^ƒ",ª‰Ÿ,³,ê,½ê‡
 if Input.trigger?(Input::C)
     # Branch by command window cursor position
     case @command_window.index
     when 1  # skill
       # If this actor's action limit is 2 or more
       if $game_party.actors[@party_window.index].restriction >= 2
         # Play buzzer SE
         $game_system.se_play($data_system.buzzer_se)
         return
       end
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Switch to skill screen
       $scene = Scene_Skill.new(@party_window.index)
     when 2  # equipment
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Switch to equipment screen
       $scene = Scene_Equip.new(@party_window.index)
     when 3  # status
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Switch to status screen
       @actor = $game_party.actors[@party_window.index]
       @status_window.update_actor(@actor)
       @status_window.active = true
       @party_window.active = false
     end
     return
   end
end
end
#===============================================================================
# ▲ CLASS Scene_Menu Ends
#===============================================================================

#===============================================================================
# ▼ CLASS Window_RingMenu Begins
# This is mostly the original ring menu script and was not created by me.
# Therefore I have left the (unreadble) comments untouched.
# Some minor modifcations have been made to accomodate extra menu entries.
#===============================================================================
class Window_RingMenu < Window_Base
#--------------------------------------------------------------------------
# › ƒNƒ‰ƒX'è"
#--------------------------------------------------------------------------
STARTUP_FRAMES = 20
MOVING_FRAMES = 5  
RING_R = 64      
ICON_ITEM    = RPG::Cache.icon(RM_CFG::Item_Icon)
ICON_SKILL   = RPG::Cache.icon(RM_CFG::Skill_Icon)
ICON_EQUIP   = RPG::Cache.icon(RM_CFG::Equip_Icon)
ICON_STATUS  = RPG::Cache.icon(RM_CFG::Status_Icon)
ICON_SAVE    = RPG::Cache.icon(RM_CFG::Save_Icon)
ICON_EXIT    = RPG::Cache.icon(RM_CFG::Exit_Icon)
ICON_DISABLE = RPG::Cache.icon(RM_CFG::Disabled_Icon)
SE_STARTUP = RM_CFG::Openmenu_Se
MODE_START = 1
MODE_WAIT  = 2
MODE_MOVEL = 3
MODE_MOVER = 4
#--------------------------------------------------------------------------
# › ƒAƒNƒZƒT
#--------------------------------------------------------------------------
attr_accessor :index
#--------------------------------------------------------------------------
# The stuff in the section below can be accomodated for new menu entries
#--------------------------------------------------------------------------
def initialize( center_x, center_y )
  super(0, 0, 640, 480)
  self.contents = Bitmap.new(width-32, height-32)
  self.contents.font.name = $ring_menu_text[0]
  self.contents.font.color = text_color($ring_menu_text[7])
  self.contents.font.size = $ring_menu_text[8]
  self.opacity = 0
  self.back_opacity = 0
  s1 = $ring_menu_text[1]
  s2 = $ring_menu_text[2]
  s3 = $ring_menu_text[3]
  s4 = $ring_menu_text[4]
  s5 = $ring_menu_text[5]
  s6 = $ring_menu_text[6]
  @commands = [s1, s2, s3, s4, s5, s6]
  # I changed this to prevent glitches when modifying the number of menu items
  @item_max = @commands.size
  @index = 0
  @items = [ICON_ITEM, ICON_SKILL, ICON_EQUIP, ICON_STATUS, ICON_SAVE, ICON_EXIT]
  @disabled = [false, false, false, false, false, false]
  @cx = center_x - 16
  @cy = center_y - 16
  setup_move_start
  refresh
end
#--------------------------------------------------------------------------
# œ ƒtƒŒ[ƒ€XV
#--------------------------------------------------------------------------
def update
  super
  refresh
end
#--------------------------------------------------------------------------
# œ ‰æ-ʍĕ`‰æ
#--------------------------------------------------------------------------
def refresh
  self.contents.clear
  # ƒAƒCƒRƒ",ð•`‰æ
  case @mode
  when MODE_START
    refresh_start
  when MODE_WAIT
    refresh_wait
  when MODE_MOVER
    refresh_move(1)
  when MODE_MOVEL
    refresh_move(0)
  end
  # ƒAƒNƒeƒBƒu,ȃRƒ}ƒ"ƒh-¼•\Ž¦
  rect = Rect.new(@cx - 272, @cy + 24, self.contents.width-32, 32)
  self.contents.draw_text(rect, @commands[@index],1)
end
#--------------------------------------------------------------------------
# › ‰æ-ʍĕ`‰æ(‰Šú‰»Žž)
#--------------------------------------------------------------------------
def refresh_start
  d1 = 2.0 * Math::PI / @item_max
  d2 = 1.0 * Math::PI / STARTUP_FRAMES
  r = RING_R - 1.0 * RING_R * @steps / STARTUP_FRAMES
  for i in 0...@item_max
    j = i - @index
    d = d1 * j + d2 * @steps
    x = @cx + ( r * Math.sin( d ) ).to_i
    y = @cy - ( r * Math.cos( d ) ).to_i
    draw_menu_item(x, y, i)
  end
  @steps -= 1
  if @steps < 1
    @mode = MODE_WAIT
  end
end
#--------------------------------------------------------------------------
# › ‰æ-ʍĕ`‰æ('Ò‹@Žž)
#--------------------------------------------------------------------------
def refresh_wait
  d = 2.0 * Math::PI / @item_max
  for i in 0...@item_max
    j = i - @index
    x = @cx + ( RING_R * Math.sin( d * j ) ).to_i
    y = @cy - ( RING_R * Math.cos( d * j ) ).to_i
    draw_menu_item(x, y, i)
  end
end
#--------------------------------------------------------------------------
# › ‰æ-ʍĕ`‰æ(‰ñ"]Žž)
#  mode : 0="½ŽžŒv‰ñ,è 1=ŽžŒv‰ñ,è
#--------------------------------------------------------------------------
def refresh_move( mode )
  d1 = 2.0 * Math::PI / @item_max
  d2 = d1 / MOVING_FRAMES
  d2 *= -1 if mode != 0
  for i in 0...@item_max
    j = i - @index
    d = d1 * j + d2 * @steps
    x = @cx + ( RING_R * Math.sin( d ) ).to_i
    y = @cy - ( RING_R * Math.cos( d ) ).to_i
    draw_menu_item(x, y, i)
  end
  @steps -= 1
  if @steps < 1
    @mode = MODE_WAIT
  end
end
#--------------------------------------------------------------------------
# œ €-Ú,Ì•`‰æ
#     x :
#     y :
#     i : €-Ú"ԍ†
#--------------------------------------------------------------------------
def draw_menu_item(x, y, i)
  #p "x=" + x.to_s + " y=" + y.to_s + " i=" + @items[i].to_s
  rect = Rect.new(0, 0, @items[i].width, @items[i].height)
  if @index == i
    self.contents.blt( x, y, @items[i], rect )
    if @disabled[@index]
      self.contents.blt( x, y, ICON_DISABLE, rect )
    end
  else
    self.contents.blt( x, y, @items[i], rect, 128 )
    if @disabled[@index]
      self.contents.blt( x, y, ICON_DISABLE, rect, 128 )
    end
  end
end
#--------------------------------------------------------------------------
# œ €-Ú,ð-³Œø,É,·,é
#     index : €-Ú"ԍ†
#--------------------------------------------------------------------------
def disable_item(index)
  @disabled[index] = true
end
#--------------------------------------------------------------------------
# › ‰Šú‰»ƒAƒjƒ[ƒVƒ‡ƒ",̏€"õ
#--------------------------------------------------------------------------
def setup_move_start
  @mode = MODE_START
  @steps = STARTUP_FRAMES
  if  SE_STARTUP != nil and SE_STARTUP != ""
    Audio.se_play("Audio/SE/" + SE_STARTUP, 80, 100)
  end
end
#--------------------------------------------------------------------------
# › ‰ñ"]ƒAƒjƒ[ƒVƒ‡ƒ",̏€"õ
#--------------------------------------------------------------------------
def setup_move_move(mode)
  if mode == MODE_MOVER
    @index -= 1
    @index = @items.size - 1 if @index < 0
  elsif mode == MODE_MOVEL
    @index += 1
    @index = 0 if @index >= @items.size
  else
    return
  end
  @mode = mode
  @steps = MOVING_FRAMES
end
#--------------------------------------------------------------------------
# › ƒAƒjƒ[ƒVƒ‡ƒ"'†,©,Ç,¤,©
#--------------------------------------------------------------------------
def animation?
  return @mode != MODE_WAIT
end
end
#===============================================================================
# ▲ CLASS Window_RingMenu Ends
#===============================================================================

#===============================================================================
# ▼ CLASS Window_RingMenuParty Begins
#===============================================================================

class Window_RingMenuParty < Window_Selectable
#--------------------------------------------------------------------------
# Sets up the new actor selection window
#--------------------------------------------------------------------------
def initialize
  super(0, 0, 86, 128)
  self.contents = Bitmap.new(width - 32, height - 32)
  self.contents.font.size = 20
  refresh
  self.active = false
  self.index = -1
end
#--------------------------------------------------------------------------
# Draws the party's actors and their info into the window
#--------------------------------------------------------------------------
def refresh
  self.contents.clear
  self.windowskin = RPG::Cache.windowskin($chara_select[4])
  self.contents.font.name = $chara_select[0]
  self.contents.font.color = text_color($chara_select[1])
  @item_max = $game_party.actors.size
  for i in 0...$game_party.actors.size
    x = 86 * i
    y = 0
    actor = $game_party.actors[i]
    draw_actor_graphic(actor, x+24, y+48)
    draw_actor_name(actor, x-8, y+32+14)
    draw_actor_level(actor, x, y + 48+14)
  end
end
#--------------------------------------------------------------------------
# Defines the drawing processes
#--------------------------------------------------------------------------
 def draw_actor_name(actor, x, y)
   self.contents.font.color = system_color
   self.contents.draw_text(x, y, 64, 32, actor.name, 1)
 end
 def draw_actor_level(actor, x, y)
   self.contents.font.color = system_color
   self.contents.draw_text(x, y, 32, 32, "Lvl")
   self.contents.font.color = normal_color
   self.contents.draw_text(x + 24, y, 24, 32, actor.level.to_s, 2)
 end
#--------------------------------------------------------------------------
# Updates the selection rectangle
#--------------------------------------------------------------------------
def update_cursor_rect
  if @index < 0 or @index > $game_party.actors.size - 1
    self.cursor_rect.empty
    return
  elsif @index >= 0 and @index <= $game_party.actors.size - 1
    self.cursor_rect.set((@index * 86)-7, 0, 64, 96)
  end
end
#--------------------------------------------------------------------------
# Moves the cursor rectangle and prevents it from going off the screen
#--------------------------------------------------------------------------
def update
  if @index >= 0 and @index <= $game_party.actors.size - 1
    if Input.repeat?(Input::RIGHT)
         $game_system.se_play($data_system.cursor_se)
         @index += 1
    end
    if Input.repeat?(Input::LEFT)
         $game_system.se_play($data_system.cursor_se)
         @index -= 1
    end
    update_cursor_rect
  elsif @index < 0
    @index = $game_party.actors.size - 1
  elsif @index > $game_party.actors.size - 1
    @index = 0
  else
    self.cursor_rect.empty
    return
  end
end
end
#===============================================================================
# ▲ CLASS Window_RingMenuParty Ends
#===============================================================================

#===============================================================================
# ▼ CLASS Game_Map Additional Code Begins
#===============================================================================
class Game_Map
#Dubealex Addition (from XRXS) to show Map Name on screen
# This is also necessary for the new Window_Steps
def name
  $map_infos[@map_id]
end
end
#===============================================================================
# ▲ CLASS Game_Map Additional Code Ends
#===============================================================================

#===============================================================================
# ▼ CLASS Scene_Title Additional Code Begins
#===============================================================================
class Scene_Title
# Dubealex Addition (from XRXS) to show Map Name on screen
# This is also necessary for the new Window_Steps
  $map_infos = load_data("Data/MapInfos.rxdata")
  for key in $map_infos.keys
    $map_infos[key] = $map_infos[key].name
  end
end
#===============================================================================
# ▲ CLASS Scene_Title Additional Code Ends
#===============================================================================

#===============================================================================
# ▲ Ring Menu Script Ends
#===============================================================================


Basically, I want to modify it so that you can only have one character. I want to move the little status window (with one actor in it!) to the middle of the screen, and get rid of the process of 'selecting' an actor after going into status, equip etc. I've tried fiddling with some X and Y coordinates I found, but none of them seemed to do the right thing!

The other thing I want to do concerns the menu's Location and Steps window. I want to add a third counter to it using 'evented' variables (I don't know what to call them - the variables that you fiddle with in events rather than scripts, you know?) - specifically the variables that are the player's weight and carrying capacity, from game_guy's Item Weights mod. Here's the code for that window of the menu:

Spoiler: ShowHide
#==============================================================================
# ■ Window_Steps
# by Reno-s--Joker
#------------------------------------------------------------------------------
# Also includes map name (location)
# Replaces the one which comes with the Ring Menu entirely.
# New addition - encounter steps in v 1.1
#==============================================================================
class Window_Steps < Window_Base
 #--------------------------------------------------------------------------
 # ● Initialize
 #--------------------------------------------------------------------------
 def initialize
   super(0, 0, 148, 128)
   self.contents = Bitmap.new(width - 32, height - 32)
   refresh
 end
 #--------------------------------------------------------------------------
 # ● Refresh
 #--------------------------------------------------------------------------
 def refresh
   self.contents.clear
   self.contents.font.color = system_color
   self.contents.font.color = system_color
   self.contents.draw_text(4, 0, 124, 32, "Steps: " + $game_party.steps.to_s, 0)
   # Another thing can be added at y=32 e.g. No. of Kills
   # (from Blizzard's Tons of Addons)
   self.contents.font.color = normal_color
   self.contents.blt(4, 70, RPG::Cache.icon(RM_CFG::Map_Icon), Rect.new(0, 0, 24, 24), 160)
   map_name = $game_map.name.tr("/*","")
   # Just ignore that thing I said before in the other demo... ^^;
   self.contents.draw_text(8, 64, 124, 32, map_name.to_s)
 end
end
#==============================================================================
# ■ End Window_Steps
#==============================================================================


Again, I tried messing around with a few things, like copy/pasting the weight counter that's built into the Item Weight script, but I'm no scripter and it simply didn't work. Any suggestions?

EDIT: Oh and also, would anybody have any idea how I could add an item to the menu? Specifically one that opens the Quest log ($Scene.Quest).