Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Some Popup v 2.9
- # VX version
- # by mikb89
- # Details:
- # Show some popup text when facing an event.
- # Text can be placed in center of screen, over the player or over the event.
- # Write [pop] in a comment to assign the popup to an event and write in the
- # next comment the text that will be shown.
- # NOTE: [pop] is by default, but you can change it in the settings.
- # Text can be also grayed, to indicate a non-available something. To do so,
- # write [npop] instead of [pop].
- # You can also show a picture instead of text. In order to do this, the first
- # comment must be [ppop] and the second will contain the name of the Picture.
- # It is possible to play a sound/music effect for each event. Just write in a
- # third comment these lines:
- # SE (or ME or BGM or BGS)
- # Audio filename
- # Volume (1-100)
- # Pitch (50-150)
- # You can omit the two last lines, and they will be set by default:
- # Volume 80 for BGS and SE, 100 for BGM and ME
- # Pitch 100
- # ATTENTION: comments have to be the first two (or three) commands of the event.
- #
- # You can also call a script with:
- # $game_player.remove_town_sprite
- # in it to remove the sprite. For example if you put the sprite on an event
- # which you'll speak, with this code you can remove the popup.
- # Configurations:
- module SPOP
- ID = "pop" # set "loc" for old version compatibility.
- # What you have to write on a event to be identified as popup one.
- # If the value here is for example "pop" you'll have to write:
- # - [pop] for the common text popup;
- # - [npop] for the grayed out popup;
- # - [ppop] for the picture popup.
- AUTO_REMOVE_AT_TRANSFER = true
- # Test to understand what I mean.
- # true - gives the same effect as the one in Chrono Trigger towns.
- # false - let the popup be visible after the teleport. Will fade out at the
- # first player movement.
- GRAYED_COLOR = Color.new(255,245,255,175)
- # Value of grey color. Red, green, blue, alpha. From 0 to 255.
- WALK_8_DIR = true
- # You don't have to include the 8dir script. Just set true this.
- POPUP_TRANSITION = 9
- # The effect of the popup appearing/disappearing.
- # 0: no effect
- # 1: fading in/out
- # 2: movement up/down
- # 3: movement & fading
- # 4: reduced movement
- # 5: reduced movement & fading
- # 6: zoom in/out
- # 7: zoom & fading
- # 8: zoom & movement
- # 9: zoom, movement, fading
- # 10: zoom & reduced movement
- # 11: zoom, reduced movement, fading
- POPUP_SOUND = ["SE", "Book", 80, 100]
- # Play something on popup.
- # 4 parameters:
- # 1. Sound kind ("SE", "ME", "BGS", "BGM");
- # 2. Name of the file;
- # 3. Volume (0-100);
- # 4. Pitch (50-150 (or 15-453 if you want MAXIMUM values)).
- # To deactivate sound just set "" the 2. or set 0 to 3. Examples:
- # POPUP_SOUND = ["SE", "", 80, 100]
- # POPUP_SOUND = ["SE", "Book", 0, 100]
- # Won't be played.
- # Eventual BGM or BGS playing will fade as the graphic fade/zoom/move and
- # will start after the popup close. Obviously not valid if using SE/ME.
- # Examples with ME, BGM, BGS:
- # POPUP_SOUND = ["ME", "Item", 100, 100]
- # POPUP_SOUND = ["BGM", "Town1", 100, 100]
- # POPUP_SOUND = ["BGS", "Clock", 100, 100]
- POPUP_BINDING = 2
- # Where the popup should be binded.
- # 0: center of the screen
- # 1: over the player
- # 2: over the event
- DISTANCE_MIN = 1
- # The minimum distance at which popup will be visible.
- # With 0, you will get popups only by touch.
- # 1 is default, like it was in older versions.
- # For larger number, only the closer event will popup, even if there are
- # others in the same line.
- end
- # Others:
- # You'll see 'town' everywhere in the script. This is because of the SECOND
- # name given to this script: "Popup town name".
- # The FIRST original name was "Location system", from this the [loc] to add in
- # event comments. By the way I never publicated the version with this name, so
- # you won't find anything.
- #Codename: spop
- ($imported ||= {})[:mikb89_spop] = true
- # License:
- # - You can ask me to include support for other scripts as long as these scripts
- # use the $imported[script] = true;
- # - You can modify and even repost my scripts, after having received a response
- # by me. For reposting it, anyway, you must have done heavy edit or porting,
- # you can't do a post with the script as is;
- # - You can use my scripts for whatever you want, from free to open to
- # commercial games. I'd appreciate by the way if you let me know about what
- # you're doing;
- # - You must credit me, if you use this script or part of it.
- class Game_Player < Game_Character
- #--------------------------------------------------------------------------
- # * Object Initialization
- #--------------------------------------------------------------------------
- alias_method(:initGP_b4_spop, :initialize) unless method_defined?(:initGP_b4_spop)
- #class Game_Player#def initialize() <- aliased
- def initialize
- initGP_b4_spop
- @town_sprite = nil
- @town_text = ""
- reset_audio
- @town_ex_audio = nil
- @sync_event = nil
- end
- #--------------------------------------------------------------------------
- # * Frame Update
- #--------------------------------------------------------------------------
- alias_method(:updateGP_b4_spop, :update) unless method_defined?(:updateGP_b4_spop)
- #class Game_Player#def update() <- aliased
- def update
- updateGP_b4_spop
- if @town_sprite != nil
- case SPOP::POPUP_BINDING
- when 1
- @town_sprite.x = screen_x
- if @town_sprite.y != screen_y && screen_y != @sync_y
- @town_sprite.y = screen_y - (@town_sprite.y - @sync_y).abs
- @sync_y = screen_y
- end
- when 2
- if @sync_event != nil
- @town_sprite.x = @sync_event.screen_x
- if @town_sprite.y != @sync_event.screen_y && @sync_event.screen_y != @sync_y
- @town_sprite.y = @sync_event.screen_y - (@town_sprite.y - @sync_y).abs
- @sync_y = @sync_event.screen_y
- end
- remove_town_sprite if Math.hypot(@sync_event.distance_x_from_player, @sync_event.distance_y_from_player) > 2 + SPOP::DISTANCE_MIN
- end
- end
- rem = ["gameover", "title", "battle"].include?($game_temp.next_scene)
- @town_sprite.update
- if [1,3,5,7,9,11].include?(SPOP::POPUP_TRANSITION)
- @town_sprite.opacity -= 15 if @town_sprite.z == 5 && @town_sprite.opacity > 0
- @town_sprite.opacity += 15 if @town_sprite.z == 10 && @town_sprite.opacity < 255
- rem = true if @town_sprite.opacity <= 0
- end
- if [2,3,4,5,8,9,10,11].include?(SPOP::POPUP_TRANSITION)
- mov = [4,5,10,11].include?(SPOP::POPUP_TRANSITION) ? 32 : 64
- val = mov/16
- t = @town_sprite.y
- @town_sprite.y += val if @town_sprite.z == 5 && @toadd > -mov
- @town_sprite.y -= val if @town_sprite.z == 10 && @toadd > 0
- @toadd -= val if t != @town_sprite.y
- rem = true if @toadd <= -mov
- end
- if [6,7,8,9,10,11].include?(SPOP::POPUP_TRANSITION)
- if @town_sprite.z == 5 && @town_sprite.zoom_x > 0
- @town_sprite.zoom_x -= 0.25
- @town_sprite.zoom_y -= 0.25
- end
- if @town_sprite.z == 10 && @town_sprite.zoom_x < 1
- @town_sprite.zoom_x += 0.25
- @town_sprite.zoom_y += 0.25
- end
- rem = true if @town_sprite.zoom_x <= 0
- end
- if @town_ex_audio != nil
- if @audiowait > 0
- @audiowait -= 1
- elsif @audiowait == 0
- if @town_audio != nil
- @town_audio.play
- if @town_ex_audio.class != @town_audio.class
- @town_ex_audio.play
- @town_ex_audio = nil
- end
- reset_audio if @town_audio.name != SPOP::POPUP_SOUND[1]
- end
- @audiowait = -1
- end
- end
- remove_town_sprite(true) if rem
- end
- end
- #--------------------------------------------------------------------------
- # * Removing of town sprite when changing map
- #--------------------------------------------------------------------------
- alias_method(:perform_transfer_b4_spop, :perform_transfer) unless method_defined?(:perform_transfer_b4_spop)
- #class Game_Player#def perform_transfer() <- aliased
- def perform_transfer
- remove_town_sprite(true, false) if SPOP::AUTO_REMOVE_AT_TRANSFER
- perform_transfer_b4_spop
- end
- #--------------------------------------------------------------------------
- # * Processing of Movement via input from the Directional Buttons
- #--------------------------------------------------------------------------
- #class Game_Player#def move_by_input() <- rewritten
- def move_by_input
- return unless movable?
- return if $game_map.interpreter.running?
- x, y = self.x, self.y
- case SPOP::WALK_8_DIR ? Input.dir8 : Input.dir4
- when 1
- move_lower_left
- if @move_failed
- check_town(x-1, y+1)
- else
- SPOP::DISTANCE_MIN.times {|t| break if check_town(x-2-t, y+2+t)}
- end
- when 2
- move_down
- if @move_failed
- check_town(x, y+1)
- else
- SPOP::DISTANCE_MIN.times {|t| break if check_town(x, y+2+t)}
- end
- when 3
- move_lower_right
- if @move_failed
- check_town(x+1, y+1)
- else
- SPOP::DISTANCE_MIN.times {|t| break if check_town(x+2+t, y+2+t)}
- end
- when 4
- move_left
- if @move_failed
- check_town(x-1, y)
- else
- SPOP::DISTANCE_MIN.times {|t| break if check_town(x-2-t, y)}
- end
- when 6
- move_right
- if @move_failed
- check_town(x+1, y)
- else
- SPOP::DISTANCE_MIN.times {|t| break if check_town(x+2+t, y)}
- end
- when 7
- move_upper_left
- if @move_failed
- check_town(x-1, y-1)
- else
- SPOP::DISTANCE_MIN.times {|t| break if check_town(x-2-t, y-2-t)}
- end
- when 8
- move_up
- if @move_failed
- check_town(x, y-1)
- else
- SPOP::DISTANCE_MIN.times {|t| break if check_town(x, y-2-t)}
- end
- when 9
- move_upper_right
- if @move_failed
- check_town(x+1, y-1)
- else
- SPOP::DISTANCE_MIN.times {|t| break if check_town(x+2+t, y-2-t)}
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Operations for sprite removal and audio stopping
- #--------------------------------------------------------------------------
- #class Game_Player#def remove_town_sprite(instant, audio)
- def remove_town_sprite(instant=false, audio=true)
- if @town_sprite != nil
- if instant || SPOP::POPUP_TRANSITION == 0
- if audio
- @town_audio.class.stop if @town_audio != nil
- @town_ex_audio.play if @town_ex_audio != nil
- end
- @town_ex_audio = nil
- @town_sprite.dispose
- @town_sprite = nil
- @sync_event = nil
- else
- @town_sprite.z = 5
- unless @town_audio.is_a?(RPG::SE)
- @town_audio.class.fade(4) if @town_audio != nil
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Set the audio as the one specified in SPOP or passed
- #--------------------------------------------------------------------------
- #class Game_Player#def reset_audio(spn)
- def reset_audio(spn = SPOP::POPUP_SOUND)
- @town_audio = (spn[1] == "" ||
- spn[2] <= 0) ? nil :
- case spn[0]
- when "BGM"; RPG::BGM.new(spn[1], spn[2], spn[3])
- when "BGS"; RPG::BGS.new(spn[1], spn[2], spn[3])
- when "ME"; RPG::ME.new(spn[1], spn[2], spn[3])
- when "SE"; RPG::SE.new(spn[1], spn[2], spn[3])
- end
- end
- #--------------------------------------------------------------------------
- # * Check if there is a town event in front of the player
- #--------------------------------------------------------------------------
- #class Game_Player#def check_town(x, y)
- def check_town(x, y)
- return false if $game_map.interpreter.running?
- result = false
- for event in $game_map.events_xy(x, y)
- unless [1,2].include?(event.trigger) and event.priority_type == 1
- if event.list != nil
- if event.list[0].code == 108 and
- ["[#{SPOP::ID}]", "[n#{SPOP::ID}]", "[p#{SPOP::ID}]"].include?(event.list[0].parameters[0])
- result = true
- next if @town_sprite != nil && @town_sprite.z == 10 && @town_text == event.list[1].parameters[0]
- remove_town_sprite(true)
- @town_sprite = Sprite.new
- @town_sprite.z = 10
- if [6,7,8,9,10,11].include?(SPOP::POPUP_TRANSITION)
- @town_sprite.zoom_x = @town_sprite.zoom_y = 0.0
- end
- @town_sprite.opacity = 15 if [1,3,5,7,9,11].include?(SPOP::POPUP_TRANSITION)
- if event.list[0].parameters[0] != "[p#{SPOP::ID}]"
- @town_sprite.bitmap ||= Bitmap.new(1,1)
- siz = @town_sprite.bitmap.text_size(event.list[1].parameters[0])
- h = siz.height
- s = siz.width
- @town_sprite.bitmap.dispose
- @town_sprite.bitmap = Bitmap.new(s, 24)
- if event.list[0].parameters[0] == "[n#{SPOP::ID}]"
- ex = @town_sprite.bitmap.font.color
- @town_sprite.bitmap.font.color = SPOP::GRAYED_COLOR
- end
- @town_sprite.bitmap.draw_text(0,2,s,22,event.list[1].parameters[0],1)
- @town_sprite.bitmap.font.color = ex if event.list[0].parameters[0] == "[n#{SPOP::ID}]"
- else
- @town_sprite.bitmap = Cache.picture(event.list[1].parameters[0])
- s = @town_sprite.bitmap.width
- h = @town_sprite.bitmap.height
- end
- @town_text = event.list[1].parameters[0]
- @town_sprite.ox = s/2
- @town_sprite.oy = h/2
- case SPOP::POPUP_BINDING
- when 1
- @town_sprite.x = screen_x#*32+16
- @town_sprite.y = @sync_y = screen_y#*32+16
- when 2
- @town_sprite.x = event.screen_x#*32+16
- @town_sprite.y = @sync_y = event.screen_y#*32+16
- @sync_event = event
- else
- @town_sprite.x = 544/2# - s/2
- @town_sprite.y = 416/2# - h/2
- end
- @town_sprite.y -= 64 if [0,1,6,7].include?(SPOP::POPUP_TRANSITION)
- @town_sprite.y -= 32 if [4,5,10,11].include?(SPOP::POPUP_TRANSITION)
- @toadd = [2,3,4,5,8,9,10,11].include?(SPOP::POPUP_TRANSITION) ? 64 : 0
- @toadd -= 32 if [4,5,10,11].include?(SPOP::POPUP_TRANSITION)
- if @town_audio != nil || event.list[2].code == 108
- if ["BGM", "ME", "BGS", "SE"].include?(event.list[2].parameters[0]) &&
- event.list[3].code == 408
- arr = []
- arr.push(event.list[2].parameters[0])
- arr.push(event.list[3].parameters[0])
- if event.list[4].code == 408
- arr.push(event.list[4].parameters[0].to_i)
- arr.push(event.list[5].parameters[0].to_i) if event.list[5].code == 408
- else
- arr.push(["BGS", "SE"].include?(event.list[2].parameters[0]) ? 80 : 100)
- end
- arr.push(100) if arr.size < 4
- reset_audio(arr)
- end
- @town_ex_audio = @town_audio.class.last if [RPG::BGM, RPG::BGS].include?(@town_audio.class)
- if @town_ex_audio != nil
- @town_ex_audio.class.fade(4)
- @audiowait = 4
- else
- @town_audio.play
- reset_audio if arr != nil
- end
- end
- end
- end
- end
- end
- remove_town_sprite unless result
- return result
- end
- end
- #--Compatibility for Auto Save & Quick Save systems.---#
- # -Remove the sprite because a Sprite can't be saved. #
- #------------------------------------------------------#
- class Scene_File
- alias_method(:write_save_data_b4_spop, :write_save_data) unless method_defined?(:write_save_data_b4_spop)
- #class Scene_File#def write_save_data(file) <- aliased
- def write_save_data(file)
- $game_player.remove_town_sprite(true)
- write_save_data_b4_spop(file)
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement