The Storm

The storm is essentially a large cylindrical barrier that starts big and slowly gets smaller as the match goes on. Players will take damage when outside of the barrier's boundary — this forces them to get closer and closer to each other and helps matches end in a reasonable time.

The Storm Example

Structure

Due to the part size limit, it's not possible to make the storm one huge cylinder. Instead, the storm consists of many thin rectangular parts arranged around the barrier's edge, making it appear cylindrical. These parts dynamically resize based on the proximity of players, splitting or combining with neighboring parts to maintain a smooth appearance. This behavior is handled by:

  • ServerScriptService/Core/ShrinkingBarrier
  • ReplicatedStorage/Core/ShrinkingBarrierVisualization

Customizing the Storm

Within ReplicatedFirst/Configurations/MainConfiguration, the following variables can be adjusted to customize the storm:

Map Offset

The default center of the storm is the center of the map, but you can change the map_offset value to force players toward another point as the storm boundary shrinks.


map_size = 2450 * 4,
map_offset = Vector3.new(4900, 0, 4900),

Storm Options

Lower down, the storm table contains configuration values which determine how the storm behaves during matches, such as its radius, timing, and how much it shrinks.


storm = {
radius = 6000,
time_before_start = 120,
debug_time_scale = 1,
number_of_stages = 10,
-- stage 0 (show starting circle with no transition)
{ transition_length = 0,
wait_length = 150,
damage = 1,
move_scale = 0,
shrinkage_factor = 0 },
VariableDescription
radiusStarting radius of the storm.
time_before_startTime before the storm first appears.
debug_time_scaleDebugging time scale, helpful for tuning the stages. Change this to something higher than 1 to carry out the storm's stages faster.
number_of_stagesNumber of stages the storm has.
(stage tables)Series of tables (one for each stage as defined by number_of_stages) containing these variables:

    - transition_length — Time in seconds for the storm to transition from its previous stage to this stage.

      - wait_length — Time in seconds for the storm to wait before transitioning to the next stage.

        - damage — Damage per second that players will take when they are outside of the storm barrier during this stage.

          - move_scale — Multiplier that allows the storm center to move more when transitioning to this stage. A value of 0 means the storm center will only move such that the entire storm in this stage will stay within the bounds of the storm of the previous stage.

            - shrinkage_factor — Fraction of the previous radius that is subtracted from the radius. For example, the radius at the end of stage 2 is 1000 and shrinkage_factor for stage 3 is 0.25, so the radius at the end of stage 3 will be 750 (1000-(0.25*1000)).