#◆◇◆◇◆ マスタースクリプトVXA ver 1.00 ◇◆◇◆◇
# サポート掲示板 [url]http://www2.ezbbs.net/21/minto-aaa/[/url]
# by みんと
=begin
■ 更新履歴
○ Ver 1.00(2012/01/16)
公開
■ 説明
全てのみんとRGSSより上に導入してください。
(基本的にシステム上部に導入してください)
これがないと全てのみんとRGSS3は動作いたしません。
=end
#==============================================================================
# ☆ MINTO
#------------------------------------------------------------------------------
# 様々なフラグを扱うメインモジュールです。
#==============================================================================
module MINTO
# VXRGSSの導入環境ハッシュを初期化
RGSS = {}
end
#==============================================================================
# ☆ MINTO_System
#------------------------------------------------------------------------------
# 様々な機能を扱うシステムモジュールです。
#==============================================================================
module MINTO_System
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
def start
@tone_rate = 0
# シーンスプライトを作成
@scene_sprite = Sprite_Base.new
# スーパークラスを実行
super
end
#--------------------------------------------------------------------------
# ● トランジション実行
#--------------------------------------------------------------------------
def perform_transition
# スーパークラスを実行
super
end
#--------------------------------------------------------------------------
# ● 開始後処理
#--------------------------------------------------------------------------
def post_start
# スーパークラスを実行
super
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# シーンスプライトを更新
@scene_sprite.update
# スーパークラスを実行
super
end
#--------------------------------------------------------------------------
# ● 終了前処理
#--------------------------------------------------------------------------
def pre_terminate
# スーパークラスを実行
super
end
#--------------------------------------------------------------------------
# ● 終了処理
#--------------------------------------------------------------------------
def terminate
# シーンスプライトを解放
@scene_sprite.bitmap.dispose if @scene_sprite.bitmap
@scene_sprite.dispose
@scene_sprite = nil
# スーパークラスを実行
super
end
end
# ☆ 開発用メソッド追加 ☆
#==============================================================================
# ■ Scene_Base
#------------------------------------------------------------------------------
# ゲーム中のすべてのシーンのスーパークラスです。
#==============================================================================
class Scene_Base
#--------------------------------------------------------------------------
# ● 暗転モード処理
#--------------------------------------------------------------------------
def blackout(type = 0, power = 10, max = 100, sprite = nil)
@tone_power = power
@tone_type = type
@tone_max = max
update_blackout(sprite)
end
#--------------------------------------------------------------------------
# ● フレーム更新 (暗転処理)
#--------------------------------------------------------------------------
def update_blackout(sprite)
case @tone_type
when 0
if @tone_rate != -@tone_max
@tone_rate = [@tone_rate - @tone_power, -@tone_max].max
sprite.tone.red = @tone_rate
sprite.tone.green = @tone_rate
sprite.tone.blue = @tone_rate
end
when 1
if @tone_rate != 0
@tone_rate = [@tone_rate + @tone_power, 0].min
sprite.tone.red = @tone_rate
sprite.tone.green = @tone_rate
sprite.tone.blue = @tone_rate
end
end
end
end
#==============================================================================
# ■ Object
#------------------------------------------------------------------------------
# 全てのクラスのスーパークラス。オブジェクトの一般的な振舞いを定義します。
#==============================================================================
class Object
#--------------------------------------------------------------------------
# ● 情報の出力
#--------------------------------------------------------------------------
def p2(info)
# pメソッドを疑似的に前の仕様に戻す
msgbox(info)
end
#--------------------------------------------------------------------------
# ● 深い複製の作成
#--------------------------------------------------------------------------
def dec
# Marshalもモジュールを経由して、完全な複製を作成
return Marshal.load(Marshal.dump(self))
end
end
#==============================================================================
# ■ NilClass
#------------------------------------------------------------------------------
# nil のクラス。nil は NilClass クラスの唯一のインスタンスです。
#==============================================================================
class NilClass
#--------------------------------------------------------------------------
# ● デバイスの取得
#--------------------------------------------------------------------------
def to_d
return "BGM"
end
end
#==============================================================================
# ■ String
#------------------------------------------------------------------------------
# 文字列クラス。任意の長さのバイト列を扱うことができます。
#==============================================================================
class String
#--------------------------------------------------------------------------
# ● デバイスの取得
#--------------------------------------------------------------------------
def to_d
return self
end
end
#==============================================================================
# ■ Audio
#------------------------------------------------------------------------------
# ミュージック、サウンドにかかわる処理を行うモジュールです。
#==============================================================================
module Audio
#--------------------------------------------------------------------------
# ● 音楽の解放
#--------------------------------------------------------------------------
def self.dispose
#self.bgs_stop
self.me_stop
self.bgm_stop
end
end
#==============================================================================
# ■ Sprite
#------------------------------------------------------------------------------
# スプライト表示を扱う組み込みクラスです。
#==============================================================================
class Sprite
#--------------------------------------------------------------------------
# ● 座標の設定
#--------------------------------------------------------------------------
def rect_set(x, y, z = 100)
self.x = x if x
self.y = y if y
self.z = z if z
end
#--------------------------------------------------------------------------
# ● データの取得
#--------------------------------------------------------------------------
def data_copy(data)
return if data.disposed? or self.disposed?
# 各データをコピー
self.x = data.x
self.y = data.y
self.z = data.z-1
self.visible = data.visible
self.ox = data.ox
self.oy = data.oy
self.angle = data.angle
self.mirror = data.mirror
self.src_rect = data.src_rect.dup
self.zoom_x = data.zoom_x
self.zoom_y = data.zoom_y
end
#--------------------------------------------------------------------------
# ● 残像用の複製の作成
#--------------------------------------------------------------------------
def blink
# 各データをコピー
sprite = Sprite.new(self.viewport)
sprite.bitmap = self.bitmap.dup if self.bitmap
sprite.x = self.x
sprite.y = self.y
sprite.z = self.z-1
sprite.visible = false
sprite.ox = self.ox
sprite.oy = self.oy
sprite.angle = self.angle
sprite.mirror = self.mirror
sprite.opacity = self.opacity - 95
sprite.blend_type = 1
sprite.color = self.color.dup
sprite.src_rect = self.src_rect.dup
sprite.zoom_x = self.zoom_x
sprite.zoom_y = self.zoom_y
return sprite
end
#--------------------------------------------------------------------------
# ● 複製の作成
#--------------------------------------------------------------------------
def dup
# 各データをコピー
sprite = Sprite.new(self.viewport)
sprite.bitmap = self.bitmap.dup if self.bitmap
sprite.x = self.x
sprite.y = self.y
sprite.z = self.z
sprite.visible = self.visible
sprite.ox = self.ox
sprite.oy = self.oy
sprite.angle = self.angle
sprite.mirror = self.mirror
sprite.opacity = self.opacity
sprite.blend_type = self.blend_type
sprite.color = self.color.dup
sprite.src_rect = self.src_rect.dup
sprite.zoom_x = self.zoom_x
sprite.zoom_y = self.zoom_y
return sprite
end
#--------------------------------------------------------------------------
# ● センタリング
#--------------------------------------------------------------------------
def centering
return if self.bitmap == nil
self.x = (640 - (self.bitmap.width * self.zoom_x)) / 2
self.y = (480 - (self.bitmap.height * self.zoom_y)) / 2
end
#--------------------------------------------------------------------------
# ● ズーム
#--------------------------------------------------------------------------
def zoom=(n)
zoom_x = n
zoom_y = n
end
#--------------------------------------------------------------------------
# ● エフェクト表示中判定
#--------------------------------------------------------------------------
def effect?
return false
end
end
#==============================================================================
# ■ Array
#------------------------------------------------------------------------------
# 配列全般を扱う組み込みクラスです。
#==============================================================================
class Array
#--------------------------------------------------------------------------
# ● 要素の一次元化
#--------------------------------------------------------------------------
def divide
array = []
# データを複製
data = self.dup
# 要素の一次元化
data.each do |i|
if i.is_a?(Array)
for a in i
array.push(a)
end
else
array.push(i)
end
end
return array
end
#--------------------------------------------------------------------------
# ● 要素のシャッフル
#--------------------------------------------------------------------------
def shuffle
# データを複製
data = self.dup
# 要素をランダムに並び替える
data.each_index do |i|
j = rand(i+1)
data[i], data[j] = data[j], data[i]
end
return data
end
#--------------------------------------------------------------------------
# ● 要素のシャッフル(破壊的)
#--------------------------------------------------------------------------
def shuffle!
# 要素をランダムに並び替える
self.each_index do |i|
j = rand(i+1)
self[i], self[j] = self[j], self[i]
end
end
#--------------------------------------------------------------------------
# ● 要素をランダムに返す
#--------------------------------------------------------------------------
def get_rand
return self[rand(self.size)]
end
#--------------------------------------------------------------------------
# ● 要素の交換
# a : 要素1
# b : 要素2
#--------------------------------------------------------------------------
def change(a, b)
# データを複製
data = self.dup
# 要素を交換する(self自体には変化がない)
data[a] = self[b]
data[b] = self[a]
return data
end
#--------------------------------------------------------------------------
# ● 要素の交換(破壊的)
# a : 要素1
# b : 要素2
#--------------------------------------------------------------------------
def change!(a, b)
# 要素を交換する(selfを直接書き換える)
self[a], self[b] = self[b], self[a]
end
end
#==============================================================================
# ■ Numeric
#------------------------------------------------------------------------------
# 数値全般を扱う組み込みクラスです。
#==============================================================================
class Numeric
#--------------------------------------------------------------------------
# ● 乱数の設定
# n : 乱数値
#--------------------------------------------------------------------------
def amp(n)
amp = (self.abs * n / 100).to_min(1)
return self + rand(amp+1) + rand(amp+1) - amp
end
#--------------------------------------------------------------------------
# ● 値の調整
# order : 求められた値
# size : 最大サイズ
#--------------------------------------------------------------------------
def select(order, size)
if self - order <= -1
return size
elsif self + order >= size
return 0
else
return self + order
end
end
#--------------------------------------------------------------------------
# ● 最大値の設定
# max : 求められた最大の数値
#--------------------------------------------------------------------------
def to_max(min, max)
if self > max
return max
elsif self < min
return min
else
return self
end
end
#--------------------------------------------------------------------------
# ● 最大値の設定
# max : 求められた最大の数値
#--------------------------------------------------------------------------
def to_m(max)
if self > max
return max
else
return self
end
end
#--------------------------------------------------------------------------
# ● 最小値の設定
# min : 求められた最小の数値
#--------------------------------------------------------------------------
def to_min(min)
if self < min
return min
else
return self
end
end
#--------------------------------------------------------------------------
# ● 範囲内から乱数を得る
# min : 求められた最小の数値
#--------------------------------------------------------------------------
def mm_rand(min)
return rand(self - min + 1) + min
end
#--------------------------------------------------------------------------
# ● 求めた数値に対するパーセンテージを返す
# order : 求められた数値
#--------------------------------------------------------------------------
def rate(order)
return 100 if order == 0
return (self * 100) / order
end
end
#==============================================================================
# ■ Window
#------------------------------------------------------------------------------
# ゲーム内の全てのウィンドウのスーパークラスです。
# 内部的には複数のスプライトで構成されています。
#==============================================================================
class Window
#--------------------------------------------------------------------------
# ● 暗転モード処理
#--------------------------------------------------------------------------
def blackout(type = 0, power = 10, max = 100, sprite = @win_viewport)
@tone_power = power
@tone_type = type
@tone_max = max
update_blackout(sprite)
end
#--------------------------------------------------------------------------
# ● フレーム更新 (暗転処理)
#--------------------------------------------------------------------------
def update_blackout(sprite = @win_viewport)
case @tone_type
when 0
if @tone_rate != -@tone_max
@tone_rate = [@tone_rate - @tone_power, -@tone_max].max
sprite.tone.red = @tone_rate
sprite.tone.green = @tone_rate
sprite.tone.blue = @tone_rate
end
when 1
if @tone_rate != 0
@tone_rate = [@tone_rate + @tone_power, 0].min
sprite.tone.red = @tone_rate
sprite.tone.green = @tone_rate
sprite.tone.blue = @tone_rate
end
end
end
#--------------------------------------------------------------------------
# ● ウィンドウの右寄せ
#--------------------------------------------------------------------------
def right(x)
# ウィンドウを画面の右に配置する
self.x = (x - self.width)
end
#--------------------------------------------------------------------------
# ● ウィンドウの下寄せ
#--------------------------------------------------------------------------
def down(y)
# ウィンドウを画面の右に配置する
self.y = (480 - self.height - y)
end
#--------------------------------------------------------------------------
# ● ウィンドウのセンタリング
#--------------------------------------------------------------------------
def centering
# ウィンドウを画面の中央に配置する
self.x = (640 - self.width) / 2
self.y = (480 - self.height) / 2
end
end
#===============================================================================
#===============================================================================
#===============================================================================
#◆◇◆◇◆ バトル突入演出VXA ver 1・00 ◇◆◇◆◇
# サポート掲示板 [url]http://www2.ezbbs.net/21/minto-aaa/[/url]
# by みんと
=begin
■ 更新履歴
○ ver 1.00(2012/01/21)
公開
■ 説明
戦闘開始時、
現在の画面をホワイトアウトさせながらズームさせます。
ただし、
あくまでも「現在の画面の中央」を基点としていますので、
プレイヤーが中央に表示されていない場合は
ズームがプレイヤーに合わせられません。
=end
#==============================================================================
# ☆ MINTO
#------------------------------------------------------------------------------
# 様々なフラグを扱うメインモジュールです。
#==============================================================================
module MINTO
# バトル突入演出VXAを有効化 ( true で有効 / false で無効 )
RGSS["バトル突入演出VXA"] = true
# 演出を行わないスイッチ
#(このIDのスイッチが「オン」の場合、演出を行いません)
Not_BattleStart_Switch = 1
#使用这种战斗效果的开关
# トランジョン演出を行わないスイッチ
#(このIDのスイッチが「オン」の場合、トランジョン演出を行いません)
Not_BattleEffect_Switch = 2
#使用战斗渐变图的开关
end
# バトル突入演出VXAが有効な場合に以降の処理を実行する
if MINTO::RGSS["バトル突入演出VXA"] == true then
#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
# イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
# Game_Troop クラス、Game_Event クラスの内部で使用されます。
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# ● バトルの処理
#--------------------------------------------------------------------------
def command_301
return if $game_party.in_battle
if @params[0] == 0 # 直接指定
troop_id = @params[1]
elsif @params[0] == 1 # 変数で指定
troop_id = $game_variables[@params[1]]
else # マップ指定の敵グループ
troop_id = $game_player.make_encounter_troop_id
end
if $data_troops[troop_id]
BattleManager.setup(troop_id, @params[2], @params[3])
BattleManager.event_proc = Proc.new {|n| @branch[@indent] = n }
$game_player.make_encounter_count
SceneManager.scene.call_battle
SceneManager.call(Scene_Battle)
end
Fiber.yield
end
end
#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
# マップ画面の処理を行うクラスです。
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# ● システムインクルード
#--------------------------------------------------------------------------
include MINTO_System # みんとシステムモジュール
#--------------------------------------------------------------------------
# ● バトル突入演出
#--------------------------------------------------------------------------
def battle_effect
# 出力した画像を読み込む
bitmap = Graphics.snap_to_bitmap
# シーンスプライトが有効な場合
unless @scene_sprite.nil?
unless @scene_sprite.bitmap.nil?
# シーンスプライトをクリア
@scene_sprite.bitmap.dispose
@scene_sprite.bitmap = nil
end
end
# サブスプライトを作成
sub_sprite = @scene_sprite.dup
# ビットマップを渡して描写する
@scene_sprite.bitmap = bitmap
sub_sprite.bitmap = bitmap
# 座標を中心で固定する
@scene_sprite.x = Graphics.width / 2
@scene_sprite.y = Graphics.height / 2
@scene_sprite.ox = Graphics.width / 2
@scene_sprite.oy = Graphics.height / 2
sub_sprite.x = Graphics.width / 2
sub_sprite.y = Graphics.height / 2
sub_sprite.ox = Graphics.width / 2
sub_sprite.oy = Graphics.height / 2
# スプライトを最前面に表示する
@scene_sprite.z = 999999
sub_sprite.z = 999998
# シーンスプライトを加算表示にする
@scene_sprite.blend_type = 1
# シーンスプライトを光転させる
blackout(0, 160, -160, @scene_sprite)
# スプライトの不透明度を設定する
@scene_sprite.opacity = 0
sub_sprite.opacity = 255
# ズーム補正値を定義
zoom = (3.0 / 40.0)
zoom2 = (3.5 / 40.0)
# ループ処理(40回処理する)
=begin
40.times do
# ゲーム画面を更新
Graphics.update
# スプライトをズームさせる
sub_sprite.zoom_x += zoom
sub_sprite.zoom_y += zoom
@scene_sprite.zoom_x += zoom2
@scene_sprite.zoom_y += zoom2
# シーンスプライトを徐々に表示させる
@scene_sprite.opacity += (255 / 40)
end
=end
#以下部分经过我自己的修改
#放大的处理,开头数字越大时间越长
30.times do
Graphics.update
sub_sprite.zoom_x += zoom
sub_sprite.zoom_y += zoom
@scene_sprite.zoom_x += zoom2
@scene_sprite.zoom_y += zoom2
end
#缩小的处理,开头数字越大时间越长
10.times do
Graphics.update
sub_sprite.zoom_x -= zoom*3
sub_sprite.zoom_y -= zoom*3
@scene_sprite.zoom_x -= zoom2*3
@scene_sprite.zoom_y -= zoom2*3
@scene_sprite.opacity += (255 / 10)
#画面变亮,不需要可以将本句删除,需要放大时也变亮的话也加到放大处理的后面
end
#以上部分经过我自己的修改
# トランジション準備
Graphics.freeze
# サブスプライトを解放
sub_sprite.bitmap.dispose
sub_sprite.dispose
end
#--------------------------------------------------------------------------
# ● バトル画面への切り替え
#--------------------------------------------------------------------------
def call_battle
# 演出カットの場合
if $game_switches[MINTO::Not_BattleStart_Switch] == true then
# メソッドを返す
return
end
# 現在のBGMを記憶
BattleManager.save_bgm_and_bgs
# 戦闘BGMを再生
BattleManager.play_battle_bgm
# バトル突入SEを再生
Sound.play_battle_start
# 戦闘開始演出を実行
battle_effect
# スプライトセットを更新
@spriteset.update
# ゲーム画面を更新
Graphics.update
end
#--------------------------------------------------------------------------
# ● バトル画面遷移の前処理
#--------------------------------------------------------------------------
def pre_battle_scene
# 画面の情報を更新
Graphics.update
# トランジョン準備
Graphics.freeze
# 演出カットの場合
if $game_switches[MINTO::Not_BattleStart_Switch] == true then
# 現在のBGMを記憶
BattleManager.save_bgm_and_bgs
# 戦闘BGMを再生
BattleManager.play_battle_bgm
# バトル突入SEを再生
Sound.play_battle_start
end
# キャラクタースプライトの解放
@spriteset.dispose_characters
end
#--------------------------------------------------------------------------
# ● エンカウントの更新
#--------------------------------------------------------------------------
def update_encounter
# エンカウントが発生した場合
if $game_player.encounter then
# 演出を開始
call_battle
# 戦闘画面に切り替え
SceneManager.call(Scene_Battle)
end
end
#--------------------------------------------------------------------------
# ● 戦闘前トランジション実行
#--------------------------------------------------------------------------
alias perform_battle_transition_MINTO_RGSS3_05 perform_battle_transition
def perform_battle_transition
# 演出カットの場合
if $game_switches[MINTO::Not_BattleEffect_Switch] == true then
Graphics.transition(10)
Graphics.freeze
# メソッドを返す
return
end
# 元の処理を実行
perform_battle_transition_MINTO_RGSS3_05
end
end
end