예전에 SDK용으로 편집했던 링메뉴를 SDK없이 쓸 수 있게 다시 편집한 것입니다. update와 dispose관련 등을 제외하면 전체적으로는 거의 SDK2버전과 같습니다. 사용하려면 Sephirothspawn씨의 커스텀화 가능한 링메뉴 명령 스크립트가 필요합니다(SDK버전 데모에 들어 있는 것을 사용하세요).
#------------------------------------------------------------------------------
# Ring_Menu
#------------------------------------------------------------------------------
# Original XRXS Ring Menu by 和希
# Edited by Dubealex, Hypershadow180
# Customizable Ring Menu Command by SephirothSpawn
# Edited by L
#------------------------------------------------------------------------------
# This is non-SDK version.
module Menu_Setup
module Menu_Commands
Item = 'Item'
Skill = 'Skill'
Equip = 'Equip'
Status = 'Status'
Save = 'Save'
Load = 'Load'
End_Game = 'Exit'
Order = 'Order'
Party = 'Party'
Option = 'Option'
Quest = 'Quest'
System = 'System'
end
module Menu_Icon
Item_Icon = "034-Item03"
Skill_Icon = "044-Skill01"
Equip_Icon = "001-Weapon01"
Status_Icon = "050-Skill07"
Save_Icon = "save"
Load_Icon = "load"
End_Game_Icon = "046-Skill03"
Option_Icon = "option"
Quest_Icon = "038-Item07"
Sys_Menu_Icon = "040-Item09"
end
module Menu_Window
#Location_FontFace = Font.default_name
Location_FontSize = 22
Location_TitleColor = Color.new(192, 224, 255, 255)
Location_NameColor = Color.new(255, 255, 255, 255)
Location_Text = 'Location:'
#Gold_FontFace = Font.default_name
Gold_FontSize = 22
Gold_TitleColor = Color.new(192, 224, 255, 255)
Gold_Color = Color.new(255, 255, 255, 255)
Gold_Text = 'Gold'
Window_Border_Opacity = 255
Window_Back_Opacity = 130
#Window_Location_Skin = $game_system.windowskin_name
#Window_Gold_Skin = $game_system.windowskin_name
Window_Location_XPos = 0
Window_Location_YPos = 0
Window_Gold_XPos = 0
Window_Gold_YPos = 350
Window_XSize = 160
Window_YSize = 96
MenuStatus_XPos = 408
MenuStatus_YPos = 0
#MenuStatus_FontFace = Font.default_name
MenuStatus_FontColor = Color.new(255, 255, 255, 255)
MenuStatus_FontSize = 22
MenuStatus_Border_Opacity = 255
MenuStatus_Back_Opacity = 130
#MenuStatus_Skin = $game_system.windowskin_name
end
end
#------------------------------------------------------------------------------
# Window_RingMenuStatus
#------------------------------------------------------------------------------
class Window_RingMenuStatus < Window_Selectable
include Menu_Setup
#------------------------------------------------------------------------------
# Initialize
#------------------------------------------------------------------------------
def initialize
super(204, 64, 232, 352)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.size = Menu_Window::MenuStatus_FontSize
refresh
self.active = false
self.index = -1
end
#------------------------------------------------------------------------------
# Refresh
#------------------------------------------------------------------------------
def refresh
self.contents.clear
self.windowskin = RPG::Cache.windowskin($menustatus_skin)
self.contents.font.name = $menustatus_fonttype
self.contents.font.color = Menu_Window::MenuStatus_FontColor
@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 - 60, y + 65)
draw_actor_name(actor, x, y + 2)
draw_actor_hp(actor, x - 40, y + 26)
draw_actor_sp(actor, x - 40, y + 50)
end
end
#------------------------------------------------------------------------------
# Update Cursor Rect
#------------------------------------------------------------------------------
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
#------------------------------------------------------------------------------
# Game_Map
#------------------------------------------------------------------------------
class Game_Map
#------------------------------------------------------------------------------
# Name
#------------------------------------------------------------------------------
def name
$map_infos[@map_id]
end
end
#------------------------------------------------------------------------------
# Scene_Title
#------------------------------------------------------------------------------
class Scene_Title
$map_infos = load_data("Data/MapInfos.rxdata")
for key in $map_infos.keys
$map_infos[key] = $map_infos[key].name
end
end
#------------------------------------------------------------------------------
# Window_Location
#------------------------------------------------------------------------------
class Window_Location < Window_Base
include Menu_Setup
#------------------------------------------------------------------------------
# Initialize
#------------------------------------------------------------------------------
def initialize
super(0, 0, Menu_Window::Window_XSize, Menu_Window::Window_YSize)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $location_fonttype
self.contents.font.size = Menu_Window::Location_FontSize
refresh
end
#------------------------------------------------------------------------------
# Refresh
#------------------------------------------------------------------------------
def refresh
self.contents.clear
self.windowskin = RPG::Cache.windowskin($window_location_skin)
self.contents.font.color = Menu_Window::Location_TitleColor
self.contents.draw_text(4, 0, 120, 32, Menu_Window::Location_Text)
self.contents.font.color = Menu_Window::Location_NameColor
self.contents.draw_text(4, 32, 120, 32, $game_map.name, 2)
end
end
#------------------------------------------------------------------------------
# Window_MenuGold
#------------------------------------------------------------------------------
class Window_MenuGold < Window_Base
include Menu_Setup
#------------------------------------------------------------------------------
# Initialize
#------------------------------------------------------------------------------
def initialize
super(0, 0, Menu_Window::Window_XSize, Menu_Window::Window_YSize)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $gold_fonttype
self.contents.font.size = Menu_Window::Gold_FontSize
refresh
end
#------------------------------------------------------------------------------
# Refresh
#------------------------------------------------------------------------------
def refresh
self.contents.clear
self.windowskin = RPG::Cache.windowskin($window_gold_skin)
self.contents.font.color = Menu_Window::Gold_TitleColor
self.contents.draw_text(4, 0, 120, 32, Menu_Window::Gold_Text)
self.contents.font.color = Menu_Window::Gold_Color
self.contents.draw_text(4, 32, 120, 32, $game_party.gold.to_s, 2)
end
end
class Window_Infos < Window_Base
include Menu_Setup
#--------------------------------------------------------------------------
# * Object Initialize
#--------------------------------------------------------------------------
def initialize
super(0, 0, 160, 130)
self.contents = Bitmap.new(width - 32, height - 32)
self.windowskin = RPG::Cache.windowskin($game_system.windowskin_name)
#self.contents.font.name = $defaultfonttype # "Play Time" window font
#self.contents.font.size = $defaultfontsize
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 120, 32, "Time")
@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.font.color = Menu_Window::Gold_Color
self.contents.draw_text(4, 0, 120, 32, text, 2)
self.contents.font.color = system_color
self.contents.draw_text(4, 25, 120, 32, "Steps")
self.contents.font.color = Menu_Window::Gold_Color
self.contents.draw_text(4, 42, 120, 32, $game_party.steps.to_s, 2)
cx = contents.text_size($data_system.words.gold).width
self.contents.font.color = Menu_Window::Gold_Color
self.contents.draw_text(4, 67, 120-cx-2, 32, $game_party.gold.to_s, 2)
self.contents.font.color = system_color
self.contents.draw_text(124-cx, 67, cx, 32, $data_system.words.gold, 2)
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
if Graphics.frame_count / Graphics.frame_rate != @total_sec
refresh
end
end
end
#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
# This class performs menu screen processing.
#==============================================================================
class Scene_Menu
include Menu_Setup
#--------------------------------------------------------------------------
# * Object Initialization
# menu_index : command cursor's initial position
#--------------------------------------------------------------------------
def initialize(menu_index = 0)
@menu_index = menu_index
party_order_init #Change Party Order by Yargovish
commands_set
var_init
end
#---------------------
def var_init
$location_fonttype = Font.default_name
#$location_fontsize = 22
$gold_fonttype = Font.default_name
#$gold_fontsize = 22
$window_location_skin = $game_system.windowskin_name # Location Windowskin
$window_gold_skin = $game_system.windowskin_name # Gold Windowskin
$menustatus_fonttype = Font.default_name
#$menustatus_fontsize = 22
$menustatus_skin = $game_system.windowskin_name
end
#--------------------------------------------------------------------------
# * Party Order Change Initiation
#--------------------------------------------------------------------------
def party_order_init
@changer = 0 #Change Party Order by Yargovish
@where = 0 #
@checker = 0 #
end
#--------------------------------------------------------------------------
# * Set Commands
#--------------------------------------------------------------------------
def commands_set
@commands = []
s1 = Menu_Commands::Item
s2 = Menu_Commands::Skill
s3 = Menu_Commands::Equip
s4 = Menu_Commands::Status
s5 = Menu_Commands::Quest
s6 = Menu_Commands::System
@commands.push(s1, s2, s3, s4, s5, s6).flatten!
@command_icons = []
item_icon = RPG::Cache.icon(Menu_Icon::Item_Icon)
skill_icon = RPG::Cache.icon(Menu_Icon::Skill_Icon)
equip_icon = RPG::Cache.icon(Menu_Icon::Equip_Icon)
status_icon = RPG::Cache.icon(Menu_Icon::Status_Icon)
quest_icon = RPG::Cache.icon(Menu_Icon::Quest_Icon)
sys_menu_icon = RPG::Cache.icon(Menu_Icon::Sys_Menu_Icon)
@command_icons.push(item_icon,skill_icon,equip_icon,status_icon,quest_icon,sys_menu_icon).flatten!
@sys_commands = []
o1 = Menu_Commands::Option
o2 = Menu_Commands::Save
o3 = Menu_Commands::Load
o4 = Menu_Commands::End_Game
@sys_commands.push(o1, o2, o3, o4).flatten!
@sys_command_icons = []
option_icon = RPG::Cache.icon(Menu_Icon::Option_Icon)
save_icon = RPG::Cache.icon(Menu_Icon::Save_Icon)
load_icon = RPG::Cache.icon(Menu_Icon::Load_Icon)
exit_icon = RPG::Cache.icon(Menu_Icon::End_Game_Icon)
@sys_command_icons.push(option_icon,save_icon,load_icon,exit_icon).flatten!
end
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
#Draw Background
@background = Spriteset_Map.new
main_windows
# Execute transition
Graphics.transition
# Main loop
loop do
main_loop
break if main_scenechange?
end
# Refresh map
$game_map.refresh
# Prepare for transition
Graphics.freeze
main_dispose
end
#--------------------------------------------------------------------------
# * Main Processing : Window Initialization
#--------------------------------------------------------------------------
def main_windows
main_command_window
sys_command_window
#Draw Map Name Window
@location_window = Window_Location.new
@location_window.x = Menu_Window::Window_Location_XPos
@location_window.y = Menu_Window::Window_Location_YPos
@location_window.opacity = Menu_Window::Window_Border_Opacity
@location_window.back_opacity = Menu_Window::Window_Back_Opacity
#Draw Gold Window
#@gold_window = Window_MenuGold.new
@gold_window = Window_Infos.new
@gold_window.x = Menu_Window::Window_Gold_XPos
@gold_window.y = Menu_Window::Window_Gold_YPos
@gold_window.opacity = Menu_Window::Window_Border_Opacity
@gold_window.back_opacity = Menu_Window::Window_Back_Opacity
#Draw Status Window
@status_window = Window_RingMenuStatus.new
@status_window.x = Menu_Window::MenuStatus_XPos
@status_window.y = Menu_Window::MenuStatus_YPos
@status_window.z = 200
@status_window.opacity=Menu_Window::MenuStatus_Border_Opacity
@status_window.back_opacity=Menu_Window::MenuStatus_Back_Opacity
@status_window.visible = false
end
#--------------------------------------------------------------------------
# * Main Command Window
#--------------------------------------------------------------------------
def main_command_window
@command_window = Window_RingMenu.new(@commands, @command_icons,64)
@command_window.index = @menu_index
#@command_window.height = 256
# If number of party members is 0
if $game_party.actors.size == 0
# Disable items, skills, equipment, and status
@command_window.disable_item(0)
@command_window.disable_item(1)
@command_window.disable_item(2)
@command_window.disable_item(3)
end
end
#--------------------------------------------------------------------------
# * System Command Window
#--------------------------------------------------------------------------
def sys_command_window
@sys_command_window = Window_RingMenu.new(@sys_commands, @sys_command_icons, 48)
@sys_command_window.visible = false
@sys_command_window.active = false
check_save_available
check_load_available
end
#-----------------
def check_save_available
if $game_system.save_disabled
@sys_command_window.disable_item(1)
end
end
#-----------------
def check_load_available
#Check if saved file exists
@load_enabled = (Dir.glob('Save*.rxdata').size > 0)
if !@load_enabled
#Put your @command_window.disable_item(index)
@sys_command_window.disable_item(2)
end
end
#--------------------------------------------------------------------------
# * Main Loop
#--------------------------------------------------------------------------
def main_loop
# Update game screen
Graphics.update
# Update input information
Input.update
# Frame update
update
end
#--------------------------------------------------------------------------
# * Scene Change
#--------------------------------------------------------------------------
def main_scenechange?
# Abort loop if screen is changed
if $scene != self
return true
end
return false
end
#--------------------------------------------------------------------------
# * Main Dispose
#--------------------------------------------------------------------------
def main_dispose
@background.dispose
# Dispose of windows
@command_window.dispose
@sys_command_window.dispose
@location_window.dispose
@gold_window.dispose
@status_window.dispose
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Update windows
@command_window.update
@sys_command_window.update
@location_window.update
@gold_window.update
@status_window.update
# If command window is active: call update_command
if @command_window.active
update_command
return
end
# If system window is active: call update_sys_command
if @sys_command_window.active
update_sys_command
return
end
# If status window is active: call update_status
if @status_window.active
update_status
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (when command window is active)
#--------------------------------------------------------------------------
def update_command
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# Switch to map screen
$scene = Scene_Map.new
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# Return if Disabled Command
if disabled_main_command?
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Command Input
main_command_input
return
end
return if @command_window.animation?
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
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
#--------------------------------------------------------------------------
# * Frame Update (when command window is active)
#--------------------------------------------------------------------------
def update_sys_command
# If B button was pressed
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@command_window.active = true
@command_window.visible = true
@sys_command_window.active = false
@sys_command_window.visible = false
@sys_command_window.index = 0
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# Return if Disabled Command
if disabled_main_command?
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Command Input
sys_command_input
return
end
return if @sys_command_window.animation?
if Input.press?(Input::UP) or Input.press?(Input::LEFT)
$game_system.se_play($data_system.cursor_se)
@sys_command_window.setup_move_move(Window_RingMenu::MODE_MOVEL)
return
end
if Input.press?(Input::DOWN) or Input.press?(Input::RIGHT)
$game_system.se_play($data_system.cursor_se)
@sys_command_window.setup_move_move(Window_RingMenu::MODE_MOVER)
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (when status window is active)
#--------------------------------------------------------------------------
def update_status
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# Make command window active
@command_window.active = true
@status_window.active = false
@status_window.visible = false
@status_window.index = -1
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# Return if Disabled Command
if disabled_main_command?
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Command Input
sub_command_input
return
end
end
#--------------------------------------------------------------------------
# * Disabled Main Command? Test
#--------------------------------------------------------------------------
def disabled_main_command?
command = @commands[@command_window.index]
sys_command = @sys_commands[@sys_command_window.index]
# Gets Scene_Menu Commands
c = Menu_Commands
# If 0 Party Size
if $game_party.actors.size == 0
# If Item, Skill, Equip or Status Selected
if [c::Item, c::Skill, c::Equip, c::Status].include?(command)
return true
end
end
if $game_party.actors.size <= 1
if [c::Order].include?(command)
return true
end
end
# If Save Disabled && Command is Save
return true if $game_system.save_disabled && sys_command == c::Save
# If Load Disabled && Command is Load
return true if !@load_enabled && sys_command == c::Load
return false
end
#--------------------------------------------------------------------------
# * Update Command Check
#--------------------------------------------------------------------------
def main_command_input
# Loads Current Command
command = @commands[@command_window.index]
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Checks Commands
case command
when Menu_Commands::Item
command_item
when Menu_Commands::Skill
command_skill
when Menu_Commands::Equip
command_equip
when Menu_Commands::Status
command_status
when Menu_Commands::Quest
command_quest
when Menu_Commands::System
$game_system.se_play($data_system.decision_se)
@sys_command_window.active = true
@sys_command_window.visible = true
@command_window.active = false
@command_window.visible = false
end
end
#--------------------------------------------------------------------------
# * Update System Command Check
#--------------------------------------------------------------------------
def sys_command_input
# Loads Current Command
sys_command = @sys_commands[@sys_command_window.index]
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Checks Commands
case sys_command
when Menu_Commands::Option
command_option
when Menu_Commands::Save
command_save
when Menu_Commands::Load
command_load
when Menu_Commands::End_Game
command_endgame
end
end
#--------------------------------------------------------------------------
# * Disabled Sub Command? Test
#--------------------------------------------------------------------------
def disabled_sub_command?
# Loads Current Command
command = @commands[@command_window.index]
# If Skill Selected
if command == Menu_Commands::Skill
# If this actor's action limit is 2 or more
if $game_party.actors[@status_window.index].restriction >= 2
return true
end
end
return false
end
#--------------------------------------------------------------------------
# * Update Status Check
#--------------------------------------------------------------------------
def sub_command_input
# Loads Current Command
command = @commands[@command_window.index]
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Checks Command By Name
case command
when Menu_Commands::Skill
command_skill
when Menu_Commands::Equip
command_equip
when Menu_Commands::Status
command_status
when Menu_Commands::Order
command_order
end
end
#--------------------------------------------------------------------------
# * Command Item
#--------------------------------------------------------------------------
def command_item
# Switch to item screen
$scene = Scene_Item.new
end
#--------------------------------------------------------------------------
# * Command Skill
#--------------------------------------------------------------------------
def command_skill
# If Main Command Active
if @command_window.active
# Activate Status Window
active_status_window
return
end
# Switch to skill screen
$scene = Scene_Skill.new(@status_window.index)
end
#--------------------------------------------------------------------------
# * Command Equip
#--------------------------------------------------------------------------
def command_equip
# If Main Command Active
if @command_window.active
# Activate Status Window
active_status_window
return
end
# Switch to equipment screen
$scene = Scene_Equip.new(@status_window.index)
end
#--------------------------------------------------------------------------
# * Command Status
#--------------------------------------------------------------------------
def command_status
# If Main Command Active
if @command_window.active
# Activate Status Window
active_status_window
return
end
# Switch to status screen
$scene = Scene_Status.new(@status_window.index)
end
#--------------------------------------------------------------------------
# * Command Order
#--------------------------------------------------------------------------
def command_order
# If Main Command Active
if @command_window.active
# Activate Status Window
active_status_window
@checker = 0
return
end
#Change Party Order by Yargovish
if @checker == 0
@changer = $game_party.actors[@status_window.index]
@where = @status_window.index
@checker = 1
else
$game_party.actors[@where] = $game_party.actors[@status_window.index]
$game_party.actors[@status_window.index] = @changer
@checker = 0
@status_window.refresh
$game_player.refresh #
end
end
#--------------------------------------------------------------------------
# * Command Party
#--------------------------------------------------------------------------
def command_party
# Switch to party change screen
#Put your Party Change Scene here
end
#--------------------------------------------------------------------------
# * Command Option
#--------------------------------------------------------------------------
def command_option
# Switch to party change screen
#Put your Option Scene here
end
#--------------------------------------------------------------------------
# * Command Quest
#--------------------------------------------------------------------------
def command_quest
# Switch to party change screen
#Put your Quest Scene here
end
#--------------------------------------------------------------------------
# * Command Save
#--------------------------------------------------------------------------
def command_save
# Switch to save screen
$scene = Scene_Save.new
end
#--------------------------------------------------------------------------
# * Command Load
#--------------------------------------------------------------------------
def command_load
# Switch to load screen
$scene = Scene_Load.new
end
#--------------------------------------------------------------------------
# * Command End Game
#--------------------------------------------------------------------------
def command_endgame
# Switch to end game screen
$scene = Scene_End.new
end
#--------------------------------------------------------------------------
# * Activate Status Window
#--------------------------------------------------------------------------
def active_status_window
# Make status window active
@command_window.active = false
@status_window.active = true
@status_window.visible = true
@status_window.index = 0
end
end
**메뉴명령 중 Quest와 Option은 해당 기능을 하는 스크립트가 있어야 합니다.