Ratty524 0 Report post Posted May 17, 2007 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 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 Insert this script after "Scene_Debug" but before "Main." You can edit the text and the show location window at line 37. 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
Arkbennett 16 Report post Posted May 17, 2007 Ah, that's a classic script. Surprised we don't have it. Share this post Link to post Share on other sites
RMXPirate 0 Report post Posted May 19, 2007 I love this script lol! One of the greatest menu scripts ever. Thanks for posting Ratty! Share this post Link to post Share on other sites
Ratty524 0 Report post Posted May 20, 2007 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
vladcalin 0 Report post Posted January 12, 2008 OMG........ This is an very useful script for me. This is the coolest menu ever. Share this post Link to post Share on other sites
Blackmountain 0 Report post Posted February 17, 2008 This is fantastic! Puts a nice new "spin" to the game! How can I change the blue skin for the map name box? And also the font etc... Is it possible to sync it with the windowskin graphic? Thanks! Share this post Link to post Share on other sites
mutantic 0 Report post Posted February 18, 2008 That was totally cool!!! :lol: Share this post Link to post Share on other sites
Kinerex Shiomi 0 Report post Posted January 27, 2011 I have Dargors party changer 3.3 and I really like this script. The only problem is the party selector icon doesn't show up in the ring menu. Do you know if thats possible to add on or cant it be? Share this post Link to post Share on other sites
Chief 30 Report post Posted January 27, 2011 oh my... Biggest Necro Evar! Share this post Link to post Share on other sites
Polraudio 122 Report post Posted January 27, 2011 Please make a new topic and ask. This topic is wayyyyy to old to bring back from the dead. Share this post Link to post Share on other sites