Dynamic Weather and Time System
Version: 1.0
Author: ThallionDarkshine (no credit needed)
Date: May 25, 2012
Version History
- <Version 1.0> 2012.5.35 - Original Release
Planned Future Versions
- <Version 1.1> Support for MAWS (Modified Advanced Weather System)
Description
When 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
- Can disable random weather
- Weather changes dynamically
- Put (in) in map name to disable weather
- Change screen tint with time of day
Instructions
To 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
To change the varience of weather:
$weather.varience =
To change the base time between weather changes:
$weather.base =
To change the second equivalent of one minute realtime:
$weather.min_equiv =
Script
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
Credit
Thanks
- My sister, whom I made this as part of a game for.
Support
Just post any issues here.
Known Compatibility Issues
None that I know of.
Demo
https://rapidshare.com/files/2898565759/Weather_Demo.exeAuthor's Notes
Nothing
Terms of Use
Use freely, no credit necessary.