RMRK is retiring.
Server is paid up for the rest of 2026, but the forum may go after that. See here for more information. Please archive or save anything you would like to keep before 2027.
Main Menu
  • Welcome to The RPG Maker Resource Kit.

Ring Menu: Add and Fix

Started by keyboardlover96, July 14, 2011, 11:53:07 PM

0 Members and 1 Guest are viewing this topic.

keyboardlover96

I found this script that makes the menu a ring of icons. I have two things that I would like to be fixed and added.

#===================================================
# ¦ Ring Menu - Show Player Location - Release #1 (Enhanced By Dubealex)
#===================================================
# For more infos and update, visit:
# asylum.dubealex.com
#
# 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, you can try to ask in the forum.
#
# alex@dubealex.com
#===================================================


#===================================================
# ? CLASS Scene_Menu Begins
#===================================================

class Scene_Menu
#--------------------------------------------------------------------------
# ?? ?I?u?W?F?N?g??????
#     menu_index : ?R?}???h??J?[?\????????u
#--------------------------------------------------------------------------
def initialize(menu_index = 0)
  @menu_index = menu_index
  $location_text=[]
  $window_size=[]
  $ring_menu_text=[]
  $chara_select=[]
  @window_opacity=[]
  @chara_select=[]
  @window_position=[]

   #--------------------------------------------------------------------------------------------------
   # ¦ 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.
   #
   # ? TEXT SETTINGS FOR SHOW PLAYER LOCATION WINDOW:
   $location_text[0]="Tahoma"      # Font Type
   $location_text[1]=22                # Font Size
   $location_text[2]=6                  # Location Title Color
   $location_text[4]=0                  # Map Name Color
   $location_text[3]="Location:"     # Customize the "Location" Title Text

   # ? SHOW LOCATION WINDOW SETTINS:
   @show_location_window=true                       #Set to false to not use it !
   @window_opacity[0]=255                             # Border Opacity
   @window_opacity[1]=130                             # Background Opacity
   $window_location_skin="55"            # Window Skin
   @window_position[0]=20                             # X Axis Position
   @window_position[1]=20                             # Y Axis Position
   $window_size[0]=160                                  # Lengh
   $window_size[1]=96                                    # Heigh

   # ?  TEXT SETTINGS FOR INSIDE THE RING MENU:
   $ring_menu_text[0]="Tahoma"      # Font Type
   $ring_menu_text[7]=0                  # Font Color
   $ring_menu_text[8]=22                # Font Size
   $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

   # ?  CHARACTER SELECTION WINDOW SETTINGS :
   @chara_select[0]=400               # X Axis Position
   @chara_select[1]=0                  # Y Axis Position
   $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]="55"  # Window Skin to use
  #--------------------------------------------------------------------------------------------------

end
#--------------------------------------------------------------------------
# ?? ???C?????
#--------------------------------------------------------------------------
def main

  # Show Player Location Feature:
  if @show_location_window==true   
  @window_location = Window_Location.new
     @window_location.x = @window_position[0]
     @window_location.y = @window_position[1]
     @window_location.opacity = @window_opacity[0]
     @window_location.back_opacity = @window_opacity[1]
     end
  #End of Show Player Location

  # ?X?v???C?g?Z?b?g???? ?
  @spriteset = Spriteset_Map.new
  # ?R?}???h?E?B???h?E???? ?
  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 $game_party.actors.size == 0
    # ?A?C?e???A?X?L???A?????A?X?e?[?^?X????????
    @command_window.disable_item(0)
    @command_window.disable_item(1)
    @command_window.disable_item(2)
    @command_window.disable_item(3)
  end
  @command_window.z = 100
  # ?Z?[?u??~??????
  if $game_system.save_disabled
    # ?Z?[?u???????????
    @command_window.disable_item(4)
  end
  # ?X?e?[?^?X?E?B???h?E???? ?
  @status_window = Window_RingMenuStatus.new
  @status_window.x = @chara_select[0]
  @status_window.y = @chara_select[1]
  @status_window.z = 200
  @status_window.opacity=$chara_select[2]
  @status_window.back_opacity=$chara_select[3]
  @status_window.visible = false
  # ?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??????
  if @show_location_window==true
  @window_location.dispose
  end
  @command_window.dispose
  @status_window.dispose
end
#--------------------------------------------------------------------------
# ?? ?t???[???X V
#--------------------------------------------------------------------------
def update
  # ?E?B???h?E???X V
  if @show_location_window==true
  @window_location.update
  end
  @command_window.update
  @status_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_status ?????
  if @status_window.active
    update_status
    return
  end
end
#--------------------------------------------------------------------------
# ?? ?t???[???X V (?R?}???h?E?B???h?E???A?N?e?B?u??????)
#--------------------------------------------------------------------------
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  # ?A?C?e??
      # ????  SE ?????t
      $game_system.se_play($data_system.decision_se)
      # ?A?C?e??????? ?????
      $scene = Scene_Item.new
    when 1  # ?X?L??
      # ???? SE ?????t
      $game_system.se_play($data_system.decision_se)
      # ?X?e?[?^?X?E?B???h?E???A?N?e?B?u?????
      @command_window.active = false
      @status_window.active = true
      @status_window.visible = true
      @status_window.index = 0
    when 2  # ????
      # ???? SE ?????t
      $game_system.se_play($data_system.decision_se)
      # ?X?e?[?^?X?E?B???h?E???A?N?e?B?u?????
      @command_window.active = false
      @status_window.active = true
      @status_window.visible = true
      @status_window.index = 0
    when 3  # ?X?e?[?^?X
      # ???? SE ?????t
      $game_system.se_play($data_system.decision_se)
      # ?X?e?[?^?X?E?B???h?E???A?N?e?B?u?????
      @command_window.active = false
      @status_window.active = true
      @status_window.visible = true
      @status_window.index = 0
    when 4  # ?Z?[?u
      # ?Z?[?u??~??????
      if $game_system.save_disabled
        # ?u?U?[ SE ?????t
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # ???? SE ?????t
      $game_system.se_play($data_system.decision_se)
      # ?Z?[?u????? ?????
      $scene = Scene_Save.new
    when 5  # ?Q?[???I??
      # ???? SE ?????t
      $game_system.se_play($data_system.decision_se)
      # ?Q?[???I??????? ?????
      $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_status
  # 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
    @status_window.active = false
    @status_window.visible = false
    @status_window.index = -1
    return
  end
  # C ?{?^??????????????
  if Input.trigger?(Input::C)
    # ?R?}???h?E?B???h?E??J?[?\????u?????
    case @command_window.index
    when 1  # ?X?L??
      # ????A?N?^?[???s?? ????? 2 ??????????
      if $game_party.actors[@status_window.index].restriction >= 2
        # ?u?U?[ SE ?????t
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # ???? SE ?????t
      $game_system.se_play($data_system.decision_se)
      # ?X?L??????? ?????
      $scene = Scene_Skill.new(@status_window.index)
    when 2  # ????
      # ???? SE ?????t
      $game_system.se_play($data_system.decision_se)
      # ????????? ?????
      $scene = Scene_Equip.new(@status_window.index)
    when 3  # ?X?e?[?^?X
      # ???? SE ?????t
      $game_system.se_play($data_system.decision_se)
      # ?X?e?[?^?X????? ?????
      $scene = Scene_Status.new(@status_window.index)
    end
    return
  end
end
end

#===================================================
# ? CLASS Scene_Menu Ends
#===================================================


#===================================================
# ? CLASS Window_RingMenu  Begins
#===================================================
class Window_RingMenu < Window_Base
#--------------------------------------------------------------------------
# ?? ?N???X?? ?
#--------------------------------------------------------------------------
STARTUP_FRAMES = 20
MOVING_FRAMES = 5 
RING_R = 64       
ICON_ITEM   = RPG::Cache.icon("icon-item")
ICON_SKILL  = RPG::Cache.icon("icon-skill")
ICON_EQUIP  = RPG::Cache.icon("icon-equip")
ICON_STATUS = RPG::Cache.icon("icon-status")
ICON_SAVE   = RPG::Cache.icon("icon-save")
ICON_EXIT   = RPG::Cache.icon("icon-exit")
ICON_DISABLE= RPG::Cache.icon("")
SE_STARTUP = "056-Right02"
MODE_START = 1
MODE_WAIT  = 2
MODE_MOVER = 3
MODE_MOVEL = 4
#--------------------------------------------------------------------------
# ?? ?A?N?Z?T
#--------------------------------------------------------------------------
attr_accessor :index
#--------------------------------------------------------------------------
# ?? ?I?u?W?F?N?g??????
#--------------------------------------------------------------------------
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 ]
  @item_max = 6
  @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_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_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_item(x, y, i)
  end
  @steps -= 1
  if @steps < 1
    @mode = MODE_WAIT
  end
end
#--------------------------------------------------------------------------
# ?? ?????`??
#     x :
#     y :
#     i : ???????
#--------------------------------------------------------------------------
def draw_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_RingMenuStatus Begins
#===================================================

class Window_RingMenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# ?? ?I?u?W?F?N?g??????
#--------------------------------------------------------------------------
def initialize
  super(204, 64, 232, 352)
  self.contents = Bitmap.new(width - 32, height - 32)
  self.contents.font.size = $chara_select[5]
  refresh
  self.active = false
  self.index = -1
end
#--------------------------------------------------------------------------
# ?? ???t???b?V??
#--------------------------------------------------------------------------
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 = 80
    y = 80 * i
    actor = $game_party.actors[i]
    draw_actor_graphic(actor, x - 40, y + 80)
    draw_actor_name(actor, x, y + 24)
  end
end
#--------------------------------------------------------------------------
# ?? ?J?[?\??????`?X V
#--------------------------------------------------------------------------
def update_cursor_rect
  if @index < 0
    self.cursor_rect.empty
  else
    self.cursor_rect.set(0, @index * 80, self.width - 32, 80)
  end
end
end
#===================================================
# ? CLASS Window_RingMenuStatus Ends
#===================================================


#===================================================
# ? CLASS Game_Map Additional Code Begins
#===================================================
class Game_Map

#Dubealex Addition (from XRXS) to show Map Name on screen
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
  $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
#===================================================


#===================================================
# ? CLASS Window_Location Begins
#===================================================

class Window_Location < Window_Base

def initialize
super(0, 0, $window_size[0], $window_size[1])
  self.contents = Bitmap.new(width - 32, height - 32)
  self.contents.font.name = $location_text[0]
  self.contents.font.size = $location_text[1]
refresh
end

def refresh
self.contents.clear
self.windowskin = RPG::Cache.windowskin($window_location_skin)
self.contents.font.color = text_color($location_text[2])
self.contents.draw_text(4, 0, 120, 32, $location_text[3])
self.contents.font.color = text_color($location_text[4])
self.contents.draw_text(4, 32, 120, 32, $game_map.name, 2)
end
end
#===================================================
# ? CLASS Window_Location Ends
#===================================================

#===================================================
# ? Ring Menu - Show Player Location R1 - Ends
#===================================================


if you check it yourself, you might find that you can't see how much gold you got, that I would like to be fixed.
and now to something else i would like to add, how do i add another icon there in the menu, i've tried but totally failed (not scripting kinda guy :P). Please someone, atleast fix so I can see my gold. If you do, please use the whole script, edit it, and then post it.