[RGSS3] STOP GALV'S BUST FLICKER [SOLVED]
Posts
Pages:
1
Red_Nova
Sir Redd of Novus: He who made Prayer of the Faithless that one time, and that was pretty dang rad! :D
9192
This is an issue that's been plaguing me for a while, and temporary fixes just won't cut it anymore: When using Galv's Message Busts script, you can cause a bust to "flicker" when setting a character's move route to turn in a single direction between two messages with busts.
Like so: (Apologies for the low framerate of the gif. That makes it harder to see, but trust me, it's there)
If you look carefully, there's a split second where the bust pops back on the screen before the text box opens up again. Double that flicker length to account for the loss of frames due to the gif, and you've got a real eyestrain here.
There are workarounds that I've used, such as unchecking the Wait For Completion box, but I'd like to deal with the problem at its source rather than temporary fixes.
So here's what I've done to try and address this problem:
The sleep command pauses the game for 0.05 seconds, which shouldn't be noticeable by the human eye. At least I didn't notice anything, and I was looking for potential issues. This command gives the game a few extra cycles to fully dispose of the bust before loading in a new one. When testing, I can't see any potential issues.
Perhaps I'm being a perfectionist, but I don't like this method. It feels way too indelicate and clunky to count as a good solution. So what I'm asking is this: is there a better way to remove the flicker than the sleep method?
Thanks so much in advance!
EDIT: Just saw the programming subforum after clicking submit. Whoops. Hopefully this is the right place to put this topic!
EDIT2: On further testing, the flicker rears its ugly head again when displaying a message with a bust after a message with no bust. So the sleep command idea is scrapped and I'm back as square one. Yay.
Like so: (Apologies for the low framerate of the gif. That makes it harder to see, but trust me, it's there)
If you look carefully, there's a split second where the bust pops back on the screen before the text box opens up again. Double that flicker length to account for the loss of frames due to the gif, and you've got a real eyestrain here.
There are workarounds that I've used, such as unchecking the Wait For Completion box, but I'd like to deal with the problem at its source rather than temporary fixes.
So here's what I've done to try and address this problem:
alias galv_busts_message_clear clear def clear @bust_name = "" @bust_index = 0 sleep(0.05) #Nova added galv_busts_message_clear end end # Game_Message
The sleep command pauses the game for 0.05 seconds, which shouldn't be noticeable by the human eye. At least I didn't notice anything, and I was looking for potential issues. This command gives the game a few extra cycles to fully dispose of the bust before loading in a new one. When testing, I can't see any potential issues.
Perhaps I'm being a perfectionist, but I don't like this method. It feels way too indelicate and clunky to count as a good solution. So what I'm asking is this: is there a better way to remove the flicker than the sleep method?
Thanks so much in advance!
EDIT: Just saw the programming subforum after clicking submit. Whoops. Hopefully this is the right place to put this topic!
EDIT2: On further testing, the flicker rears its ugly head again when displaying a message with a bust after a message with no bust. So the sleep command idea is scrapped and I'm back as square one. Yay.
Put together a test project where it's easy to recreate the issue and I'll see what I can do over the weekend.
Red_Nova
Sir Redd of Novus: He who made Prayer of the Faithless that one time, and that was pretty dang rad! :D
9192
Sure thing! I just took Galv's bust demo and added events that highlight the issue.
Thanks in advance!
Thanks in advance!
I think the event page might be more helpful than the script.
Edit: What does this script actually do?
(I mean you can show busts through eventing.)
I played around with it some last night and found out there's two bugs that are causing the flickering: One is that when it clears a message the script doesn't clear the bust correctly, removing it for one frame before bringing it back up immediately. The other is when it tries to tie the bust's opacity to the openness of the message window, but I haven't quite tracked the cause of this down yet so I might be wrong. I've fixed the first issue (when the message is cleared I use a flag so the bust is only cleared after the message window is closed) but not the second. I can bypass it (ignore setting the bust opacity to the openness of the message window) but I can't find exactly why it's flickering. I'll give it another look Tuesday or Wednesday.
I seriously wonder if this script was tested at all beyond making a bust appear and calling it the day.
I seriously wonder if this script was tested at all beyond making a bust appear and calling it the day.
Red_Nova
Sir Redd of Novus: He who made Prayer of the Faithless that one time, and that was pretty dang rad! :D
9192
So here's a thing:
I added an output feeler (just a simple puts "dispose called" command) into the dispose method (line 112), but a message never showed up in the output. This means dispose, and consequentially dispose_bust, is never being called. Think this could be why there's a flicker? If the bust is never actually being disposed, then it makes sense for opacity and the cleared message to cause trouble when creating a new bust.
EDIT: Nope. The feelers only turn up positive when returning to the title screen, so these methods aren't for everyday use like closing a message window. Herp derp.
I added an output feeler (just a simple puts "dispose called" command) into the dispose method (line 112), but a message never showed up in the output. This means dispose, and consequentially dispose_bust, is never being called. Think this could be why there's a flicker? If the bust is never actually being disposed, then it makes sense for opacity and the cleared message to cause trouble when creating a new bust.
EDIT: Nope. The feelers only turn up positive when returning to the title screen, so these methods aren't for everyday use like closing a message window. Herp derp.
They're called on a scene change, I had the same thought at first too. I had some prints when the bust bitmap is set to nil and when the opacity changes with some conditionals since the update_bust method is called every frame to help figure out the issue.
I can post my work in progress when I get home if it helps. I'm also using one of the test events that was off to one side since the flicker also appears in one of them.
I can post my work in progress when I get home if it helps. I'm also using one of the test events that was off to one side since the flicker also appears in one of them.
Red_Nova
Sir Redd of Novus: He who made Prayer of the Faithless that one time, and that was pretty dang rad! :D
9192
Yeah, a WIP script would be really helpful, thanks!
Here's the current WIP:
I haven't added comments or anything yet, it's more confounding than frustrating so far. I'm half tempted to just reimplement the whole thing. Also I slipped in the quick alias and super fixes because uuuuuuuuuuuuuuugh but I don't think I tested the draw_face yet since that was a super->alias rewrite.
#------------------------------------------------------------------------------# # Galv's Message Busts #------------------------------------------------------------------------------# # For: RPGMAKER VX ACE # Version 1.1 #------------------------------------------------------------------------------# # 2013-01-13 - version 1.1 - added option to make busts slide onto the screen # 2012-12-01 - version 1.0 - release #------------------------------------------------------------------------------# # This script automatically displays a message bust instead of a face. #------------------------------------------------------------------------------# # INSTRUCTIONS: # Put in script list below Materials and above Main. # # Put bust images in Graphics/Pictures/ and name them the same as the face # graphic used in the message, plus the position of the face in it. # For example: # If the message shows "Actor1" face file and uses the first face in that file # then you will name the bust image "Actor1-1.png" # # Download the demo if you don't understand # # NOTE: This script does NOT contain bust images. You will need your own. # #------------------------------------------------------------------------------# # SCRIPT CALL #------------------------------------------------------------------------------# # # bust_mirror(x) # x can be true or false. All messages after this # # call will change until changed again. # # false = on left. true = on right and flipped. # #------------------------------------------------------------------------------# ($imported ||= {})["Galvs_Message_Busts"] = true module Galv_Bust #Graphics.frame_rate = 20 #------------------------------------------------------------------------------# # SCRIPT SETTINGS #------------------------------------------------------------------------------# DISABLE_SWITCH = 1 # Turn swith ON to disable busts and show normal face BUST_Z = -1 # adds to z value of busts if needed. A negative number # will make the bust appear below the message window. BUST_Y_OVER = false # can be true or false # true = busts sit at the bottom of the screen # false = busts sit on top of the message window TEXT_X = 0 # Offset text when displaying busts above the message # window. The script automatically offsets the text x # by the bust image width IF the BUST_Z is 0 or more. SLIDE = false # Slide portrait onto the screen instead of fading in. #------------------------------------------------------------------------------# # END SCRIPT SETTINGS #------------------------------------------------------------------------------# end class Game_Interpreter def bust_mirror(state) $game_message.mirror = state end alias galv_busts_command_101 command_101 unless $@ def command_101 print "Setting bust name\n" $game_message.bust_name = @params[0] $game_message.bust_index = @params[1] $game_message.clear_bust_flag = false galv_busts_command_101 end end # Game_Interpreter class Game_Message attr_accessor :bust_name attr_accessor :bust_index attr_accessor :mirror attr_accessor :clear_bust_flag alias galv_busts_message_initialize initialize unless $@ def initialize galv_busts_message_initialize @mirror = false @clear_flag = false end alias galv_busts_message_clear clear unless $@ def clear print "Clearing game message\n" #@bust_name = "" @clear_bust_flag = true @bust_index = 0 galv_busts_message_clear end end # Game_Message class Window_Message < Window_Base alias galv_busts_window_create_back_bitmap create_back_bitmap unless $@ def create_back_bitmap @bust = Sprite.new if @bust.nil? @bust.visible = true @bust.opacity = 0 @bust.z = z + Galv_Bust::BUST_Z galv_busts_window_create_back_bitmap end alias galv_busts_window_dispose dispose unless $@ def dispose galv_busts_window_dispose dispose_bust end def dispose_bust @bust.dispose if !@bust.nil? @bust.bitmap.dispose if !@bust.bitmap.nil? end alias galv_busts_window_update_back_sprite update_back_sprite unless $@ def update_back_sprite galv_busts_window_update_back_sprite update_bust if openness > 0 if openness == 0 and $game_message.clear_bust_flag print "executing clear flag\n" @bust_name = "" $game_message.clear_bust_flag = false @bust.opacity = 0 end end def update_bust if !$game_message.bust_name.empty? && !$game_switches[Galv_Bust::DISABLE_SWITCH] print "Setting @bust.bitmap\n" if @bust.bitmap.nil? @bust.mirror = $game_message.mirror @bust.bitmap = Cache.picture($game_message.bust_name + "-" + ($game_message.bust_index + 1).to_s) if !$game_message.mirror if Galv_Bust::SLIDE @bust.x = ((openness.to_f / 255) * @bust.width) - @bust.width else @bust.x = 0 end else if Galv_Bust::SLIDE @bust.x = Graphics.width - ((openness.to_f / 255) * @bust.width) else @bust.x = Graphics.width - @bust.bitmap.width end end if $game_message.position == 2 && !Galv_Bust::BUST_Y_OVER @bust.y = Graphics.height - @bust.bitmap.height - self.height else @bust.y = Graphics.height - @bust.bitmap.height end else print "Clearing @bust.bitmap \n" unless @bust.bitmap.nil? @bust.bitmap = nil end if $game_switches[Galv_Bust::DISABLE_SWITCH] @bust.opacity = 0 else print "Opacity: #{openness}\n" unless openness >= 255 @bust.opacity = 255#openness end @bust.update end def new_line_x if $game_switches[Galv_Bust::DISABLE_SWITCH] $game_message.face_name.empty? ? 0 : 112 else if @bust.z >= self.z && !$game_message.mirror && $game_message.position == 2 $game_message.face_name.empty? ? 0 : @bust.bitmap.width + Galv_Bust::TEXT_X else return 0 end end end alias :galv_busts_draw_face :draw_face unless $@ def draw_face(face_name, face_index, x, y, enabled = true) return if !$game_message.face_name.empty? && !$game_switches[Galv_Bust::DISABLE_SWITCH] galv_busts_draw_face(face_name, face_index, x, y, enabled) end end # Window_Message < Window_Base
I haven't added comments or anything yet, it's more confounding than frustrating so far. I'm half tempted to just reimplement the whole thing. Also I slipped in the quick alias and super fixes because uuuuuuuuuuuuuuugh but I don't think I tested the draw_face yet since that was a super->alias rewrite.
Red_Nova
Sir Redd of Novus: He who made Prayer of the Faithless that one time, and that was pretty dang rad! :D
9192
This is great progress! Now all that's needed is to cause it to disappear when doing wait commands. I played around with your version, and I just can't for the life of me figure out why the updates don't occur when they should.
Outside of oneoff battle quotes, there will be no facesets used in this game, so don't lose sleep at night trying to smooth that out if you can help it. I disabled busts for a quick test, and facesets seems to work just fine.
Oh man so am I. Since I don't plan on using most of the features of this script, like the slide or mirror, it might just be easier to write my own. Ugh.
Outside of oneoff battle quotes, there will be no facesets used in this game, so don't lose sleep at night trying to smooth that out if you can help it. I disabled busts for a quick test, and facesets seems to work just fine.
I'm half tempted to just reimplement the whole thing.
Oh man so am I. Since I don't plan on using most of the features of this script, like the slide or mirror, it might just be easier to write my own. Ugh.
Sorry for the procrastination, I fixed it (and by fixed I mean it's now a horrible abomination because aaaaaaaaAAAAAAAAAAAAAAAAAAAAAAHHHHHHHH)
Here's the test project with the fixed script. Still has my various print commands if you want to see how I tried to debug this thing. Four test cases that have zero flicker among all of them, plus an event that tanks the frame rate because I thought I was going mad and thought there was a one frame message freakout when there wasn't.
Script here:
Here's the test project with the fixed script. Still has my various print commands if you want to see how I tried to debug this thing. Four test cases that have zero flicker among all of them, plus an event that tanks the frame rate because I thought I was going mad and thought there was a one frame message freakout when there wasn't.
Script here:
#------------------------------------------------------------------------------# # Galv's Message Busts #------------------------------------------------------------------------------# # For: RPGMAKER VX ACE # Version 1.1 #------------------------------------------------------------------------------# # 2013-01-13 - version 1.1 - added option to make busts slide onto the screen # 2012-12-01 - version 1.0 - release #------------------------------------------------------------------------------# # This script automatically displays a message bust instead of a face. #------------------------------------------------------------------------------# # INSTRUCTIONS: # Put in script list below Materials and above Main. # # Put bust images in Graphics/Pictures/ and name them the same as the face # graphic used in the message, plus the position of the face in it. # For example: # If the message shows "Actor1" face file and uses the first face in that file # then you will name the bust image "Actor1-1.png" # # Download the demo if you don't understand # # NOTE: This script does NOT contain bust images. You will need your own. # #------------------------------------------------------------------------------# # SCRIPT CALL #------------------------------------------------------------------------------# # # bust_mirror(x) # x can be true or false. All messages after this # # call will change until changed again. # # false = on left. true = on right and flipped. # #------------------------------------------------------------------------------# ($imported ||= {})["Galvs_Message_Busts"] = true module Galv_Bust #Graphics.frame_rate = 20 #------------------------------------------------------------------------------# # SCRIPT SETTINGS #------------------------------------------------------------------------------# DISABLE_SWITCH = 1 # Turn swith ON to disable busts and show normal face BUST_Z = -1 # adds to z value of busts if needed. A negative number # will make the bust appear below the message window. BUST_Y_OVER = false # can be true or false # true = busts sit at the bottom of the screen # false = busts sit on top of the message window TEXT_X = 0 # Offset text when displaying busts above the message # window. The script automatically offsets the text x # by the bust image width IF the BUST_Z is 0 or more. SLIDE = false # Slide portrait onto the screen instead of fading in. #------------------------------------------------------------------------------# # END SCRIPT SETTINGS #------------------------------------------------------------------------------# end class Game_Interpreter def bust_mirror(state) $game_message.mirror = state end alias galv_busts_command_101 command_101 unless $@ def command_101 print "Setting bust name to #{@params[0]}-#{@params[1]}\n" $game_message.bust_name = @params[0] $game_message.bust_index = @params[1] $game_message.clear_bust_flag = true galv_busts_command_101 end end # Game_Interpreter class Game_Message attr_accessor :bust_name attr_accessor :bust_index attr_accessor :mirror attr_accessor :clear_bust_flag alias galv_busts_message_initialize initialize unless $@ def initialize galv_busts_message_initialize @mirror = false @clear_flag = false end alias galv_busts_message_clear clear unless $@ def clear print "Clearing game message\n" #@bust_name = "" @clear_bust_flag = true @bust_index = 0 galv_busts_message_clear end end # Game_Message class Window_Message < Window_Base alias galv_busts_window_create_back_bitmap create_back_bitmap unless $@ def create_back_bitmap @bust = Sprite.new if @bust.nil? @bust.visible = true @bust.opacity = 0 @bust.z = z + Galv_Bust::BUST_Z galv_busts_window_create_back_bitmap end alias galv_busts_window_dispose dispose unless $@ def dispose galv_busts_window_dispose dispose_bust end def dispose_bust @bust.dispose if !@bust.nil? @bust.bitmap.dispose if !@bust.bitmap.nil? end alias galv_busts_window_update_back_sprite update_back_sprite unless $@ def update_back_sprite galv_busts_window_update_back_sprite update_bust if openness > 0 if openness == 0 and $game_message.clear_bust_flag print "executing clear flag @ openness: #{openness}\n" @bust_name = "" $game_message.clear_bust_flag = false @bust.opacity = 0 end end def update_bust if not $game_message.clear_bust_flag # If a bust name is set then mark it to appear if !$game_message.bust_name.empty? && !$game_switches[Galv_Bust::DISABLE_SWITCH] print "Setting @bust.bitmap\n" if @bust.bitmap.nil? @bust.mirror = $game_message.mirror @bust.bitmap = Cache.picture($game_message.bust_name + "-" + ($game_message.bust_index + 1).to_s) if !$game_message.mirror if Galv_Bust::SLIDE @bust.x = ((openness.to_f / 255) * @bust.width) - @bust.width else @bust.x = 0 end else if Galv_Bust::SLIDE @bust.x = Graphics.width - ((openness.to_f / 255) * @bust.width) else @bust.x = Graphics.width - @bust.bitmap.width end end if $game_message.position == 2 && !Galv_Bust::BUST_Y_OVER @bust.y = Graphics.height - @bust.bitmap.height - self.height else @bust.y = Graphics.height - @bust.bitmap.height end # No bust name is set so clear the bust bitmap else print "Clearing @bust.bitmap \n" unless @bust.bitmap.nil? @bust.bitmap = nil end end # Update the bust opacity if $game_switches[Galv_Bust::DISABLE_SWITCH] or @bust.bitmap.nil? @bust.opacity = 0 else print "Opacity: #{openness}\n" unless openness >= 255 @bust.opacity = openness end @bust.update end def new_line_x if $game_switches[Galv_Bust::DISABLE_SWITCH] $game_message.face_name.empty? ? 0 : 112 else if @bust.z >= self.z && !$game_message.mirror && $game_message.position == 2 $game_message.face_name.empty? ? 0 : @bust.bitmap.width + Galv_Bust::TEXT_X else return 0 end end end alias :galv_busts_draw_face :draw_face unless $@ def draw_face(face_name, face_index, x, y, enabled = true) return if !$game_message.face_name.empty? && !$game_switches[Galv_Bust::DISABLE_SWITCH] galv_busts_draw_face(face_name, face_index, x, y, enabled) end end # Window_Message < Window_Base
Red_Nova
Sir Redd of Novus: He who made Prayer of the Faithless that one time, and that was pretty dang rad! :D
9192
I'll do some testing on it when I get some free time tomorrow. Thanks GRS!
Red_Nova
Sir Redd of Novus: He who made Prayer of the Faithless that one time, and that was pretty dang rad! :D
9192
So I tested it out, and the flicker problem is gone. Yaay! However, a new problem took its place. I suppose it's my fault for not including this test case, but I didn't think about it until just now:
If there are events moving around without the wait for completion box checked, then the busts will not change. See here how I changed the actor message graphic in the second text box (a message to a completely different actor graphic, btw):
Yet in action:
At this point, I'm more inclined to just forget about fixing it and toss in a 5 frame wait period whenever I have a moment like this. Or better yet, elongate the pause so busts are flashing out of existence for more than a split second and players can see the short movement clearer.
If there are events moving around without the wait for completion box checked, then the busts will not change. See here how I changed the actor message graphic in the second text box (a message to a completely different actor graphic, btw):
Yet in action:
At this point, I'm more inclined to just forget about fixing it and toss in a 5 frame wait period whenever I have a moment like this. Or better yet, elongate the pause so busts are flashing out of existence for more than a split second and players can see the short movement clearer.
Ahh, I know what that is: Part of the original problem is that the script doesn't synchronize the bust to the message state. A new message with a different bust is updated immediately while the old message is still open (and then flickers because the bust's opacity is tied to the openness of the message, so the message closest over 4 frames or so then comes back up as the next message opens). Part of my fix was that it can only change the bust under certain circumstances to prevent the above and it looks like I was too eager with that. I'll just do this good and proper this time.
Red_Nova
Sir Redd of Novus: He who made Prayer of the Faithless that one time, and that was pretty dang rad! :D
9192
Oh, that'd be great. Thanks!
Alright, take 2 at trying to fix this! I did some more extensive work to avoid the script exploding into spaghetti and easier management and it handles a new test case of continuous messages with different busts now. I don't see any flickering in any of them.
You can download the text project here. I also removed all my print helpers this time (except for one to report an error). The script is:
e: For reference, the only real fix was checking to see if the text was going to continue (text_continuing) and either waiting for the message to close before updating the bust or doing so immediately based on that flag. The rest was mostly cleanup because I didn't know that flag existed until about 5 minutes before I fixed the whole thing. /e:
You can download the text project here. I also removed all my print helpers this time (except for one to report an error). The script is:
e: For reference, the only real fix was checking to see if the text was going to continue (text_continuing) and either waiting for the message to close before updating the bust or doing so immediately based on that flag. The rest was mostly cleanup because I didn't know that flag existed until about 5 minutes before I fixed the whole thing. /e:
#------------------------------------------------------------------------------# # Galv's Message Busts #------------------------------------------------------------------------------# # For: RPGMAKER VX ACE # Version 1.1 #------------------------------------------------------------------------------# # 2013-01-13 - version 1.1 - added option to make busts slide onto the screen # 2012-12-01 - version 1.0 - release #------------------------------------------------------------------------------# # This script automatically displays a message bust instead of a face. #------------------------------------------------------------------------------# # INSTRUCTIONS: # Put in script list below Materials and above Main. # # Put bust images in Graphics/Pictures/ and name them the same as the face # graphic used in the message, plus the position of the face in it. # For example: # If the message shows "Actor1" face file and uses the first face in that file # then you will name the bust image "Actor1-1.png" # # Download the demo if you don't understand # # NOTE: This script does NOT contain bust images. You will need your own. # #------------------------------------------------------------------------------# # SCRIPT CALL #------------------------------------------------------------------------------# # # bust_mirror(x) # x can be true or false. All messages after this # # call will change until changed again. # # false = on left. true = on right and flipped. # #------------------------------------------------------------------------------# ($imported ||= {})["Galvs_Message_Busts"] = true module Galv_Bust #------------------------------------------------------------------------------# # SCRIPT SETTINGS #------------------------------------------------------------------------------# DISABLE_SWITCH = 1 # Turn swith ON to disable busts and show normal face BUST_Z = -1 # adds to z value of busts if needed. A negative number # will make the bust appear below the message window. BUST_Y_OVER = false # can be true or false # true = busts sit at the bottom of the screen # false = busts sit on top of the message window TEXT_X = 0 # Offset text when displaying busts above the message # window. The script automatically offsets the text x # by the bust image width IF the BUST_Z is 0 or more. SLIDE = false # Slide portrait onto the screen instead of fading in. #------------------------------------------------------------------------------# # END SCRIPT SETTINGS #------------------------------------------------------------------------------# end class Game_Interpreter def bust_mirror(state) $game_message.mirror = state end alias galv_busts_command_101 command_101 unless $@ def command_101 $game_message.set_next_bust(@params[0], @params[1]) galv_busts_command_101 end end # Game_Interpreter class Game_Message attr_accessor :bust_name attr_accessor :bust_index attr_accessor :mirror alias galv_busts_message_initialize initialize unless $@ def initialize galv_busts_message_initialize @mirror = false @next_bust_name = @next_bust_index = nil end alias galv_busts_message_clear clear unless $@ def clear @bust_name = "" @bust_index = 0 galv_busts_message_clear end def set_next_bust(bust_name, bust_index) @next_bust_name = bust_name @next_bust_index = bust_index end def has_next_bust return !@next_bust_name.nil? end def next_bust_visible return @next_bust_name != "" end def advance_next_bust @bust_name = @next_bust_name @bust_index = @next_bust_index @next_bust_name = @next_bust_index = nil end def next_bust_name return "#{@next_bust_name}-#{@next_bust_index.nil? ? 0 : @next_bust_index + 1}" end end # Game_Message class Window_Message < Window_Base alias galv_busts_window_create_back_bitmap create_back_bitmap unless $@ def create_back_bitmap @bust = Sprite.new if @bust.nil? #@bust.visible = true # This is controlled via refresh_bust now @bust.opacity = 0 @bust.z = z + Galv_Bust::BUST_Z galv_busts_window_create_back_bitmap end alias galv_busts_window_dispose dispose unless $@ def dispose galv_busts_window_dispose dispose_bust end def dispose_bust @bust.dispose if !@bust.nil? @bust.bitmap.dispose if !@bust.bitmap.nil? end alias galv_busts_window_update_back_sprite update_back_sprite unless $@ def update_back_sprite galv_busts_window_update_back_sprite update_bust if openness > 0 # If there's a next bust in the queue we need to handle it on the current state of the window if $game_message.has_next_bust # If we're closing wait until we're closed all the way before updating the bust if @closing and self.openness == 0 refresh_bust # If we aren't closing then just update the bust immediately elsif not @closing and text_continue? refresh_bust end end end # Change the currently displayed bust to reflect the current bust name+index as set in Game_Message # If no bust is set it will mark the bust as invisible def refresh_bust if not $game_message.next_bust_visible or $game_switches[Galv_Bust::DISABLE_SWITCH] # If the bust isn't meant to be visible we'll just clear it using the visible flag @bust.visible = false # (should it be disposed? I don't know how the blackbox cache works wrt this) else # The bust may be marked not visible via the above code so we have to make sure it's marked # visible if we're changing the bust's bitmap @bust.visible = true begin # Change the bust's bitmap to match what is in game_message @bust.bitmap = Cache.picture($game_message.next_bust_name) rescue # An error occured with the bitmap, print it to console and hide the bust print "Could not load next bust name: #{$game_message.next_bust_name}\n" @bust.visible = false end # Now that we got the next bust set we can tell the game message to advance it $game_message.advance_next_bust # And update the bust to resolve any placement issues immediately update_bust end end def update_bust # If a bust name is set then mark it to appear if !$game_message.bust_name.empty? && !$game_switches[Galv_Bust::DISABLE_SWITCH] @bust.mirror = $game_message.mirror # This is handled by refresh_bust now #@bust.bitmap = Cache.picture($game_message.bust_name + "-" + ($game_message.bust_index + 1).to_s) if !$game_message.mirror if Galv_Bust::SLIDE @bust.x = ((openness.to_f / 255) * @bust.width) - @bust.width else @bust.x = 0 end else if Galv_Bust::SLIDE @bust.x = Graphics.width - ((openness.to_f / 255) * @bust.width) else @bust.x = Graphics.width - @bust.bitmap.width end end if $game_message.position == 2 && !Galv_Bust::BUST_Y_OVER @bust.y = Graphics.height - @bust.bitmap.height - self.height else @bust.y = Graphics.height - @bust.bitmap.height end else # This is handled by refresh_bust now #@bust.bitmap = nil end # Update the bust opacity if $game_switches[Galv_Bust::DISABLE_SWITCH] or @bust.bitmap.nil? @bust.opacity = 0 else @bust.opacity = openness end @bust.update end def new_line_x if $game_switches[Galv_Bust::DISABLE_SWITCH] $game_message.face_name.empty? ? 0 : 112 else if @bust.z >= self.z && !$game_message.mirror && $game_message.position == 2 $game_message.face_name.empty? ? 0 : @bust.bitmap.width + Galv_Bust::TEXT_X else return 0 end end end alias :galv_busts_draw_face :draw_face unless $@ def draw_face(face_name, face_index, x, y, enabled = true) return if !$game_message.face_name.empty? && !$game_switches[Galv_Bust::DISABLE_SWITCH] galv_busts_draw_face(face_name, face_index, x, y, enabled) end end # Window_Message < Window_Base
Red_Nova
Sir Redd of Novus: He who made Prayer of the Faithless that one time, and that was pretty dang rad! :D
9192
I did some testing, and everything works just fine! Man, this is such a huge load off my back. I can't thank you enough for this, GRS!
Pages:
1