public

Rpg Maker Developers Group

Simple enough for a child, powerful enough for a developer

2 Followers

Is there a way to make these two scripts work together?

BMM Archive · July 15, 2026

Preserved forum archive. This topic stores the original first post and locally mirrored RPG Maker Web attachments when available. It is posted by the BMMPlay archive account, not by the original creator.

Original Source

  • Original title: Is there a way to make these two scripts work together?
  • Original author: PachucoCadaver
  • Original date: August 9, 2024
  • Source thread: https://forums.rpgmakerweb.com/threads/is-there-a-way-to-make-these-two-scripts-work-together.170966/
  • Source forum path: Game Development Engines > Legacy Engine Support > RPG Maker VXAce Support

Summary

So I have a script that animates the text in my game when it appears. But there has been some problems with the readability of the text due to weird stretching, which is often the case with rpg maker games... I decided to get a script that draws the text by using PNGs. But the thing is that it doesn't really work proper with the text animation script. The problem is: When the text animates you can't customize the color of it. And the text color is very important in...

Archived First Post

So I have a script that animates the text in my game when it appears. But there has been some problems with the readability of the text due to weird stretching, which is often the case with rpg maker games... I decided to get a script that draws the text by using PNGs. But the thing is that it doesn't really work proper with the text animation script.

The problem is: When the text animates you can't customize the color of it. And the text color is very important in my game

If anyone could do a customization that would solve this I would be very thankful! Although I know it could be compicated and time consuming... I just thought I'd throw a question out here first, before I scrap the script!

The font Script: https://github.com/RMEx/orms

The text animation script:
Code:
=begin

 ▼ メッセージエフェクト ver. 1.3.4
 
 RPGツクールVXAce用スクリプト
 
 制作 : 木星ペンギン
 URL  : http://woodpenguin.blog.fc2.com/

------------------------------------------------------------------------------
 概要

 □ メッセージを表示する際、ちょっとした演出を行います。

------------------------------------------------------------------------------
 機能説明
 
 □ スキップ機能
  ・シフトキーを押しっぱなしにすることで、文章をメッセージを
   スキップすることができます。
  ・これはイベントが始まってからシフトキーを押すと機能します。
   押しながらイベントを開始しても、いきなりスキップすることはありません。
 
 □ エフェクトの種類
   0 : 文字が右にスライドしながら浮かび上がる演出を行います。
   1 : 文字が下にスライドしながら浮かび上がる演出を行います。
   2 : 文字が上にスライドしながら浮かび上がる演出を行います。
   3 : 文字が左にスライドしながら浮かび上がる演出を行います。
   4 : スライドせずに浮かび上がる演出を行います。
   5 : 文字が拡大していく演出が加えられます。
   6 : 文字が回転する演出が加えられます。
  
   上記以外 : カスタム (スクリプト自作用)
 
 □ 制御文字
   \sp[n]   : 文章の表示速度を秒間 n 文字に変更します。
              デフォルト値は 60 です。
              0 にすると瞬間表示となります。
   \a       : スキップ機能や、決定キーによる文章の瞬間表示を無効化します。
   \et[n]   : エフェクトの種類を n 番に変更します。
   \ed[n]   : エフェクトの時間を n フレームに変更します。
   \font[n] : フォントを番号 n に対応したものに変更します。
              0 でデフォルトのフォントに戻します。
   \df      : エフェクト、フォント、文字色、文字サイズ、文章表示の速度を
              デフォルトの値に戻します。
   \fo[n]   : n フレームかけて文章のフェードアウトを行います。
              入力待ちをせずに、次のイベントコマンドへと移行します。
   \set[n]  : 予め設定しておいた文字列 n 番に変換します。
   \save    : 現在のエフェクト、フォント、文字色、文字サイズ、文章表示の速度を
              記憶します。
   \load    : \save で記憶した状態に変更します。
 
=end
module WdTk
module MesEff
#//////////////////////////////////////////////////////////////////////////////
#
# 設定項目
#
#//////////////////////////////////////////////////////////////////////////////
  #--------------------------------------------------------------------------
  # ● スキップの有効状態
  #     false で無効化できます。
  #--------------------------------------------------------------------------
  SKIP = true
 
  #--------------------------------------------------------------------------
  # ● エフェクトの種類のデフォルト値
  #--------------------------------------------------------------------------
  TYPE = 6
 
  #--------------------------------------------------------------------------
  # ● エフェクトの時間のデフォルト値
  #     エフェクトの種類を 5 以上にする場合は、増やしたほうがいいです。
  #     (24 ~ 32 くらいがおすすめ)
  #--------------------------------------------------------------------------
  DURATION = 10
 
  #--------------------------------------------------------------------------
  # ● フォント
  #     配列にフォント名を入れ、制御文字で \font[n] と入れることで、
  #     n 番目のフォントに変更されます。
  #     0 はデフォルトに戻すのに使用します。
  #--------------------------------------------------------------------------
  FONTS = [nil, "MS ゴシック"]
 
  #--------------------------------------------------------------------------
  # ● 文字列のセット
  #     制御文字を入れる場合は、ダブルクォート(")ではなく
  #     シングルクォート(')を使ってください。
  #     例 : \set[0] で下記の文字列に置き換わります。
  #--------------------------------------------------------------------------
  ESC_SET = ['\a\sp[15]\ed[12]',     # 0
             ]
 
  #--------------------------------------------------------------------------
  # ● 文字スプライトへのエフェクト
  #  ※ スクリプトが組める人向け
  #     sprite   : 文字スプライト
  #     duration : エフェクトの残り時間
  #     max      : エフェクトの時間
  #     type     : エフェクトの種類
  #   スプライトの x, y, z, bitmap は変更しないでください。
  #--------------------------------------------------------------------------
  def self.effect(sprite, duration, max, type, pos)
    case type
    when 0,1,2,3,4
      sprite.opacity = 256 * (max - duration) / max
      origin = (2 + max * 2 / 3) * duration / max
      case type
      when 0; sprite.ox = origin
      when 1; sprite.oy = origin
      when 2; sprite.oy = -origin
      when 3; sprite.ox = -origin
      end
    when 5,6
      sprite.opacity = 256
      m = (max - max / 4) ** 2
      n = m - (max / 4) ** 2
      return if n == 0
      c = m - (duration - max / 4) ** 2
      sprite.zoom_x = sprite.zoom_y = 1.0 * c / n
      sprite.angle = 90.0 * (n - c) / n if type == 6
    else # カスタム用
      
    end
  end
end

#//////////////////////////////////////////////////////////////////////////////
#
# 以降、変更する必要なし
#
#//////////////////////////////////////////////////////////////////////////////

  @material ||= []
  @material << :MesEff
  def self.include?(sym)
    @material.include?(sym)
  end
 
end

#==============================================================================
# ■ Window_Message
#==============================================================================
class Window_Message
  #--------------------------------------------------------------------------
  # ○ オブジェクト初期化
  #--------------------------------------------------------------------------
  alias _wooden_meseff_initialize initialize
  def initialize
    @character_sprites = {}
    _wooden_meseff_initialize
  end
  #--------------------------------------------------------------------------
  # ● X 座標の設定
  #--------------------------------------------------------------------------
  def x=(x)
    super
    sx = self.x - x
    @character_sprites.each_key {|sprite| sprite.x += sx } if sx != 0
  end
  #--------------------------------------------------------------------------
  # ● Y 座標の設定
  #--------------------------------------------------------------------------
  def y=(y)
    super
    sy = self.y - y
    @character_sprites.each_key {|sprite| sprite.y += sy } if sy != 0
  end
  #--------------------------------------------------------------------------
  # ● Z 座標の設定
  #--------------------------------------------------------------------------
  def z=(z)
    super
    @character_sprites.each_key {|sprite| sprite.z = z }
  end
  #--------------------------------------------------------------------------
  # ○ 解放
  #--------------------------------------------------------------------------
  alias _wooden_meseff_dispose dispose
  def dispose
    _wooden_meseff_dispose
    dispose_character_sprites
  end
  #--------------------------------------------------------------------------
  # ● 文字スプライトの解放
  #--------------------------------------------------------------------------
  def dispose_character_sprites
    @character_sprites.each_key do |sprite|
      sprite.bitmap.dispose if sprite.bitmap
      sprite.dispose
    end
    @character_sprites.clear
  end
  #--------------------------------------------------------------------------
  # ● フォント設定のリセット
  #--------------------------------------------------------------------------
  def reset_font_settings
    super
    contents.font.name = Font.default_name
  end
  #--------------------------------------------------------------------------
  # ○ フラグのクリア
  #--------------------------------------------------------------------------
  alias _wooden_meseff_clear_flags clear_flags
  def clear_flags
    _wooden_meseff_clear_flags
    clear_wooden_flags
    @auto = false
    @count = 0
  end
  #--------------------------------------------------------------------------
  # ● オリジナルフラグのクリア
  #--------------------------------------------------------------------------
  def clear_wooden_flags
    @effect_type = WdTk::MesEff::TYPE
    @effect_duration = WdTk::MesEff::DURATION
    @speed = 60
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新
  #--------------------------------------------------------------------------
  alias _wooden_meseff_update update
  def update
    _wooden_meseff_update
    update_character_sprites
    if $game_party.in_battle
      @message_skip &&= $game_troop.interpreter.running?
    else
      @message_skip &&= $game_map.interpreter.running?
    end
  end
  #--------------------------------------------------------------------------
  # ● 文字スプライトの更新
  #--------------------------------------------------------------------------
  def update_character_sprites
    @character_sprites.each do |sprite, params|
      next if params.empty?
      params[0] = (@show_fast ? 0 : params[0] - 1)
      if params[0] > 0
        WdTk::MesEff.effect(sprite, *params)
      else
        x = sprite.x - self.x - padding
        y = sprite.y - self.y - padding
        contents.blt(x, y, sprite.bitmap, sprite.src_rect)
        sprite.bitmap.clear
        sprite.visible = false
        params.clear
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 制御文字の事前変換
  #--------------------------------------------------------------------------
  def convert_escape_characters(*)
    result = super
    result.gsub!(/\eSET\[(\d+)\]/i) { ESC_SET[$1.to_i].to_s.gsub(/\\/, "\e") }
    result
  end
  #--------------------------------------------------------------------------
  # ○ ファイバーのメイン処理
  #--------------------------------------------------------------------------
  alias _wooden_meseff_fiber_main fiber_main
  def fiber_main
    _wooden_meseff_fiber_main
    dispose_character_sprites
  end
  #--------------------------------------------------------------------------
  # ○ 全テキストの処理
  #--------------------------------------------------------------------------
  alias _wooden_meseff_process_all_text process_all_text
  def process_all_text
    _wooden_meseff_process_all_text
    Fiber.yield until @show_fast || @character_sprites.all? {|*,p| p.empty? }
  end
  #--------------------------------------------------------------------------
  # ○ 早送りフラグの更新
  #--------------------------------------------------------------------------
  alias _wooden_meseff_update_show_fast update_show_fast
  def update_show_fast
    return if @auto
    _wooden_meseff_update_show_fast
    @message_skip ||= WdTk::MesEff::SKIP && Input.trigger?(:A)
    @show_fast ||= @message_skip && Input.press?(:A)
  end
  #--------------------------------------------------------------------------
  # ● ウェイト (文章表示中)
  #--------------------------------------------------------------------------
  def wait_message(duration)
    duration.times do
      update_show_fast
      return if @show_fast
      Fiber.yield
    end
  end
  #--------------------------------------------------------------------------
  # ○ 一文字出力後のウェイト
  #--------------------------------------------------------------------------
  alias _wooden_meseff_wait_for_one_character wait_for_one_character
  def wait_for_one_character
    while @count < 60
      _wooden_meseff_wait_for_one_character
      @count += @speed
    end
    @count -= 60
  end
  #--------------------------------------------------------------------------
  # ○ 改ページ処理
  #--------------------------------------------------------------------------
  alias _wooden_meseff_new_page new_page
  def new_page(text, pos)
    self.contents_opacity = 255
    _wooden_meseff_new_page(text, pos)
  end
  #--------------------------------------------------------------------------
  # ☆ 通常文字の処理
  #--------------------------------------------------------------------------
  def process_normal_character(c, pos)
    return super if @show_fast || @speed == 0
    sprite = get_empty_sprite(pos)
    sprite.bitmap.font = contents.font.dup
    text_width = text_size(c).width
    sprite.bitmap.draw_text(0, 0, text_width * 2, pos[:height], c)
    pos[:x] += text_width
    wait_for_one_character
  end
  #--------------------------------------------------------------------------
  # ☆ 制御文字によるアイコン描画の処理
  #--------------------------------------------------------------------------
  def process_draw_icon(icon_index, pos)
    return super if @show_fast || @speed == 0
    sprite = get_empty_sprite(pos)
    bitmap = Cache.system("Iconset")
    rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
    sprite.bitmap.blt(0, 0, bitmap, rect)
    pos[:x] += 24
    wait_for_one_character
  end
  #--------------------------------------------------------------------------
  # ● 使用していない文字スプライトの取得
  #--------------------------------------------------------------------------
  def get_empty_sprite(pos)
    sprite, = @character_sprites.find {|*,p| p.empty? }
    if sprite
      sprite.visible = true
      if sprite.bitmap.height < pos[:height]
        sprite.bitmap.dispose
        sprite.bitmap = nil
      end
    else
      sprite = Sprite.new(viewport)
      sprite.z = self.z
    end
    sprite.bitmap ||= Bitmap.new(pos[:height], pos[:height])
    params = []
    params << @effect_duration << @effect_duration
    params << @effect_type
    params << pos.dup
    @character_sprites[sprite] = params
    sprite.x = self.x + self.padding + pos[:x]
    sprite.y = self.y + self.padding + pos[:y]
    sprite.ox = sprite.oy = 0
    sprite.angle = 0
    sprite.zoom_x = sprite.zoom_y = 1.0
    sprite.opacity = 0
    sprite
  end
  #--------------------------------------------------------------------------
  # ◯ 制御文字の処理
  #--------------------------------------------------------------------------
  alias _wooden_meseff_process_escape_character process_escape_character
  def process_escape_character(code, text, pos)
    case code.upcase
    when '.'
      wait_message(15) unless @show_fast
    when '|'
      wait_message(60) unless @show_fast
    when 'SP'
      @speed = obtain_escape_param(text)
    when 'A'
      @auto = true
    when 'ET'
      @effect_type = obtain_escape_param(text)
    when 'ED'
      @effect_duration = obtain_escape_param(text)
    when 'FONT'
      process_font(obtain_escape_param(text))
    when 'DF'
      process_default
    when 'FO'
      process_fadeout(obtain_escape_param(text))
    when 'SAVE'
      process_save
    when 'LOAD'
      process_load
    else
      _wooden_meseff_process_escape_character(code, text, pos)
    end
  end
  #--------------------------------------------------------------------------
  # ● フォント変更の処理
  #--------------------------------------------------------------------------
  def process_font(index)
    contents.font.name = WdTk::MesEff::FONTS[index] || Font.default_name
  end
  #--------------------------------------------------------------------------
  # ● デフォルトの処理
  #--------------------------------------------------------------------------
  def process_default
    reset_font_settings
    clear_wooden_flags
    @line_show_fast = false
  end
  #--------------------------------------------------------------------------
  # ● フェードアウトの処理
  #--------------------------------------------------------------------------
  def process_fadeout(duration)
    duration.times do |i|
      self.contents_opacity = 256 * (duration - i - 1) / duration
      Fiber.yield
    end
    @pause_skip = true
  end
  #--------------------------------------------------------------------------
  # ● セーブの処理
  #--------------------------------------------------------------------------
  def process_save
    @save_font            = contents.font.dup
    @save_effect_type     = @effect_type
    @save_effect_duration = @effect_duration
    @save_speed           = @speed
    @save_line_show_fast  = @line_show_fast
  end
  #--------------------------------------------------------------------------
  # ● ロードの処理
  #--------------------------------------------------------------------------
  def process_load
    contents.font    = @save_font.dup        if @save_font
    @effect_type     = @save_effect_type     if @save_effect_type
    @effect_duration = @save_effect_duration if @save_effect_duration
    @speed           = @save_speed           if @save_speed
    @line_show_fast  = @save_line_show_fast  if @save_line_show_fast != nil
  end
  #--------------------------------------------------------------------------
  # ☆ 入力待ち処理
  #--------------------------------------------------------------------------
  def input_pause
    self.pause = true
    wait(10)
    until Input.trigger?(:B) || Input.trigger?(:C) || (@message_skip && Input.press?(:A))
      Fiber.yield
      @message_skip ||= WdTk::MesEff::SKIP && Input.trigger?(:A)
    end
    Input.update
    self.pause = false
  end
end

Downloads / Referenced Files

Log in to download

Log in, then follow the RPG Maker Developers Group to see these download links.

Log in to download
Creator Claims / Removal

If you are the original creator and want this listing reassigned, edited, or removed, join BMMPlay and contact the moderators with proof that matches the original RPG Maker Web profile, linked GitHub, itch.io page, or another public creator identity.

#039#rpg-maker-archive#vxace-support

Replies (0)

No replies yet.

0 replies 1 view

Log in to reply.

User Avatar