• 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.
  • Eevee Expo's webhost has been having technical issues since Nov. 20th and you might be unable to connect to our site. Staff are also facing issues connecting, so please send a DM to Cat on-site or through Discord directly for faster service!
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,047
Views
5,423
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