Sector 75 – The Randomly Generated (& Moddable) Liminal Map

If you liked this item, please rate it up on Steam Workshop page.

Author: african internet enjoyer

Last revision: 16 Oct, 2025 at 06:01 UTC

File size: 82.86 MB

On Steam Workshop

Description:
As you stare into the abyss, it may stare back…

If NPC corpses keep falling through the floor, turn on Keep Corpses! Player corpses will always fall through the floor if you don’t have a serverside player ragdolls addon.

Sector 75 is a procedurally generated map inspired by the likes of SCP: Containment Breach and the Backrooms, along with another procedurally generated map (albeit one that works completely differently), Nester. Features 76 unique room variants of various rarities, from generic hallways to surreal visages.

Find the map in the Other maps category, called sector75. Find the configurable settings and some other useful stuff in the Q Menu > Sector 75 > Settings. You can turn off the lights, turn off the nextbot support (if you aren’t planning on playing with them and don’t want lag when generating rooms), seal the map, which is useful for PvP gameplay, and so on.

Sector 75 is optimised; rooms and props inside of them automatically fade out over distance, meaning the map will run at high FPS even on low-end PCs.

Sector 75 has dynamic lighting and features some nextbot support. Nextbot support is buggy and they tend to have problems when going around corners or up stairs sometimes, but it’s better than nothing… uh, I think. Sorry, I couldn’t design a good algorithm that was also optimised. Oh, and the map does not support NPC nodes! Instead, you can use an addon like NPC Navmesh Navigation in order to be able to use Combine soldiers on this map, but it will be a bit janky. I recommend turning off NPC jumping for smooth functionality.

If you have generated a bunch of rooms and wanna use that as a map to use nextbots on, but are afraid of the lag, you can use Navmesh Optimizer and its command navmesh_globalmerge_auto_noanalyze in order to trim down the navmesh count by around 40-60%.

The generation is limited to 200 rooms (500 with raised limits) and the map size (32x32k) also limits the total generation size, both enforced to prevent crashes or heavy lag, but hopefully it will take a while before you reach this limit. Rooms may very rarely clip into each other, a bug that refuses to be fixed. Upon an admin cleanup, all players will be respawned in the spawn room to save time. Rooms (nor their doors) cannot be phys gunned so that you can’t accidentally mess stuff up.

Another addition is an extremely configurable Dungeon Crawler mode. You can enable it to find supply crates in rooms that contain loot to help you progress, health chargers on walls and fight through rooms of NPCs. As you get further into the Sector, the enemies get stronger and more numerous… You may add up to 20 enemy variants if necessary, to spice up the gameplay. Among configurable things with said enemy variants are weapons, health, damage, model, spawn rarity and dropped loot on death. Feel free to experiment!

Leave a like and check out my other addons if you liked this one!

Mod Support Information

Sector 75 can be heavily customised and modded if needed. I recommend using Propper++ to make rooms. Examples:

This is how to add custom rooms.

hook.Add("Sector75_AddSets","Sector75_AddSets_MyAddon",function() Sector75_CustomSets["My Addon"] = "myaddon" end) hook.Add("Sector75_AddCustomRooms","Sector75_AddCustomRooms_MyAddon",function() Sector75_AddRoom({ RoomWeight = 1, RoomDevNoSpawn = false, RoomDesc = "A hallway with three doors on the left.", RoomName = "myaddon_lefthallway_01a", RoomNameTrimmed = "myaddon_lefthallway_01" RoomModel = "models/sector75_myaddon/myaddon_lefthallway_01a.mdl", ExtraGenRequired = true, IgnoreBaseIterateNav = false, ForceLightsOut = false, MinimumRoomsReq = 0, RoomDescriptor = "hallway_unique", RoomSet = "myaddon", RoomLightCol = {255,255,85}, OnRoomCreated = function(idk,room_entindex,pos,ang) local room = ents.GetByIndex(room_entindex) if IsValid(room) then local door1 = Sector75_CreateRoomDoor(room,pos,room:GetForward()*256+room:GetRight()*-96,ang+Angle(0,90,0)) local door2 = Sector75_CreateRoomDoor(room,pos,room:GetForward()*320+room:GetRight()*-96,ang+Angle(0,90,0)) local door3 = Sector75_CreateRoomDoor(room,pos,room:GetForward()*384+room:GetRight()*-96,ang+Angle(0,90,0)) end end )} end)

You can force a door to manually generate a specific set if you want to have zones, for example:

local door1 = Sector75_CreateRoomDoor(room,pos,room:GetForward()*256+room:GetRight()*-96,ang+Angle(0,90,0)) door1.ForceSet = "myaddon_maintenance"

This will force the door to only generate the "myaddon_maintenance" set.

This is how you can add your own ambience.

hook.Add("Sector75_AddAmbience","Sector75_AddAmbience_MyAddon",function(sets) if sets[myaddon] then table.insert(Sector75_Ambiences,"myaddon/ambience1.wav") table.insert(Sector75_Ambiences,"myaddon/ambience2.wav") table.insert(Sector75_Ambiences,"myaddon/ambience3.wav") table.insert(Sector75_Ambiences,"myaddon/ambience4.wav") table.insert(Sector75_Ambiences,"myaddon/ambience5.wav") table.insert(Sector75_Ambiences,"myaddon/ambience6.wav") table.insert(Sector75_Ambiences,"myaddon/ambience7.wav") end end)

Ambience should preferably be in .wav format. Do your best to compress it (without it sounding awful), as it is a very heavy lossless file format!

This is how you can override the default ambience, which otherwise will play with any set on.

hook.Add("Sector75_OverrideDefaultAmbience","Sector75_OverrideDefaultAmbience_MyAddon",function(sets) if sets[myaddon] then return true end end)

Might be useful to you.

This is how you can add pauses between ambience.

hook.Add("Sector75_AmbiencePlayTimeOverride","Sector75_AmbiencePlayTimeOverride_MyAddon",function(sets,amb_snd,amb_time) if sets[myaddon] then return amb_time*2+math.random(0,3) end end)

By default, ambience plays one after another. This code will make it double the time it normally does between ambiences, with slight randomisation as well. It also allows you to manually set durations for different ambiences.

An example of a mod is in lua/autorun/sector75_stairwaytoheaven.lua. Decompile the addon to find this file.