Permanent
Creation

RPGツクールXP/VX用のRGSS素材です。
一部英語版対応です。 (A few materials can be used for English RPG MAKER XP/VX.)
競合率はルファーの独断と偏見なのでたまにハズレます。


#==============================================================================
# ■ オープニングムービー
#------------------------------------------------------------------------------
#  オープニングに AVI 動画のようなムービーを流せるようにします。まさにアニメー
# ターのための素材。動画を変換したい人は自分で調べてね!
# (C) ルファー
# WebSite  https://tkoolerlufar.pages.dev/
#==============================================================================

=begin
  =対応RGSS
  1 2

  =必要なライブラリ
  ルファー作スクリプト素材共通ライブラリ

  =他の素材との競合の可能性
  ... ないに等しい

  =RPGツクールXPでの導入方法
  Scene_Save より下に新セクションを作成して、
  このプログラムをそこにコピーする

  = 使い方
  (1) 「Opening***」(***は6桁の数字。桁が余る場合は0を入れる。最初は000001)
  という連番の画像をコマ数分用意してください。JPEG 推奨。
  AVI が用意されてるなら BMP 連番を抽出して JPEG に変換したりしてください。
  画像の大きさは勝手に合わせるのでいくらでもいいです。
  (2) 「Opening」という音声ファイルを用意してください。OGG 推奨。なければ結構。
  AVI が用意されてるなら WAVE を抽出して OGG Vorbis に変換したりしてください。
  (3) それぞれ「Graphics/Pictures」、「Audio/BGM」にインポート。
  (4) 79 行目の「秒間のフレーム数」の数値を適当に調節して完成!
  ちなみにテレビ番組は30[FPS]、映画は24[FPS]、ゲーム機は60[FPS]くらいです。

  = 桁数について
  動画変換ソフトによってはいろんな桁数の連番画像を吐き出すので、
  それに対応しました。
  80 行目の「連番の桁数」の数値が 6 になってるので、これを変更してください。

  =更新履歴
  2010/04/25 音声が再生されないバグを修正
             メモリ不足などのときにムービーを表示しないようにしてないバグを修正
             連番の桁数を変更できるようにした

  2010/04/13 使用ライブラリ変更
             音声入りのムービーを再生するときにエラーを出す致命的バグを修正

  2010/03/31 ムービー再生開始直後にスキップした際に
             エラーを出して強制終了してしまうバグを修正

  2010/03/01 RPGツクールVXに対応
             最大フレーム数を千枚から百万枚に拡張
             映像・音声の形式を無制限にした
             メモリ不足などのときにムービーを表示しないようにした

  2009/06/08 再定義しているメソッドと導入方法の記述に誤りがありました。
             深くお詫びいたします。

  2009/05/13 音が鳴るだけで画が映らないバグと、
             戦闘テストするときにも流れる仕様を修正

  2009/05/12 他の素材と競合しにくくした

  2009/05/12 公開

  =再定義しているメソッド
  Scene_Title#main (エイリアス使用)

  =新規定義しているメソッド
  なし
=end
#----------------------------------------------------------------------------
# ◇ Lufar モジュール
#----------------------------------------------------------------------------
module Lufar
  #--------------------------------------------------------------------------
  # ○ 定数
  #--------------------------------------------------------------------------
  OPENINGMOVIE_RATE = 24                # 秒間のフレーム数 [FPS] (10-120)
  OPENINGMOVIE_FIGURE = 6               # 連番の桁数
end
#----------------------------------------------------------------------------
# ◇ Scene_Opening クラス
#----------------------------------------------------------------------------
class Scene_Opening
  #--------------------------------------------------------------------------
  # ○ メイン処理
  #--------------------------------------------------------------------------
  def main
    @sprite = Sprite.new
    @sprite.x = screen_width  / 2
    @sprite.y = screen_height / 2
    create_bitmaps
    file_exist = false
    for ext in ["mid", "mp3", "ogg", "wav", "wma"]
      file_exist ||=
        FileTest.exist?("Audio/BGM/Opening." + ext) &&
        FileTest.file?("Audio/BGM/Opening." + ext) &&
        FileTest.readable?("Audio/BGM/Opening." + ext)
    end
    Graphics.transition(0)
    frame_rate = Graphics.frame_rate
    Graphics.frame_rate = Lufar::OPENINGMOVIE_RATE
    Graphics.frame_reset
    if file_exist
      Audio.me_play("Audio/BGM/Opening", 100, 100)
    end
    while $scene.equal?(self)
      update
      Graphics.frame_count &= ~1  # ちょっと危険な裏技 : 滑らかを強制させる
      Graphics.update
      Input.update
    end
    Audio.me_stop
    Graphics.freeze
    Graphics.frame_rate = frame_rate
    dispose_bitmaps
    @sprite.dispose
    $_Lufar_Om_Seen = true
  end
  #--------------------------------------------------------------------------
  # ○ ビットマップの作成
  #--------------------------------------------------------------------------
  def create_bitmaps
    @bitmaps = Array.new()
    for i in 1 .. (10 ** Lufar::OPENINGMOVIE_FIGURE - 1)
      begin
        bitmap = Bitmap.new(sprintf(
          "Graphics/Pictures/Opening%0#{Lufar::OPENINGMOVIE_FIGURE}d", i))
      rescue SystemCallError, RGSSError
        $scene = Scene_Title.new unless $!.instance_of?(Errno::ENOENT)
        break
      end
      @bitmaps.push(bitmap)
    end
  end
  #--------------------------------------------------------------------------
  # ○ ビットマップの解放
  #--------------------------------------------------------------------------
  def dispose_bitmaps
    @bitmaps.each {|bitmap| bitmap.dispose }
    @sprite.bitmap.dispose unless @sprite.bitmap.nil?
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新
  #--------------------------------------------------------------------------
  def update
    @sprite.bitmap.dispose unless @sprite.bitmap.nil?
    if @bitmaps.empty? or Input.press?(Input::C)
      $scene = Scene_Title.new
      return
    end
    @sprite.bitmap = @bitmaps.shift
    @sprite.ox = @sprite.bitmap.width / 2
    @sprite.oy = @sprite.bitmap.height / 2
    @sprite.zoom_x = @sprite.zoom_y =
      [screen_width.to_f / @sprite.bitmap.width.to_f,
      screen_height.to_f / @sprite.bitmap.height.to_f].min
  end
end
#----------------------------------------------------------------------------
# ◆ Scene_Title クラス
#----------------------------------------------------------------------------
class Scene_Title
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  alias _Lufar_Om_old_main main
  def main
    unless $BTEST or $_Lufar_Om_Seen
      $scene = Scene_Opening.new
      return
    end
    _Lufar_Om_old_main
  end
end
#----------------------------------------------------------------------------
# ○ グローバル変数
#----------------------------------------------------------------------------
$_Lufar_Om_Seen = false

戻る