#==============================================================================
# ■ Ring Menu Config Module
# by Reno-s--Joker
#------------------------------------------------------------------------------
# I'm still just getting the hang of modules, but this may make your icon
# changing much easier.
#==============================================================================
module RM_CFG
#--------------------------------------------------------------------------
# ● Icons for the addon windows
#--------------------------------------------------------------------------
Gold_Icon = '034-Item03'
Map_Icon = '038-Item07'
#--------------------------------------------------------------------------
# ● Icons for the main ring
#--------------------------------------------------------------------------
Item_Icon = '021-Potion01'
Skill_Icon = '044-Skill01'
Equip_Icon = '020-Accessory05'
Status_Icon = '049-Skill06'
Save_Icon = '047-Skill04'
Exit_Icon = '048-Skill05'
Disabled_Icon = '046-Skill03'
Openmenu_Se = ''
#--------------------------------------------------------------------------
# ● Fix for near screen edge hiding, thanks to Landith and Aqua
#--------------------------------------------------------------------------
Edge_Hide_Fix = true
end
#==============================================================================
# ■ End Ring Menu Config Module
#==============================================================================
#==============================================================================
# ■ Window_Gold
# by Reno-s--Joker
#------------------------------------------------------------------------------
# Shows the amount of gold in the menu.
# Minor aesthetic modifications made for new menu.
#==============================================================================
class Window_Gold < Window_Base
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
def initialize
super(0, 0, 148, 64)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
#--------------------------------------------------------------------------
# ● Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
cx = contents.text_size($data_system.words.gold).width
self.contents.font.color = normal_color
self.contents.blt(4, 4, RPG::Cache.icon(RM_CFG::Gold_Icon), Rect.new(0, 0, 24, 24), 255)
self.contents.draw_text(4, 0, 100-cx-2, 32, $game_party.gold.to_s, 2)
self.contents.font.color = system_color
self.contents.draw_text(104-cx, 0, cx, 32, $data_system.words.gold, 2)
end
end
#==============================================================================
# ■ End Window_Gold
#==============================================================================
#==============================================================================
# ■ Window_PlayTime
# by Reno-s--Joker
#------------------------------------------------------------------------------
# Shows the amount of time spent playing.
# Minor aesthetic modifications made for new menu.
#==============================================================================
class Window_PlayTime < Window_Base
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
def initialize
super(0, 0, 148, 64)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
#--------------------------------------------------------------------------
# ● Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.color = system_color
@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.draw_text(4, 0, 100, 32, text, 2)
end
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------
def update
super
if Graphics.frame_count / Graphics.frame_rate != @total_sec
refresh
end
end
end
#==============================================================================
# ■ End Window_PlayTime
#==============================================================================
#==============================================================================
# ■ Window_Steps
# by Reno-s--Joker
#------------------------------------------------------------------------------
# Also includes map name (location)
# Replaces the one which comes with the Ring Menu entirely.
# New addition - encounter steps in v 1.1
#==============================================================================
class Window_Steps < Window_Base
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
def initialize
super(0, 0, 148, 128)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
#--------------------------------------------------------------------------
# ● Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 124, 32, "Steps: " + $game_party.steps.to_s, 0)
self.contents.draw_text(4, 32, 124, 32, "Enc. Stps: " + $game_map.encounter_step.to_s, 0)
# Another thing can be added at y=32 e.g. No. of Kills
# (from Blizzard's Tons of Addons)
self.contents.font.color = normal_color
self.contents.blt(4, 70, RPG::Cache.icon(RM_CFG::Map_Icon), Rect.new(0, 0, 24, 24), 160)
map_name = $game_map.name.tr("/*","")
# Just ignore that thing I said before in the other demo... ^^;
self.contents.draw_text(8, 64, 124, 32, map_name.to_s)
end
end
#==============================================================================
# ■ End Window_Steps
#==============================================================================
#==============================================================================
# ■ Window_Status
# by Reno-s--Joker
#==============================================================================
# This window displays full status specs on the status screen.
#==============================================================================
class Window_Status < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
# actor : actor
#--------------------------------------------------------------------------
def initialize(actor)
super(0, 0, 480, 320)
self.contents = Bitmap.new(width - 32, height - 32)
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# ● Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
# Draws the actor's battler behind the info
draw_actor_picture(@actor, 360, 300)
# Actor's name
self.contents.font.size = 32
draw_actor_name(@actor, 0, 0)
self.contents.font.size = 20
# Main stats section
draw_actor_class(@actor, 0, 24)
draw_actor_level(@actor, 0, 56)
draw_actor_state(@actor, 68, 56)
draw_actor_hp(@actor, 0, 82, 172)
draw_actor_sp(@actor, 0, 106, 172)
# Actor parameter section
draw_actor_parameter(@actor, 0, 132, 0)
draw_actor_parameter(@actor, 0, 150, 1)
draw_actor_parameter(@actor, 0, 168, 2)
draw_actor_parameter(@actor, 0, 186, 3)
draw_actor_parameter(@actor, 0, 204, 4)
draw_actor_parameter(@actor, 0, 222, 5)
draw_actor_parameter(@actor, 0, 240, 6)
# EXP section
self.contents.font.color = system_color
self.contents.draw_text(240, 56, 150, 32, "Total Exp: ")
tx = contents.text_size("Total Exp: ").width
draw_actor_exp(@actor, 240, 80)
self.contents.font.color = normal_color
self.contents.draw_text(tx + 244, 56, 76, 32, @actor.exp_s, 2)
# Equipment Section
self.contents.font.color = system_color
self.contents.draw_text(240, 120, 88, 32, "Equipment: ")
draw_item_name($data_weapons[@actor.weapon_id], 240, 148)
draw_item_name($data_armors[@actor.armor1_id], 240, 172)
draw_item_name($data_armors[@actor.armor2_id], 240, 196)
draw_item_name($data_armors[@actor.armor3_id], 240, 220)
draw_item_name($data_armors[@actor.armor4_id], 240, 246)
end
#--------------------------------------------------------------------------
# ● Defines the drawing processes
#--------------------------------------------------------------------------
def draw_actor_picture(actor, x, y)
bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue)
x2 = bitmap.width
y2 = bitmap.height
x3 = x2 / 2
src_rect = Rect.new(0, 0, x2, y2)
self.contents.blt(x - x3, y - y2, bitmap, src_rect)
end
def draw_actor_name(actor, x, y)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 448, 32, actor.name, 1)
end
def draw_actor_class(actor, x, y)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 448, 32, actor.class_name, 1)
end
#--------------------------------------------------------------------------
# ● Other stuff which needs to be there although I dunno why... XD
#--------------------------------------------------------------------------
def update_actor(actor)
@actor = actor
refresh
end
def dummy
self.contents.font.color = system_color
self.contents.draw_text(320, 112, 96, 32, $data_system.words.weapon)
self.contents.draw_text(320, 176, 96, 32, $data_system.words.armor1)
self.contents.draw_text(320, 240, 96, 32, $data_system.words.armor2)
self.contents.draw_text(320, 304, 96, 32, $data_system.words.armor3)
self.contents.draw_text(320, 368, 96, 32, $data_system.words.armor4)
draw_item_name($data_weapons[@actor.weapon_id], 320 + 24, 144)
draw_item_name($data_armors[@actor.armor1_id], 320 + 24, 208)
draw_item_name($data_armors[@actor.armor2_id], 320 + 24, 272)
draw_item_name($data_armors[@actor.armor3_id], 320 + 24, 336)
draw_item_name($data_armors[@actor.armor4_id], 320 + 24, 400)
end
end
#==============================================================================
# ■ End Window_Status
#==============================================================================
#===============================================================================
# ■ Ring Menu Modification by Reno-s--Joker v 1.2
#===============================================================================
# This is a simple aesthetic modification to this awesome Ring Menu I found.
# It makes a small change to the actor selection window, making it available
# at all times instead of popping up on the side of the screen when it's needed.
# It also integrates the location window into the player select window, and I
# have added an animated status window.
# Note that this mod reduces the area of the screen where the ring menu looks
# good/is visible. You can remove the show player location function to counter
# this.
#
# This updated version features a suggestion by Starrodkirby86 for the addon
# windows to be moved to the top or bottom of the screen according to the
# player's position.
# It also includes a request by Kagutsuchi for the encounter chance to appear
# in the menu and some other minor script modifications.
#
# I've also included an experimental version of the ring menu for the title
# screen.
#
# In v 1.2, I have included a feature which moves the ring menu when the player
# is at the edges of the screen, the credits for which go to Landith and Aqua.
#
# If you have any issues with my modification, please report them at
# chaos-project.org
# Original script authors see below.
#===============================================================================
# ■ Ring Menu - Show Player Location - Release #1 (Edited By Dubealex)
#===============================================================================
# For more infos and update, visit:
# rmxp.dubealex.com [OR] X-RPG V2 Forum
#
# 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, just ask, and I will release
# new version of this edited script !
#
# alex@dubealex.com
#===============================================================================
#===============================================================================
# ▼ CLASS Scene_Menu Begins
#===============================================================================
class Scene_Menu
#--------------------------------------------------------------------------
# œ ƒIƒuƒWƒFƒNƒg‰Šú‰»
# menu_index : ƒRƒ}ƒ"ƒh,̃J[ƒ\ƒ‹‰ŠúˆÊ'u
# I modified it to get rid of unnecessary config variables
#--------------------------------------------------------------------------
def initialize(menu_index = 0, actor_index = 0)
@menu_index = menu_index
@actor_index = actor_index # New addition for new window
$ring_menu_text=[]
$chara_select=[]
@window_opacity=[]
#-------------------------------------------------------------------------------
# ■ 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.
#
# This section has been modified to remove some unused variables
# ▼ SHOW LOCATION WINDOW SETTINS:
@window_opacity[0]=200 # Border Opacity
@window_opacity[1]=32 # Background Opacity
# ▼ TEXT SETTINGS FOR INSIDE THE RING MENU:
$ring_menu_text[0]="Tahoma" # Font Type
$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
$ring_menu_text[7]=0 # Font Color
$ring_menu_text[8]=22 # Font Size
# ▼ CHARACTER SELECTION WINDOW SETTINGS :
$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
#--------------------------------------------------------------------------
# Main
#--------------------------------------------------------------------------
def main
@actor = $game_party.actors[@actor_index]
# Setup for all the new windows
@playtime_window = Window_PlayTime.new
@playtime_window.x = 492
@playtime_window.opacity = @window_opacity[0]
@playtime_window.back_opacity = @window_opacity[1]
@steps_window = Window_Steps.new
@steps_window.x = 0
@steps_window.opacity = @window_opacity[0]
@steps_window.back_opacity = @window_opacity[1]
@gold_window = Window_Gold.new
@gold_window.x = 492
@gold_window.opacity = @window_opacity[0]
@gold_window.back_opacity = @window_opacity[1]
@status_window = Window_Status.new(@actor)
@status_window.active = false
@status_window.x = 80
@status_window.z = 1999
@status_window.opacity = @window_opacity[0]
@status_window.back_opacity = 200
# ƒXƒvƒ‰ƒCƒgƒZƒbƒg,ðì¬
@spriteset = Spriteset_Map.new
# ƒRƒ}ƒ"ƒhƒEƒBƒ"ƒhƒE,ðì¬
# This section by Dubealex makes the menu appear centred around the actor.
# In version 1.2 it incorporates the option for an edge screen hiding fix
# (where parts of the menu can't be seen near the edges of the screen) by
# Landith and Aqua.
# Set it to true or false in the config.
unless RM_CFG::Edge_Hide_Fix == true
px = $game_player.screen_x - 15
py = $game_player.screen_y - 24
else
if $game_player.screen_x >= 576
px = $game_player.screen_x - 15 - 64
elsif $game_player.screen_x <= 64
px = $game_player.screen_x - 15 + 64
else
px = $game_player.screen_x - 15
end
if $game_player.screen_y >= 416
py = $game_player.screen_y - 24 - 64
elsif $game_player.screen_y <= 64
py = $game_player.screen_y - 24 + 64
else
py = $game_player.screen_y - 24
end
end
@command_window = Window_RingMenu.new(px,py)
@command_window.index = @menu_index
# ƒp[ƒeƒBl",ª 0 l,Ìê‡
# If number of party members is 0
if $game_party.actors.size == 0
# Disable items, skills, equipment, status and save
@command_window.disable_item(0)
@command_window.disable_item(1)
@command_window.disable_item(2)
@command_window.disable_item(3)
@command_window.disable_item(4)
end
@command_window.z = 100
# If save is forbidden
if $game_system.save_disabled
# Disable save
@command_window.disable_item(4)
end
# ƒXƒe[ƒ^ƒXƒEƒBƒ"ƒhƒE,ðì¬
@party_window = Window_RingMenuParty.new
@party_window.x = 148
@party_window.z = 200
@party_window.height = 128
@party_window.opacity=255
@party_window.back_opacity=255
@party_window.visible = true
@party_window.active = false
#--------------------------------------------------------------------------
# This new section was suggested by Starrodkirby86 - Thanks! ;)
# It determines where to move the addon menu windows according to the player's
# position - to the top or to the bottom of the screen.
#--------------------------------------------------------------------------
if $game_player.screen_y < 352
@playtime_window.y = 352
@steps_window.y = 352
@gold_window.y = 416
@status_window.y = -320
@party_window.y = 352
elsif $game_player.screen_y >= 352
@playtime_window.y = 0
@steps_window.y = 0
@gold_window.y = 64
@status_window.y = 800
@party_window.y = 0
end
# ƒgƒ‰ƒ"ƒWƒVƒ‡ƒ"ŽÀs
Graphics.transition
# ƒƒCƒ"ƒ‹[ƒv
loop do
# ƒQ[ƒ€‰æ-Ê,ðXV
Graphics.update
# "ü--Íî•ñ,ðXV
Input.update
# ƒtƒŒ[ƒ€XV
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,ð‰ð•ú
@playtime_window.dispose
@steps_window.dispose
@gold_window.dispose
@status_window.dispose
@command_window.dispose
@party_window.dispose
end
#--------------------------------------------------------------------------
# œ ƒtƒŒ[ƒ€XV
#--------------------------------------------------------------------------
def update
# ƒEƒBƒ"ƒhƒE,ðXV
@playtime_window.update
@steps_window.update
@gold_window.update
@status_window.update
@command_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_party ,ðŒÄ,Ô
if @party_window.active
@party_window.update
update_party
return
end
if @status_window.active
if $game_player.screen_y < 352
if @status_window.y < 16
@status_window.y += 16 # This animates the window
end
elsif $game_player.screen_y >= 352
if @status_window.y > 144
@status_window.y -= 16 # This animates the window
end
end
update_playerstatus
return
end
end
def update_playerstatus
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
if $game_player.screen_y < 352
@status_window.y = -320
else
@status_window.y = 800
end
@status_window.active = false
@party_window.active = true
end
end
#--------------------------------------------------------------------------
# * Frame Update (when command window is active)
#--------------------------------------------------------------------------
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ƒBl",ª 0 l,ÅAƒZ[ƒuAƒ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 # item
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to item screen
$scene = Scene_Item.new
when 1 # skill
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Make status window active
@command_window.active = false
@party_window.active = true
@party_window.visible = true
@party_window.index = 0
when 2 # equipment
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Make status window active
@command_window.active = false
@party_window.active = true
@party_window.visible = true
@party_window.index = 0
when 3 # Status selected
$game_system.se_play($data_system.decision_se)
@command_window.active = false
@party_window.active = true
@party_window.visible = true
@party_window.index = 0
when 4 # save
# If saving is forbidden
if $game_system.save_disabled
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to save screen
$scene = Scene_Save.new
when 5 # end game
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to end game screen
$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ƒŒ[ƒ€XV (ƒXƒe[ƒ^ƒXƒEƒBƒ"ƒhƒE,ªƒAƒNƒeƒBƒu,Ìê‡)
#--------------------------------------------------------------------------
def update_party
# 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
@party_window.active = false
@party_window.index = -1
return
end
# C ƒ{ƒ^ƒ",ª‰Ÿ,³,ê,½ê‡
if Input.trigger?(Input::C)
# Branch by command window cursor position
case @command_window.index
when 1 # skill
# If this actor's action limit is 2 or more
if $game_party.actors[@party_window.index].restriction >= 2
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to skill screen
$scene = Scene_Skill.new(@party_window.index)
when 2 # equipment
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to equipment screen
$scene = Scene_Equip.new(@party_window.index)
when 3 # status
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to status screen
@actor = $game_party.actors[@party_window.index]
@status_window.update_actor(@actor)
@status_window.active = true
@party_window.active = false
end
return
end
end
end
#===============================================================================
# ▲ CLASS Scene_Menu Ends
#===============================================================================
#===============================================================================
# ▼ CLASS Window_RingMenu Begins
# This is mostly the original ring menu script and was not created by me.
# Therefore I have left the (unreadble) comments untouched.
# Some minor modifcations have been made to accomodate extra menu entries.
#===============================================================================
class Window_RingMenu < Window_Base
#--------------------------------------------------------------------------
# › ƒNƒ‰ƒX'è"
#--------------------------------------------------------------------------
STARTUP_FRAMES = 20
MOVING_FRAMES = 5
RING_R = 64
ICON_ITEM = RPG::Cache.icon(RM_CFG::Item_Icon)
ICON_SKILL = RPG::Cache.icon(RM_CFG::Skill_Icon)
ICON_EQUIP = RPG::Cache.icon(RM_CFG::Equip_Icon)
ICON_STATUS = RPG::Cache.icon(RM_CFG::Status_Icon)
ICON_SAVE = RPG::Cache.icon(RM_CFG::Save_Icon)
ICON_EXIT = RPG::Cache.icon(RM_CFG::Exit_Icon)
ICON_DISABLE = RPG::Cache.icon(RM_CFG::Disabled_Icon)
SE_STARTUP = RM_CFG::Openmenu_Se
MODE_START = 1
MODE_WAIT = 2
MODE_MOVEL = 3
MODE_MOVER = 4
#--------------------------------------------------------------------------
# › ƒAƒNƒZƒT
#--------------------------------------------------------------------------
attr_accessor :index
#--------------------------------------------------------------------------
# The stuff in the section below can be accomodated for new menu entries
#--------------------------------------------------------------------------
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]
# I changed this to prevent glitches when modifying the number of menu items
@item_max = @commands.size
@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ƒŒ[ƒ€XV
#--------------------------------------------------------------------------
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_menu_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_menu_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_menu_item(x, y, i)
end
@steps -= 1
if @steps < 1
@mode = MODE_WAIT
end
end
#--------------------------------------------------------------------------
# œ €-Ú,Ì•`‰æ
# x :
# y :
# i : €-Ú"Ô†
#--------------------------------------------------------------------------
def draw_menu_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_RingMenuParty Begins
#===============================================================================
class Window_RingMenuParty < Window_Selectable
#--------------------------------------------------------------------------
# Sets up the new actor selection window
#--------------------------------------------------------------------------
def initialize
super(0, 0, 344, 128)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.size = 20
refresh
self.active = false
self.index = -1
end
#--------------------------------------------------------------------------
# Draws the party's actors and their info into the window
#--------------------------------------------------------------------------
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 = 86 * i
y = 0
actor = $game_party.actors[i]
draw_actor_graphic(actor, x+24, y+48)
draw_actor_name(actor, x-8, y+32+14)
draw_actor_level(actor, x, y + 48+14)
end
end
#--------------------------------------------------------------------------
# Defines the drawing processes
#--------------------------------------------------------------------------
def draw_actor_name(actor, x, y)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 64, 32, actor.name, 1)
end
def draw_actor_level(actor, x, y)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 32, 32, "Lvl")
self.contents.font.color = normal_color
self.contents.draw_text(x + 24, y, 24, 32, actor.level.to_s, 2)
end
#--------------------------------------------------------------------------
# Updates the selection rectangle
#--------------------------------------------------------------------------
def update_cursor_rect
if @index < 0 or @index > $game_party.actors.size - 1
self.cursor_rect.empty
return
elsif @index >= 0 and @index <= $game_party.actors.size - 1
self.cursor_rect.set((@index * 86)-7, 0, 64, 96)
end
end
#--------------------------------------------------------------------------
# Moves the cursor rectangle and prevents it from going off the screen
#--------------------------------------------------------------------------
def update
if @index >= 0 and @index <= $game_party.actors.size - 1
if Input.repeat?(Input::RIGHT)
$game_system.se_play($data_system.cursor_se)
@index += 1
end
if Input.repeat?(Input::LEFT)
$game_system.se_play($data_system.cursor_se)
@index -= 1
end
update_cursor_rect
elsif @index < 0
@index = $game_party.actors.size - 1
elsif @index > $game_party.actors.size - 1
@index = 0
else
self.cursor_rect.empty
return
end
end
end
#===============================================================================
# ▲ CLASS Window_RingMenuParty Ends
#===============================================================================
#===============================================================================
# ▼ CLASS Game_Map Additional Code Begins
#===============================================================================
class Game_Map
#Dubealex Addition (from XRXS) to show Map Name on screen
# This is also necessary for the new Window_Steps
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
# This is also necessary for the new Window_Steps
$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
#===============================================================================
#===============================================================================
# ▲ Ring Menu Script Ends
#===============================================================================