public

Rpg Maker Developers Group

Simple enough for a child, powerful enough for a developer

2 Followers
Preserved forum archive. This topic stores the original first post and locally mirrored RPG Maker Web attachments when available. It is posted by the BMMPlay archive account, not by the original creator.

Original Source

  • Original title: KWeatherArea XP
  • Original author: kyonides
  • Original date: March 22, 2025
  • Source thread: https://forums.rpgmakerweb.com/threads/kweatherarea-xp.176478/
  • Source forum path: Game Development Engines > Ruby Game System (RGSS) Scripts > RGSS Scripts (RMXP)

Summary

# Create 2 local variables: Use integers only, i.e. 1, 16 or 25. # W stands for Width or how wide this rectangle is supposed to be. # H stands for Height or how tall this rectangle is supposed to be. # area = [X, Y, W, H]

Archived First Post

KWeatherArea XP

by Kyonides

Introduction

Did you ever want to set a custom weather effect depending on a given area on the current map?
Now you can do it in RMXP!

NOTES
  • This scriptlet uses script calls to make that happen.
  • Here an area is synonymous with a rectangle.
  • You can add and remove areas.
  • Removing an active weather area reverts the effects to the last effect you've set via Set Weather Effects event command.
  • If you change the weather in battle, it will revert it to the current area's weather, if any.
  • Please read the embedded notes to learn how to use it properly.

The Script

Ruby:
# * KWeatherArea XP * #
#   Scripter : Kyonides
#   v1.1.0 - 2025-03-25

# This scriptlet allows you to set regional weather effects on the current map.
# It works as usual. If you enter an area, the rain or snow will soon appear.
# Obviously, it will quickly vanish once you leave that area.

# If you ever remove an active weather area, it will revert the weather to
# the last effect set via weather effects event command if any.

# * Script Call * #

# - Add a Regional Weather Area
# - Step #1
#   Create 2 local variables: Use integers only, i.e. 1, 16 or 25.
#   W stands for Width or how wide this rectangle is supposed to be.
#   H stands for Height or how tall this rectangle is supposed to be.
# area = [X, Y, W, H]
# gm = $game_map

#   Example:
# area = [7, 10, 4, 6]
# gm = $game_map

# - Step #2
#   Use this call now:
#   - AreaID is an integer, 1+.
#   - Type is one of the RM's weather types: 1 being rain, 2 storm & 3 snow.
# gm.add_weather_area(AreaID, Type, area)
#   Example:
# gm.add_weather_area(1, 1, area)

# - Remove a Regional Weather Area (Temporarily?)
#   - AreaID is an integer, 1+.
# $game_map.remove_weather_area(AreaID)

class WeatherArea
  def initialize
    @id = 0
    @type = 0
    @area = Rect.new(0, 0, 0, 0)
  end

  def set_rect(*coords)
    coords = coords.flatten
    @area.x = coords.shift
    @area.y = coords.shift
    @area.width = coords.shift
    @area.height = coords.shift
  end

  def inside?(px, py)
    w = @area.x + @area.width - 1
    h = @area.y + @area.height - 1
    px.between?(@area.x, w) and py.between?(@area.y, h)
  end
  attr_accessor :id, :type, :area
end

class Game_Screen
  def change_weather(type, max)
    @weather_type = type
    @weather_max = (max + 1) * 4.0
    @weather_duration = 0
  end

  def previous_weather
    @weather_type = @weather_type_target
    @weather_max = @weather_max_target
    @weather_duration = 0
  end
end

class Game_Map
  alias :kyon_weather_area_gm_map_init :initialize
  alias :kyon_weather_area_gm_map_stp :setup
  alias :kyon_weather_area_gm_map_up :update
  def initialize
    kyon_weather_area_gm_map_init
    init_weather
  end

  def init_weather
    @weather_map_areas = {}
    @weather_area_id = 0
  end

  def setup(map_id)
    kyon_weather_area_gm_map_stp(map_id)
    load_weather_areas
  end

  def load_weather_areas
    @weather_areas = @weather_map_areas[@map_id] || {}
  end

  def add_weather_area(area_id, new_type, *coords)
    area = WeatherArea.new
    area.id = area_id
    area.type = new_type
    area.set_rect(*coords)
    areas = @weather_map_areas[@map_id] ||= {}
    areas[area_id] = area
    @weather_areas = areas
  end

  def remove_weather_area(area_id)
    @weather_areas.delete(area_id)
    return if @weather_area_id != area_id
    reset_weather
  end

  def reset_weather
    $game_screen.previous_weather
    @weather_area_id = 0
  end

  def update
    kyon_weather_area_gm_map_up
    update_weather_areas
  end

  def update_weather_areas
    return if @weather_areas.empty?
    px, py = $game_player.xy
    return if @weather_x == px and @weather_y == py
    @weather_x = px
    @weather_y = py
    new_area = @weather_areas.find {|key, val| val.inside?(px, py) }
    unless new_area
      reset_weather
      return
    end
    return if @weather_area_id == new_area[0]
    @weather_area_id, area = new_area
    $game_screen.change_weather(area.type, 10)
  end

  def aftermath_weather_area
    if @weather_area_id == 0
      reset_weather
    else
      area = @weather_areas[@weather_area_id]
      $game_screen.change_weather(area.type, 10)
    end
  end
end

class Game_Player
  def xy
    [@x, @y]
  end
end

class Scene_Battle
  alias :kyon_weather_area_scn_btl_end battle_end
  def battle_end(result)
    $game_map.aftermath_weather_area
    kyon_weather_area_scn_btl_end(result)
  end
end

DOWNLOAD NOW!

Terms & Conditions

Free for use in ANY game.
Please include my nickname in your game credits.
Also mention the forum where you found it.
That's it!

Downloads / Referenced Files

Log in to download

Log in, then follow the RPG Maker Developers Group to see these download links.

Log in to download

License / Terms Note

Please include my nickname in your game credits. Also mention the forum where you found it. That's it!

Creator Claims / Removal

If you are the original creator and want this listing reassigned, edited, or removed, join BMMPlay and contact the moderators with proof that matches the original RPG Maker Web profile, linked GitHub, itch.io page, or another public creator identity.

#039#rgss#script-archive

Replies (0)

No replies yet.

0 replies 1 view

Log in to reply.

User Avatar