Simple OpenRain Module

:cloud_with_rain: OpenRain – Dynamic Local Rain System for Roblox

Scripted by CodeSaviour | Discord: Paulitowashere


:pushpin: Introduction

OpenRain is a lightweight and fully customizable local rain system built for Roblox developers who want to add immersive and dynamic weather effects to their games. This module simulates rainfall, alters lighting and atmosphere, and even checks for overhead cover to realistically toggle visual effects.

Built with performance in mind, OpenRain handles cloud density, lighting dimming, fog and haze adjustments, and particle rain renderingβ€”all locally per player.


:sparkles: Features

  • :white_check_mark: Local rain per player (great for story-driven or atmospheric experiences)
  • :cloud: Smooth cloud and lighting transitions
  • :fog: Atmosphere adjustment via TweenService
  • :cloud_with_rain: Particle-based rain and floor splash effects
  • :brain: Roof detection system (optional)
  • :control_knobs: Custom intensity, render area, and color

:jigsaw: Setup

  1. Insert the module into ReplicatedStorage or your preferred location.
  2. Require the module from a LocalScript.
  3. Call OpenRain.new(data) with your settings.
local OpenRain = require(game.ReplicatedStorage.OpenRain)

local rain = OpenRain.new({
	StartDelay = 5,
	RainColor = Color3.fromRGB(50, 50, 50),
	CheckForRoof = true,
	Intensity = 5,
	UntilFullRain = 3,
	RenderArea = 100
})

:wrench: API Reference

OpenRain.new(data: RainData) β†’ OpenRain

Creates a new rain instance.

RainData Fields:

  • StartDelay: Time in seconds before rain visual transition begins (default: 10)
  • RainColor: Color3 value used for lighting, clouds, and atmosphere (default: Color3.fromRGB(33,33,33))
  • CheckForRoof: Whether to disable rain if the player is under a roof (default: true)
  • Intensity: Controls particle rate multiplier (default: 3)
  • UntilFullRain: Time it takes to ramp up particle emission (default: 10)
  • RenderArea: Size of the rain area (default: 86)

OpenRain:Start()

Manually start the rain after initialization.

OpenRain:Stop()

Stops the rain and smoothly resets the environment to its original state.

OpenRain:update(newData: RainData)

Updates rain configuration in real time.


:package: Assets Required

This module expects two child objects inside the script:

  • Rain: A Part with a ParticleEmitter simulating falling rain.
  • Floor effect: A Part with a ParticleEmitter simulating floor splashes.

Make sure these are properly set up in the script before use.


:brain: Notes

  • The module uses RunService:BindToRenderStep for frame-accurate updates.
  • Raycast is used to detect ground and roof presence.
  • Works best in games with R15 avatars and characters that have PrimaryPart set.

:speech_balloon: Feedback

If you find a bug, have suggestions, or want to contribute improvements, feel free to reach out via Discord: Paulitowashere.


FILE: create.roblox.com/store/asset/76120352125900

8 Likes

cool stuff, you should add a test place aswell :eyes:

1 Like

Always, please attach a video first

3 Likes

Will be improving later on with additions that will make the module be able to not disable the rain as a whole but only in the covered place! :3

open source testing place would be great , thanks !

1 Like

Could we have a place file? Open source one would be good