HOME
ツクール
RGSS
テクニック
ゲーム紹介
制作中のゲーム
ダウンロード
掲示板
ブログ
EnDREss DREamERブログ
PCパーツ・ソフト通販(仮)
DIYチューンブログ
リンク
ExMap_AutoWeather改
コンセプト
設定したマップに天候を指定・ランダムで変更する。
挿入位置
「DQ風屋内外屋根切り替え」よりも下。
完成すると
天候が変化しBGSも再生される。
「Win32API_SoundでBGS再生」に対応。既存のBGS素材と競合することなく天候BGSが再生されます。
更新履歴
3/1:マップ切り替え時に雨天候から雪マップに移動した際の処理修正。 ========== 2013年 ============================================================ 1/26:単独導入でのエラー発生を修正。 ========== 2011年 ============================================================ 12/29:天候停止で停止されない現象を修正。 11/19:ランダム天候変化周りでごく希に発生するエラーをさらに修正。 8/12:ランダム天候変化周りでごく希に発生するエラーを修正。 7/8:DQ風屋内外屋根切り替えに対応修正。 6/4:マップ移動でBGSが切れてしまう現象を修正。 ========== 2010年 ============================================================ 12/3:一部のマップ設定でエラーが出るのを修正。 5/23:天候変化を停止して再開すると出るエラーを修正。 4/2:現在の天候取得不具合修正。 3/18:イベントスクリプトで 「start_weather」と「stop_weather」コマンド追加。 天候の停止と停止時の天候を再開することが出来ます。
使い方
天候変化の最小時間と最大時間(600秒)設定可能&天候と天候カウントを変数指定で取得出来ます。
KGC様「昼夜変更」等と組み合わせると「夜で雨の日限定イベント」等が出来ます。
#============================================================================== # ★ ExMap_AutoWeather #------------------------------------------------------------------------------ # マップごとに雨や雪などの天候を設定できるようにするスクリプト素材です。 #============================================================================== #============================================================================== # ?VX RGSS2 「ExMap_AutoWeather改」? # EnDlEss DREamER # URL:http://eiennoyumeni.hp.infoseek.co.jp/index.htm # 製作者 mitsu-evo # Last:2013/3/1 # ExMap_AutoWeatherにランダム天候変化&BGSを設定したもの。 # BGS効果音を変えたい場合は「weather_bgs」メソッドの指定ファイル名を変更。 # ed_rgss2["ed_api_bgs"]記述は「Win32API_SoundでBGS再生」対応。 # ▼ 「DQ風屋内外屋根切り替え」よりも下。 #============================================================================== =begin 3/1:マップ切り替え時に雨天候から雪マップに移動した際の処理修正。 機能説明 ・イベントスクリプトで 「start_weather」と「stop_weather」コマンド追加。 天候の停止と停止時の天候を再開することが出来ます。 ★ マップ天候設定。 ★ マップ ID、天候の種類 (0:なし 1:雨 2:嵐 3:雪)、強さ(1 〜 9)、 時間 (0 〜 600 フレーム 1/6秒)、ウェイト (0:なし 1:あり) ランダム設定(0:指定 1:ランダム)の順に格納した配列を必要なだけ並べます。 例) マップ 10 で 1 秒間かけて強さ 5 の雨、ウェイトなし,ランダム [10, 1, 5, 60, 0, 1] =end $ed_rgss2 = {} if $ed_rgss2 == nil $ed_rgss2["ed_auto_weather"] = true EXMAP_ATWTR_MAPS = [ [1, 1, 3, 0, 0, 1], [6, 0, 0, 0, 0, 1] ]# 天候変化の最小時間(秒) EXMAP_ATWTR_MIN_TIMES = 60 # 天候変化の最大時間(秒) EXMAP_ATWTR_MAX_TIMES = 600 # 現在の天候を格納する変数番号(0:晴れ 1:雨 2:嵐 3:雪) NOW_WEATHER_VARIABLES = 2 # 現在の天候カウントを格納する変数番号 WEATHER_COUNT_VARIABLES = 3 #------------------------------------------------------------------------------ module ED #============================================================================== # ■ Command #------------------------------------------------------------------------------ # イベントコマンド「スクリプト」で呼び出されるコマンドです。 #============================================================================== module Command module_function #-------------------------------------------------------------------------- # ● 天候開始 #-------------------------------------------------------------------------- def start_weather $game_map.call_interpreter $game_map.start_weather end #-------------------------------------------------------------------------- # ● 天候停止 #-------------------------------------------------------------------------- def stop_weather $game_map.call_interpreter $game_map.stop_weather end end end #============================================================================== # ■ Game_Interpreter #------------------------------------------------------------------------------ # イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、 # Game_Troop クラス、Game_Event クラスの内部で使用されます。 #============================================================================== class Game_Interpreter # イベントコマンド「スクリプト」にモジュール「Command」のメソッドを反映。 include ED::Command end #============================================================================== # ■ Game_System #============================================================================== class Game_System attr_writer :weather_counter # 天候カウンタ #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias ed_weather_initialize initialize def initialize ed_weather_initialize @weather_counter = 0 end #-------------------------------------------------------------------------- # ○ 天候カウンタを取得 #-------------------------------------------------------------------------- def weather_counter @weather_counter = 0 if @weather_counter == nil return @weather_counter end end #============================================================================== # ■ Game_Map #------------------------------------------------------------------------------ # マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。 # このクラスのインスタンスは $game_map で参照されます。 #============================================================================== class Game_Map attr_accessor :play_weather_bgs #-------------------------------------------------------------------------- # ● 範囲指定乱数メソッド作成 #-------------------------------------------------------------------------- def ed_rand(min,max) n = rand(max) if n < min until n < min rand(max) end end return n end #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias ed_weather_initialize initialize def initialize ed_weather_initialize @weather_time = ed_rand(EXMAP_ATWTR_MIN_TIMES,EXMAP_ATWTR_MAX_TIMES) @play_weather_bgs = false @weather_count = Time.now @weather_enable = false @weather_visible = false # 天候表示判定フラグ @before_data = [] @data = [] @stop = false $game_se_bgs.stop if $ed_rgss2["ed_api_bgs"] == true end #-------------------------------------------------------------------------- # ● イベントから呼び出されたか? #-------------------------------------------------------------------------- def call_interpreter(value=true) @call_interpreter = value end def call_interpreter? @call_interpreter end #-------------------------------------------------------------------------- # ● 天候表示中かどうか取得 #-------------------------------------------------------------------------- def weather_visible? return @weather_visible end #-------------------------------------------------------------------------- # ● 天候開始 #-------------------------------------------------------------------------- def start_weather return if weather_visible? @stop = false @weather_visible = true @play_weather_bgs = false # 指定した天候を設定 @data = @before_data if @data == [] setup_weather if @before_data == [] @screen.weather(@data[1], @data[2], @data[3]) @wait_count = @data[3] if @data[4] == 1 weather_bgs(@data) end #-------------------------------------------------------------------------- # ● 天候停止 #-------------------------------------------------------------------------- def stop_weather return if not weather_visible? @stop = true @weather_visible = false if $ed_rgss2["ed_api_bgs"] == true $game_se_bgs.stop else Audio.se_stop end @screen.weather(0, 0, 0) @play_weather_bgs = false end #-------------------------------------------------------------------------- # ● BGM / BGS 自動切り替え #-------------------------------------------------------------------------- def autoplay @map.bgm.play if @map.autoplay_bgm @map.bgs.play if @map.autoplay_bgs if $ed_rgss2["ed_api_bgs"] == true @map.ed_api_bgs end weather_bgs(@data) end alias _exmawtr_setup setup #-------------------------------------------------------------------------- # ○ セットアップ (追加定義) # map_id : マップ ID #-------------------------------------------------------------------------- def setup(map_id) _exmawtr_setup(map_id) setup_weather end #-------------------------------------------------------------------------- # ☆ 天候のセットアップ #-------------------------------------------------------------------------- def setup_weather @before_map_id = 0 if @before_map_id == nil @last_bgs = RPG::BGS.last if @map_id != @before_map_id or $game_system.weather_counter >= @weather_time # DQ風屋内外屋根切り替えを導入し、移動先が屋内なら天候変化を行なわない。 return if $ed_rgss2["ed_auto_roof"] and $game_switches[ED::NOW_MAP_INDOOR] @data = [] i = 0 for @data in EXMAP_ATWTR_MAPS i += 1 if @data[0] == @map_id # マップ移動時にリストのIDと現在のIDが一致 @play_weather_bgs = false ED::Command.ed_bgs_stop if $ed_rgss2["ed_api_bgs"] @weather_enable = false if $game_system.weather_counter >= @weather_time random_weather(@data) return elsif @before_data != [] and i != EXMAP_ATWTR_MAPS.size @play_weather_bgs = false # 前の天候が・・・ case @before_data[1] when 1 # 雨で今のマップの天候設定が雪 @before_data[1] = 3 if @data[1] == 3 when 2 # 嵐で今のマップの天候設定が雪 if @data[1] == 3 @before_data[1] = 3 @before_data[2] = ed_rand(6,9) end when 3 # 雪で今のマップの天候設定が雨 @before_data[1] = 1 if @data[1] == 1 end @screen.weather(@before_data[1], @before_data[2], @before_data[3]) @wait_count = @before_data[3] if @before_data[4] == 1 @weather_enable = true if @before_data[1] != 0 $game_variables[NOW_WEATHER_VARIABLES] = @data[1] if @data[1] != nil @before_map_id = @map_id @data = @before_data weather_bgs(@before_data) return elsif @before_map_id != @map_id and i != EXMAP_ATWTR_MAPS.size # 指定した天候を設定 @screen.weather(@data[1], @data[2], @data[3]) @wait_count = @data[3] if @data[4] == 1 @weather_enable = false if @data[1] == 0 # 現在の天候を変数に格納 $game_variables[NOW_WEATHER_VARIABLES] = @data[1] if @data[1] != nil @before_data = @data @weather_enable = true if @data[1] != 0 @before_map_id = @map_id weather_bgs(@data) return else @screen.weather(0, 0, 0) Audio.bgs_fade(60) @weather_enable = false @weather_visible = false @play_weather_bgs = false ED::Command.ed_bgs_stop end else @data = [@map_id, 0, 0, 0, 0, 0] @screen.weather(0, 0, 0) Audio.bgs_fade(60) @weather_enable = false @weather_visible = false @play_weather_bgs = false ED::Command.ed_bgs_stop if $ed_rgss2["ed_api_bgs"] Audio.bgs_stop unless $ed_rgss2["ed_api_bgs"] end end @before_map_id = @map_id end #-------------------------------------------------------------------------- # ★ 天候のランダム設定 #-------------------------------------------------------------------------- def random_weather(data) if data[5] == 1 # 確率でランダム天候設定。 weather_rate = ed_rand(1,100) case weather_rate when 1..50 # 50%の確率で設定通りの天候。 for data_old in EXMAP_ATWTR_MAPS if data_old[0] == @map_id @screen.weather(data_old[1], data_old[2], data_old[3]) @wait_count = data_old[3] if data_old[4] == 1 @play_weather_bgs = false weather_strong(data_old) # 定数配列の設定を反映 @data = data_old end end else if data[1] == 3 weather = ed_rand(0,3) # 雪なので指定した天候もしくは雨以外 until weather == 0 or weather == 3 weather = ed_rand(0,3) end else weather = ed_rand(0,3) # 指定した天候もしくは雪以外 until weather < 3 weather = ed_rand(0,3) end end # 決定された天候を代入 @data[1] = weather @weather_enable = false if @data[1] == 0 weather_strong(@data) # 天候の強さ設定 end else # 指定した天候を設定 unless @data == nil @screen.weather(@data[1], @data[2], @data[3]) else @screen.weather(0, 0, 0) end @wait_count = @data[3] if @data[4] == 1 weather_bgs(@data) end # 現在の天候を変数に格納 $game_variables[NOW_WEATHER_VARIABLES] = @data[1] if @data[1] != nil @before_data = @data @before_data[0] = @map_id @data[0] = @map_id @weather_enable = true if @data[1] != 0 end #-------------------------------------------------------------------------- # ★ 天候の強さ設定 #-------------------------------------------------------------------------- def weather_strong(data) # 確率で天候の強さ設定 if data[1] != 0 weather_strong_rate = ed_rand(1,9) @data[2] = weather_strong_rate end @screen.weather(data[1], data[2], data[3]) @wait_count = data[3] if data[4] == 1 weather_bgs(data) end #-------------------------------------------------------------------------- # ★ 天候のBGS設定 #-------------------------------------------------------------------------- def weather_bgs(data) # BGS設定 if @stop # 天候が停止中なら音声も停止 if $ed_rgss2["ed_api_bgs"] == true $game_se_bgs.stop else Audio.bgs_fade(60) end @map.bgs.play if @map.autoplay_bgs @weather_visible = false @play_weather_bgs = false return end #return if @data == nil or @data == [] if data[1] == 1 # 天候:雨 case data[2] when 1..3 if $ed_rgss2["ed_api_bgs"] == true $game_se_bgs.play_bgs("005-Rain01",100)# if @play_weather_bgs == false else Audio.se_play("Audio/BGS/Rain", 60, 110) if @play_weather_bgs == false end when 4..6 if $ed_rgss2["ed_api_bgs"] == true $game_se_bgs.play_bgs("VX_Rain",100)# if @play_weather_bgs == false else Audio.se_play("Audio/BGS/Rain", 80, 100) if @play_weather_bgs == false end when 7..9 if $ed_rgss2["ed_api_bgs"] == true $game_se_bgs.play_bgs("006-Rain02",100)# if @play_weather_bgs == false else Audio.se_play("Audio/BGS/Rain", 100, 100) if @play_weather_bgs == false end end @play_weather_bgs = true elsif data[1] == 2 # 天候:嵐 case data[2] when 1..3 if $ed_rgss2["ed_api_bgs"] == true $game_se_bgs.play_bgs("006-Rain02",150)# if @play_weather_bgs == false else Audio.se_play("Audio/BGS/Storm", 60, 100) if @play_weather_bgs == false end when 4..6 if $ed_rgss2["ed_api_bgs"] == true $game_se_bgs.play_bgs("007-Rain03",100)# if @play_weather_bgs == false else Audio.se_play("Audio/BGS/Storm", 80, 100) if @play_weather_bgs == false end when 7..9 if $ed_rgss2["ed_api_bgs"] == true $game_se_bgs.play_bgs("007-Rain03",150)# if @play_weather_bgs == false else Audio.se_play("Audio/BGS/Storm", 100, 80) if @play_weather_bgs == false end end @play_weather_bgs = true elsif data[1] == 3 # 天候:雪 case data[2] when 1..3 if $ed_rgss2["ed_api_bgs"] == true $game_se_bgs.play_bgs("001-Wind01",100)# if @play_weather_bgs == false else Audio.bgs_play("Audio/BGS/Wind", 60, 50) if @play_weather_bgs == false end when 4..6 if $ed_rgss2["ed_api_bgs"] == true $game_se_bgs.play_bgs("003-Wind03",100)# if @play_weather_bgs == false else Audio.bgs_play("Audio/BGS/Wind", 80, 100) if @play_weather_bgs == false end when 7..9 if $ed_rgss2["ed_api_bgs"] == true $game_se_bgs.play_bgs("004-Wind04",100)# if @play_weather_bgs == false else Audio.bgs_play("Audio/BGS/Wind", 100, 50) if @play_weather_bgs == false end end @play_weather_bgs = true #=begin else #if data[1] == 0 if $ed_rgss2["ed_api_bgs"] == true $game_se_bgs.stop else Audio.bgs_fade(60) end @map.bgs.play if @map.autoplay_bgs @weather_visible = false @play_weather_bgs = false # 天候:晴れ case data[2] when 1..3 when 4..6 when 7..9 end #=end end end #-------------------------------------------------------------------------- # ★ 天候の時間カウント #-------------------------------------------------------------------------- def count_weather_time return if @interpreter.running? if @stop == true @weather_visible = false return end @weather_visible = true # カウント増加量計算 time = Time.now weather_count = time.sec - @weather_count.sec # 加算量がおかしい場合は戻る if weather_count < 0 @weather_count = Time.now return end # カウント加算 $game_system.weather_counter += weather_count @weather_count = Time.now $game_variables[WEATHER_COUNT_VARIABLES] = $game_system.weather_counter $game_variables[NOW_WEATHER_VARIABLES] = @data[1] if @data[1] != nil # 天候変更時間判定 if $game_system.weather_counter >= @weather_time $game_system.weather_counter = 0 @weather_time = ed_rand(EXMAP_ATWTR_MIN_TIMES,EXMAP_ATWTR_MAX_TIMES) @play_weather_bgs = false EXMAP_ATWTR_MAPS.each{|data|random_weather(@data) if data[0] == @map_id } #random_weather(@data) if @data[0] == @map_id else @data[1..5] = @before_data[1..5] end end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias ed_weather_update update def update ed_weather_update count_weather_time end #============================================================================== # ■ Scene_Map #============================================================================== class Scene_Map < Scene_Base #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- alias ed_weather_start start def start ed_weather_start $game_map.start_weather end end end
Copyright (C)
永遠の夢に向かって
. All Rights Reserved.
テンプレートのpondt
リサーチ