• Do not use Discord to host any images you post, these links expire quickly! You can learn how to add images to your posts here.
Carmaniac's Speech Bubble Script for v18 (Plug-and-Play)

Carmaniac's Speech Bubble Script for v18 (Plug-and-Play) v1.0

Pokémon Essentials Version
v18.1 ➖
Since I noticed Carmaniac's Speech Bubbles script wasn't compatible with v18, I've decided to update it!

Instructions:
1) Download the files and place the images in the corresponding folders of Essentials, while ignoring the PokemonMessages text file.

2) Next, add this script in above Main:
Code:
Expand Collapse Copy
PluginManager.register({
  :name => "Carmaniac's Speech Bubbles",
  :version => "1.1",
  :credits => ["Carmaniac","Avery","Boonzeet"],
  :link => "https://reliccastle.com/resources/461/"
})

#-------------------------------------------------------------------------------
# Carmaniac's Speech Bubbles for v18
# Updated by Avery
#-------------------------------------------------------------------------------
# To use, call pbCallBub(type, eventID)
#
# Where type is either 1 or 2:
# 1 - floating bubble
# 2 - speech bubble with arrow
#-------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
# Class modifiers
#-------------------------------------------------------------------------------

class PokemonTemp
  attr_accessor :speechbubble_bubble
  attr_accessor :speechbubble_vp
  attr_accessor :speechbubble_arrow
  attr_accessor :speechbubble_outofrange
  attr_accessor :speechbubble_talking
end

module MessageConfig
  BUBBLETEXTBASE = Color.new(22,22,22)
  BUBBLETEXTSHADOW = Color.new(166,160,151)
end

#-------------------------------------------------------------------------------
# Function modifiers
#-------------------------------------------------------------------------------

class Window_AdvancedTextPokemon 
  def text=(value)
    if value != nil && value != "" && $PokemonTemp.speechbubble_bubble && $PokemonTemp.speechbubble_bubble > 0
      if $PokemonTemp.speechbubble_bubble == 1
        $PokemonTemp.speechbubble_bubble = 0
        resizeToFit2(value,400,100)
        @x = $game_map.events[$PokemonTemp.speechbubble_talking].screen_x
        @y = $game_map.events[$PokemonTemp.speechbubble_talking].screen_y - (32 + @height)
            
        if @y>(Graphics.height-@height-2)
          @y = (Graphics.height-@height)
        elsif @y<2
          @y=2
        end
        if @x>(Graphics.width-@width-2)
          @x = ($game_map.events[$PokemonTemp.speechbubble_talking].screen_x-@width)
        elsif @x<2
          @x=2
        end
      else
        $PokemonTemp.speechbubble_bubble = 0
      end
    end
    setText(value)
  end
end  

def pbRepositionMessageWindow(msgwindow, linecount=2)
  msgwindow.height=32*linecount+msgwindow.borderY
  msgwindow.y=(Graphics.height)-(msgwindow.height)
  if $game_temp && $game_temp.in_battle && !$scene.respond_to?("update_basic")
    msgwindow.y=0
  elsif $game_system && $game_system.respond_to?("message_position")
    case $game_system.message_position
    when 0  # up
      msgwindow.y=0
    when 1  # middle
      msgwindow.y=(Graphics.height/2)-(msgwindow.height/2)
    when 2
      if $PokemonTemp.speechbubble_bubble==1
       msgwindow.setSkin("Graphics/windowskins/frlgtextskin")
       msgwindow.height = 100
       msgwindow.width = 400
     elsif $PokemonTemp.speechbubble_bubble==2
       msgwindow.setSkin("Graphics/windowskins/frlgtextskin")
       msgwindow.height = 102
       msgwindow.width = Graphics.width
       if $game_player.direction==8
         $PokemonTemp.speechbubble_vp = Viewport.new(0, 0, Graphics.width, 280)
         msgwindow.y = 6
       else
         $PokemonTemp.speechbubble_vp = Viewport.new(0, 6 + msgwindow.height, Graphics.width, 280)
         msgwindow.y = (Graphics.height - msgwindow.height) - 6
         if $PokemonTemp.speechbubble_outofrange==true
           msgwindow.y = 6
         end
       end
      else
        msgwindow.height = 102
        msgwindow.y = Graphics.height - msgwindow.height - 6
      end
    end
  end
  if $game_system && $game_system.respond_to?("message_frame")
    if $game_system.message_frame != 0
      msgwindow.opacity = 0
    end
  end
  if $game_message
    case $game_message.background
      when 1  # dim
        msgwindow.opacity=0
      when 2  # transparent
        msgwindow.opacity=0
    end
  end
end
  
def pbCreateMessageWindow(viewport=nil,skin=nil)
  arrow = nil
  if $PokemonTemp.speechbubble_bubble==2 && $game_map.events[$PokemonTemp.speechbubble_talking] != nil # Message window set to floating bubble.
    if $game_player.direction==8 # Player facing up, message window top.
      $PokemonTemp.speechbubble_vp = Viewport.new(0, 104, Graphics.width, 280)
      $PokemonTemp.speechbubble_vp.z = 999999
      arrow = Sprite.new($PokemonTemp.speechbubble_vp)
      arrow.x = $game_map.events[$PokemonTemp.speechbubble_talking].screen_x - Graphics.width
      arrow.y = ($game_map.events[$PokemonTemp.speechbubble_talking].screen_y - Graphics.height) - 136
      arrow.z = 999999
      arrow.bitmap = BitmapCache.load_bitmap("Graphics/Pictures/Arrow4")
      arrow.zoom_x = 2
      arrow.zoom_y = 2
      if arrow.x<-230
        arrow.x = $game_map.events[$PokemonTemp.speechbubble_talking].screen_x
        arrow.bitmap = BitmapCache.load_bitmap("Graphics/Pictures/Arrow3")
      end
    else # Player facing left, down, right, message window bottom.
      $PokemonTemp.speechbubble_vp = Viewport.new(0, 0, Graphics.width, 280)
      $PokemonTemp.speechbubble_vp.z = 999999
      arrow = Sprite.new($PokemonTemp.speechbubble_vp)
      arrow.x = $game_map.events[$PokemonTemp.speechbubble_talking].screen_x
      arrow.y = $game_map.events[$PokemonTemp.speechbubble_talking].screen_y
      arrow.z = 999999
      arrow.bitmap = BitmapCache.load_bitmap("Graphics/Pictures/Arrow1")
      if arrow.y>=Graphics.height-120 # Change arrow direction.
        $PokemonTemp.speechbubble_outofrange=true
        $PokemonTemp.speechbubble_vp.rect.y+=104
        arrow.x = $game_map.events[$PokemonTemp.speechbubble_talking].screen_x - Graphics.width
        arrow.bitmap = BitmapCache.load_bitmap("Graphics/Pictures/Arrow4")
        arrow.y = ($game_map.events[$PokemonTemp.speechbubble_talking].screen_y - Graphics.height) - 136
        if arrow.x<-250
          arrow.x = $game_map.events[$PokemonTemp.speechbubble_talking].screen_x
          arrow.bitmap = BitmapCache.load_bitmap("Graphics/Pictures/Arrow3")
        end
        if arrow.x>=256
          arrow.x-=15# = $game_map.events[$PokemonTemp.speechbubble_talking].screen_x-Graphics.width
          arrow.bitmap = BitmapCache.load_bitmap("Graphics/Pictures/Arrow3")
        end
      else
        $PokemonTemp.speechbubble_outofrange=false
      end
      arrow.zoom_x = 2
      arrow.zoom_y = 2
    end
  end
  $PokemonTemp.speechbubble_arrow = arrow
  msgwindow=Window_AdvancedTextPokemon.new("")
  if !viewport
    msgwindow.z=99999
  else
    msgwindow.viewport=viewport
  end
  msgwindow.visible=true
  msgwindow.letterbyletter=true
  msgwindow.back_opacity=MessageConfig::WindowOpacity
  pbBottomLeftLines(msgwindow,2)
  $game_temp.message_window_showing=true if $game_temp
  $game_message.visible=true if $game_message
  skin=MessageConfig.pbGetSpeechFrame() if !skin
  msgwindow.setSkin(skin)
  return msgwindow
end

def pbDisposeMessageWindow(msgwindow)
  $game_temp.message_window_showing=false if $game_temp
  $game_message.visible=false if $game_message
  msgwindow.dispose
  $PokemonTemp.speechbubble_arrow.dispose if $PokemonTemp.speechbubble_arrow
  $PokemonTemp.speechbubble_vp.dispose if $PokemonTemp.speechbubble_vp
end

def pbCallBub(status=0,value=0)
  $PokemonTemp.speechbubble_talking=get_character(value).id
  $PokemonTemp.speechbubble_bubble=status
end

How to use:
To call a speech bubble, call the following in a script: pbCallBub(type, eventid)
The type can be either 1 or 2, with 1 being a bubble over the event, and 2 being a normal message box with an arrow, resembling the BW style.
Example of type 1:
1602178797293.png

Example of type 2:
1602178824589.png


If you don't want to have to change the event ID every time, you can use @event_id as opposed to the number.
Credits
The script was originally made by Carmaniac. https://www.pokecommunity.com/showthread.php?t=295277
Plug-and-Play version made by Boonzeet, so tysm to him! This wouldn't have been possible without him.
Author
Nomi
Downloads
1,029
Views
5,416
First release
Last update

Ratings

4.00 star(s) 1 ratings

More resources from Nomi

Latest updates

  1. Plug-n-play

    The script is now Plug-and-Play, thanks to @boonzeet and now has Plugin Manager compatibility!
  2. Fixed error with Bubble type 1

    As title implies, I fixed the error with Bubble type 1, which was because I forgot a single...

Latest reviews

I have a problem, using type 2 it works perfect, including arrows, but using type 1 it doesn't show the text and the windowskin looks square and cropped. What can happen?
N
Nomi
fixed it!
Back
Top