Blackwater Rework - MAP / MLO

A complete rework of the Blackwater town for RedM. This package redesigns the town square and fills the surrounding buildings with fully furnished, enterable in

8 min read·Last updated Jul 06, 2026
On this page (21)
  1. 1🏙️ FX-BWREWORK — Blackwater Rework
  2. 1.1📑 Table of Contents
  3. 1.2📦 What's Included
  4. 1.3✨ Features
  5. 1.4🏠 Interiors List
  6. 1.5📦 Installation
  7. 1.6⚙️ How It Works
  8. 1.7🔧 Configuration
  9. 1.7.1Zone Loader (prop streaming)
  10. 1.7.2Vegetation Remover
  11. 1.7.3NPC Cleaner
  12. 1.7.4Default Prop Cleanup
  13. 1.8🪑 Adding / Editing Props
  14. 1.9🚷 NPC Cleaner Zones
  15. 1.10🌿 Vegetation Remover
  16. 1.11🛠️ Developer Mode
  17. 1.12⌨️ Useful Commands
  18. 1.13🚀 Performance Notes
  19. 1.14❌ Common Mistakes
  20. 1.15❓ FAQ
  21. 1.16💬 Support

#🏙️ FX-BWREWORK — Blackwater Rework

A complete rework of the Blackwater town for RedM. This package redesigns the town square and fills the surrounding buildings with fully furnished, enterable interiors — shops, offices, houses and more — all streamed smartly around the player for the best possible performance.

Important: This is a map resource package, not a gameplay script. It contains no jobs, items or framework code. It works standalone on any RedM server (VORP, RSG, RedEM:RP or custom) with no framework dependency.


#📑 Table of Contents

  1. What's Included
  2. Features
  3. Interiors List
  4. Installation
  5. How It Works
  6. Configuration
  7. Adding / Editing Props
  8. NPC Cleaner Zones
  9. Vegetation Remover
  10. Developer Mode
  11. Useful Commands
  12. Performance Notes
  13. Common Mistakes
  14. FAQ
  15. Support

#📦 What's Included

The package ships as two resources that work together:

Resource Type Purpose
fx-bwrework Map (streamed files) The map itself — buildings, interiors, collisions, textures (.ymap, .ytyp, .ydr, .ybn, .ytd)
fx-bwreworkloader Loader (client scripts) Streams interior props (furniture, decorations), manages interiors, cleans NPCs and vegetation

Both resources are required. The map provides the buildings; the loader fills them with life.


#✨ Features

  • 🏘️ 17+ fully furnished interiors — every building in the reworked square is enterable and decorated
  • Smart streaming — interiors and props only load when you are near them, keeping FPS high
  • 🪑 Prop loader system — thousands of furniture/accessory props spawned per-room, spread across frames to prevent stuttering
  • 🪟 Curtain system — windows show curtains from the outside; they disappear seamlessly when the interior loads
  • 🚷 NPC cleaner — removes ambient NPCs inside your custom zones and blocks scenario peds from respawning there
  • 🌿 Vegetation remover — automatically culls grass/bushes/trees that would clip through the new buildings
  • 🌗 Interior timecycle — day/night lighting inside interiors, switching automatically by in-game clock
  • 🧹 Default prop cleanup — removes leftover vanilla props (coal sacks, books, etc.) that clash with the new layout
  • 🔓 Open config — all prop lists and settings are outside escrow, fully editable

#🏠 Interiors List

Interior Interior Interior
🍞 Bakery (+ exterior) 🍺 Bar (+ upper floor) ☕ Silver Cafe
🏛️ City Hall 🍽️ Dock Restaurant ⛺ Dock Tent
💐 Florist 🏨 Hotel (+ Hotel Cafe) 💍 Jewelery
📋 Land Office 📰 Newspaper 🩺 Doctor
🏡 Square House 1 🏡 Square House 2 🏡 Square House 3
🚬 Tobacco Shop 🔫 Gunsmith 🍬 Candy Shop
👮 Police / Sheriff 🎷 Nightclub 🛒 Market Bazaars

#📦 Installation

1. Extract both folders into your resources directory:

resources/
└── [MAPS]/
    ├── fx-bwrework/
    └── fx-bwreworkloader/

2. Add both resources to your server.cfg. The map must start before the loader:

cfgensure fx-bwrework
ensure fx-bwreworkloader

3. Restart your server.

4. Travel to Blackwater in game — the reworked square and interiors will stream in automatically.

✅ That's it. No database, no framework setup, no exports. It works out of the box.


#⚙️ How It Works

You don't need to understand this to use the map, but it helps when customizing:

  1. Map streamingfx-bwrework streams the building shells, collisions and textures through RedM's native streaming system.
  2. Interior loading (IMAP) — when a player gets within a set distance of an interior (defined in imaps.lua), the loader requests that interior's map file; when the player leaves, it is unloaded again.
  3. Prop spawning — each interior has its own prop list in interiorprops/*.lua. Props spawn either:
    • by distance (spawnDistance from the room's center), or
    • by zone (a polygon drawn around the building — more precise for large interiors like the hotel).

Props are spawned a few per frame (nearest to the player first) so there is no FPS hitch when entering.

  1. Curtains — while an interior is not loaded, curtain props are placed on the windows so you can't see into an empty shell. The moment the interior loads, curtains are removed.
  2. Cleanup — everything spawned by the loader is deleted when you move away or when the resource stops. Nothing leaks.

#🔧 Configuration

All settings live in fx-bwreworkloader/config.lua (open source, not escrowed).

#Zone Loader (prop streaming)

luaConfig.ZoneLoader = {
    enabled       = true,   -- enable/disable the feature
    perFrame      = 8,      -- MAX objects spawned per frame (prevents hitching)
    checkInterval = 300,    -- zone enter/exit check interval (ms)
}
  • perFrame — lower it (e.g. 4) for weaker client PCs, raise it (e.g. 16) for faster loading.
  • checkInterval — how often the loader checks whether players entered/left a zone.

#Vegetation Remover

luaConfig.VegMod = {
    enabled            = true,
    defaultRangeDetect = 150.0,   -- applied/removed within this distance
    defaultFlags       = 511,     -- what to remove (511 = everything)
    defaultType        = 1,       -- VMT_Cull (recommended)
}
  • defaultFlags is a bitmask: Debris=1, Grass=2, Bush=4, Weed=8, Flower=16, Sapling=32, Tree=64, Rock=128, LongGrass=256. Add the numbers together. Example: grass only → 2.

#NPC Cleaner

luaConfig.ZonePedCleaner = {
    enabled        = true,    -- enable/disable the feature
    checkInterval  = 500,     -- NPC scan/remove interval (ms)
    activeDistance = 150.0,   -- only runs near a zone (CPU saving)
    onlyHumans     = true,    -- true: horses/animals are NOT removed
    blockScenarios = true,    -- prevent scenario peds from respawning
    zones          = { ... }  -- polygon areas (see below)
}

#Default Prop Cleanup

Config.DeleteDefaultProps is a list of vanilla game props (with model + coordinates) that the loader deletes because they clip into the new layout. You normally don't need to touch this — but you can add your own entries in the same format.


#🪑 Adding / Editing Props

Every interior has its own file in fx-bwreworkloader/interiorprops/ (e.g. hotel.lua, bakery.lua). Each file follows this structure:

luaConfig.YmapSpawner.hotel = {
    spawnDistance    = 30,                                    -- distance-based spawn radius
    DefaultRoomCoord = vector3(-781.56, -1266.33, 43.57),     -- center of the room

    -- OPTIONAL: polygon zone. If present, props are managed by the
    -- zone loader instead of pure distance (more precise).
    zone = {
        points = {
            vec2(-791.45, -1260.00),
            vec2(-792.31, -1273.83),
            vec2(-770.41, -1274.26),
            vec2(-770.32, -1259.96),
        },
        minZ = 40.0,   -- optional
        maxZ = 57.0,   -- optional
    },

    objects = {
        {
            model    = `p_bottlebeer01a`,
            coords   = vec3(-775.648376, -1269.955322, 43.612148),
            rotation = vec3(0.0, 0.0, -120.210884),
        },
        -- ... add as many props as you want
    },

    -- OPTIONAL: curtains shown while the interior is unloaded
    curtainsDeleteDistance = 100.0,
    curtains = {
        { model = `p_curtainslace02x_static`, coords = vec3(...), rotation = vec3(...) },
    },
}

To add a prop: copy any { model, coords, rotation } block, change the model name and coordinates, save, and restart the resource. Since these files are escrow_ignore, you can edit them freely.

To remove a prop: delete its block from the objects list.


#🚷 NPC Cleaner Zones

Zones are polygons — list the corner points in order (clockwise or counter-clockwise), as many corners as you want:

luazones = {
    {
        points = {
            vec2(-781.53, -1211.03),
            vec2(-814.72, -1210.28),
            vec2(-814.92, -1184.60),
            vec2(-781.77, -1184.42),
        },
        minZ = 40.0,   -- optional vertical bounds
        maxZ = 52.0,
    },
    -- add another block for another area
}

Any non-player NPC inside (or entering) these zones is removed. With onlyHumans = true, horses and animals are left alone.


#🌿 Vegetation Remover

Vegetation removal areas are attached to interior definitions in imaps.lua:

luabar = {
    name = "fx_barmilo_bk",
    coords = vector3(-817.469, -1319.46, 46.7829),
    distance = 35.0,
    veg = { coords = vector3(-831.70, -1314.01, 43.67), radius = 23.0 },
},

Supported veg formats:

luaveg = 40                                                     -- radius 40, centered on the interior
veg = { coords = vector3(...), radius = 40.0 }               -- single sphere
veg = {                                                      -- multiple spheres
    { coords = vector3(...), radius = 40.0 },
    { coords = vector3(...), radius = 25.0 },
}

#🛠️ Developer Mode

luaConfig.DeveloperMode = false

Set to true to disable all prop spawning while you work on the map (existing props are cleaned up too). Useful when placing new props or debugging — turn it back to false when done.


#⌨️ Useful Commands

Command Where What it does
tccoords F8 console (client) Prints your current coordinates and interior ID — used when configuring the interior timecycle

#🚀 Performance Notes

  • Props are streamed only around the player and spawned max perFrame objects per frame — no freeze when entering a building.
  • Distance/zone checks run on light intervals (250–500 ms), not every frame.
  • The NPC cleaner only scans while a player is within activeDistance of a zone.
  • Everything is cleaned up on resource stop — safe to restart live.

#❌ Common Mistakes

  • Loader started before the map → interiors appear empty or props float in the void. Always ensure fx-bwrework before ensure fx-bwreworkloader.
  • Only one of the two resources installed → both are required; the map without the loader gives empty interiors, the loader without the map spawns props into nothing.
  • Another Blackwater map resource is running → conflicting .ymap files cause flickering, double buildings or missing collisions. Remove/disable other Blackwater edits.
  • Props not appearing after editing → check for Lua syntax errors in the file you edited (see F8 console / server console), and make sure Config.DeveloperMode = false.
  • Renamed the resource folders → keep the folder names as shipped, or update your server.cfg accordingly.

#❓ FAQ

Does this require VORP / RSG / any framework?

No. It is a pure map package and runs on any RedM server.

Can I add my own furniture?

Yes — all prop lists in interiorprops/ are open and editable. See Adding / Editing Props.

Will it conflict with my doorlock / shop / job scripts?

No. The package only adds map content and props; it does not touch gameplay systems. You can freely attach your own doorlocks, shops and jobs to the new interiors.

Why do windows show curtains sometimes?

That's intentional — curtains cover the windows while an interior is unloaded, so you never see an empty shell from outside. They vanish automatically when the interior streams in.

Is it performance heavy?

No. Everything loads on-demand around the player and unloads when you leave. Away from Blackwater, the loader costs virtually nothing.


#💬 Support



ELMAN — С неба (feat. TRIDA) (Official Audio) [7bZFYu41fsw]

С неба

0:000:00