As the title says, for the past couple days I've been working on making a procedural generation with preset room types. I'm not an advanced scripter, and I'm not advanced in lua either, but I know my way around the language. I've gotten some code done, but at the moment all it does is pick a random room out of 3 rooms and place it in a doorway of main central room. I'll post my code, but be warned it's probably the worst mess you'll ever see. This is inside a module script:
local room1 = game.ReplicatedStorage.Room1 local room2 = game.ReplicatedStorage.Room2 local deadend = game.ReplicatedStorage.DeadEnd local BackroomsGeneration = { } BackroomsGeneration.LoadChunksRoom1Main = function() local randomness = math.random(1,3) local room1 = game.ReplicatedStorage.Room1:Clone() local room2 = game.ReplicatedStorage.Room2:Clone() local deadend = game.ReplicatedStorage.DeadEnd:Clone() if randomness == 1 then room1.Parent = workspace room1.PrimaryPart.CFrame = game.Workspace.Room1.PrimaryPart.CFrame room1.PrimaryPart.CFrame = game.Workspace.Room1.PrimaryPart.CFrame * CFrame.Angles(0, math.rad(180), 0); elseif randomness == 2 then room2.Parent = workspace room2.PrimaryPart.CFrame = game.Workspace.Room1.PrimaryPart.CFrame elseif randomness == 3 then deadend.Parent = workspace deadend.CFrame = game.Workspace.Room1.PrimaryPart.CFrame deadend.CFrame = game.Workspace.Room1.PrimaryPart.CFrame * CFrame.Angles(math.rad(90), math.rad(0), math.rad(0)); end end BackroomsGeneration.LoadChunksRoom1D1 = function() local randomness = math.random(1,3) local room1 = game.ReplicatedStorage.Room1:Clone() local room2 = game.ReplicatedStorage.Room2:Clone() local deadend = game.ReplicatedStorage.DeadEnd:Clone() print(randomness) if randomness == 1 then room1.Parent = workspace room1.PrimaryPart.CFrame = game.Workspace.Room1.DoorSpawnr1.CFrame room1.PrimaryPart.CFrame = game.Workspace.Room1.DoorSpawnr1.CFrame * CFrame.Angles(0, math.rad(0), 0); elseif randomness == 2 then room2.Parent = workspace room2.PrimaryPart.CFrame = game.Workspace.Room1.DoorSpawnr1.CFrame room2.PrimaryPart.CFrame = game.Workspace.Room1.DoorSpawnr1.CFrame * CFrame.Angles(0, math.rad(180), 0); elseif randomness == 3 then deadend.Parent = workspace deadend.CFrame = game.Workspace.Room1.DoorSpawnr1.CFrame deadend.CFrame = game.Workspace.Room1.DoorSpawnr1.CFrame * CFrame.Angles(math.rad(90), math.rad(0), math.rad(0)); end end BackroomsGeneration.LoadChunksRoom1D2 = function() local randomness = math.random(1,3) local room1 = game.ReplicatedStorage.Room1:Clone() local room2 = game.ReplicatedStorage.Room2:Clone() local deadend = game.ReplicatedStorage.DeadEnd:Clone() print(randomness) if randomness == 1 then room1.Parent = workspace room1.PrimaryPart.CFrame = game.Workspace.Room1.DoorSpawnr2.CFrame room1.PrimaryPart.CFrame = game.Workspace.Room1.DoorSpawnr2.CFrame * CFrame.Angles(0, math.rad(0), 0); elseif randomness == 2 then room2.Parent = workspace room2.PrimaryPart.CFrame = game.Workspace.Room1.DoorSpawnr2.CFrame room2.PrimaryPart.CFrame = game.Workspace.Room1.DoorSpawnr2.CFrame * CFrame.Angles(0, math.rad(180), 0); elseif randomness == 3 then deadend.Parent = workspace deadend.CFrame = game.Workspace.Room1.DoorSpawnr2.CFrame deadend.CFrame = game.Workspace.Room1.DoorSpawnr2.CFrame * CFrame.Angles(math.rad(90), math.rad(0), math.rad(0)); end end BackroomsGeneration.LoadChunksRoom1D3 = function() local randomness = math.random(1,3) local room1 = game.ReplicatedStorage.Room1:Clone() local room2 = game.ReplicatedStorage.Room2:Clone() local deadend = game.ReplicatedStorage.DeadEnd:Clone() print(randomness) if randomness == 1 then room1.Parent = workspace room1.PrimaryPart.CFrame = game.Workspace.Room1.DoorSpawnr3.CFrame room1.PrimaryPart.CFrame = game.Workspace.Room1.DoorSpawnr3.CFrame * CFrame.Angles(0, math.rad(180), 0); elseif randomness == 2 then room2.Parent = workspace room2.PrimaryPart.CFrame = game.Workspace.Room1.DoorSpawnr3.CFrame room1.PrimaryPart.CFrame = game.Workspace.Room1.DoorSpawnr3.CFrame * CFrame.Angles(0, math.rad(0), 0); elseif randomness == 3 then deadend.Parent = workspace deadend.CFrame = game.Workspace.Room1.DoorSpawnr3.CFrame deadend.CFrame = game.Workspace.Room1.DoorSpawnr3.CFrame * CFrame.Angles(math.rad(90), math.rad(0), math.rad(0)); end end return BackroomsGeneration
If you don't care to read that mess, all it does is pick random rooms to put in each doorway on each side of the central room. The next script just runs the functions from the module script.
local Generator = require(game.ServerScriptService.BackroomsGen) debounce = true if debounce == true then Generator.NorthAttatchGen() Generator.EastAttatchGen() Generator.SouthAttatchGen() Generator.WestAttatchGen() end
This is all I have at the moment. Could anyone point me in the right direction for how to make this an actual generator that will place new rooms and build off of them? Such as, when a new room gets added to a doorway, it places new rooms in front of the new doorways that are generated? Thanks. If anyone is interested in helping and needs more info, feel free to ask.