[XP] Ring Menu with Improved Selection Window

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

Previous topic - Next topic

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*