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.
