# セッター
def x=(n)
@x = n
@refresh_flag = true
end
def y=(n)
@y = n
@refresh_flag = true
end
def z=(n)
@z = n
@refresh_flag = true
end
def width_max=(n)
@width_max = n
@refresh_flag = true
end
def width_max=(n)
@width_max = n
@refresh_flag = true
end
def origin_center=(flag)
@origin_center = flag
@refresh_flag = true
end
class MovieSprite < ::Sprite
# 初期化
def initialize(viewport=nil)
super
self.visible = false
self.bitmap = RGDS.bitmap
fix_position()
end
# 拡大縮小処理
def change_zoom
zoom = 1.0
bw = self.bitmap.width
bh = self.bitmap.height
return if bw <= 0 or bh <= 0
if $game_system.movie_info.width_max > 0 and $game_system.movie_info.height_max > 0
zoom_w = $game_system.movie_info.width_max.to_f / bw.to_f
zoom_h = $game_system.movie_info.height_max.to_f / bh.to_f
zoom = [zoom_w, zoom_h].min
end
self.zoom_x = zoom
self.zoom_y = zoom
end
# 表示位置変更
def fix_position
self.x = $game_system.movie_info.x
self.y = $game_system.movie_info.y
self.z = $game_system.movie_info.z
if $game_system.movie_info.origin_center
self.ox = self.bitmap.width / 2
self.oy = self.bitmap.height / 2
end
change_zoom()
end
def update
if (self.visible = RGDS.visible)
if RGDS.bitmap_changed? or self.bitmap.disposed?
self.bitmap = RGDS.bitmap
fix_position()
RGDS.bitmap_changed = false
$game_system.movie_info.refresh_flag = false
elsif $game_system.movie_info.refresh_flag
fix_position()
$game_system.movie_info.refresh_flag = false
end
end
super
end
end
module_function
# ■ 動画をオープンします。初回は1~2秒ほどかかる場合もあります。
def open(filename)
RGDS.open(filename)
end
# ■ 動画を停止しクローズします。
def close
RGDS.close()
end
# ■ openされた動画を再生します。一時停止中なら再開します。
# 再生が終わると自動的にクローズします。
def run
RGDS.run()
end
# ■ 動画を一時停止します。再開はrunで行います。
def pause
RGDS.pause()
end
# スキップ検出オプション
if option.key?(:skip_sw)
skip_sw = option[:skip_sw].to_i
else
skip_sw = 0
end
# スキップ禁止モードオプション
if option.key?(:nsm)
nsm_mode = option[:nsm]
else
nsm_mode = false
end
if skip_sw > 0
$game_switches[skip_sw] = true
end
scene_temp = SceneManager.scene
if scene_temp.is_a?(Scene_Map) or scene_temp.is_a?(Scene_Battle)
msgv = SceneManager.scene.instance_variable_get(:@message_window)
msgv.update
tempv = msgv.visible
msgv.visible = false
# オープン
RGDS.open(filename)
RGDS.run()
# 終了またはボタンが押されるまでループ
loop do
break if scene_temp != SceneManager.scene
# 画面の更新
if SceneManager.scene.is_a?(Scene_Map)
SceneManager.scene.update_for_fade
else
SceneManager.scene.update_basic
end
if !RGDS.active? # 再生終了
if skip_sw > 0
$game_switches[skip_sw] = false
end
break
end
unless nsm_mode
if Input.trigger?(Input::C) or Input.trigger?(Input::B)
break
end
end
end
RGDS.close()
msgv.visible = tempv
end
end
# ■ 以降の表示位置、サイズをデフォルトに戻します。
# 拡大縮小なし、中央にあわせて表示
def reset_position
$game_system.movie_info.reset_position()
end
# 再生音量取得
def get_volume
return RGDS.get_volume()
end
# 再生音量設定
def set_volume(volume)
return RGDS.set_volume(volume)
end
end
class Game_System
def init_movie_info
@movie_info = RGDS_SP::MovieInfo.new
end
def movie_info
init_movie_info() if @movie_info.nil?
return @movie_info
end
end
class Spriteset_Map
alias :_hn_movie__initialize :initialize unless private_method_defined?(:_hn_movie__initialize)
def initialize
# 元の処理
_hn_movie__initialize
# 追加処理
create_movie
update_movie
end
alias :_hn_movie__dispose :dispose unless method_defined?(:_hn_movie__dispose)
def dispose
dispose_movie
_hn_movie__dispose
end
alias :_hn_movie__update :update unless method_defined?(:_hn_movie__update)
def update
update_movie
_hn_movie__update
end
def update_movie
if RGDS.active?
RGDS.update
end
@sp_movie.update unless @sp_movie.nil?
end
end
=begin
■ RGDS_OP_Movie ver 0.0.1.0
RGDS_base, RGDS_SP より下に配置してください
=end
class Scene_OpeningMovie < Scene_Base
MOVIE_FILE = "Movies/opening.mpg"
NSM = false
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
if $BTEST # 戦闘テストの場合
$scene = next_scene()
else # 通常のプレイの場合
super # 本来のメイン処理
end
end
def next_scene
Scene_Title.new
end
def start
$game_temp = Game_Temp.new
$game_system = Game_System.new
RGDS.open(MOVIE_FILE)
@movie_sprite = RGDS_SP::MovieSprite.new
super
end
def post_start
super
RGDS.run
end
def update
super
RGDS.update
@movie_sprite.update
if !RGDS.active? # 再生終了
SceneManager.goto(Scene_Title)
return
end
unless NSM
if Input.trigger?(Input::C) or Input.trigger?(Input::B)
SceneManager.goto(Scene_Title)
return
end
end
end
def pre_terminate
RGDS.close()
@movie_sprite.dispose
super
end
end
module SceneManager
#--------------------------------------------------------------------------
# ● 最初のシーンクラスを取得
#--------------------------------------------------------------------------
def self.first_scene_class
$BTEST ? Scene_Battle : Scene_OpeningMovie
end
end