#◆◇◆◇◆ 明かりスクリプトVXA ver 1.00 ◇◆◇◆◇
# サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/
# by みんと
=begin
※ 導入場所の注意
すべてモジュールで管理されていますので、
マスタースクリプトより下であれば導入場所は関係ありません。
■ 更新履歴
○ ver 1.00(2012/01/16)
公開
■ 説明
イベントに明かりを設定出来るようにします。
明かりは画面の色調よりも全面に出るため、
明かりの範囲内は明るく表示されます。
◆ 設定方法及び仕様
設定にはイベントの内容に
「どこでもいいので」注釈を置きます。
そして、注釈の内容を
◆ 明かり設定1
といったように"明かり設定の後"に"半角の数字"を記入してください。
記入した数字が、明かりデータの管理IDとなります。
明かりはイベントの不透明度と同期して強さが変化します。
イベントが完全に透明になれば明かりも完全に消えますので、
明かりを個別に消したい場合は、
移動ルートなどで対象イベントの不透明度を0にしてください。
また、新しいページに注釈で設定されていない場合も明かりは消えます。
◆ 画像の規格
明かりに使用する画像の規格は任意です。
ただし、1コマの規格は「画像の全体の横幅を4で割った値」となります。
つまり、640*160ピクセルの画像の場合、
1コマの規格は160*160となります。
画像は全て左から順に 0→1→2→3→0 と4コマループします。
明かり用の画像はピクチャーフォルダにインポートしてください。
=end
#==============================================================================
# ☆ MINTO
#------------------------------------------------------------------------------
# 様々なフラグを扱うメインモジュールです。
#==============================================================================
module MINTO
# 明かりスクリプトVXAを有効化 ( true で有効 / false で無効 )
RGSS["明かりスクリプトVXA"] = true
end
# 明かりスクリプトVXAが有効な場合に以降の処理を実行する
if MINTO::RGSS["明かりスクリプトVXA"] == true then
#==============================================================================
# ☆ カスタマイズ
#------------------------------------------------------------------------------
# 機能のカスタマイズをここで行います。
#==============================================================================
module MINTO
#--------------------------------------------------------------------------
# ● 明かりのセット
# belong_id : 明かりの管理ID
#--------------------------------------------------------------------------
def self.light_set(belong_id)
# 明かりの管理IDに応じて分岐
case belong_id
when 1 then
# data = [画像ファイル名, Y座標修正値, 大きさ(通常2。 小数点可)]
data = ["stove", 0, 6]
when 2 then
data = ["Light_Sprite02", -16, 2]
# それ以外の名前の場合
else
data = ["", 0, 1]
end
# 設定データを返す
return data.dup
end
end
#==============================================================================
# ☆ Add_Light_Sprite
#------------------------------------------------------------------------------
# Sprite_Characterクラスに機能を追加するモジュールです。
# 明かりの機能を追加します。
#==============================================================================
module Add_Light_Sprite
#--------------------------------------------------------------------------
# ● 解放(明かり)
#--------------------------------------------------------------------------
def dispose_light
# 明かりが存在する場合
if @light_sprite != nil then
# 明かりを解放
@light_sprite.bitmap.dispose
@light_sprite.dispose
@light_sprite = nil
end
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
def dispose
# 明かりを解放
dispose_light
# 明かり可視フラグをクリア
@character.light_visible = false
# 明かり作成フラグをクリア
@character.call_light = false
# 最終ページ情報を解放
@character.dispose_data
# スーパークラスの処理に移行
super
end
#--------------------------------------------------------------------------
# ● 明かりの設定
# id : 明かりのID
#--------------------------------------------------------------------------
def light_set(id)
# 明かりを解放
dispose_light
# 明かりを作成
@light_sprite = Light_Sprite.new(self, id)
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# スーパークラスの処理に移行
super
# キャラクターが無効な場合
if @character == nil then
# メソッドを返す
return
end
# 明かりデータを取得
@character.get_light_data
# 明かり可視フラグが無効な場合
if @character.light_visible != true then
# 明かりを解放
dispose_light
# メソッドを返す
return
end
# 明かり作成フラグが有効な場合
if @character.call_light == true then
# 明かり作成フラグをオフにする
@character.call_light = false
# 明かりを作成
light_set(@character.light_id)
end
# 明かりが無効な場合
if @light_sprite == nil then
# メソッドを返す
return
end
# 明かりを更新
@light_sprite.update
end
end
#==============================================================================
# ☆ Add_Game_Event_Light
#------------------------------------------------------------------------------
# Game_Eventクラスに機能を追加するモジュールです。
# 明かりの機能を追加します。
#==============================================================================
module Add_Game_Event_Light
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
# スーパークラスの処理に移行
super
@last_page_light = {}
end
#--------------------------------------------------------------------------
# ● データのリセット
#--------------------------------------------------------------------------
def self.reset
@last_page_light = {}
end
#--------------------------------------------------------------------------
# ● データ解放
#--------------------------------------------------------------------------
def dispose_data
# 無効なデータの場合
if @last_page_light == nil then
# データを初期化
@last_page_light = {}
# メソッドを返す
return
end
# 自身のデータをクリア
@last_page_light[self] = nil
end
#--------------------------------------------------------------------------
# ● 拡張データの取得
#--------------------------------------------------------------------------
def get_light_data
# 無効なデータの場合
if @last_page_light == nil then
# データを初期化
@last_page_light = {}
end
# イベントページが更新されていない場合
if @last_page_light[self] == @page then
# データ未定義の場合
if self.light_visible == nil then
# 自身のデータをクリア
@last_page_light[self] = nil
end
# メソッドを返す
return
end
# 明かり可視フラグをクリア
self.light_visible = false
# 明かり作成フラグをクリア
self.call_light = false
# 最新のイベントページを記憶
@last_page_light[self] = @page
# イベントページが有効な場合
if @page != nil then
# イベントページに内容が存在する場合
if @page.list != nil then
# ループ処理(ページ内容)
(0...@page.list.size).each do |i|
# 注釈の場合
if @page.list[i].code == 108 or @page.list[i].code == 408 then
# 注釈内ループ処理
(0...@page.list[i].parameters.size).each do |id|
# 注釈のコードを取得
code = @page.list[i].parameters[id].dup.to_s
code.gsub!(/明かり設定/) {""}
# 明かりのIDを取得
light_id = code.to_i
# 明かりのIDが有効な場合
if light_id >= 1 then
# 明かりIDを記憶
self.light_id = light_id
# 明かり可視フラグをオンにする
self.light_visible = true
# 明かりを作成フラグをオンにする
self.call_light = true
# メソッドを返す
return
end
end
end
end
end
end
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# スーパークラスの処理に移行
super
end
end
#==============================================================================
# ■ Light_Sprite
#------------------------------------------------------------------------------
# マップでの明かりを管理するスプライトクラスです。
#==============================================================================
class Light_Sprite < Sprite
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :name # 明かりに使う画像
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# character : 対象キャラクター
# event_name : イベントの名前
#--------------------------------------------------------------------------
def initialize(character, event_name)
# スーパークラスを実行
super()
# 明かりのデータを取得
@data = MINTO.light_set(event_name)
# ファイルネームを読み込む
@name = @data[0].dup
# スプライトを保存
@character = character
# 明かり用のビットマップを作成
self.bitmap = Cache.picture(@name).dup
@width = self.bitmap.width / 4
@height = self.bitmap.height
# 基本座標をセット
self.x = @character.x
self.y = @character.y
self.z = 999
# 転移座標をセット
self.ox = @width / 2
self.oy = @height / 2
# 透明でない限りは明かりを表示させる
self.visible = (@character.opacity != 0)
# 明かりの不透明度を設定
self.opacity = (@character.opacity / 2) + 32
# 明かりを加算表示にする
self.blend_type = 1
# 明かりをズームさせる
self.zoom = @data[2]
# ブリンクカウントを初期化
@blink_count = 0
# フレーム更新
update
end
#--------------------------------------------------------------------------
# ● データのセット
# name : 設定データの名前
#--------------------------------------------------------------------------
def set_data(name)
# 設定データを更新
@data = MINTO.light_set(name)
# 明かり用のビットマップを再作成
self.bitmap = Cache.picture(@data[0]).dup
self.oy = @data[1]
self.zoom = @data[2]
end
#--------------------------------------------------------------------------
# ● ズーム
# n : ズーム倍率
#--------------------------------------------------------------------------
def zoom=(n)
self.zoom_x = n
self.zoom_y = n
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
def dispose
# スーパークラスを実行
super
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
# 基本情報を更新
self.x = @character.character.screen_x
self.y = @character.character.screen_y + @data[1]
# 透明でない限りは明かりを表示させる
self.visible = (@character.character.opacity != 0)
# 明かりの不透明度を設定
self.opacity = (@character.character.opacity / 2) + 32
# 点滅カウントを更新
@blink_count = (@blink_count + 1) % 48
# 転送元の矩形を設定
case @blink_count
when 0...12 then
self.src_rect.set(@width * 0, 0, @width, @height)
when 12...24 then
self.src_rect.set(@width * 1, 0, @width, @height)
when 24...36 then
self.src_rect.set(@width * 2, 0, @width, @height)
else
self.src_rect.set(@width * 3, 0, @width, @height)
end
end
end
#==============================================================================
# ■ Game_Event
#------------------------------------------------------------------------------
# イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理
# イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。
#==============================================================================
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# ● システムインクルード
#--------------------------------------------------------------------------
include(Add_Game_Event_Light) # 明かり管理モジュール
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :event # イベント
attr_accessor :light_id # 明かりのID
attr_accessor :light_visible # 明かり可視フラグ
attr_accessor :call_light # 明かり実行フラグ
end
#==============================================================================
# ■ Game_Vehicle
#------------------------------------------------------------------------------
# 乗り物を扱うクラスです。このクラスは Game_Map クラスの内部で使用されます。
# 現在のマップに乗り物がないときは、マップ座標 (-1,-1) に設定されます。
#==============================================================================
class Game_Vehicle < Game_Character
#--------------------------------------------------------------------------
# ● システムインクルード
#--------------------------------------------------------------------------
include(Add_Game_Event_Light) # 明かり管理モジュール
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :event # イベント
attr_accessor :light_id # 明かりのID
attr_accessor :light_visible # 明かり可視フラグ
attr_accessor :call_light # 明かり実行フラグ
end
#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
# プレイヤーを扱うクラスです。イベントの起動判定や、マップのスクロールなどの
# 機能を持っています。このクラスのインスタンスは $game_player で参照されます。
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ● システムインクルード
#--------------------------------------------------------------------------
include(Add_Game_Event_Light) # 明かり管理モジュール
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :event # イベント
attr_accessor :light_id # 明かりのID
attr_accessor :light_visible # 明かり可視フラグ
attr_accessor :call_light # 明かり実行フラグ
end
#==============================================================================
# ■ Game_Follower
#------------------------------------------------------------------------------
# フォロワーを扱うクラスです。フォロワーとは、隊列歩行で表示する、先頭以外の
# 仲間キャラクターのことです。Game_Followers クラスの内部で参照されます。
#==============================================================================
class Game_Follower < Game_Character
#--------------------------------------------------------------------------
# ● システムインクルード
#--------------------------------------------------------------------------
include(Add_Game_Event_Light) # 明かり管理モジュール
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :event # イベント
attr_accessor :light_id # 明かりのID
attr_accessor :light_visible # 明かり可視フラグ
attr_accessor :call_light # 明かり実行フラグ
end
#==============================================================================
# ■ Game_Subplayer
#------------------------------------------------------------------------------
# サブプレイヤーを扱うクラスです。
# このクラスのインスタンスは $game_subplayer1~3で参照されます。
# Game_Playerクラスを元に作っています
#==============================================================================
class Game_Subplayer < Game_Character
#--------------------------------------------------------------------------
# ● システムインクルード
#--------------------------------------------------------------------------
include(Add_Game_Event_Light) # 明かり管理モジュール
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :event # イベント
attr_accessor :light_id # 明かりのID
attr_accessor :light_visible # 明かり可視フラグ
attr_accessor :call_light # 明かり実行フラグ
end
#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
# イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
# Game_Troop クラス、Game_Event クラスの内部で使用されます。
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# ● 場所移動
#--------------------------------------------------------------------------
alias :command_201_Light_Sprite :command_201
def command_201
# 元の処理を実行
bool = command_201_Light_Sprite
# 明かりのデータを初期化
Add_Game_Event_Light.reset
# フラグを返す
return bool
end
end
#==============================================================================
# ■ Sprite_Character
#------------------------------------------------------------------------------
# キャラクター表示用のスプライトです。Game_Character クラスのインスタンスを
# 監視し、スプライトの状態を自動的に変化させます。
#==============================================================================
class Sprite_Character < Sprite_Base
#--------------------------------------------------------------------------
# ● システムインクルード
#--------------------------------------------------------------------------
include(Add_Light_Sprite) # 明かりモジュール
end
end