[XP] Ring Menu with Improved Selection Window

Started by Reno-s--Joker, January 26, 2009, 12:22:11 am

Previous topic - Next topic

Reno-s--Joker

January 26, 2009, 12:22:11 am Last Edit: March 14, 2009, 08:51:06 pm by Reno-s--Joker
Ring Menu with Improved Selection Window
Authors: Reno-s--Joker, Dubealex, Maki, 和希
Version: 1.2
Type: Ring Menu Modifications Including Addon Windows
Key Term: Menu Add-on



Introduction

This is an addon for 和希's/Maki's/Dubealex's Ring Menu, one of my favourite scripts out there. <3
The original Ring Menu was NOT made by me! Again, this is an aesthetic modification for it, because I wasn't happy with the actor selection window popping up uglily on the side.  :<_<: You can't even view the actors' levels without going to status...  :o

Version 1.1 (I am not a scripter so excuse my poor numbering) features a neat way to prevent readability issues thanks to Starrodkirby86. :haha:

Version 1.2 (please excuse me again) features the option to have the ring of icons itself move inward as the player is near the edge of the screen, thanks to Landith and Aqua. :P


Features


  • Includes XRXS/Maki/Dubealex's Ring Menu
  • View party and their basic stats at all times the menu is active
  • Includes a modified location and steps window
  • Menu also has play time and gold window included
  • Animated, transparent status window
  • Now moves the addon windows to top or bottom of screen according to player y position
  • Displays encounter steps under Steps
  • Now has the option to move the ring inward from the edge of the screen if the player goes too close to the edge



Screenshots

Here is the old system which I didn't like: ShowHide


v1.0
Look! It works...: ShowHide

The New Status Window: ShowHide


New in v1.1
The new windows placement in action: ShowHide
[/url]

The status window also moves: ShowHide
[/url]


New in v1.2
None needed. :P



Demo

The new demo includes an experiment with the title menu, replacing the default with a ring version. It's a bit patchy, hence the poor graphics, but I'm still trying to perfect it. :D

V 1.2: The most up to date version.
MediaFire Download
Sorry, too lazy to upload twice...  :uhm:

V 1.1
MediaFire Download
Alternate Rapidshare Download


Script

I merged all the scripts into one long one here.  :wacko:
The similarly huge fatness of v 1.2: ShowHide
#==============================================================================
# ■ Ring Menu Config Module
# by Reno-s--Joker
#------------------------------------------------------------------------------
# I'm still just getting the hang of modules, but this may make your icon
# changing much easier.
#==============================================================================
module RM_CFG
  #--------------------------------------------------------------------------
  # ● Icons for the addon windows
  #--------------------------------------------------------------------------
  Gold_Icon = '034-Item03'
  Map_Icon = '038-Item07'
  #--------------------------------------------------------------------------
  # ● Icons for the main ring
  #--------------------------------------------------------------------------
  Item_Icon = '021-Potion01'
  Skill_Icon = '044-Skill01'
  Equip_Icon = '020-Accessory05'
  Status_Icon = '049-Skill06'
  Save_Icon = '047-Skill04'
  Exit_Icon = '048-Skill05'
  Disabled_Icon = '046-Skill03'
  Openmenu_Se = ''
  #--------------------------------------------------------------------------
  # ● Fix for near screen edge hiding, thanks to Landith and Aqua
  #--------------------------------------------------------------------------
  Edge_Hide_Fix = true
end 
#==============================================================================
# ■ End Ring Menu Config Module
#==============================================================================

#==============================================================================
# ■ Window_Gold
# by Reno-s--Joker
#------------------------------------------------------------------------------
#  Shows the amount of gold in the menu.
#  Minor aesthetic modifications made for new menu.
#==============================================================================
class Window_Gold < Window_Base
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 148, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    cx = contents.text_size($data_system.words.gold).width
    self.contents.font.color = normal_color
    self.contents.blt(4, 4, RPG::Cache.icon(RM_CFG::Gold_Icon), Rect.new(0, 0, 24, 24), 255)
    self.contents.draw_text(4, 0, 100-cx-2, 32, $game_party.gold.to_s, 2)
    self.contents.font.color = system_color
    self.contents.draw_text(104-cx, 0, cx, 32, $data_system.words.gold, 2)
  end
end
#==============================================================================
# ■ End Window_Gold
#==============================================================================

#==============================================================================
# ■ Window_PlayTime
# by Reno-s--Joker
#------------------------------------------------------------------------------
#  Shows the amount of time spent playing.
#  Minor aesthetic modifications made for new menu.
#==============================================================================
class Window_PlayTime < Window_Base
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 148, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = system_color
    @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.draw_text(4, 0, 100, 32, text, 2)
  end
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------
  def update
    super
    if Graphics.frame_count / Graphics.frame_rate != @total_sec
      refresh
    end
  end
end
#==============================================================================
# ■ End Window_PlayTime
#==============================================================================


#==============================================================================
# ■ 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.draw_text(4, 0, 124, 32, "Steps: " + $game_party.steps.to_s, 0)
    self.contents.draw_text(4, 32, 124, 32, "Enc. Stps: " + $game_map.encounter_step.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
#==============================================================================

#==============================================================================
# ■ Window_Status
# by Reno-s--Joker
#==============================================================================
#  This window displays full status specs on the status screen.
#==============================================================================
class Window_Status < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     actor : actor
  #--------------------------------------------------------------------------
  def initialize(actor)
    super(0, 0, 480, 320)
    self.contents = Bitmap.new(width - 32, height - 32)
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    # Draws the actor's battler behind the info
    draw_actor_picture(@actor, 360, 300)
    # Actor's name
    self.contents.font.size = 32
    draw_actor_name(@actor, 0, 0)
    self.contents.font.size = 20
    # Main stats section
    draw_actor_class(@actor, 0, 24)
    draw_actor_level(@actor, 0, 56)
    draw_actor_state(@actor, 68, 56)
    draw_actor_hp(@actor, 0, 82, 172)
    draw_actor_sp(@actor, 0, 106, 172)
    # Actor parameter section
    draw_actor_parameter(@actor, 0, 132, 0)
    draw_actor_parameter(@actor, 0, 150, 1)
    draw_actor_parameter(@actor, 0, 168, 2)
    draw_actor_parameter(@actor, 0, 186, 3)
    draw_actor_parameter(@actor, 0, 204, 4)
    draw_actor_parameter(@actor, 0, 222, 5)
    draw_actor_parameter(@actor, 0, 240, 6)
    # EXP section
    self.contents.font.color = system_color
    self.contents.draw_text(240, 56, 150, 32, "Total Exp: ")
    tx = contents.text_size("Total Exp: ").width
    draw_actor_exp(@actor, 240, 80)
    self.contents.font.color = normal_color
    self.contents.draw_text(tx + 244, 56, 76, 32, @actor.exp_s, 2)
    # Equipment Section
    self.contents.font.color = system_color
    self.contents.draw_text(240, 120, 88, 32, "Equipment: ")
    draw_item_name($data_weapons[@actor.weapon_id], 240, 148)
    draw_item_name($data_armors[@actor.armor1_id], 240, 172)
    draw_item_name($data_armors[@actor.armor2_id], 240, 196)
    draw_item_name($data_armors[@actor.armor3_id], 240, 220)
    draw_item_name($data_armors[@actor.armor4_id], 240, 246)
  end
  #--------------------------------------------------------------------------
  # ● Defines the drawing processes
  #--------------------------------------------------------------------------
  def draw_actor_picture(actor, x, y)
    bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue)
    x2 = bitmap.width
    y2 = bitmap.height
    x3 = x2 / 2
    src_rect = Rect.new(0, 0, x2, y2)
    self.contents.blt(x - x3, y - y2, bitmap, src_rect)
  end
  def draw_actor_name(actor, x, y)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 448, 32, actor.name, 1)
  end
  def draw_actor_class(actor, x, y)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 448, 32, actor.class_name, 1)
  end
  #--------------------------------------------------------------------------
  # ● Other stuff which needs to be there although I dunno why... XD
  #--------------------------------------------------------------------------
  def update_actor(actor)
    @actor = actor
    refresh
  end
  def dummy
    self.contents.font.color = system_color
    self.contents.draw_text(320, 112, 96, 32, $data_system.words.weapon)
    self.contents.draw_text(320, 176, 96, 32, $data_system.words.armor1)
    self.contents.draw_text(320, 240, 96, 32, $data_system.words.armor2)
    self.contents.draw_text(320, 304, 96, 32, $data_system.words.armor3)
    self.contents.draw_text(320, 368, 96, 32, $data_system.words.armor4)
    draw_item_name($data_weapons[@actor.weapon_id], 320 + 24, 144)
    draw_item_name($data_armors[@actor.armor1_id], 320 + 24, 208)
    draw_item_name($data_armors[@actor.armor2_id], 320 + 24, 272)
    draw_item_name($data_armors[@actor.armor3_id], 320 + 24, 336)
    draw_item_name($data_armors[@actor.armor4_id], 320 + 24, 400)
  end
end
#==============================================================================
# ■ End Window_Status
#==============================================================================

#===============================================================================
# ■ 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]="Items"         # Items Menu Text
    $ring_menu_text[2]="Skills"          # Skills Menu Text
    $ring_menu_text[3]="Equip"         # Equip Menu Text
    $ring_menu_text[4]="Stats"          # Stats Menu Text
    $ring_menu_text[5]="Save"          # Save Menu Text
    $ring_menu_text[6]="Quit"           # 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]="001-Blue01"  # 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, 344, 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
#===============================================================================

The Huge Fatness of v1.1: ShowHide
#==============================================================================
# ■ Ring Menu Config Module
# by Reno-s--Joker
#------------------------------------------------------------------------------
# I'm still just getting the hang of modules, but this may make your icon
# changing much easier.
#==============================================================================
module RM_CFG
  #--------------------------------------------------------------------------
  # ● Icons for the addon windows
  #--------------------------------------------------------------------------
  Gold_Icon = '034-Item03'
  Map_Icon = '038-Item07'
  #--------------------------------------------------------------------------
  # ● Icons for the main ring
  #--------------------------------------------------------------------------
  Item_Icon = '021-Potion01'
  Skill_Icon = '044-Skill01'
  Equip_Icon = '020-Accessory05'
  Status_Icon = '049-Skill06'
  Save_Icon = '047-Skill04'
  Exit_Icon = '048-Skill05'
  Disabled_Icon = '046-Skill03'
  Openmenu_Se = ''
end 
#==============================================================================
# ■ End Ring Menu Config Module
#==============================================================================

#==============================================================================
# ■ Window_Gold
# by Reno-s--Joker
#------------------------------------------------------------------------------
#  Shows the amount of gold in the menu.
#  Minor aesthetic modifications made for new menu.
#==============================================================================
class Window_Gold < Window_Base
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 148, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    cx = contents.text_size($data_system.words.gold).width
    self.contents.font.color = normal_color
    self.contents.blt(4, 4, RPG::Cache.icon(RM_CFG::Gold_Icon), Rect.new(0, 0, 24, 24), 255)
    self.contents.draw_text(4, 0, 100-cx-2, 32, $game_party.gold.to_s, 2)
    self.contents.font.color = system_color
    self.contents.draw_text(104-cx, 0, cx, 32, $data_system.words.gold, 2)
  end
end
#==============================================================================
# ■ End Window_Gold
#==============================================================================

#==============================================================================
# ■ Window_PlayTime
# by Reno-s--Joker
#------------------------------------------------------------------------------
#  Shows the amount of time spent playing.
#  Minor aesthetic modifications made for new menu.
#==============================================================================
class Window_PlayTime < Window_Base
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 148, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = system_color
    @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.draw_text(4, 0, 100, 32, text, 2)
  end
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------
  def update
    super
    if Graphics.frame_count / Graphics.frame_rate != @total_sec
      refresh
    end
  end
end
#==============================================================================
# ■ End Window_PlayTime
#==============================================================================

#==============================================================================
# ■ 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.draw_text(4, 0, 124, 32, "Steps: " + $game_party.steps.to_s, 0)
    self.contents.draw_text(4, 32, 124, 32, "Enc. Stps: " + $game_map.encounter_step.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
#==============================================================================

#==============================================================================
# ■ Window_Status
# by Reno-s--Joker
#==============================================================================
#  This window displays full status specs on the status screen.
#==============================================================================
class Window_Status < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     actor : actor
  #--------------------------------------------------------------------------
  def initialize(actor)
    super(0, 0, 480, 320)
    self.contents = Bitmap.new(width - 32, height - 32)
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    # Draws the actor's battler behind the info
    draw_actor_picture(@actor, 360, 300)
    # Actor's name
    self.contents.font.size = 32
    draw_actor_name(@actor, 0, 0)
    self.contents.font.size = 20
    # Main stats section
    draw_actor_class(@actor, 0, 24)
    draw_actor_level(@actor, 0, 56)
    draw_actor_state(@actor, 68, 56)
    draw_actor_hp(@actor, 0, 82, 172)
    draw_actor_sp(@actor, 0, 106, 172)
    # Actor parameter section
    draw_actor_parameter(@actor, 0, 132, 0)
    draw_actor_parameter(@actor, 0, 150, 1)
    draw_actor_parameter(@actor, 0, 168, 2)
    draw_actor_parameter(@actor, 0, 186, 3)
    draw_actor_parameter(@actor, 0, 204, 4)
    draw_actor_parameter(@actor, 0, 222, 5)
    draw_actor_parameter(@actor, 0, 240, 6)
    # EXP section
    self.contents.font.color = system_color
    self.contents.draw_text(240, 56, 150, 32, "Total Exp: ")
    tx = contents.text_size("Total Exp: ").width
    draw_actor_exp(@actor, 240, 80)
    self.contents.font.color = normal_color
    self.contents.draw_text(tx + 244, 56, 76, 32, @actor.exp_s, 2)
    # Equipment Section
    self.contents.font.color = system_color
    self.contents.draw_text(240, 120, 88, 32, "Equipment: ")
    draw_item_name($data_weapons[@actor.weapon_id], 240, 148)
    draw_item_name($data_armors[@actor.armor1_id], 240, 172)
    draw_item_name($data_armors[@actor.armor2_id], 240, 196)
    draw_item_name($data_armors[@actor.armor3_id], 240, 220)
    draw_item_name($data_armors[@actor.armor4_id], 240, 246)
  end
  #--------------------------------------------------------------------------
  # ● Defines the drawing processes
  #--------------------------------------------------------------------------
  def draw_actor_picture(actor, x, y)
    bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue)
    x2 = bitmap.width
    y2 = bitmap.height
    x3 = x2 / 2
    src_rect = Rect.new(0, 0, x2, y2)
    self.contents.blt(x - x3, y - y2, bitmap, src_rect)
  end
  def draw_actor_name(actor, x, y)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 448, 32, actor.name, 1)
  end
  def draw_actor_class(actor, x, y)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 448, 32, actor.class_name, 1)
  end
  #--------------------------------------------------------------------------
  # ● Other stuff which needs to be there although I dunno why... XD
  #--------------------------------------------------------------------------
  def update_actor(actor)
    @actor = actor
    refresh
  end
  def dummy
    self.contents.font.color = system_color
    self.contents.draw_text(320, 112, 96, 32, $data_system.words.weapon)
    self.contents.draw_text(320, 176, 96, 32, $data_system.words.armor1)
    self.contents.draw_text(320, 240, 96, 32, $data_system.words.armor2)
    self.contents.draw_text(320, 304, 96, 32, $data_system.words.armor3)
    self.contents.draw_text(320, 368, 96, 32, $data_system.words.armor4)
    draw_item_name($data_weapons[@actor.weapon_id], 320 + 24, 144)
    draw_item_name($data_armors[@actor.armor1_id], 320 + 24, 208)
    draw_item_name($data_armors[@actor.armor2_id], 320 + 24, 272)
    draw_item_name($data_armors[@actor.armor3_id], 320 + 24, 336)
    draw_item_name($data_armors[@actor.armor4_id], 320 + 24, 400)
  end
end
#==============================================================================
# ■ End Window_Status
#==============================================================================

#===============================================================================
# ■ Ring Menu Modification by Reno-s--Joker v 1.1
#===============================================================================
# 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.
#
# 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]="Items"         # Items Menu Text
    $ring_menu_text[2]="Skills"          # Skills Menu Text
    $ring_menu_text[3]="Equip"         # Equip Menu Text
    $ring_menu_text[4]="Stats"          # Stats Menu Text
    $ring_menu_text[5]="Save"          # Save Menu Text
    $ring_menu_text[6]="Quit"           # 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]="001-Blue01"  # 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.
   px = $game_player.screen_x - 15
   py = $game_player.screen_y - 24
   @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, 344, 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
#===============================================================================



Instructions

Download the demo
OR
Copy and paste the script in a new slot above main and below the old menu, gold, playtime, status, steps, etc. windows.



Compatibility

If placed after any CMS, it will override it. It will also probably override any custom gold, playtime, status, etc. windows. Otherwise it should be okay.  :)


Credits and Thanks


  • 和希 (From XRXS), Maki and Dubealex for the Ring Menu and its features
  • Diego's CMS for teching me how to animate the status window
  • game_guy's Modify Max Amount Script for teaching me how to use modules for config  :haha:
  • Starrodkirby86 for his suggestion to have the addon windows move according to player's y position
  • Kagutsuchi for his suggestion to add the encounter steps
  • Landith and Aqua for making the edge screen ring movement possible
  • Landith (again) for starting on a really neat 1 scene version of the ring menu
  • Blizzard (I think) for databasing this script



Author's Notes

I suggest use with a bold font for better readability, and hp/sp bars for the status window.

If you like it enough, I also recommend replacing the inbuilt windows entirely. For example, Window_Gold, Window_Steps, Window_MenuStatus and Window_Status are replaceable by this script. Saves some clutter.  :P

Another neat addon is to use the Death Toll script from Blizzard's addons, and insert the number of kills between Steps and Map Name in Window_Steps in place of encounter steps if you wish.

This is the first version I made for public use, so please let me know if there are any bugs or traces of code from my game...  :O.o:
I might think of making the window go slightly transparent when you're under it like in Blizzard's HUD.  :D

Calintz


Reno-s--Joker

^^ Haha, thanks! I appreciate it - the ring menu is one of my favourite scripts for quite a few reasons. :haha:

G_G

Awesome Reno! I always hated that ugly side thing. I was just too lazy to fix it myself.

Thanks!!!

Calintz


G_G

Tho reno you should add the opacity to it.

Heres how
@window_name.back_opacity = 0-255


Make it match the rest of the menu

Reno-s--Joker

Thanks! I was thinking of doing that, but then it gets really hard to read the character stats. What I really want to do is make it temporarily transparent when the character is under it.
I'm tired today, I might do it next time. :) Thanks anyways. :P

G_G

Well your welcome I could do if for you. Or Why not change the back_opacity for all windows 255

Kagutsuchi

Very good, but could you make the dodge chance appear as well?

Calintz


Landith

Um... Is there a download link? I looked for like 5 minutes and couldn't find one...  :huh:

G_G

January 26, 2009, 05:49:41 pm #11 Last Edit: January 26, 2009, 05:50:58 pm by game_guy
Click on the last spoiler in screenies

dont know how he did that but its in there

Landith

Thanks game_guy, I can't believe I missed it  :shy:

G_G

Its okay. It might not have been you. Ever heard of the little blue people?
No not smurfs,

They take stuff and hide it in your house so you cant find it then they put it back and you feel so stupid.

They also like to play tricks on your mind and they alter the internet.

Its true!

Landith

January 26, 2009, 06:33:44 pm #14 Last Edit: January 29, 2009, 05:43:53 pm by Landith
Lol yea.

This script is awesome! Now I just need to combine it with Blizz-ABS Pre-menu...  :<_<:

*Adds Reno-s--Joker to Credits list and powers her up at the same time*

Thanks!

Starrodkirby86

Quote from: Landith on January 26, 2009, 06:33:44 pm
*Adds Reno-s--Joker to Credits list and powers him up at the same time*

Thanks!

Quote from: Reno's Profile
Gender: Female
Posts: 39


This is quite an epic change of the...Ring Menu. Perhaps I have a suggestion, if the player is at the bottom and is accessing the Ring Menu, then maybe you can get that window to switch to the top area up there? Kind of like what happens with Message Boxes...Though if it's out of your power, then that's okay, since this is already epic as is...

What's osu!? It's a rhythm game. Thought I should have a signature with a working rank. ;P It's now clickable!
Still Aqua's biggest fan (Or am I?).




Landith

Spoiler: ShowHide
if $game_player.screen_y += 400
     py = $game_player.screen_y - 100
elsif $game_player.screen_y -= 100
     py = $game_player.screen_y + 100
else
     py = $game_player.screen_y - 24
end


I don't get what I'm doing wrong  :<_<:

I'm trying to make it where the ring menu is visible when your at the bottom or at the top of the screen and its not working...  :???:

Reno-s--Joker

@Kagutsuchi: Great idea! I might have a look at doing that sometime after next week... *is back to school* - hopefully you mean encounter rate, right? :P

@Calintz16438: Thanks for your support, as always! :D

@StarrodKirby86: Great suggestion - it's probably the most logical way for me to get around that yukkiness... XD It sounds simple enough for me, although I may be mistaken... will try it and credit you if it works. :P

@Landith: Oops, I forgot to close the spoiler tag... ^^; Thanks game_guy. I'll change it now. And with that bit of code, it probably depends where you put it. If you like the sound of StarrodKirby86's suggestion, I am willing to change the code so the player screen itself moves rather than the ring. :D

Landith

Yeah, SRK's suggestion is a lot better than mine.
It solves the problem of having to dim out the actors and the ring menu not showing up.

Reno-s--Joker

Well, I've updated the script! :D Feel free to check it out and let me know if it's what you need. ^^

Landith

It's perfect. But the ring menu is still cutoff where you can't see the text when you go to the bottom.

Spoiler: ShowHide


Other than that, it's perfect :)

Aqua

Your conditions are wrong D:

if $game_player.screen_y >= 400
     py = $game_player.screen_y - 100
elsif $game_player.screen_y <= 100
     py = $game_player.screen_y + 100
else
     py = $game_player.screen_y - 24
end

Landith

Thanks Aqua!
*Powers Up*

I can't believe it was something so simple...  :O.o:

Reno-s--Joker

Yeah, that issue is present even with Dubealex's version... D:

...
I'm just going to be a cheap ass and put a no-walk-area around the border of each map in my game.
:haha:

EDIT: Oh btw, nice-looking game!  :P

Landith

Well, I have a solution to it.
Solution: ShowHide

Change the line:
px = $game_player.screen_x - 15

to
   if $game_player.screen_x >= 360
     px = $game_player.screen_x - 100
   elsif $game_player.screen_x <= 100
     px = $game_player.screen_x + 100
   else
     px = $game_player.screen_x - 15
   end


and

     py = $game_player.screen_y - 24

to
   if $game_player.screen_y >= 400
     py = $game_player.screen_y - 100
   elsif $game_player.screen_y <= 100
     py = $game_player.screen_y + 100
   else
     py = $game_player.screen_y - 24
   end


and it will fix it.

The x and y values aren't really that good, so if you don't like the way it looks in game you could always play around with the values  :^_^':

Thanks about the game, It's just a side project I'm working on when I'm not working on my other game. 

Reno-s--Joker

Yeah, I personally have reservations about moving the ring around ... but then again I'm so fussy. :P If you like, I could add your code to the main script and credit you - I'm sure lots of people would find it useful! :D

Hehe, side projects ftw! :haha:

Landith

You could do that, but I ask for no credit.
If it wasn't for Aqua my code wouldn't even work...  :O.o:


Calintz


C.C. rOyAl

hey would this be compatible with more than 4 in the party?
Spoiler: ShowHide

RoseSkye

I like the bottom ring menu better for some reason.

secondVISION

Hey,

I was trying to add a new icon to my ring menu but I can't seem to figure out how to expand the ring menu :/


Spoiler: ShowHide
#==============================================================================
# ■ Ring Menu Config Module
# by Reno-s--Joker
#------------------------------------------------------------------------------
# I'm still just getting the hang of modules, but this may make your icon
# changing much easier.
#==============================================================================
module RM_CFG
  #--------------------------------------------------------------------------
  # ● Icons for the addon windows
  #--------------------------------------------------------------------------
  Gold_Icon = '034-Item03'
  Map_Icon = '038-Item07'
  #--------------------------------------------------------------------------
  # ● Icons for the main ring
  #--------------------------------------------------------------------------
  Item_Icon = '021-Potion01'
  Skill_Icon = '044-Skill01'
  Equip_Icon = '020-Accessory05'
  Status_Icon = '049-Skill06'
  Save_Icon = '047-Skill04'
  Exit_Icon = '048-Skill05'
  Quests_Icon = '038-Item07'
  Disabled_Icon = '046-Skill03'
  Openmenu_Se = ''
  #--------------------------------------------------------------------------
  # ● Fix for near screen edge hiding, thanks to Landith and Aqua
  #--------------------------------------------------------------------------
  Edge_Hide_Fix = true
end 
#==============================================================================
# ■ End Ring Menu Config Module
#==============================================================================

#==============================================================================
# ■ Window_Gold
# by Reno-s--Joker
#------------------------------------------------------------------------------
#  Shows the amount of gold in the menu.
#  Minor aesthetic modifications made for new menu.
#==============================================================================
class Window_Gold < Window_Base
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 148, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    cx = contents.text_size($data_system.words.gold).width
    self.contents.font.color = normal_color
    self.contents.blt(4, 4, RPG::Cache.icon(RM_CFG::Gold_Icon), Rect.new(0, 0, 24, 24), 255)
    self.contents.draw_text(4, 0, 100-cx-2, 32, $game_party.gold.to_s, 2)
    self.contents.font.color = system_color
    self.contents.draw_text(104-cx, 0, cx, 32, $data_system.words.gold, 2)
  end
end
#==============================================================================
# ■ End Window_Gold
#==============================================================================

#==============================================================================
# ■ Window_PlayTime
# by Reno-s--Joker
#------------------------------------------------------------------------------
#  Shows the amount of time spent playing.
#  Minor aesthetic modifications made for new menu.
#==============================================================================
class Window_PlayTime < Window_Base
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 148, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = system_color
    @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.draw_text(4, 0, 100, 32, text, 2)
  end
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------
  def update
    super
    if Graphics.frame_count / Graphics.frame_rate != @total_sec
      refresh
    end
  end
end
#==============================================================================
# ■ End Window_PlayTime
#==============================================================================


#==============================================================================
# ■ 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.draw_text(4, 0, 124, 32, "Steps: " + $game_party.steps.to_s, 0)
    self.contents.draw_text(4, 32, 124, 32, "Enc. Stps: " + $game_map.encounter_step.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
#==============================================================================

#==============================================================================
# ■ Window_Status
# by Reno-s--Joker
#==============================================================================
#  This window displays full status specs on the status screen.
#==============================================================================
class Window_Status < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     actor : actor
  #--------------------------------------------------------------------------
  def initialize(actor)
    super(0, 0, 480, 320)
    self.contents = Bitmap.new(width - 32, height - 32)
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    # Draws the actor's battler behind the info
    draw_actor_picture(@actor, 360, 300)
    # Actor's name
    self.contents.font.size = 32
    draw_actor_name(@actor, 0, 0)
    self.contents.font.size = 20
    # Main stats section
    draw_actor_class(@actor, 0, 24)
    draw_actor_level(@actor, 0, 56)
    draw_actor_state(@actor, 68, 56)
    draw_actor_hp(@actor, 0, 82, 172)
    draw_actor_sp(@actor, 0, 106, 172)
    # Actor parameter section
    draw_actor_parameter(@actor, 0, 132, 0)
    draw_actor_parameter(@actor, 0, 150, 1)
    draw_actor_parameter(@actor, 0, 168, 2)
    draw_actor_parameter(@actor, 0, 186, 3)
    draw_actor_parameter(@actor, 0, 204, 4)
    draw_actor_parameter(@actor, 0, 222, 5)
    draw_actor_parameter(@actor, 0, 240, 6)
    # EXP section
    self.contents.font.color = system_color
    self.contents.draw_text(240, 56, 150, 32, "Total Exp: ")
    tx = contents.text_size("Total Exp: ").width
    draw_actor_exp(@actor, 240, 80)
    self.contents.font.color = normal_color
    self.contents.draw_text(tx + 244, 56, 76, 32, @actor.exp_s, 2)
    # Equipment Section
    self.contents.font.color = system_color
    self.contents.draw_text(240, 120, 88, 32, "Equipment: ")
    draw_item_name($data_weapons[@actor.weapon_id], 240, 148)
    draw_item_name($data_armors[@actor.armor1_id], 240, 172)
    draw_item_name($data_armors[@actor.armor2_id], 240, 196)
    draw_item_name($data_armors[@actor.armor3_id], 240, 220)
    draw_item_name($data_armors[@actor.armor4_id], 240, 246)
  end
  #--------------------------------------------------------------------------
  # ● Defines the drawing processes
  #--------------------------------------------------------------------------
  def draw_actor_picture(actor, x, y)
    bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue)
    x2 = bitmap.width
    y2 = bitmap.height
    x3 = x2 / 2
    src_rect = Rect.new(0, 0, x2, y2)
    self.contents.blt(x - x3, y - y2, bitmap, src_rect)
  end
  def draw_actor_name(actor, x, y)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 448, 32, actor.name, 1)
  end
  def draw_actor_class(actor, x, y)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 448, 32, actor.class_name, 1)
  end
  #--------------------------------------------------------------------------
  # ● Other stuff which needs to be there although I dunno why... XD
  #--------------------------------------------------------------------------
  def update_actor(actor)
    @actor = actor
    refresh
  end
  def dummy
    self.contents.font.color = system_color
    self.contents.draw_text(320, 112, 96, 32, $data_system.words.weapon)
    self.contents.draw_text(320, 176, 96, 32, $data_system.words.armor1)
    self.contents.draw_text(320, 240, 96, 32, $data_system.words.armor2)
    self.contents.draw_text(320, 304, 96, 32, $data_system.words.armor3)
    self.contents.draw_text(320, 368, 96, 32, $data_system.words.armor4)
    draw_item_name($data_weapons[@actor.weapon_id], 320 + 24, 144)
    draw_item_name($data_armors[@actor.armor1_id], 320 + 24, 208)
    draw_item_name($data_armors[@actor.armor2_id], 320 + 24, 272)
    draw_item_name($data_armors[@actor.armor3_id], 320 + 24, 336)
    draw_item_name($data_armors[@actor.armor4_id], 320 + 24, 400)
  end
end
#==============================================================================
# ■ End Window_Status
#==============================================================================

#===============================================================================

# ■ 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]="Items"         # Items Menu Text
    $ring_menu_text[2]="Skills"          # Skills Menu Text
    $ring_menu_text[3]="Equip"         # Equip Menu Text
    $ring_menu_text[4]="Stats"          # Stats Menu Text
    $ring_menu_text[5]="Save"          # Save Menu Text
    $ring_menu_text[6]="Quit"           # Quit Menu Text
    $ring_menu_text[7]="Quests"           # Quests Menu Text
    $ring_menu_text[8]=0                  # Font Color
    $ring_menu_text[9]=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]="001-Blue01"  # 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
    when 7  # quests game
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to end game screen
        $scene = Scene_Quest.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_QUESTS  = RPG::Cache.icon(RM_CFG::Quests_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[8])
   self.contents.font.size = $ring_menu_text[9]
   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]
   s7 = $ring_menu_text[7]
   @commands = [s1, s2, s3, s4, s5, s6, s7]
   # 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, 344, 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
#===============================================================================



I wanted to add the Quest icon ... :'( meh

secondVISION

Bump, any one knows how to fix my script to get a new icon in there?
What should I remove/edit to get my quest icon in there?
Thanks!

Jackolas

September 30, 2009, 12:34:12 pm #33 Last Edit: September 30, 2009, 12:36:31 pm by Jackolas
you don't need to bump it after just 1-2 days

also adding a extra icon and menu requires edits of the script
if you don't know anything about scripting i would suggest against it.

otherwise you just need to wait for someone to help you (and only bump your request after like 1-2 weeks)

Taiine

Wow I was using the OLD system for some time in my one game. Now I found an update! WOOHOO!

REQUEST PLEASE!
Can you move the player select on the bottom over to the left and combine the location/time/gold windows into one on the right?

Also one thing a few of my beta testers complained about with the ring menu it's self (and something I fell for at first) they thought the bottom most icon was the icon being selected for the menu cause of where the text for it is placed. We didn't even notice that the top most was the one fully shown until much later. I think having them faded out more or maybe moving the text to above the player may help draw peoples eyes to the right icon. Just a suggestion!

Aqua

Reno isn't active right now...
But... maybe someone would do this for you.

Sorry... I can't =/
Too much homework >.<

Calintz

This looks great.
You're becoming a fine scripter / script modifier. =D.

*LVL UP*