Jump to content
New account registrations are disabed. This website is now an archive. Read more here.
Sign in to follow this  
Ratty524

Ring Menu

Recommended Posts

Instructions

What this does is create a ring menu. Instead of going to a separate menu screen it makes icons appear in a circular fashion around the character.

 

Screenshot

post-1-0-71590900-1330860885_thumb.jpg

 

The Script

Ring Menu.txt

 

 

#===================================================
# ¦ 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="001-Blue01"		    # 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]="001-Blue01"  # 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("034-Item03")
ICON_SKILL  = RPG::Cache.icon("044-Skill01")
ICON_EQUIP  = RPG::Cache.icon("001-Weapon01")
ICON_STATUS = RPG::Cache.icon("050-Skill07")
ICON_SAVE   = RPG::Cache.icon("038-Item07")
ICON_EXIT   = RPG::Cache.icon("046-Skill03")
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
#===================================================

 

 

Instructions

  1. Insert this script after "Scene_Debug" but before "Main."
  2. You can edit the text and the show location window at line 37.
  3. You can edit things like the icon graphic and the startup SE from line 318 to line 332.

FAQ

How do I add addition menu items?

If you know a little bit about RGSS then this process is relatively simple, it is simply a matter of adding in the required lines. If not then I will go through the lines that you are going to need to add in.

First of all, copy the script from the download above. Try to open it in wordpad or another simple text editor to avoid any possible formatting of the script.

1. Open your script editor and select the Ring Menu script in the list. The first thing you need to do is create the title which is displayed under the icon in the menu. Navigate to line 70, which should look like this:

$ring_menu_text[6]="Quit"           # Quit Menu Text 

This sets a string which will be the title of the menu item. So we need to create another one for our menu item. Copy and paste the line, replacing 6 with 7 and the Quit with the name of our new item. In this example I will use Quests.

$ring_menu_text[7]="Quests" # Quest Menu Text

2. Next, navigate to lines 199 to 245. This is a case statement which basically means if input trigger C is pressed(Space, Enter, C) and the menu item is x, then do something. To put it simply. When 0 refers to the first command, when 1 refers to the 2nd and so on. In our case we are adding the 7th command(or menu item), so we want to add in "when 6". The last when statement is this:

    when 5  # ?Q?[???I??
     # ???? SE ?????t
     $game_system.se_play($data_system.decision_se)
     # ?Q?[???I??????? ?????
     $scene = Scene_End.new

 

Immediately under that we want to add in something like this:

    when 6  #Quest Menu Item
     $game_system.se_play($data_system.decision_se)
     $scene = Scene_MissionMenu.new 

 

The line "$scene = Scene_MissionMenu.new " is the scene that will be called.As you can see in the other when statements, most of them call on scenes. In my example I have used a scene from Leons Mission Script.

3. Next navigate to line 333, or this line:

ICON_EXIT   = RPG::Cache.icon("046-Skill03") 

Add below it

ICON_QUEST   = RPG::Cache.icon("046-Skill03") 

This defines the icon image. It uses the RTP icons and in my example I will just the last icon used. But any can be chosen from the RTP icons. If you wanted a custom one, you would have to alter the code.

4. Next go to line 361 or find the following line:

s6 = $ring_menu_text[6]

Below this line we want to add our own command. So directly below this, add this following:

s7 = $ring_menu_text[7]

5. Next go to line 362(the line below) or find the following line:

 @commands = [ s1, s2, s3, s4, s5, s6 ] 

This sets the commands. We want to add our extra command in here, so add in s7 to the list or replace the above line with:

 @commands = [ s1, s2, s3, s4, s5, s6, s7 ] 

6. Below that line is the following:

 @item_max = 6

We want to change this to 7 since we are adding in a new item. So replace that line with the following:

  @item_max = 7 

 

7. Three lines below that on line 365 is the following line:

 

@items = [ ICON_ITEM, ICON_SKILL, ICON_EQUIP, ICON_STATUS, ICON_SAVE, ICON_EXIT ] 

Similarly to the last step, we want to add in our new item. We set this two steps previously, so add in ICON_QUEST to the list or replace the above line with:

 

@items = [ ICON_ITEM, ICON_SKILL, ICON_EQUIP, ICON_STATUS, ICON_SAVE, ICON_EXIT, ICON_QUEST] 

That it, a new menu item should now be there. If you followed this exactly, you should get an error unless you have Leons Mission Script in your game. You need to have your own scene or window ready and replace this line "$scene = Scene_MissionMenu.new.

Share this post


Link to post
Share on other sites

No problem, guys. Hopefully this will be added to the script archive on the pinned topic.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...