Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================
- # ** Ring Menu
- #-------------------------------------------------------------------------------
- # by Syvkal
- # Version 1.1
- # 06-23-08
- #==============================================================================
- #===================================================#
- # ** C O N F I G U R A T I O N S Y S T E M ** #
- #===================================================#
- # Amount of frames for Startup Animation
- STARTUP_FRAMES = 20
- # Amount of frames for Movement Animation
- MOVING_FRAMES = 15
- # Radius of the Menu Ring
- RING_R = 118
- # Disabled icon to display when disabled
- ICON_DISABLE= Cache::picture('')
- module FFS
- DEUTSCH = [
- [Vocab::item, Cache::picture('Icon_Skill'), "$scene = Scene_Picture_Gallery.new"],
- ["", Cache::picture('Icon_Load'), "$scene = Scene_File.new(false,false,true)"],
- [Vocab::game_end, Cache::picture('Icon_End'), "$scene = Scene_End.new"]
- ]
- ENGLISCH = [
- [Vocab::item, Cache::picture('Icon_Skill_EN'), "$scene = Scene_Picture_Gallery.new"],
- ["", Cache::picture('Icon_Load_EN'), "$scene = Scene_File.new(false,false,true)"],
- [Vocab::game_end, Cache::picture('Icon_End_EN'), "$scene = Scene_End.new"]
- ]
- def self.getLanguage
- if $game_switches[218]
- return DEUTSCH
- else
- return ENGLISCH
- end
- end
- end
- #==============================================================================
- # ** Scene_Menu
- #------------------------------------------------------------------------------
- # Edited to add Ring Menu
- #==============================================================================
- class Scene_Menu < Scene_Base
- #--------------------------------------------------------------------------
- # * Alias Listings
- #--------------------------------------------------------------------------
- alias initialize_original initialize
- alias start_selection_original start_actor_selection
- # alias end_selection_original end_actor_selection
- #--------------------------------------------------------------------------
- # * Object Initialization
- #--------------------------------------------------------------------------
- def initialize(menu_index = 0, move = true)
- @move = move
- initialize_original(menu_index)
- @options = FFS.getLanguage
- end
- #--------------------------------------------------------------------------
- # * Start processing
- #--------------------------------------------------------------------------
- def start
- super
- create_menu_background
- create_command_window
- end
- #--------------------------------------------------------------------------
- # * Termination Processing
- #--------------------------------------------------------------------------
- def terminate
- super
- dispose_menu_background
- @command_window.dispose
- @status_window.dispose if @status_window
- end
- #--------------------------------------------------------------------------
- # * Frame Update
- #--------------------------------------------------------------------------
- def update
- super
- update_menu_background
- @command_window.update
- @status_window.update if @status_window
- if @command_window.active
- update_command_selection
- elsif @status_window.active
- update_actor_selection
- end
- end
- #--------------------------------------------------------------------------
- # * Create Command Window
- #--------------------------------------------------------------------------
- def create_command_window
- commands = []
- for i in 0...@options.size
- commands.push(@options[i][0])
- end
- icons = []
- for i in 0...@options.size
- icons.push(@options[i][1])
- end
- @command_window = Window_RingMenu.new(232, 170, commands, icons, @move, @menu_index)
- if $game_party.members.size == 0
- @command_window.disable_item(0)
- @command_window.disable_item(1)
- @command_window.disable_item(2)
- @command_window.disable_item(3)
- end
- if $game_system.save_disabled
- @command_window.disable_item(4)
- end
- end
- #--------------------------------------------------------------------------
- # * Create Command Window
- #--------------------------------------------------------------------------
- def create_status_window
- names = []
- chars = []
- for i in 0...$game_party.members.size
- names[i] = $game_party.members[i].name
- chars[i] = $game_party.members[i]
- end
- @status_window = Window_RingMenu.new(255, 200, names, chars, true, $game_party.last_actor_index, true)
- end
- #--------------------------------------------------------------------------
- # * Update Command Selection
- #--------------------------------------------------------------------------
- def update_command_selection
- if Input.trigger?(Input::B)
- Sound.play_cancel
- $scene = Scene_Map.new
- elsif Input.trigger?(Input::C)
- if $game_party.members.size == 0 and @command_window.index < 4
- Sound.play_buzzer
- return
- elsif $game_system.save_disabled and @command_window.index == 4
- Sound.play_buzzer
- return
- end
- Sound.play_decision
- eval(@options.size[@command_window.index][2])
- end
- end
- #--------------------------------------------------------------------------
- # * Start Actor Selection
- #--------------------------------------------------------------------------
- def start_actor_selection
- @command_window.active = false
- @command_window.visible = false
- create_status_window
- if $game_party.last_actor_index < @status_window.item_max
- @status_window.index = $game_party.last_actor_index
- else
- @status_window.index = 0
- end
- end
- #--------------------------------------------------------------------------
- # * End Actor Selection
- #--------------------------------------------------------------------------
- def end_actor_selection
- @command_window.active = true
- @command_window.visible = true
- @status_window.dispose if @status_window
- @status_window = nil
- end
- #--------------------------------------------------------------------------
- # * Update Actor Selection
- #--------------------------------------------------------------------------
- def update_actor_selection
- if Input.trigger?(Input::B)
- Sound.play_cancel
- end_actor_selection
- elsif Input.trigger?(Input::C)
- $game_party.last_actor_index = @status_window.index
- Sound.play_decision
- eval(@options[@command_window.index][3])
- end
- end
- end
- #==============================================================================
- # ** Scene_File
- #------------------------------------------------------------------------------
- # Edited to return to the menu properly when loading
- #==============================================================================
- class Scene_File
- alias return_scene_original return_scene
- def return_scene
- if @from_title
- $scene = Scene_Title.new
- elsif @from_event
- $scene = Scene_Map.new
- else
- if @saving
- $scene = Scene_Menu.new(FFS::DEUTSCH.size - 3)
- else
- $scene = Scene_Menu.new(FFS::DEUTSCH.size - 2)
- end
- end
- end
- end
- #==============================================================================
- # ** Scene_End
- #------------------------------------------------------------------------------
- # Edited to return to the menu properly due to loading being added
- #==============================================================================
- class Scene_End
- alias return_scene_original return_scene
- def return_scene
- $scene = Scene_Menu.new(FFS::DEUTSCH.size - 1)
- end
- end
- #==============================================================================
- # ** Window_Location
- #------------------------------------------------------------------------------
- # This class shows the current map name.
- #==============================================================================
- class Window_location < Window_Base
- #--------------------------------------------------------------------------
- # * Object Initialization
- #--------------------------------------------------------------------------
- def initialize(x, y)
- super(x, y, 235, (WLH*2) + 32)
- self.contents = Bitmap.new(width - 32, height - 32)
- refresh
- end
- #--------------------------------------------------------------------------
- # * Refresh
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- $maps = load_data("Data/MapInfos.rvdata")
- @map_id = $game_map.map_id
- @currmap = $maps[@map_id].name
- self.contents.font.color = system_color
- self.contents.draw_text(0, -4, 128, 32, "")
- self.contents.font.color = normal_color
- self.contents.draw_text(0, -4+WLH, 200, 32, @currmap, 1)
- end
- end
- #==============================================================================
- # ** Window_RingMenu
- #------------------------------------------------------------------------------
- # This Window creates a Ring Menu system
- #==============================================================================
- class Window_RingMenu < Window_Base
- #--------------------------------------------------------------------------
- # * Public Instance Variables
- #--------------------------------------------------------------------------
- attr_accessor :index
- attr_reader :item_max
- #--------------------------------------------------------------------------
- # * Refresh Setup
- #--------------------------------------------------------------------------
- START = 1
- WAIT = 2
- MOVER = 3
- MOVEL = 4
- #--------------------------------------------------------------------------
- # * Object Initialization
- #--------------------------------------------------------------------------
- def initialize(center_x, center_y, commands, items, move = true, index = 0, character = false)
- super(0, 0, 544, 416)
- self.contents = Bitmap.new(width-32, height-32)
- self.opacity = 0
- @move = move
- @char = character
- @startup = STARTUP_FRAMES
- @commands = commands
- @item_max = commands.size
- @index = index
- @items = items
- @disabled = []
- for i in 0...commands.size-1
- @disabled[i] = false
- end
- @cx = center_x
- @cy = center_y
- start_setup
- refresh
- end
- #--------------------------------------------------------------------------
- # * Start Setup
- #--------------------------------------------------------------------------
- def start_setup
- @mode = START
- @steps = @startup
- end
- #--------------------------------------------------------------------------
- # * Disable index
- # index : item number
- #--------------------------------------------------------------------------
- def disable_item(index)
- @disabled[index] = true
- end
- #--------------------------------------------------------------------------
- # * Determines if is moving
- #--------------------------------------------------------------------------
- def animation?
- return @mode != WAIT
- end
- #--------------------------------------------------------------------------
- # * Determine if cursor is moveable
- #--------------------------------------------------------------------------
- def cursor_movable?
- return false if (not visible or not active)
- return false if (@opening or @closing)
- return false if animation?
- return true
- end
- #--------------------------------------------------------------------------
- # * Move cursor right
- #--------------------------------------------------------------------------
- def cursor_right
- @index -= 1
- @index = @items.size - 1 if @index < 0
- @mode = MOVER
- @steps = MOVING_FRAMES
- end
- #--------------------------------------------------------------------------
- # * Move cursor left
- #--------------------------------------------------------------------------
- def cursor_left
- @index += 1
- @index = 0 if @index >= @items.size
- @mode = MOVEL
- @steps = MOVING_FRAMES
- end
- #--------------------------------------------------------------------------
- # * Frame Update
- #--------------------------------------------------------------------------
- def update
- super
- if self.active
- if cursor_movable?
- last_index = @index
- if Input.repeat?(Input::DOWN) or Input.repeat?(Input::RIGHT)
- cursor_right
- end
- if Input.repeat?(Input::UP) or Input.repeat?(Input::LEFT)
- cursor_left
- end
- if @index != last_index
- Sound.play_cursor
- end
- end
- refresh
- end
- end
- #--------------------------------------------------------------------------
- # * Refresh
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- case @mode
- when START
- refresh_start
- when WAIT
- refresh_wait
- when MOVER
- refresh_move(1)
- when MOVEL
- refresh_move(0)
- end
- rect = Rect.new(18, 196, self.contents.width-32, 32)
- self.contents.draw_text(rect, @commands[@index], 1)
- end
- #--------------------------------------------------------------------------
- # * Refresh Start Period
- #--------------------------------------------------------------------------
- def refresh_start
- d1 = 2.0 * Math::PI / @item_max
- d2 = 1.0 * Math::PI / @startup
- for i in 0...@item_max
- j = i - @index
- if @move
- r = RING_R - 1.0 * RING_R * @steps / @startup
- d = d1 * j + d2 * @steps
- else
- r = RING_R
- d = d1 * j
- end
- 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 = WAIT
- end
- end
- #--------------------------------------------------------------------------
- # * Refresh Wait Period
- #--------------------------------------------------------------------------
- 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
- #--------------------------------------------------------------------------
- # * Refresh Movement Period
- #--------------------------------------------------------------------------
- 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 = WAIT
- end
- end
- #--------------------------------------------------------------------------
- # * Draw Item
- # x : draw spot x-coordinate
- # y : draw spot y-coordinate
- # index : item number
- #--------------------------------------------------------------------------
- def draw_item(x, y, index)
- if @char
- if @index == index
- draw_character(@items[index].character_name, @items[index].character_index , x, y)
- if @mode == WAIT
- draw_actor_hp_ring(@items[index], @cx, @cy-16, 50, 6, 84, 270, true)
- draw_actor_mp_ring(@items[index], @cx, @cy-16, 50, 6, 84, 180, false)
- draw_actor_exp_ring(@items[index], @cx, @cy-16, 50, 6, 155, 12, false)
- end
- else
- draw_character(@items[index].character_name, @items[index].character_index , x, y, false)
- end
- else
- rect = Rect.new(0, 0, @items[index].width, @items[index].height)
- if @index == index
- self.contents.blt( x, y, @items[index], rect )
- if @disabled[@index]
- self.contents.blt( x, y, ICON_DISABLE, rect )
- end
- else
- self.contents.blt( x, y, @items[index], rect, 128 )
- end
- end
- end
- end
- #==============================================================================
- # ** Window_Base
- #------------------------------------------------------------------------------
- # Edited to allow disabled character icons
- #==============================================================================
- class Window_Base < Window
- #--------------------------------------------------------------------------
- # * Draw Character Graphic
- #--------------------------------------------------------------------------
- def draw_character(character_name, character_index, x, y, enabled = true)
- return if character_name == nil
- bitmap = Cache.character(character_name)
- sign = character_name[/^[\!\$]./]
- if sign != nil and sign.include?('$')
- cw = bitmap.width / 3
- ch = bitmap.height / 4
- else
- cw = bitmap.width / 12
- ch = bitmap.height / 8
- end
- n = character_index
- src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
- self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect, enabled ? 255 : 128)
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement