Code:
# 自動読み込み型サウンドテスト&CG鑑賞 Ver.2.01
# 制作:神鏡学斗
# http://www.lemon-slice.net/
# イベント>スクリプトで $extra_flag = true と記述すると
# エクストラが使用可能になります。
# CGが閲覧可能かどうかは $extra_cg で定義します。
# $extra_cg[index(好きな数字)]で指定した番号のイラストが閲覧可能になります(最初が0であることに注意)。
# サムネイル画像は自動生成しますので、用意する必要はありません。
# 一度に表示できる枚数16枚を超えた場合、LRボタンでページの切り替えができるようになります。
#==============================================================================
# ■ カスタマイズ
#==============================================================================
class Scene_Title
alias sud_customize customize
def customize
#--------------------------------------------------------------------------
# ● コマンドウィンドウの再設定(必要ないなら変更せずとも可)
# 既存のコマンドウィンドウを一度削除し、音楽鑑賞の項が入った
# コマンドウィンドウを再度作成します。
#--------------------------------------------------------------------------
sud_customize
# コマンドウィンドウを解放
@command_window.dispose
# コマンドウィンドウを再設定
s1 = "ニューゲーム"
s2 = "コンティニュー"
s3 = "エクストラ"
s4 = "シャットダウン"
@command_window = Window_Command.new(192, [s1, s2, s3, s4])
@command_window.back_opacity = 160
@command_window.x = 320 - @command_window.width / 2
@command_window.y = 288
# エクストラ有効判定
# $extra_flagがエクストラ画面の許可フラグ。
# イベント>スクリプトに$extra_flag = trueと記述すればエクストラが使用可能になります。
# はじめからエクストラを使用させたい場合は、6行下を$extra_flag = trueに変えてください。
if FileTest.exist?("AllSave.rxdata")
file = File.open("AllSave.rxdata", "rb")
read_all_data(file)
file.close
else
$extra_flag = false
$extra_cg = Array.new
$play_true = Array.new
end
unless $extra_flag
@command_window.disable_item(2)
end
sud_customize01
end
def sud_customize01
#--------------------------------------------------------------------------
# ● 曲目登録
# 再生する曲ファイル名を入力(m1などは曲番号)
# 曲のファイル名は正確に入力されている必要があります(大文字小文字も別に認識されます)。
# 上手く再生されない場合は、ファイル名を直接コピーしてください。拡張子は不要です。
# また、必要な分だけ曲のリストを追加して下さい。
#--------------------------------------------------------------------------
m0 = "001-Battle01"
m1 = "002-Battle02"
m2 = "011-LastBoss03"
m3 = "012-Theme01"
# 再生する曲のリストを入力
$play_list = [m0,m1,m2,m3]
end
end
class Scene_MusicTest
def sud_customize02
#--------------------------------------------------------------------------
# ● 曲タイトル登録
# 再生する曲のタイトルを入力(手動。配列のインデックスは曲番号に一致)
# 再設定しない場合は、ファイル名がそのまま表示されます。
#--------------------------------------------------------------------------
@play_title[2] = "The Final Duel"
@play_title[3] = "Orpheus -メインテーマ-"
end
def sud_customize03
#--------------------------------------------------------------------------
# ● 著作者登録
# 著作者、(および原題)を入力。曲番号と対応したヘルプウィンドウとなります。
# 製作者の方の著作権明記・保護のため、必ず入力してください。
# 名前、リストの入力方法は曲目登録と同じです。
#--------------------------------------------------------------------------
h0 = "作:エンターブレイン"
h1 = "作:エンターブレイン"
h2 = "作:エンターブレイン"
h3 = "作:エンターブレイン"
# 著作者リストを入力
$copyright_list = [h0,h1,h2,h3]
end
def sud_customize04
#--------------------------------------------------------------------------
# ● 音楽鑑賞画面の背景設定
# 背景を設定します。好きな画像を設定してください。
# 初期状態ではタイトル画面がそのまま表示されるようになっています。
# ピクチャーから画像を呼び出す時は、
# @sprite.bitmap = RPG::Cache.picture("***(ファイル名)")
# と記述します。
#--------------------------------------------------------------------------
@sprite.bitmap = RPG::Cache.title($data_system.title_name)
end
end
class Scene_CG
def cg_customize01
#--------------------------------------------------------------------------
# ● CG登録
# 再生するCGファイル名を入力(m1などはCG番号)
# 曲のファイル名は正確に入力されている必要があります。
# 上手く再生されない場合は、ファイル名を直接コピーしてください。拡張子は不要です。
# また、必要な分だけCGのリストを追加して下さい。
#--------------------------------------------------------------------------
@cg_list = Array.new
m0 = "test0"
m1 = "test0"
m2 = "test1"
m3 = "test2"
m4 = "test2"
m5 = "test3"
m6 = "test4"
m7 = "test5"
m8 = "test5"
m9 = "test5"
m10 = "test6"
m11 = "test7"
m12 = "test7"
m13 = "test7"
m14 = "test7"
m15 = "test8"
m16 = "test9"
m17 = "test9"
m18 = "test9"
m19 = "test9"
m20 = "test9"
m21 = "test9"
m22 = "test9"
m23 = "test9"
m24 = "test9"
m25 = "test9"
m26 = "test9"
m27 = "test9"
m28 = "test9"
m29 = "test9"
m30 = "test9"
m31 = "test9"
m32 = "test9"
# 再生するCGのリストを入力
# 閲覧可能かどうかは、$extra_cgで定義
#(定義は自動で行います。後は、イベント>スクリプトでtureにすると閲覧可能になります)
@cg_list = [m0,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,
m18,m19,m20,m21,m22,m23,m24,m25,m26,m27,m28,m29,m30,m31,m32]
end
end
class Sprite_CG < Sprite
def cg_customize02
#--------------------------------------------------------------------------
# ● 閲覧不能時のCG登録
# $extra_cg = false 時に使用。閲覧できないCGの代わりとなります。
# 初期状態ではタイトル画面が縮小されて表示されるようになっています。
# ピクチャーから画像を呼び出す時は、
# self.bitmap = RPG::Cache.picture("***(ファイル名)")
# と記述します。
#--------------------------------------------------------------------------
self.bitmap = RPG::Cache.title($data_system.title_name)
end
end
class Spriteset_CG < RPG::Sprite
def cg_customize03
#--------------------------------------------------------------------------
# ● CG閲覧画面の背景を設定
# 背景を設定します。好きな画像を設定してください。
# 初期状態ではタイトル画面がそのまま表示されるようになっています。
# ピクチャーから画像を呼び出す時は、
# @back_sprite.bitmap = RPG::Cache.picture("***(ファイル名)")
# と記述します。
#--------------------------------------------------------------------------
@back_sprite.bitmap = RPG::Cache.title($data_system.title_name)
end
end
#==============================================================================
# ■ オールセーブ・システム
# オリジナルの改造を施さないなら、変更の必要なし。
#==============================================================================
class Scene_Save < Scene_File
#--------------------------------------------------------------------------
# ● オールセーブデータの書き込み
# file : 書き込み用ファイルオブジェクト (オープン済み)
# イベントで認識している変数をグローバル変数に変換する場合は
# (例)$extra_variable = $game_variables[x]のような記述を
# 追加してください(例として変数1番を記録するようになっています)
# 他に保存したい変数がある場合、自由に増やす事が出来ます。
#--------------------------------------------------------------------------
def write_all_data(file)
Marshal.dump($extra_flag, file) # エクストラフラッグの保存
Marshal.dump($extra_cg, file) # CGリストの保存
Marshal.dump($play_true, file) # 再生可能な曲のリスト
end
end
class Interpreter
#--------------------------------------------------------------------------
# ● オールセーブ実行
# イベント>スクリプトで all_save と記述すると実行される。
#--------------------------------------------------------------------------
def all_save
# 外部データ作成
file = File.open("AllSave.rxdata", "wb")
# 上で記録するものと同じにする。
Marshal.dump($extra_flag, file) # エクストラフラッグの保存
Marshal.dump($extra_cg, file) # CGリストの保存
Marshal.dump($play_true, file) # 再生可能な曲のリスト
# ここまで
file.close
end
end
class Scene_Title
#--------------------------------------------------------------------------
# ● オールセーブデータの読み込み
# file : 読み込み用ファイルオブジェクト (オープン済み)
# ここでオールセーブデータとして保存してあるグローバル変数を読み込む。
# なお、変数を読み込む順番は書き込んだ順番と同じにする事。
#--------------------------------------------------------------------------
def read_all_data(file)
$extra_flag = Marshal.load(file)
$extra_cg = Marshal.load(file)
$play_true = Marshal.load(file)
end
end
#==============================================================================
# オールセーブここまで
#==============================================================================
# ■ カスタマイズここまで
#==============================================================================
#
#
#==============================================================================
# ■ Sprite_CG
#------------------------------------------------------------------------------
# CG表示用のスプライトです。
#==============================================================================
class Sprite_CG < Sprite
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# viewport : ビューポート
#--------------------------------------------------------------------------
def initialize(viewport, cg, index)
super(viewport)
@cg = cg
@index = index
# 画像を設定
cg_true = ($cg_page-1) * 16 + @index
if $extra_cg[cg_true] == true
self.bitmap = RPG::Cache.picture(@cg)
else
cg_customize02
end
# スプライトを可視に設定
self.visible = true
# 転送元原点を設定
self.ox = 0
self.oy = 0
# スプライトの座標を設定
cg_x = @index % 4 * (96 + 40) + 68
cg_y = @index / 4 * 84 + 54
self.x = cg_x
self.y = cg_y
# 拡大率、不透明度、ブレンド方法を設定
self.zoom_x = 0.15
self.zoom_y = 0.15
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
def dispose
if self.bitmap != nil
self.bitmap.dispose
end
super
end
end
#==============================================================================
# ■ Spriteset_CG
#------------------------------------------------------------------------------
# CG画面のスプライトをまとめたクラスです。
#==============================================================================
class Spriteset_CG < RPG::Sprite
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :viewport1 # 背景表示用のビューポート
attr_reader :viewport2 # CG表示用のビューポート
attr_reader :viewport3 # サムネイル表示用のビューポート
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# viewport1 サムネイル
# viewport2 メインCG
#--------------------------------------------------------------------------
def initialize(cg_list)
@CG_list = cg_list
@cg_page = 0
# ビューポートを作成
@viewport1 = Viewport.new(0, 0, 640, 480)
@viewport2 = Viewport.new(0, 0, 640, 480)
@viewport3 = Viewport.new(0, 0, 640, 480)
@viewport1.z = 0
@viewport2.z = 3000
@viewport3.z = 101
# 背景を作成
@back_sprite = Sprite.new(@viewport1)
cg_customize03
# サムネイルスプライトを作成(初期処理)
@CG_sprites = []
index = 0
for cg in @CG_list
@CG_sprites.push(Sprite_CG.new(@viewport3, cg, index))
index += 1
if index == 16
break
end
end
# メインCGを作成
@main_sprite = Sprite.new(@viewport2)
@main_sprite.visible = false
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
def dispose
# 背景ビットマップが存在していたら解放
if @back_sprite.bitmap != nil
@back_sprite.bitmap.dispose
end
# 背景スプライトを解放
@back_sprite.dispose
# CGスプライトを解放
for sprite in @CG_sprites
sprite.dispose
end
# メインビットマップが存在していたら解放
if @main_sprite.bitmap != nil
@main_sprite.bitmap.dispose
end
# メインスプライトを解放
@main_sprite.dispose
# ビューポートを解放
@viewport1.dispose
@viewport2.dispose
@viewport3.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update(cg_name)
@cg_name = cg_name
# メインCGを更新
if $play_cg and $cg_showing == false
@main_sprite.bitmap = RPG::Cache.picture(@cg_name)
@main_sprite.opacity = 5
@main_sprite.visible = true
while @main_sprite.opacity < 255
@main_sprite.opacity += 25
# ゲーム画面を更新
Graphics.update
end
$cg_showing = true
elsif $play_cg == false and $cg_showing == false
while @main_sprite.opacity >= 5
@main_sprite.opacity -= 25
# ゲーム画面を更新
Graphics.update
end
@main_sprite.visible = false
$cg_showing = true
end
# ビューポートを更新
@viewport1.update
@viewport2.update
@viewport3.update
end
end
#==============================================================================
# ■ Window_CGSelect
#------------------------------------------------------------------------------
# カーソルの移動やスクロールの機能を持つウィンドウクラスです。
#==============================================================================
class Window_CGSelect < Window_Base
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :index # カーソル位置
attr_reader :help_window # ヘルプウィンドウ
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# x : ウィンドウの X 座標
# y : ウィンドウの Y 座標
# width : ウィンドウの幅
# height : ウィンドウの高さ
#--------------------------------------------------------------------------
def initialize(x, y, width, height)
super(x, y, width, height)
@item_max = 1
@column_max = 1
@index = -1
end
#--------------------------------------------------------------------------
# ● カーソル位置の設定
# index : 新しいカーソル位置
#--------------------------------------------------------------------------
def index=(index)
@index = index
# ヘルプテキストを更新 (update_help は継承先で定義される)
if self.active and @help_window != nil
update_help
end
# カーソルの矩形を更新
update_cursor_rect
end
#--------------------------------------------------------------------------
# ● 行数の取得
#--------------------------------------------------------------------------
def row_max
# 項目数と列数から行数を算出
return (@item_max + @column_max - 1) / @column_max
end
#--------------------------------------------------------------------------
# ● 先頭の行の取得
#--------------------------------------------------------------------------
def top_row
# ウィンドウ内容の転送元 Y 座標を、1 行の高さ 84 で割る
return self.oy / 84
end
#--------------------------------------------------------------------------
# ● 先頭の行の設定
# row : 先頭に表示する行
#--------------------------------------------------------------------------
def top_row=(row)
# row が 0 未満の場合は 0 に修正
if row < 0
row = 0
end
# row が row_max - 1 超の場合は row_max - 1 に修正
if row > row_max - 1
row = row_max - 1
end
# row に 1 行の高さ 84 を掛け、ウィンドウ内容の転送元 Y 座標とする
self.oy = row * 84
end
#--------------------------------------------------------------------------
# ● 1 ページに表示できる行数の取得
#--------------------------------------------------------------------------
def page_row_max
# ウィンドウの高さから、フレームの高さ 84 を引き、1 行の高さ 84 で割る
return (self.height - 84) / 84
end
#--------------------------------------------------------------------------
# ● 1 ページに表示できる項目数の取得
#--------------------------------------------------------------------------
def page_item_max
# 行数 page_row_max に 列数 @column_max を掛ける
return page_row_max * @column_max
end
#--------------------------------------------------------------------------
# ● ヘルプウィンドウの設定
# help_window : 新しいヘルプウィンドウ
#--------------------------------------------------------------------------
def help_window=(help_window)
@help_window = help_window
# ヘルプテキストを更新 (update_help は継承先で定義される)
if self.active and @help_window != nil
update_help
end
end
#--------------------------------------------------------------------------
# ● カーソルの矩形更新
#--------------------------------------------------------------------------
def update_cursor_rect
# カーソル位置が 0 未満の場合
if @index < 0
self.cursor_rect.empty
return
end
# カーソルの幅を計算
cursor_width = self.width / @column_max - 32
# カーソルの座標を計算
x = @index % @column_max * (cursor_width + 32)
y = @index / @column_max * 84 - self.oy
# カーソルの矩形を更新
self.cursor_rect.set(x, y, cursor_width, 84)
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
# カーソルの移動が可能な状態の場合
if self.active and @item_max > 0 and @index >= 0
# 方向ボタンの下が押された場合
if Input.repeat?(Input::DOWN)
# 列数が 1 かつ 方向ボタンの下の押下状態がリピートでない場合か、
# またはカーソル位置が(項目数 - 列数)より前の場合
if (@column_max == 1 and Input.trigger?(Input::DOWN)) or
@index < @item_max - @column_max
# カーソルを下に移動
$game_system.se_play($data_system.cursor_se)
@index = (@index + @column_max) % @item_max
end
end
# 方向ボタンの上が押された場合
if Input.repeat?(Input::UP)
# 列数が 1 かつ 方向ボタンの上の押下状態がリピートでない場合か、
# またはカーソル位置が列数より後ろの場合
if (@column_max == 1 and Input.trigger?(Input::UP)) or
@index >= @column_max
# カーソルを上に移動
$game_system.se_play($data_system.cursor_se)
@index = (@index - @column_max + @item_max) % @item_max
end
end
# 方向ボタンの右が押された場合
if Input.repeat?(Input::RIGHT)
# 列数が 2 以上で、カーソル位置が(項目数 - 1)より前の場合
if @column_max >= 2 and @index < @item_max - 1
# カーソルを右に移動
$game_system.se_play($data_system.cursor_se)
@index += 1
end
end
# 方向ボタンの左が押された場合
if Input.repeat?(Input::LEFT)
# 列数が 2 以上で、カーソル位置が 0 より後ろの場合
if @column_max >= 2 and @index > 0
# カーソルを左に移動
$game_system.se_play($data_system.cursor_se)
@index -= 1
end
end
# R ボタンが押された場合
if Input.repeat?(Input::R)
# 現在表示されているページ数*16枚より総CG数が多い場合
if @cg_max > $cg_page * 16
# カーソルを 1 ページ後ろに移動
$game_system.se_play($data_system.cursor_se)
$cg_page += 1
end
end
# L ボタンが押された場合
if Input.repeat?(Input::L)
# ページが2以上の場合
if $cg_page >= 2
# カーソルを 1 ページ前に移動
$game_system.se_play($data_system.cursor_se)
$cg_page -= 1
end
end
end
page_max = @cg_max / 16
if @cg_max % 16 > 0
page_max += 1
end
@page_help = "Page " + $cg_page.to_s + " / " + page_max.to_s + " "
if $cg_page >= 2 and @cg_max > $cg_page * 16
@page_help += "← L R →"
elsif $cg_page >= 2 and @cg_max <= $cg_page * 16
@page_help += "← L"
elsif $cg_page = 1 and @cg_max > $cg_page * 16
@page_help += " R →"
end
# ヘルプテキストを更新 (update_help は継承先で定義される)
if self.active and @help_window != nil
update_help
end
# カーソルの矩形を更新
update_cursor_rect
end
end
#==============================================================================
# ■ Window_CG
#------------------------------------------------------------------------------
# CG鑑賞で使用するウィンドウです。
#==============================================================================
class Window_CG < Window_CGSelect
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(item_max)
super(48, 32, 544, 366)
# 表示するCGの総枚数
@item_max = item_max
@cg_max = item_max
@cg_page = 0
# 一行に表示するCGの枚数
@column_max = 4
update
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
if @cg_page != $cg_page
# 一ページに表示するCGの枚数
if $cg_page * 16 < @cg_max
@item_max = 16
else
@item_max = @cg_max - ($cg_page - 1) * 16
end
@cg_page = $cg_page
end
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
if @help_window.visible == true
@help_window.set_text(@page_help)
end
end
end
#==============================================================================
# ■ Scene_Title
#------------------------------------------------------------------------------
# タイトル画面の処理を行うクラスです。
#==============================================================================
class Scene_Title
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# menu_index : コマンドのカーソル初期位置
#--------------------------------------------------------------------------
def initialize(menu_index = 0)
@menu_index = menu_index
end
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
# 戦闘テストの場合
if $BTEST
battle_test
return
end
# データベースをロード
$data_actors = load_data("Data/Actors.rxdata")
$data_classes = load_data("Data/Classes.rxdata")
$data_skills = load_data("Data/Skills.rxdata")
$data_items = load_data("Data/Items.rxdata")
$data_weapons = load_data("Data/Weapons.rxdata")
$data_armors = load_data("Data/Armors.rxdata")
$data_enemies = load_data("Data/Enemies.rxdata")
$data_troops = load_data("Data/Troops.rxdata")
$data_states = load_data("Data/States.rxdata")
$data_animations = load_data("Data/Animations.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
$data_common_events = load_data("Data/CommonEvents.rxdata")
$data_system = load_data("Data/System.rxdata")
# システムオブジェクトを作成
$game_system = Game_System.new
# タイトルグラフィックを作成
@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title($data_system.title_name)
# コマンドウィンドウを作成
s1 = "ニューゲーム"
s2 = "コンティニュー"
s3 = "シャットダウン"
@command_window = Window_Command.new(192, [s1, s2, s3])
@command_window.back_opacity = 160
@command_window.x = 320 - @command_window.width / 2
@command_window.y = 288
# カスタマイズ挿入ポイント
customize
# コンティニュー有効判定
# セーブファイルがひとつでも存在するかどうかを調べる
# 有効なら @continue_enabled を true、無効なら false にする
@continue_enabled = false
for i in 0..3
if FileTest.exist?("Save#{i+1}.rxdata")
@continue_enabled = true
end
end
# コンティニューが有効な場合、カーソルをコンティニューに合わせる
# 無効な場合、コンティニューの文字をグレー表示にする
if @continue_enabled
@command_window.index = 1
else
@command_window.disable_item(1)
end
# タイトル BGM を演奏
$game_system.bgm_play($data_system.title_bgm)
# ME、BGS の演奏を停止
Audio.me_stop
Audio.bgs_stop
# トランジション実行
Graphics.transition
# メインループ
loop do
# ゲーム画面を更新
Graphics.update
# 入力情報を更新
Input.update
# フレーム更新
update
# 画面が切り替わったらループを中断
if $scene != self
break
end
end
# トランジション準備
Graphics.freeze
# コマンドウィンドウを解放
@command_window.dispose
# タイトルグラフィックを解放
@sprite.bitmap.dispose
@sprite.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# コマンドウィンドウを更新
@command_window.update
# C ボタンが押された場合
if Input.trigger?(Input::C)
# コマンドウィンドウのカーソル位置で分岐
case @command_window.index
when 0 # ニューゲーム
command_new_game
when 1 # コンティニュー
command_continue
when 2 # エクストラ
command_extra
when 3 # シャットダウン
command_shutdown
end
end
end
#--------------------------------------------------------------------------
# ● コマンド : エクストラ
#--------------------------------------------------------------------------
def command_extra
# コンティニューが無効の場合
unless $extra_flag
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# エクストラ画面に切り替え
$scene = Scene_Extra.new
end
end
#==============================================================================
# ■ Scene_Save
#------------------------------------------------------------------------------
# セーブ画面の処理を行うクラスです。
#==============================================================================
class Scene_Save < Scene_File
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super("どのファイルにセーブしますか?")
# オールセーブデータの書き込み
file = File.open("AllSave.rxdata", "wb")
write_all_data(file)
file.close
end
end
#==============================================================================
# ■ Scene_Extra
#------------------------------------------------------------------------------
# エクストラ画面の処理を行うクラスです。
#==============================================================================
class Scene_Extra
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# menu_index : コマンドのカーソル初期位置
#--------------------------------------------------------------------------
def initialize(menu_index = 0)
@menu_index = menu_index
end
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
# コマンドウィンドウを作成
s1 = "CG"
s2 = "音楽"
s3 = "戻る"
@command_window = Window_Command.new(160, [s1, s2, s3])
@command_window.x = 0
@command_window.index = @menu_index
# トランジション実行
Graphics.transition
# メインループ
loop do
# ゲーム画面を更新
Graphics.update
# 入力情報を更新
Input.update
# フレーム更新
update
# 画面が切り替わったらループを中断
if $scene != self
break
end
end
# トランジション準備
Graphics.freeze
# ウィンドウを解放
@command_window.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# ウィンドウを更新
@command_window.update
update_command
end
#--------------------------------------------------------------------------
# ● フレーム更新 (コマンドウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_command
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# マップ画面に切り替え
$scene = Scene_Title.new(3)
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# コマンドウィンドウのカーソル位置で分岐
case @command_window.index
when 0 # CG
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# CG画面に切り替え
$scene = Scene_CG.new
when 1 # 音楽
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# 音楽鑑賞画面に切り替え
$scene = Scene_MusicTest.new
when 2 # 戻る
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# タイトル画面に切り替え
$scene = Scene_Title.new(3)
end
return
end
end
end
#==============================================================================
# ■ Window_MusicTest
#------------------------------------------------------------------------------
# 音楽鑑賞で使用するウィンドウです。
#==============================================================================
class Window_MusicTest < Window_Selectable
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(play_title)
@play_title = play_title
super(64, 32, 512, 354)
@column_max = 2
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
# ビットマップを作成し、全項目を描画
@item_max = @play_title.size
self.contents = Bitmap.new(width - 32, row_max * 32)
for i in 0...@item_max
if $play_true[i] == true
draw_title(i)
else
draw_false(i)
end
end
end
#--------------------------------------------------------------------------
# ● 項目の描画
# index : 項目番号
#--------------------------------------------------------------------------
def draw_title(index)
music_name = @play_title[index]
x = index % 2 * (220 + 40)
y = index / 2 * 32
self.contents.font.color = normal_color
self.contents.draw_text(x, y, 220, 32, music_name, 1)
end
#--------------------------------------------------------------------------
# ● 項目の描画(false)
#--------------------------------------------------------------------------
def draw_false(index)
x = index % 2 * (220 + 40)
y = index / 2 * 32
self.contents.font.color = normal_color
self.contents.draw_text(x, y, 220, 32, "???", 1)
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
if $play_true[self.index] == true
@help_window.set_text($copyright_list[self.index])
else
@help_window.set_text("???")
end
end
end
#==============================================================================
# ■ Scene_MusicTest
#------------------------------------------------------------------------------
# 音楽鑑賞画面の処理を行うクラスです。
#==============================================================================
class Scene_MusicTest
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# menu_index : コマンドのカーソル初期位置
#--------------------------------------------------------------------------
def initialize(menu_index = 0)
@menu_index = menu_index
end
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
@play_title = []
# 再生する曲のタイトルを入力
@play_title[0,0] = $play_list
sud_customize02
sud_customize03
# BGM、ME、BGS の演奏を停止
Audio.bgm_stop
Audio.me_stop
Audio.bgs_stop
# 背景を作成
@sprite = Sprite.new
sud_customize04
# コマンドウィンドウを作成
@command_window = Window_MusicTest.new(@play_title)
@command_window.back_opacity = 160
@command_window.index = 0
# ヘルプウィンドウを作成
@help_window = Window_Help.new
@help_window.y = 416
@help_window.back_opacity = 160
# ヘルプウィンドウを関連付け
@command_window.help_window = @help_window
# トランジション実行
Graphics.transition
# メインループ
loop do
# ゲーム画面を更新
Graphics.update
# 入力情報を更新
Input.update
# フレーム更新
update
# 画面が切り替わったらループを中断
if $scene != self
break
end
end
# トランジション準備
Graphics.freeze
# 背景を解放
@sprite.dispose
# ウィンドウを解放
@command_window.dispose
@help_window.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# ウィンドウを更新
@command_window.update
update_command
end
#--------------------------------------------------------------------------
# ● フレーム更新 (コマンドウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_command
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# エクストラ画面に切り替え
$scene = Scene_Extra.new
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
play = $play_true[@command_window.index]
if play == true
Audio.bgm_stop
play_bgm = $play_list[@command_window.index]
# 音楽を演奏
Audio.bgm_play("Audio/BGM/" + play_bgm)
else
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
end
return
end
end
end
#==============================================================================
# ■ Scene_CG
#------------------------------------------------------------------------------
# CG鑑賞画面の処理を行うクラスです。
#==============================================================================
class Scene_CG
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# menu_index : コマンドのカーソル初期位置
#--------------------------------------------------------------------------
def initialize(menu_index = 0)
@menu_index = menu_index
end
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
$play_cg = false
$cg_page = 1
@now_page = 1
cg_customize01
# cg_listから1ページ表示分16枚を抜き出す。
@now_list = @cg_list[0,16]
# スプライトセットを作成
@spriteset = Spriteset_CG.new(@now_list)
# コマンドウィンドウを作成
item_max = @cg_list.size
@command_window = Window_CG.new(item_max)
@command_window.back_opacity = 160
@command_window.index = 0
@command_window.visible = true
# ヘルプウィンドウを作成
@help_window = Window_Help.new
@help_window.y = 416
@help_window.back_opacity = 160
# ヘルプウィンドウを関連付け
@command_window.help_window = @help_window
# 表示するCGが16枚以下(1ページ)なら、ヘルプウィンドウを消す。
if item_max <= 16
@help_window.visible = false
end
# トランジション実行
Graphics.transition
# メインループ
loop do
# ゲーム画面を更新
Graphics.update
# 入力情報を更新
Input.update
# フレーム更新
update
# 画面が切り替わったらループを中断
if $scene != self
break
end
end
# トランジション準備
Graphics.freeze
# スプライトセットを解放
@spriteset.dispose
# ウィンドウを解放
@command_window.dispose
@help_window.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# スプライトセットを更新
@spriteset.update(@cg_name)
# ページが変わっていたら@now_listを書き換え。
if @now_page != $cg_page
# 前のスプライトセットを解放
@spriteset.dispose
# cg_listから1ページ表示分16枚を抜き出す。
s = ($cg_page - 1) * 16
@now_list = @cg_list[s,16]
# スプライトセットを作成
@spriteset = Spriteset_CG.new(@now_list)
@now_page = $cg_page
@command_window.index = 0
end
# ウィンドウを更新
@command_window.update
update_command
end
#--------------------------------------------------------------------------
# ● フレーム更新 (コマンドウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_command
if $play_cg != true
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# エクストラ画面に切り替え
$scene = Scene_Extra.new
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
index = @command_window.index + ($cg_page - 1) * 16
if $extra_cg[index] == true
@cg_name = @cg_list[index]
$play_cg = true
$cg_showing = false
@command_window.active = false
else
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
end
return
end
else
# B ボタンか C ボタンが押された場合
if Input.trigger?(Input::B) or Input.trigger?(Input::C)
$play_cg = false
$cg_showing = false
@command_window.active = true
end
end
end
end
#==============================================================================
# ■ Game_System
#------------------------------------------------------------------------------
# システム周りのデータを扱うクラスです。BGM などの管理も行います。このクラス
# のインスタンスは $game_system で参照されます。
#==============================================================================
class Game_System
#--------------------------------------------------------------------------
# ● BGM の演奏
# bgm : 演奏する BGM
#--------------------------------------------------------------------------
def bgm_play(bgm)
@playing_bgm = bgm
if bgm != nil and bgm.name != ""
if $play_list != nil
play = $play_list.index(bgm.name)
end
if play != nil
$play_true[play] = true
end
Audio.bgm_play("Audio/BGM/" + bgm.name, bgm.volume, bgm.pitch)
else
Audio.bgm_stop
end
Graphics.frame_reset
end
end