Some Popup 2.9
mikb89
Introduction
With this script you can specify some text to be drawn when the player face an event. Text can be binded above the event or above the player or in center of the screen. There are many transition effects and it's possible to use picture instead of text. You can also play a SE, ME, BGM or BGS, on every popup event or for specific ones.
Features
- show simple text
- bind in the middle of screen
- bind above the player
- bind above the event
- show text grayed out
- show picture
- play SE/ME/BGM/BGS
- fade text transition
- move text transition
- zoom text transition
- transitions mixed together
- select popup show range
Screenshots
How to Use
Copy the script under Materials to use.
Info on how to create popup event inside the script.
Demo
Multilanguage demo v. 2.9 (289 K
http://www.mediafire.com/?dgvl41o4h9zdqrd
Script
Spoiler Code:
# 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
Also visible
on Pastebin.
FAQ
Q: Can I use the 8 directions script?
A: No, but the 8 dir functionality is included, just enable it in settings.
Credit and Thanks
Thanks Guardian of Irael for various suggestions.
Author's Notes
N/A
本贴来自国际rpgmaker官方论坛作者:mikb89处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:
https://forums.rpgmakerweb.com/threads/some-popup-2-9.3196/