Dynamic Weather and Time SystemVersion: 1.0By: ThallionDarkshineIntroductionWhen the game starts, the weather system picks a random time of day. The screen tone changes as time passes, with each minute taking a certain amount of seconds specified in configuration. After a random amount of time, the weather changes, either to normal, rain, storm, snow, fog, or clouds. The storm includes random lightning as well.
Features- Specify if a map is indoors by placing (in) in the map name
- Completely dynamic weather with user-defined varience and base time between switching of weather
- Screen tint changes with time of day
ScreenshotsDemoDemo
https://rapidshare.com/files/2898565759/Weather_Demo.exeScript
- module Weather_Config
- # Config
-
- WEATHER_VARIENCE = 520
- WEATHER_BASE = 200
- RANDOM_WEATHER = true
- MIN_EQUIV = 1/40
- end
-
- class Weather
- attr_accessor :varience
- attr_accessor :base
- attr_accessor :rand_weather
- attr_accessor :min_equiv
-
- def initialize
- @varience = Weather_Config::WEATHER_VARIENCE
- @base = Weather_Config::WEATHER_BASE
- @rand_weather = Weather_Config::RANDOM_WEATHER
- @min_equiv = Weather_Config::MIN_EQUIV
- @counter = [0, 0]
- @time = rand(24) * 60
- @wthr = 0
- hour = @time / 60
- if hour > 13
- change = hour - 14
- else
- change = 12 - hour
- end
- red = change * -9
- green = change * -9
- blue = change * -9
- gray = change * 12
- $game_screen.start_tone_change(Tone.new(red, green, blue, gray), 0)
- @weather_change = rand(@varience) + @base
- @red = red
- @green = green
- @blue = blue
- @s_hour = hour
- @s_wthr = 0
- end
-
- def rand_weather=(bool)
- @rand_weather = bool
- if @rand_weather == false
- $game_screen.weather(0, 0, 0)
- $game_system.bgs_fade(5)
- @wthr = 0
- $game_map.fog_name = ""
- end
- end
-
- def update
- if $game_temp.inside == true
- @counter[1] = nil
- $game_screen.weather(0, 0, 0)
- else
- @counter[1] = 0 if @counter[1] == nil
- end
- @counter[0] += 1
- @counter[1] += 1 if @counter[1] != nil
-
- if @counter[0] > Graphics.frame_rate * @min_equiv
- @time = (@time + 1) % (24 * 60 + 1)
- @counter[0] = 0
- hour = @time / 60
- if hour > 13
- change = hour - 14
- else
- change = 12 - hour
- end
- red = change * -9
- green = change * -9
- blue = change * -9
- gray = change * 12
- if @rand_weather == true
- if @counter[1] != nil and @counter[1] > @weather_change
- @lightning = false
- rnd = rand(8)
- case rnd
- when 0
- $game_screen.weather(0, 0, 60)
- $game_system.bgs_fade(10)
- when 1
- $game_screen.weather(0, 0, 60)
- $game_system.bgs_fade(10)
- $game_screen.weather(1, rand(10), 200)
- bgs = RPG::AudioFile.new("005-Rain01", 80, 100)
- $game_system.bgs_play(bgs)
- when 2
- $game_screen.weather(0, 0, 60)
- $game_system.bgs_fade(10)
- $game_screen.weather(2, rand(10), 200)
- @lightning = true
- bgs = RPG::AudioFile.new("007-Rain03", 100, 100)
- $game_system.bgs_play(bgs)
- when 3
- $game_screen.weather(0, 0, 60)
- $game_system.bgs_fade(10)
- $game_screen.weather(3, rand(10), 200)
- when 4
- unless @wthr == 4
- $game_screen.weather(0, 0, 60)
- $game_system.bgs_fade(10)
- $game_map.fog_name = "001-Fog01"
- $game_map.fog_hue = 0
- @fog_opac = rand(75) + 100
- $game_map.fog_opacity = 0
- $game_map.fog_sx = (rand(5) + 1) * 2
- $game_map.fog_sy = (rand(5) + 1) * 2
- end
- when 5
- unless @wthr == 5
- $game_screen.weather(0, 0, 60)
- $game_system.bgs_fade(10)
- $game_map.fog_name = "002-Clouds01"
- $game_map.fog_hue = 0
- @fog_opac = rand(75) + 50
- $game_map.fog_opacity = 0
- $game_map.fog_sx = (rand(5) + 1) * 4
- $game_map.fog_sy = (rand(5) + 1) * 4
- end
- when 6
- $game_screen.weather(0, 0, 60)
- $game_system.bgs_fade(10)
- when 7
- $game_screen.weather(0, 0, 60)
- $game_system.bgs_fade(10)
- end
- @wthr = rnd
- @weather_change = rand(@varience) + @base
- @counter[1] = 0
- end
- case @wthr
- when 1
- red -= 20
- blue -= 15
- green -= 20
- when 2
- red -= 30
- blue -= 20
- green -= 30
- when 3
- red += 5
- blue += 10
- green += 5
- when 4
- red -= 5
- green -= 5
- gray -= 20
- end
- end
- if @wthr != @s_wthr or hour != @s_hour
- $game_screen.start_tone_change(Tone.new(red, green, blue, gray), 60)
- end
-
- if (@wthr == 4 or @wthr == 5) and $game_map.fog_opacity != @fog_opac
- $game_map.fog_opacity += 1
- else
- if $game_map.fog_name != ""
- $game_map.fog_opacity -= 1
- if $game_map.fog_opacity == 0
- $game_map.fog_name = ""
- $game_map.fog_sx = 0
- $game_map.fog_sy = 0
- end
- end
- end
-
- if @lightning == true
- if rand(120) == 0
- $game_screen.start_flash(Color.new(255, 255, 255), rand(9) + 1)
- end
- end
- end
- end
- end
-
- class Scene_Map
- alias dwt_orig_update update
-
- def update
- $weather.update
- dwt_orig_update
- end
- end
-
- class Scene_Title
- alias dwt_orig_command_new_game command_new_game
-
- def command_new_game
- dwt_orig_command_new_game
- $weather = Weather.new
- end
- end
-
- class Game_Temp
- attr_accessor :inside
-
- alias dwt_orig_init initialize
-
- def initialize
- dwt_orig_init
- @inside = false
- end
- end
-
- class Scene_Save
- alias dwt_orig_write_save_data write_save_data
-
- def write_save_data(file)
- dwt_orig_write_save_data(file)
- Marshal.dump($weather, file)
- end
- end
-
- class Scene_Load
- alias dwt_orig_read_save_data read_save_data
-
- def read_save_data(file)
- dwt_orig_read_save_data(file)
- $weather = Marshal.load(file)
- end
- end
Expand to see the code.
InstructionsTo use, place directly under main.
To turn on or off random weather (replace true with false to turn off):
- $weather.rand_weather = true
- $weather.update
Expand to see the code.
To change the varience of weather:
To change the base time between weather changes:
To change the second equivalent of one minute realtime:
FAQNo questions yet.
CompatibilityI'm trying to make this compatible with MAWS (Modified Advanced Weather System), which is a rewrite of the weather module incorporating many extra weather effects.
Credits and ThanksRight now, I am using a rewrite of MAWS in my demo, so thank you Ccoa, ForeverZer0, and Agckuu Coceg
Author's NotesRight now, I'm trying to add in some extra weather functions to go with the dynamic weather.
Terms and ConditionsI don't care what you use it for, just don't claim that it's yours.