+- Save-Point (https://www.save-point.org)
+-- Forum: Archives (https://www.save-point.org/forum-105.html)
+--- Forum: Creation Asylum Archives (https://www.save-point.org/forum-90.html)
+---- Forum: Scripts & Code Snippets (https://www.save-point.org/forum-92.html)
+----- Forum: RPG Maker XP Code (https://www.save-point.org/forum-93.html)
+------ Forum: New Functionality/Features Scripts (https://www.save-point.org/forum-99.html)
+------ Thread: Dynamic Weather and Time System (/thread-6662.html)
Dynamic Weather and Time System - ThallionDarkshine - 05-25-2012
Dynamic Weather and Time System
Version: 1.0 By: ThallionDarkshine
May 25 2012
This is a locked, single-post thread from Creation Asylum. Archived here to prevent its loss.
No support is given. If you are the owner of the thread, please contact administration.
Introduction
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
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
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
Instructions
To use, place directly under main.
To turn on or off random weather (replace true with false to turn off):
Code:
$weather.rand_weather = true
$weather.update
To change the varience of weather:
Code:
$weather.varience =
To change the base time between weather changes:
Code:
$weather.base =
To change the second equivalent of one minute realtime:
Code:
$weather.min_equiv =
FAQ
No questions yet.
Compatibility
I'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 Thanks
Right now, I am using a rewrite of MAWS in my demo, so thank you Ccoa, ForeverZer0, and Agckuu Coceg
[size=Medium][b]Author's Notes
Right now, I'm trying to add in some extra weather functions to go with the dynamic weather.
Terms and Conditions
I don't care what you use it for, just don't claim that it's yours.