+- Save-Point (https://www.save-point.org)
+-- Forum: Games Development (https://www.save-point.org/forum-4.html)
+--- Forum: Code Support (https://www.save-point.org/forum-20.html)
+--- Thread: Ring Menu + Actor Train? Other party members dissapear... (/thread-2902.html)
Ring Menu + Actor Train? Other party members dissapear... - Shadowgaz - 05-18-2009
Hey all, im sorry to bother you with such a trivial thing. im using the scripts from rataime's demo with sun, dynamic light, and reflection. when i added the ring menu script:
Content Hidden
Code:
#===================================================
# ? 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
#===================================================
#--------------------------------------------------------------------------------------------------
# ? 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
#===================================================
#===================================================
# ? Ring Menu - Show Player Location R1 - Ends
#===================================================
On menu call, the shadows and reflections of the party members remain constant, but the party member graphics dissapear:
Content Hidden
.
Im sure it's not a big problem to fix, but any help is well recived :).
Ring Menu + Actor Train? Other party members dissapear... - DerVVulfman - 05-19-2009
An unfortunate thing about caterpillar scripts (in general). Unless it is an evented system using actual 'events' masquerading as your party members, most of the time the extra characters in your party are drawn as... clones.
They don't usualy take part in the Spriteset_Map section so when a menu script is brought up (any menu script), your extra party members are not going to be redrawn. When the menu disappears, your extra party members may have vanished only to reappear when you take a new step.
It is very common with all caterpillar scripts, from fukuyama's original straight through to Ccoa's and Trickster's.
Ring Menu + Actor Train? Other party members dissapear... - Shadowgaz - 05-19-2009
Oh right, i guess its not so simple to fix then, ill have to bypass with with a menu background, ill make a background with a faded ring or something making only the first player visable so at least the menu still fits. Thank you for your input DerVVulfmanm if you like ill add the menu back to this thread when im done.