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
On this page (21)
- 1🏙️ FX-BWREWORK — Blackwater Rework
- 1.1📑 Table of Contents
- 1.2📦 What's Included
- 1.3✨ Features
- 1.4🏠 Interiors List
- 1.5📦 Installation
- 1.6⚙️ How It Works
- 1.7🔧 Configuration
- 1.7.1Zone Loader (prop streaming)
- 1.7.2Vegetation Remover
- 1.7.3NPC Cleaner
- 1.7.4Default Prop Cleanup
- 1.8🪑 Adding / Editing Props
- 1.9🚷 NPC Cleaner Zones
- 1.10🌿 Vegetation Remover
- 1.11🛠️ Developer Mode
- 1.12⌨️ Useful Commands
- 1.13🚀 Performance Notes
- 1.14❌ Common Mistakes
- 1.15❓ FAQ
- 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
- What's Included
- Features
- Interiors List
- Installation
- How It Works
- Configuration
- Adding / Editing Props
- NPC Cleaner Zones
- Vegetation Remover
- Developer Mode
- Useful Commands
- Performance Notes
- Common Mistakes
- FAQ
- 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:
- Map streaming —
fx-bwreworkstreams the building shells, collisions and textures through RedM's native streaming system. - 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. - Prop spawning — each interior has its own prop list in
interiorprops/*.lua. Props spawn either: - by distance (
spawnDistancefrom 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.
- 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.
- 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)
}
defaultFlagsis 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
perFrameobjects 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
activeDistanceof 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-bwreworkbeforeensure 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
.ymapfiles 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.cfgaccordingly.
#❓ 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
- 🌐 Website: fixitfy.com.tr
- 📚 Docs: fixitfy.com.tr/docs
- 💬 Discord: discord.fixitfy.com.tr