The RPG Maker Resource Kit

RMRK RPG Maker Creation => XP => XP Scripts Database => Topic started by: ThallionDarkshine on May 27, 2012, 02:15:32 AM

Title: Dynamic Weather and Time System
Post by: ThallionDarkshine on May 27, 2012, 02:15:32 AM
Dynamic Weather and Time System
Version: 1.0
Author: ThallionDarkshine (no credit needed)
Date: May 25, 2012

Version History



Planned Future Versions


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


Screenshots

(https://rmrk.net/proxy.php?request=http%3A%2F%2Fi1202.photobucket.com%2Falbums%2Fbb363%2FThallionDarkshine%2FScreenshot3.png&hash=b79c9539023d921c9496326f63c0ea718b7b6166)(https://rmrk.net/proxy.php?request=http%3A%2F%2Fi1202.photobucket.com%2Falbums%2Fbb363%2FThallionDarkshine%2FScreenshot2.png&hash=b9aed2f8534d0b6dd0c3023a7805e0e53ae9efd2)(https://rmrk.net/proxy.php?request=http%3A%2F%2Fi1202.photobucket.com%2Falbums%2Fbb363%2FThallionDarkshine%2FScreenshot1.png&hash=dbb527c0345b557b5e53c04a1efa80d4d311a4bb)(https://rmrk.net/proxy.php?request=http%3A%2F%2Fi1202.photobucket.com%2Falbums%2Fbb363%2FThallionDarkshine%2FScreenshot4.png&hash=f52abe75ff1391dbc12d411a0ccae185717e6bca)

Instructions

To use, place directly under main.
To turn on or off random weather (replace true with false to turn off):
Code: text [Select]
$weather.rand_weather = true
$weather.update

To change the varience of weather:
Code: text [Select]
$weather.varience =

To change the base time between weather changes:
Code: text [Select]
$weather.base =

To change the second equivalent of one minute realtime:
Code: text [Select]
$weather.min_equiv =


Script


Code: [Select]
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


Support


Just post any issues here.

Known Compatibility Issues

None that I know of.

Demo


https://rapidshare.com/files/2898565759/Weather_Demo.exe (https://rapidshare.com/files/2898565759/Weather_Demo.exe)

Author's Notes


Nothing

Terms of Use


Use freely, no credit necessary.