chore: initial deploy — SLA Industries Foundry VTT

This commit is contained in:
2026-04-08 09:29:07 +01:00
commit b05a1be778
11 changed files with 20623 additions and 0 deletions
+5
View File
@@ -0,0 +1,5 @@
node_modules/
.DS_Store
._*
*.swp
worlds/
+295
View File
@@ -0,0 +1,295 @@
{
"scifi": {
"bridge": [
{ "key": "console", "w": 2, "h": 1, "shape": "r", "qty": [1, 3], "placement": "wall", "label": "", "occlusion": "none", "densityMod": 0.8 },
{ "key": "chair", "w": 1, "h": 1, "shape": "r", "qty": [1, 2], "placement": "center", "label": "", "occlusion": "none", "densityMod": 0.8 },
{ "key": "viewscreen", "w": 3, "h": 1, "shape": "r", "qty": [0, 1], "placement": "far-wall", "label": "VIEWSCREEN", "occlusion": "sight" }
],
"engineering": [
{ "key": "workbench", "w": 2, "h": 1, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "", "occlusion": "sight" },
{ "key": "console", "w": 2, "h": 1, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "", "occlusion": "none" },
{ "key": "conduit", "w": 1, "h": 1, "shape": "r", "qty": [2, 4], "placement": "scatter", "label": "", "occlusion": "none" },
{ "key": "floor-hatch", "w": 1, "h": 1, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "HATCH", "occlusion": "none", "isHatch": true },
{ "key": "junction-box", "w": 1, "h": 1, "shape": "r", "qty": [1, 3], "placement": "corners", "label": "JUNCT", "occlusion": "sight" }
],
"crew-quarters": [
{ "key": "bunk", "w": 1, "h": 2, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "", "occlusion": "sight" },
{ "key": "locker", "w": 1, "h": 1, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "", "occlusion": "sight" }
],
"medical": [
{ "key": "table", "w": 1, "h": 2, "shape": "r", "qty": [1, 2], "placement": "center", "label": "MED TABLE", "occlusion": "sight" },
{ "key": "cabinet", "w": 1, "h": 1, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "", "occlusion": "sight" }
],
"mess-hall": [
{ "key": "table", "w": 2, "h": 1, "shape": "r", "qty": [1, 3], "placement": "center", "label": "", "occlusion": "none" },
{ "key": "chair", "w": 1, "h": 1, "shape": "r", "qty": [2, 6], "placement": "scatter", "label": "", "occlusion": "none" }
],
"cargo": [
{ "key": "crate", "w": 1, "h": 1, "shape": "r", "qty": [3, 8], "placement": "scatter", "label": "", "occlusion": "solid", "densityMod": 2.0 },
{ "key": "barrel", "w": 1, "h": 1, "shape": "e", "qty": [1, 4], "placement": "scatter", "label": "", "occlusion": "sight", "densityMod": 1.5 },
{ "key": "container", "w": 2, "h": 1, "shape": "r", "qty": [0, 3], "placement": "wall", "label": "CARGO", "occlusion": "solid", "densityMod": 1.5 }
],
"armory": [
{ "key": "rack", "w": 1, "h": 2, "shape": "r", "qty": [1, 3], "placement": "wall", "label": "WEAPON RACK", "occlusion": "sight" },
{ "key": "crate", "w": 1, "h": 1, "shape": "r", "qty": [1, 2], "placement": "scatter", "label": "", "occlusion": "solid" }
],
"reactor": [
{ "key": "core", "w": 2, "h": 2, "shape": "e", "qty": [1, 1], "placement": "center", "label": "REACTOR", "occlusion": "solid" },
{ "key": "coolant-loop", "w": 1, "h": 2, "shape": "r", "qty": [2, 4], "placement": "wall", "label": "COOLANT", "occlusion": "sight" },
{ "key": "control-rod", "w": 1, "h": 1, "shape": "r", "qty": [2, 4], "placement": "wall", "label": "ROD", "occlusion": "sight" },
{ "key": "rad-shield", "w": 2, "h": 1, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "RAD", "occlusion": "solid" }
],
"escape-pods": [
{ "key": "escape-pod", "w": 1, "h": 2, "shape": "e", "qty": [2, 4], "placement": "wall", "label": "POD", "occlusion": "sight" },
{ "key": "release-ctrl", "w": 1, "h": 1, "shape": "r", "qty": [1, 1], "placement": "wall", "label": "RELEASE", "occlusion": "none" }
],
"weapon-bay": [
{ "key": "torpedo-rack", "w": 2, "h": 1, "shape": "r", "qty": [1, 3], "placement": "wall", "label": "TORP", "occlusion": "solid" },
{ "key": "targeting-sys", "w": 2, "h": 1, "shape": "r", "qty": [1, 1], "placement": "wall", "label": "TARGET", "occlusion": "sight" },
{ "key": "ammo-store", "w": 1, "h": 1, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "AMMO", "occlusion": "solid" }
],
"navigation": [
{ "key": "star-chart", "w": 2, "h": 2, "shape": "r", "qty": [1, 1], "placement": "center", "label": "CHART", "occlusion": "none" },
{ "key": "console", "w": 2, "h": 1, "shape": "r", "qty": [2, 4], "placement": "wall", "label": "", "occlusion": "none" }
],
"fuel-bay": [
{ "key": "tank", "w": 1, "h": 2, "shape": "e", "qty": [2, 4], "placement": "wall", "label": "", "occlusion": "sight" }
],
"lab": [
{ "key": "bench", "w": 2, "h": 1, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "", "occlusion": "none" },
{ "key": "equipment", "w": 1, "h": 1, "shape": "r", "qty": [2, 4], "placement": "scatter", "label": "", "occlusion": "none" }
],
"brig": [
{ "key": "cell-bar", "w": 2, "h": 1, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "CELL", "occlusion": "sight" },
{ "key": "cot", "w": 1, "h": 2, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "", "occlusion": "none" }
],
"storage": [
{ "key": "shelf", "w": 1, "h": 1, "shape": "r", "qty": [2, 5], "placement": "wall", "label": "", "occlusion": "sight" },
{ "key": "crate", "w": 1, "h": 1, "shape": "r", "qty": [1, 3], "placement": "scatter", "label": "", "occlusion": "solid" }
],
"ops": [
{ "key": "console", "w": 2, "h": 1, "shape": "r", "qty": [2, 4], "placement": "wall", "label": "", "occlusion": "none" },
{ "key": "chair", "w": 1, "h": 1, "shape": "r", "qty": [1, 3], "placement": "scatter", "label": "", "occlusion": "none" }
],
"observation": [
{ "key": "viewport", "w": 2, "h": 1, "shape": "r", "qty": [1, 2], "placement": "far-wall", "label": "VIEWPORT", "occlusion": "none" },
{ "key": "recliner", "w": 1, "h": 1, "shape": "r", "qty": [1, 4], "placement": "scatter", "label": "", "occlusion": "none" }
],
"airlock": [
{ "key": "eva-locker", "w": 1, "h": 2, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "EVA SUIT", "occlusion": "sight" },
{ "key": "decon-tank", "w": 1, "h": 1, "shape": "e", "qty": [0, 1], "placement": "center", "label": "DECON", "occlusion": "none" },
{ "key": "pressure-ctrl", "w": 1, "h": 1, "shape": "r", "qty": [1, 1], "placement": "wall", "label": "PRESS", "occlusion": "none" }
],
"cryo-bay": [
{ "key": "cryo-pod", "w": 1, "h": 2, "shape": "r", "qty": [2, 6], "placement": "wall", "label": "CRYO", "occlusion": "sight" },
{ "key": "revival-unit", "w": 2, "h": 1, "shape": "r", "qty": [0, 1], "placement": "wall", "label": "REVIVAL", "occlusion": "sight" }
],
"life-support": [
{ "key": "o2-tank", "w": 1, "h": 2, "shape": "e", "qty": [1, 3], "placement": "wall", "label": "O2", "occlusion": "sight" },
{ "key": "scrubber", "w": 2, "h": 1, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "SCRUB", "occlusion": "sight" },
{ "key": "water-reclaim", "w": 1, "h": 2, "shape": "r", "qty": [0, 1], "placement": "wall", "label": "H2O", "occlusion": "sight" },
{ "key": "floor-hatch", "w": 1, "h": 1, "shape": "r", "qty": [1, 1], "placement": "wall", "label": "HATCH", "occlusion": "none", "isHatch": true }
],
"docking-bay": [
{ "key": "docking-clamp", "w": 2, "h": 1, "shape": "r", "qty": [1, 3], "placement": "wall", "label": "CLAMP", "occlusion": "sight" },
{ "key": "fuel-coupling", "w": 1, "h": 1, "shape": "e", "qty": [1, 2], "placement": "wall", "label": "FUEL", "occlusion": "none" },
{ "key": "gantry-node", "w": 1, "h": 1, "shape": "r", "qty": [2, 4], "placement": "corners", "label": "", "occlusion": "none" }
],
"maintenance": [
{ "key": "floor-hatch", "w": 1, "h": 1, "shape": "r", "qty": [1, 1], "placement": "wall", "label": "HATCH", "occlusion": "none", "isHatch": true },
{ "key": "access-panel", "w": 1, "h": 1, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "ACCESS", "occlusion": "none", "isHatch": true },
{ "key": "junction-box", "w": 1, "h": 1, "shape": "r", "qty": [0, 2], "placement": "corners", "label": "JUNCT", "occlusion": "sight" },
{ "key": "power-conduit", "w": 3, "h": 1, "shape": "r", "qty": [0, 2], "placement": "wall", "label": "PWR", "occlusion": "none" },
{ "key": "tool-cabinet", "w": 1, "h": 2, "shape": "r", "qty": [0, 2], "placement": "wall", "label": "", "occlusion": "sight" }
],
"nav-suite": [
{ "key": "star-chart", "w": 2, "h": 2, "shape": "r", "qty": [1, 1], "placement": "center", "label": "CHART", "occlusion": "none" },
{ "key": "console", "w": 2, "h": 1, "shape": "r", "qty": [2, 4], "placement": "wall", "label": "", "occlusion": "none" }
],
"armory-small": [
{ "key": "rack", "w": 1, "h": 2, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "WEAPONS", "occlusion": "sight" },
{ "key": "crate", "w": 1, "h": 1, "shape": "r", "qty": [0, 2], "placement": "scatter", "label": "", "occlusion": "solid" }
],
"gravity-ctrl": [
{ "key": "console", "w": 2, "h": 1, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "GRAV CTRL", "occlusion": "none" },
{ "key": "generator", "w": 2, "h": 2, "shape": "e", "qty": [0, 1], "placement": "center", "label": "FIELD GEN", "occlusion": "solid" }
],
"comms-array": [
{ "key": "antenna-ctrl", "w": 2, "h": 1, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "COMMS", "occlusion": "none" },
{ "key": "chair", "w": 1, "h": 1, "shape": "r", "qty": [1, 2], "placement": "scatter", "label": "", "occlusion": "none" }
]
},
"dungeon": {
"boss-chamber": [
{ "key": "throne", "w": 2, "h": 2, "shape": "r", "qty": [1, 1], "placement": "far-wall", "label": "THRONE", "occlusion": "solid" },
{ "key": "pillar", "w": 1, "h": 1, "shape": "r", "qty": [2, 4], "placement": "corners", "label": "", "occlusion": "solid" }
],
"throne-room": [
{ "key": "throne", "w": 2, "h": 2, "shape": "r", "qty": [1, 1], "placement": "far-wall", "label": "THRONE", "occlusion": "solid" },
{ "key": "chair", "w": 1, "h": 1, "shape": "r", "qty": [4, 8], "placement": "wall", "label": "", "occlusion": "none" }
],
"vault": [
{ "key": "chest", "w": 1, "h": 1, "shape": "r", "qty": [1, 3], "placement": "scatter", "label": "CHEST", "occlusion": "none" },
{ "key": "pile", "w": 1, "h": 1, "shape": "e", "qty": [1, 4], "placement": "scatter", "label": "", "occlusion": "none" }
],
"shrine": [
{ "key": "altar", "w": 2, "h": 1, "shape": "r", "qty": [1, 1], "placement": "far-wall", "label": "ALTAR", "occlusion": "sight" },
{ "key": "candle", "w": 1, "h": 1, "shape": "r", "qty": [2, 4], "placement": "corners", "label": "", "occlusion": "none" }
],
"ritual-room": [
{ "key": "altar", "w": 2, "h": 1, "shape": "r", "qty": [1, 1], "placement": "center", "label": "ALTAR", "occlusion": "sight" },
{ "key": "circle", "w": 3, "h": 3, "shape": "e", "qty": [0, 1], "placement": "center", "label": "", "occlusion": "none" },
{ "key": "candle", "w": 1, "h": 1, "shape": "r", "qty": [4, 6], "placement": "scatter", "label": "", "occlusion": "none" }
],
"barracks": [
{ "key": "bunk", "w": 1, "h": 2, "shape": "r", "qty": [2, 4], "placement": "wall", "label": "", "occlusion": "sight" },
{ "key": "rack", "w": 1, "h": 2, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "ARMS", "occlusion": "sight" }
],
"guardroom": [
{ "key": "table", "w": 2, "h": 1, "shape": "r", "qty": [1, 1], "placement": "center", "label": "", "occlusion": "none" },
{ "key": "chair", "w": 1, "h": 1, "shape": "r", "qty": [2, 4], "placement": "scatter", "label": "", "occlusion": "none" },
{ "key": "rack", "w": 1, "h": 2, "shape": "r", "qty": [0, 1], "placement": "wall", "label": "ARMS", "occlusion": "sight" }
],
"library": [
{ "key": "shelf", "w": 1, "h": 2, "shape": "r", "qty": [2, 6], "placement": "wall", "label": "", "occlusion": "sight" },
{ "key": "table", "w": 2, "h": 1, "shape": "r", "qty": [0, 1], "placement": "center", "label": "", "occlusion": "none" }
],
"trophy-room": [
{ "key": "plinth", "w": 1, "h": 1, "shape": "r", "qty": [2, 4], "placement": "scatter", "label": "TROPHY", "occlusion": "none" }
],
"alchemy": [
{ "key": "bench", "w": 2, "h": 1, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "", "occlusion": "none" },
{ "key": "cauldron", "w": 1, "h": 1, "shape": "e", "qty": [1, 2], "placement": "center", "label": "", "occlusion": "none" }
],
"forge": [
{ "key": "anvil", "w": 1, "h": 1, "shape": "r", "qty": [1, 1], "placement": "center", "label": "ANVIL", "occlusion": "solid" },
{ "key": "rack", "w": 1, "h": 2, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "", "occlusion": "sight" }
],
"antechamber": [
{ "key": "bench", "w": 2, "h": 1, "shape": "r", "qty": [0, 1], "placement": "wall", "label": "", "occlusion": "none" }
],
"laboratory": [
{ "key": "bench", "w": 2, "h": 1, "shape": "r", "qty": [1, 3], "placement": "wall", "label": "", "occlusion": "none" },
{ "key": "shelf", "w": 1, "h": 2, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "", "occlusion": "sight" },
{ "key": "cauldron", "w": 1, "h": 1, "shape": "e", "qty": [0, 2], "placement": "scatter", "label": "", "occlusion": "none" }
],
"crypt": [
{ "key": "sarcophagus", "w": 1, "h": 2, "shape": "r", "qty": [1, 4], "placement": "wall", "label": "TOMB", "occlusion": "solid" }
],
"torture": [
{ "key": "rack", "w": 1, "h": 2, "shape": "r", "qty": [1, 2], "placement": "center", "label": "RACK", "occlusion": "solid" },
{ "key": "table", "w": 1, "h": 2, "shape": "r", "qty": [0, 1], "placement": "wall", "label": "", "occlusion": "sight" }
],
"prison": [
{ "key": "cot", "w": 1, "h": 2, "shape": "r", "qty": [1, 3], "placement": "wall", "label": "", "occlusion": "none" }
],
"cistern": [
{ "key": "pool", "w": 3, "h": 3, "shape": "e", "qty": [0, 1], "placement": "center", "label": "WATER", "occlusion": "none" }
],
"armoury": [
{ "key": "rack", "w": 1, "h": 2, "shape": "r", "qty": [2, 4], "placement": "wall", "label": "ARMS", "occlusion": "sight" },
{ "key": "chest", "w": 1, "h": 1, "shape": "r", "qty": [0, 2], "placement": "scatter", "label": "", "occlusion": "none" }
],
"store": [
{ "key": "barrel", "w": 1, "h": 1, "shape": "e", "qty": [2, 5], "placement": "scatter", "label": "", "occlusion": "none" },
{ "key": "crate", "w": 1, "h": 1, "shape": "r", "qty": [1, 4], "placement": "scatter", "label": "", "occlusion": "solid" }
]
},
"building": {
"office": [
{ "key": "desk", "w": 2, "h": 1, "shape": "r", "qty": [1, 3], "placement": "wall", "label": "", "occlusion": "none" },
{ "key": "chair", "w": 1, "h": 1, "shape": "r", "qty": [1, 3], "placement": "scatter", "label": "", "occlusion": "none" }
],
"meeting": [
{ "key": "table", "w": 3, "h": 2, "shape": "r", "qty": [1, 1], "placement": "center", "label": "", "occlusion": "none" },
{ "key": "chair", "w": 1, "h": 1, "shape": "r", "qty": [4, 8], "placement": "scatter", "label": "", "occlusion": "none" }
],
"lobby": [
{ "key": "desk", "w": 2, "h": 1, "shape": "r", "qty": [1, 1], "placement": "far-wall", "label": "RECEPTION", "occlusion": "none" },
{ "key": "sofa", "w": 2, "h": 1, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "", "occlusion": "none" }
],
"exec-office": [
{ "key": "desk", "w": 2, "h": 1, "shape": "r", "qty": [1, 1], "placement": "far-wall", "label": "", "occlusion": "none" },
{ "key": "chair", "w": 1, "h": 1, "shape": "r", "qty": [1, 3], "placement": "scatter", "label": "", "occlusion": "none" },
{ "key": "sofa", "w": 2, "h": 1, "shape": "r", "qty": [0, 1], "placement": "wall", "label": "", "occlusion": "none" }
],
"bedroom": [
{ "key": "bed", "w": 2, "h": 3, "shape": "r", "qty": [1, 1], "placement": "wall", "label": "", "occlusion": "sight" },
{ "key": "wardrobe", "w": 1, "h": 2, "shape": "r", "qty": [0, 1], "placement": "wall", "label": "", "occlusion": "sight" }
],
"kitchen": [
{ "key": "counter", "w": 3, "h": 1, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "", "occlusion": "none" },
{ "key": "table", "w": 2, "h": 1, "shape": "r", "qty": [0, 1], "placement": "center", "label": "", "occlusion": "none" }
],
"living": [
{ "key": "sofa", "w": 3, "h": 1, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "", "occlusion": "none" },
{ "key": "table", "w": 2, "h": 1, "shape": "r", "qty": [0, 1], "placement": "center", "label": "", "occlusion": "none" }
],
"common-room": [
{ "key": "table", "w": 2, "h": 1, "shape": "r", "qty": [2, 4], "placement": "scatter", "label": "", "occlusion": "none" },
{ "key": "chair", "w": 1, "h": 1, "shape": "r", "qty": [4, 8], "placement": "scatter", "label": "", "occlusion": "none" },
{ "key": "fireplace", "w": 2, "h": 1, "shape": "r", "qty": [0, 1], "placement": "far-wall", "label": "HEARTH", "occlusion": "sight" }
],
"bar": [
{ "key": "counter", "w": 3, "h": 1, "shape": "r", "qty": [1, 2], "placement": "far-wall", "label": "BAR", "occlusion": "sight" },
{ "key": "stool", "w": 1, "h": 1, "shape": "r", "qty": [2, 4], "placement": "wall", "label": "", "occlusion": "none" }
],
"dining": [
{ "key": "table", "w": 3, "h": 2, "shape": "r", "qty": [1, 1], "placement": "center", "label": "", "occlusion": "none" },
{ "key": "chair", "w": 1, "h": 1, "shape": "r", "qty": [4, 8], "placement": "scatter", "label": "", "occlusion": "none" }
],
"ballroom": [
{ "key": "chair", "w": 1, "h": 1, "shape": "r", "qty": [6, 12], "placement": "wall", "label": "", "occlusion": "none" }
],
"library": [
{ "key": "shelf", "w": 1, "h": 2, "shape": "r", "qty": [3, 6], "placement": "wall", "label": "", "occlusion": "sight" },
{ "key": "table", "w": 2, "h": 1, "shape": "r", "qty": [0, 1], "placement": "center", "label": "", "occlusion": "none" }
],
"warehouse": [
{ "key": "shelf", "w": 1, "h": 3, "shape": "r", "qty": [3, 7], "placement": "wall", "label": "", "occlusion": "sight", "densityMod": 1.5 },
{ "key": "crate", "w": 1, "h": 1, "shape": "r", "qty": [2, 6], "placement": "scatter", "label": "", "occlusion": "solid", "densityMod": 2.0 }
],
"stairwell": [
{ "key": "landing", "w": 2, "h": 2, "shape": "r", "qty": [1, 1], "placement": "center", "label": "STAIRS", "occlusion": "none" }
],
"courtyard": [
{ "key": "tree", "w": 1, "h": 1, "shape": "e", "qty": [1, 3], "placement": "scatter", "label": "", "occlusion": "none" },
{ "key": "bench", "w": 2, "h": 1, "shape": "r", "qty": [0, 2], "placement": "wall", "label": "", "occlusion": "none" }
],
"garden": [
{ "key": "bed", "w": 2, "h": 1, "shape": "r", "qty": [1, 3], "placement": "scatter", "label": "", "occlusion": "none" },
{ "key": "tree", "w": 1, "h": 1, "shape": "e", "qty": [1, 2], "placement": "corners", "label": "", "occlusion": "none" }
],
"armoury": [
{ "key": "rack", "w": 1, "h": 2, "shape": "r", "qty": [2, 4], "placement": "wall", "label": "ARMS", "occlusion": "sight" }
],
"server": [
{ "key": "rack", "w": 1, "h": 3, "shape": "r", "qty": [2, 6], "placement": "wall", "label": "SERVER", "occlusion": "sight", "densityMod": 1.5 }
],
"living-room": [
{ "key": "sofa", "w": 2, "h": 1, "shape": "r", "qty": [0, 1], "placement": "wall", "label": "", "occlusion": "none" },
{ "key": "chair", "w": 1, "h": 1, "shape": "r", "qty": [1, 3], "placement": "scatter", "label": "", "occlusion": "none" }
],
"entrance-hall": [
{ "key": "table", "w": 2, "h": 1, "shape": "r", "qty": [0, 1], "placement": "center", "label": "", "occlusion": "none" }
],
"surgery": [
{ "key": "table", "w": 1, "h": 2, "shape": "r", "qty": [1, 1], "placement": "center", "label": "OPERATING TABLE", "occlusion": "sight" },
{ "key": "cabinet", "w": 1, "h": 1, "shape": "r", "qty": [1, 2], "placement": "wall", "label": "", "occlusion": "sight" }
],
"padded-cell": [
{ "key": "cot", "w": 1, "h": 2, "shape": "r", "qty": [0, 1], "placement": "wall", "label": "", "occlusion": "none" }
],
"basement": [
{ "key": "crate", "w": 1, "h": 1, "shape": "r", "qty": [2, 5], "placement": "scatter", "label": "", "occlusion": "solid" },
{ "key": "rack", "w": 1, "h": 2, "shape": "r", "qty": [0, 2], "placement": "wall", "label": "", "occlusion": "sight" }
],
"boiler-room": [
{ "key": "boiler", "w": 2, "h": 2, "shape": "e", "qty": [1, 1], "placement": "center", "label": "BOILER", "occlusion": "solid" }
],
"attic": [
{ "key": "crate", "w": 1, "h": 1, "shape": "r", "qty": [3, 7], "placement": "scatter", "label": "", "occlusion": "solid", "densityMod": 2.0 },
{ "key": "rack", "w": 1, "h": 2, "shape": "r", "qty": [0, 2], "placement": "wall", "label": "", "occlusion": "sight" }
]
}
}
+158
View File
@@ -0,0 +1,158 @@
{
"rooms": [
{ "key": "bridge", "label": "BRIDGE", "placement": "bow", "weight": 1, "unique": true, "minSize": [4, 4] },
{ "key": "engineering", "label": "ENGINEERING", "placement": "stern", "weight": 1, "unique": true, "minSize": [4, 4] },
{ "key": "cargo", "label": "CARGO BAY", "placement": "any", "weight": 8, "unique": false, "minSize": [3, 3], "numbered": true },
{ "key": "crew-quarters", "label": "CREW QUARTERS", "placement": "any", "weight": 10, "unique": false, "minSize": [2, 3], "numbered": true },
{ "key": "medical", "label": "MEDICAL BAY", "placement": "any", "weight": 3, "unique": true, "minSize": [3, 3] },
{ "key": "armory", "label": "ARMOURY", "placement": "any", "weight": 2, "unique": true, "minSize": [2, 3] },
{ "key": "brig", "label": "BRIG", "placement": "any", "weight": 2, "unique": true, "minSize": [2, 2] },
{ "key": "airlock", "label": "AIRLOCK", "placement": "edge", "weight": 4, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "mess-hall", "label": "MESS HALL", "placement": "any", "weight": 3, "unique": true, "minSize": [3, 3] },
{ "key": "ops", "label": "OPS", "placement": "any", "weight": 3, "unique": true, "minSize": [3, 3] },
{ "key": "comms", "label": "COMMS", "placement": "bow", "weight": 2, "unique": true, "minSize": [2, 2] },
{ "key": "lab", "label": "RESEARCH LAB", "placement": "any", "weight": 3, "unique": false, "minSize": [3, 3], "numbered": true },
{ "key": "reactor", "label": "REACTOR CORE", "placement": "stern", "weight": 1, "unique": true, "minSize": [3, 3] },
{ "key": "escape-pods", "label": "ESCAPE PODS", "placement": "edge", "weight": 2, "unique": true, "minSize": [2, 3] },
{ "key": "weapon-bay", "label": "WEAPON BAY", "placement": "stern", "weight": 1, "unique": true, "minSize": [3, 3] },
{ "key": "navigation", "label": "NAVIGATION", "placement": "bow", "weight": 2, "unique": true, "minSize": [2, 2] },
{ "key": "fuel-bay", "label": "FUEL STORAGE", "placement": "stern", "weight": 2, "unique": true, "minSize": [2, 3] },
{ "key": "storage", "label": "STORAGE", "placement": "any", "weight": 10, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "docking-bay", "label": "DOCKING BAY", "placement": "bow", "weight": 2, "unique": true, "minSize": [5, 4] },
{ "key": "life-support", "label": "LIFE SUPPORT", "placement": "any", "weight": 2, "unique": true, "minSize": [3, 3] },
{ "key": "maintenance", "label": "MAINTENANCE", "placement": "any", "weight": 5, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "observation", "label": "OBSERVATION", "placement": "bow", "weight": 2, "unique": true, "minSize": [3, 3] },
{ "key": "void", "label": "VOID", "placement": "any", "weight": 1, "unique": false, "minSize": [2, 2] }
],
"sla_overrides": {
"bridge": { "label": "COMMAND CENTRE" },
"armory": { "label": "ORDNANCE LOCKER" },
"brig": { "label": "HOLDING CELLS" },
"crew-quarters": { "label": "OPERATIVE BARRACKS" },
"lab": { "label": "EBB LAB" },
"escape-pods": { "label": "EMERGENCY BAYS" },
"navigation": { "label": "NAV STATION" }
},
"dungeon": {
"rooms": [
{ "key": "entrance", "label": "ENTRANCE", "placement": "edge", "weight": 1, "unique": true, "minSize": [3, 3], "doorType": "none" },
{ "key": "boss-chamber", "label": "BOSS CHAMBER", "placement": "far", "weight": 1, "unique": true, "minSize": [5, 5], "doorType": "locked" },
{ "key": "throne-room", "label": "THRONE ROOM", "placement": "far", "weight": 1, "unique": true, "minSize": [4, 4], "doorType": "locked" },
{ "key": "vault", "label": "VAULT", "placement": "any", "weight": 1, "unique": true, "minSize": [3, 3], "doorType": "locked" },
{ "key": "shrine", "label": "SHRINE", "placement": "any", "weight": 2, "unique": true, "minSize": [3, 3], "doorType": "none" },
{ "key": "torture", "label": "TORTURE CHAMBER", "placement": "any", "weight": 1, "unique": true, "minSize": [3, 3], "doorType": "locked" },
{ "key": "barracks", "label": "BARRACKS", "placement": "any", "weight": 4, "unique": false, "minSize": [3, 3], "numbered": true },
{ "key": "guardroom", "label": "GUARD ROOM", "placement": "any", "weight": 3, "unique": false, "minSize": [2, 3], "numbered": true, "doorType": "none" },
{ "key": "prison", "label": "PRISON CELLS", "placement": "any", "weight": 2, "unique": true, "minSize": [3, 3], "doorType": "locked" },
{ "key": "armoury", "label": "ARMOURY", "placement": "any", "weight": 2, "unique": true, "minSize": [2, 3], "doorType": "locked" },
{ "key": "store", "label": "STOREROOM", "placement": "any", "weight": 6, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "library", "label": "LIBRARY", "placement": "any", "weight": 2, "unique": true, "minSize": [3, 3] },
{ "key": "laboratory", "label": "LABORATORY", "placement": "any", "weight": 2, "unique": true, "minSize": [3, 3] },
{ "key": "trophy-room", "label": "TROPHY ROOM", "placement": "any", "weight": 1, "unique": true, "minSize": [3, 3] },
{ "key": "alchemy", "label": "ALCHEMIST WORKSHOP", "placement": "any", "weight": 2, "unique": true, "minSize": [3, 3] },
{ "key": "forge", "label": "FORGE", "placement": "any", "weight": 1, "unique": true, "minSize": [3, 3] },
{ "key": "antechamber", "label": "ANTECHAMBER", "placement": "any", "weight": 3, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "crypt", "label": "CRYPT", "placement": "any", "weight": 3, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "ritual-room", "label": "RITUAL CHAMBER", "placement": "any", "weight": 2, "unique": true, "minSize": [3, 3] },
{ "key": "quarters", "label": "QUARTERS", "placement": "any", "weight": 5, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "cistern", "label": "CISTERN", "placement": "any", "weight": 2, "unique": true, "minSize": [3, 3] },
{ "key": "collapsed", "label": "COLLAPSED HALL", "placement": "any", "weight": 3, "unique": false, "minSize": [2, 2] },
{ "key": "trap-room", "label": "TRAP ROOM", "placement": "any", "weight": 2, "unique": false, "minSize": [2, 2] },
{ "key": "void", "label": "", "placement": "any", "weight": 4, "unique": false, "minSize": [2, 2] }
]
},
"building": {
"subtypes": {
"office": {
"rooms": [
{ "key": "lobby", "label": "LOBBY", "placement": "entrance", "weight": 1, "unique": true, "minSize": [3, 3] },
{ "key": "office", "label": "OFFICE", "placement": "any", "weight": 10, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "meeting", "label": "MEETING ROOM", "placement": "any", "weight": 4, "unique": false, "minSize": [3, 3], "numbered": true },
{ "key": "server", "label": "SERVER ROOM", "placement": "any", "weight": 2, "unique": true, "minSize": [2, 2], "doorType": "locked" },
{ "key": "reception", "label": "RECEPTION", "placement": "entrance", "weight": 2, "unique": true, "minSize": [2, 3] },
{ "key": "breakroom", "label": "BREAK ROOM", "placement": "any", "weight": 3, "unique": true, "minSize": [2, 2] },
{ "key": "bathroom", "label": "BATHROOM", "placement": "any", "weight": 4, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "storage", "label": "STORAGE", "placement": "any", "weight": 4, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "stairwell", "label": "STAIRWELL", "placement": "any", "weight": 2, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "exec-office", "label": "EXECUTIVE SUITE", "placement": "any", "weight": 1, "unique": true, "minSize": [3, 3], "doorType": "locked" },
{ "key": "void", "label": "", "placement": "any", "weight": 2, "unique": false, "minSize": [2, 2] }
]
},
"warehouse": {
"rooms": [
{ "key": "loading", "label": "LOADING DOCK", "placement": "entrance", "weight": 1, "unique": true, "minSize": [4, 3] },
{ "key": "warehouse", "label": "WAREHOUSE FLOOR", "placement": "any", "weight": 8, "unique": false, "minSize": [4, 4], "numbered": true },
{ "key": "office", "label": "SITE OFFICE", "placement": "any", "weight": 2, "unique": true, "minSize": [2, 3] },
{ "key": "security", "label": "SECURITY ROOM", "placement": "entrance", "weight": 1, "unique": true, "minSize": [2, 2], "doorType": "locked" },
{ "key": "coldstore", "label": "COLD STORE", "placement": "any", "weight": 2, "unique": true, "minSize": [3, 3], "doorType": "locked" },
{ "key": "bathroom", "label": "BATHROOM", "placement": "any", "weight": 3, "unique": false, "minSize": [2, 2] },
{ "key": "storage", "label": "STORAGE", "placement": "any", "weight": 4, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "stairwell", "label": "STAIRWELL", "placement": "any", "weight": 2, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "void", "label": "", "placement": "any", "weight": 3, "unique": false, "minSize": [2, 2] }
]
},
"residential": {
"rooms": [
{ "key": "living", "label": "LIVING ROOM", "placement": "entrance", "weight": 1, "unique": true, "minSize": [3, 3] },
{ "key": "kitchen", "label": "KITCHEN", "placement": "any", "weight": 1, "unique": true, "minSize": [2, 3] },
{ "key": "bedroom", "label": "BEDROOM", "placement": "any", "weight": 6, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "bathroom", "label": "BATHROOM", "placement": "any", "weight": 3, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "dining", "label": "DINING ROOM", "placement": "any", "weight": 1, "unique": true, "minSize": [2, 3] },
{ "key": "study", "label": "STUDY", "placement": "any", "weight": 2, "unique": false, "minSize": [2, 2] },
{ "key": "stairwell", "label": "STAIRWELL", "placement": "any", "weight": 2, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "cellar", "label": "CELLAR", "placement": "any", "weight": 1, "unique": true, "minSize": [2, 2], "doorType": "locked" },
{ "key": "void", "label": "", "placement": "any", "weight": 2, "unique": false, "minSize": [2, 2] }
]
},
"tavern": {
"rooms": [
{ "key": "common-room", "label": "COMMON ROOM", "placement": "entrance", "weight": 1, "unique": true, "minSize": [4, 4] },
{ "key": "bar", "label": "BAR", "placement": "entrance", "weight": 1, "unique": true, "minSize": [2, 3] },
{ "key": "kitchen", "label": "KITCHEN", "placement": "any", "weight": 1, "unique": true, "minSize": [2, 3] },
{ "key": "room", "label": "GUEST ROOM", "placement": "any", "weight": 6, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "cellar", "label": "CELLAR", "placement": "any", "weight": 1, "unique": true, "minSize": [2, 2], "doorType": "locked" },
{ "key": "stable", "label": "STABLE", "placement": "any", "weight": 1, "unique": true, "minSize": [3, 3] },
{ "key": "courtyard", "label": "COURTYARD", "placement": "any", "weight": 1, "unique": true, "minSize": [4, 4] },
{ "key": "stairwell", "label": "STAIRWELL", "placement": "any", "weight": 2, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "privy", "label": "PRIVY", "placement": "any", "weight": 2, "unique": false, "minSize": [2, 2] },
{ "key": "storeroom", "label": "STOREROOM", "placement": "any", "weight": 3, "unique": false, "minSize": [2, 2] },
{ "key": "void", "label": "", "placement": "any", "weight": 2, "unique": false, "minSize": [2, 2] }
]
},
"mansion": {
"rooms": [
{ "key": "foyer", "label": "FOYER", "placement": "entrance", "weight": 1, "unique": true, "minSize": [3, 3] },
{ "key": "ballroom", "label": "BALLROOM", "placement": "any", "weight": 1, "unique": true, "minSize": [5, 5] },
{ "key": "dining", "label": "DINING ROOM", "placement": "any", "weight": 1, "unique": true, "minSize": [3, 4] },
{ "key": "library", "label": "LIBRARY", "placement": "any", "weight": 1, "unique": true, "minSize": [3, 3] },
{ "key": "study", "label": "STUDY", "placement": "any", "weight": 1, "unique": true, "minSize": [2, 3], "doorType": "locked" },
{ "key": "bedroom", "label": "BEDROOM", "placement": "any", "weight": 4, "unique": false, "minSize": [2, 3], "numbered": true },
{ "key": "servant", "label": "SERVANTS QUARTERS", "placement": "any", "weight": 2, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "kitchen", "label": "KITCHEN", "placement": "any", "weight": 1, "unique": true, "minSize": [2, 3] },
{ "key": "garden", "label": "GARDEN ROOM", "placement": "any", "weight": 1, "unique": true, "minSize": [4, 4] },
{ "key": "armoury", "label": "ARMOURY", "placement": "any", "weight": 1, "unique": true, "minSize": [2, 3], "doorType": "locked" },
{ "key": "stairwell", "label": "STAIRWELL", "placement": "any", "weight": 2, "unique": false, "minSize": [2, 2], "numbered": true },
{ "key": "vault", "label": "VAULT", "placement": "any", "weight": 1, "unique": true, "minSize": [2, 2], "doorType": "locked" },
{ "key": "bathroom", "label": "BATHROOM", "placement": "any", "weight": 3, "unique": false, "minSize": [2, 2] },
{ "key": "void", "label": "", "placement": "any", "weight": 2, "unique": false, "minSize": [2, 2] }
]
},
"horror": {
"rooms": [
{ "key": "entrance-hall", "label": "ENTRANCE HALL", "placement": "entrance", "weight": 1, "unique": true, "minSize": [3, 3] },
{ "key": "living-room", "label": "LIVING ROOM", "placement": "any", "weight": 3, "unique": false, "minSize": [3, 3] },
{ "key": "kitchen", "label": "KITCHEN", "placement": "any", "weight": 2, "unique": true, "minSize": [2, 3] },
{ "key": "bedroom", "label": "BEDROOM", "placement": "any", "weight": 3, "unique": false, "minSize": [2, 3], "numbered": true },
{ "key": "bathroom", "label": "BATHROOM", "placement": "any", "weight": 2, "unique": false, "minSize": [2, 2] },
{ "key": "basement", "label": "BASEMENT", "placement": "any", "weight": 1, "unique": true, "minSize": [3, 4], "doorType": "locked" },
{ "key": "surgery", "label": "SURGERY ROOM", "placement": "any", "weight": 1, "unique": true, "minSize": [3, 4] },
{ "key": "padded-cell", "label": "PADDED CELL", "placement": "any", "weight": 2, "unique": false, "minSize": [2, 2], "doorType": "locked", "numbered": true },
{ "key": "boiler-room", "label": "BOILER ROOM", "placement": "any", "weight": 1, "unique": true, "minSize": [2, 3] },
{ "key": "attic", "label": "ATTIC", "placement": "any", "weight": 1, "unique": true, "minSize": [3, 4] },
{ "key": "collapse", "label": "COLLAPSED AREA", "placement": "any", "weight": 2, "unique": false, "minSize": [2, 2] },
{ "key": "void", "label": "", "placement": "any", "weight": 2, "unique": false, "minSize": [2, 2] }
]
}
}
}
}
+300
View File
@@ -0,0 +1,300 @@
{
"profiles": [
{
"key": "hauler",
"label": "Class-C Hauler",
"columns": 36,
"rows": 18,
"decks": 2,
"mode": "bsp",
"hullShape": "tapered",
"splitBias": "horizontal",
"theme": "industrial",
"roomCount": 14,
"minRoomSize": 3,
"maxRoomSize": 8
},
{
"key": "frigate",
"label": "Patrol Frigate",
"columns": 28,
"rows": 14,
"decks": 3,
"mode": "bsp",
"hullShape": "hammerhead",
"splitBias": "horizontal",
"theme": "steel",
"roomCount": 10,
"minRoomSize": 3,
"maxRoomSize": 7
},
{
"key": "research",
"label": "Research Vessel",
"columns": 24,
"rows": 16,
"decks": 2,
"mode": "corridor",
"hullShape": "tapered",
"theme": "clean-corporate",
"roomCount": 12,
"minRoomSize": 3,
"maxRoomSize": 6
},
{
"key": "station-sector",
"label": "Space Station Sector",
"columns": 30,
"rows": 30,
"decks": 1,
"mode": "corridor",
"hullShape": "cross",
"theme": "steel",
"roomCount": 18,
"minRoomSize": 3,
"maxRoomSize": 8
},
{
"key": "derelict",
"label": "Derelict Wreck",
"columns": 28,
"rows": 18,
"decks": 2,
"mode": "bsp",
"hullShape": "l-shape",
"splitBias": "balanced",
"theme": "derelict",
"roomCount": 12,
"minRoomSize": 3,
"maxRoomSize": 7
},
{
"key": "custom",
"label": "Custom",
"columns": 32,
"rows": 20,
"decks": 1,
"mode": "bsp",
"hullShape": "rectangle",
"splitBias": "balanced",
"theme": "steel",
"roomCount": 12,
"minRoomSize": 3,
"maxRoomSize": 8
},
{
"key": "small-dungeon",
"label": "Small Dungeon",
"columns": 24,
"rows": 18,
"decks": 1,
"mode": "dungeon",
"hullShape": "rectangle",
"theme": "stone",
"roomCount": 8,
"minRoomSize": 3,
"maxRoomSize": 6,
"loopFactor": 20,
"corridorWidth": 1,
"secretDoorDensity": "minimal"
},
{
"key": "medium-dungeon",
"label": "Medium Dungeon",
"columns": 30,
"rows": 24,
"decks": 2,
"mode": "dungeon",
"hullShape": "rectangle",
"theme": "stone",
"roomCount": 14,
"minRoomSize": 3,
"maxRoomSize": 7,
"loopFactor": 28,
"corridorWidth": 1,
"secretDoorDensity": "sparse"
},
{
"key": "crypt-dungeon",
"label": "Undead Crypt",
"columns": 28,
"rows": 20,
"decks": 2,
"mode": "dungeon",
"hullShape": "ring",
"theme": "crypt",
"roomCount": 10,
"minRoomSize": 3,
"maxRoomSize": 6,
"loopFactor": 22,
"corridorWidth": 1,
"secretDoorDensity": "sparse"
},
{
"key": "cave-system",
"label": "Cave System",
"columns": 34,
"rows": 28,
"decks": 1,
"mode": "dungeon",
"hullShape": "cross",
"theme": "cave",
"roomCount": 16,
"minRoomSize": 3,
"maxRoomSize": 7,
"loopFactor": 35,
"corridorWidth": 2,
"secretDoorDensity": "minimal"
},
{
"key": "stronghold",
"label": "Bandit Stronghold",
"columns": 26,
"rows": 22,
"decks": 2,
"mode": "dungeon",
"hullShape": "l-shape",
"theme": "wood",
"roomCount": 12,
"minRoomSize": 3,
"maxRoomSize": 6,
"loopFactor": 24,
"corridorWidth": 1,
"secretDoorDensity": "minimal"
},
{
"key": "sewer-complex",
"label": "Sewer Complex",
"columns": 32,
"rows": 26,
"decks": 1,
"mode": "dungeon",
"hullShape": "rectangle",
"theme": "sewer",
"roomCount": 14,
"minRoomSize": 3,
"maxRoomSize": 7,
"loopFactor": 30,
"corridorWidth": 2,
"secretDoorDensity": "sparse"
},
{
"key": "small-office",
"label": "Small Office",
"columns": 24,
"rows": 18,
"decks": 1,
"mode": "building",
"hullShape": "rect",
"theme": "concrete-office",
"roomCount": 10,
"minRoomSize": 3,
"maxRoomSize": 6,
"splitBias": "balanced",
"buildingSubtype": "office"
},
{
"key": "warehouse",
"label": "Warehouse",
"columns": 32,
"rows": 20,
"decks": 1,
"mode": "building",
"hullShape": "rect",
"theme": "concrete-office",
"roomCount": 8,
"minRoomSize": 4,
"maxRoomSize": 8,
"splitBias": "horizontal",
"buildingSubtype": "warehouse"
},
{
"key": "townhouse",
"label": "Townhouse",
"columns": 22,
"rows": 20,
"decks": 3,
"mode": "building",
"hullShape": "rect",
"theme": "wood-floor",
"roomCount": 9,
"minRoomSize": 3,
"maxRoomSize": 6,
"splitBias": "vertical",
"buildingSubtype": "residential"
},
{
"key": "tavern",
"label": "Tavern",
"columns": 26,
"rows": 18,
"decks": 2,
"mode": "building",
"hullShape": "t-shape",
"theme": "wood-floor",
"roomCount": 11,
"minRoomSize": 3,
"maxRoomSize": 7,
"splitBias": "balanced",
"buildingSubtype": "tavern"
},
{
"key": "mansion",
"label": "Mansion",
"columns": 30,
"rows": 24,
"decks": 2,
"mode": "building",
"hullShape": "u-shape",
"theme": "carpet",
"roomCount": 14,
"minRoomSize": 3,
"maxRoomSize": 8,
"splitBias": "balanced",
"buildingSubtype": "mansion"
},
{
"key": "l-shape-office",
"label": "L-Shape Office",
"columns": 28,
"rows": 20,
"decks": 1,
"mode": "building",
"hullShape": "l-shape",
"theme": "concrete-office",
"roomCount": 12,
"minRoomSize": 3,
"maxRoomSize": 7,
"splitBias": "balanced",
"buildingSubtype": "office"
},
{
"key": "forest-ambush",
"label": "Forest Ambush",
"columns": 34,
"rows": 26,
"decks": 1,
"mode": "wilderness",
"hullShape": "clearing",
"theme": "forest",
"roomCount": 10,
"minRoomSize": 3,
"maxRoomSize": 7,
"corridorWidth": 1
},
{
"key": "swamp-expedition",
"label": "Swamp Expedition",
"columns": 36,
"rows": 28,
"decks": 1,
"mode": "wilderness",
"hullShape": "ford",
"theme": "swamp",
"roomCount": 12,
"minRoomSize": 3,
"maxRoomSize": 8,
"corridorWidth": 1
}
]
}
+8
View File
@@ -0,0 +1,8 @@
{
"SDPG.SceneButton": "Map Generator",
"SDPG.MenuName": "Sci-Fi & Fantasy Map Generator",
"SDPG.MenuHint": "Generate sci-fi deck plans, dungeons, buildings, and wilderness battlemaps as Foundry scenes.",
"SDPG.AppTitle": "Sci-Fi & Fantasy Map Generator",
"SDPG.ToolbarGroup": "Map Generator",
"SDPG.ToolbarOpen": "Open Sci-Fi & Fantasy Map Generator"
}
+31
View File
@@ -0,0 +1,31 @@
{
"id": "scifi-deckplan-generator",
"title": "Sci-Fi & Fantasy Map Generator",
"description": "Procedurally generates sci-fi deck plans, fantasy dungeons, horror buildings, wilderness encounter maps, and tactical battlemaps as Foundry VTT scenes.",
"version": "0.9.1",
"compatibility": {
"minimum": "13",
"verified": "13.350",
"maximum": "13"
},
"authors": [
{
"name": "Tim Evans"
}
],
"esmodules": [
"module/scifi-deckplan-generator.mjs"
],
"styles": [
"styles/scifi-deckplan-generator.css"
],
"languages": [
{
"lang": "en",
"name": "English",
"path": "lang/en.json"
}
],
"manifest": "https://raw.githubusercontent.com/slaguru666/scifi-deckplan-generator/main/module.json",
"download": "https://github.com/slaguru666/scifi-deckplan-generator/releases/latest/download/scifi-deckplan-generator.zip"
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+214
View File
@@ -0,0 +1,214 @@
.scifi-deckplan-generator .window-content,
.sdpg-app {
background: linear-gradient(180deg, #0d1520 0%, #111e2c 100%);
color: #e9f4fb;
}
.scifi-deckplan-generator {
min-height: 0;
}
.scifi-deckplan-generator .window-content {
overflow-y: auto;
overflow-x: hidden;
max-height: calc(100vh - 120px);
min-height: 0;
padding: 0;
}
.sdpg-app {
display: grid;
gap: 14px;
padding: 10px;
min-height: min-content;
}
.sdpg-section {
background: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(74, 156, 200, 0.24);
border-radius: 12px;
padding: 14px;
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.03);
}
.sdpg-section h2 {
margin: 0 0 12px;
color: #8fd4ff;
font-size: 1rem;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.sdpg-grid {
display: grid;
gap: 10px;
}
.sdpg-grid-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.sdpg-grid label,
.sdpg-checks label {
display: grid;
gap: 4px;
}
.sdpg-mode-field.is-hidden {
display: none;
}
.sdpg-grid label span {
font-size: 0.84rem;
color: rgba(233, 244, 251, 0.82);
}
.sdpg-seed-row {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 8px;
align-items: center;
}
.sdpg-grid input,
.sdpg-grid select {
width: 100%;
padding: 7px 9px;
border-radius: 8px;
border: 1px solid rgba(143, 212, 255, 0.18);
background: rgba(6, 11, 18, 0.88);
color: #f7fcff;
}
.sdpg-grid input[type="range"] {
padding: 0;
accent-color: #8fd4ff;
min-height: 36px;
}
.sdpg-reroll-seed {
min-width: 40px;
height: 36px;
border-radius: 8px;
border: 1px solid rgba(143, 212, 255, 0.22);
background: rgba(24, 43, 59, 0.96);
color: #f4fbff;
}
.sdpg-grid input:disabled,
.sdpg-grid select:disabled,
.sdpg-checks input:disabled {
opacity: 0.45;
cursor: not-allowed;
}
.sdpg-checks {
display: grid;
gap: 6px;
margin-top: 12px;
}
.sdpg-actions {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: 14px;
}
.sdpg-actions-secondary {
margin-top: 12px;
align-items: center;
}
.sdpg-actions-secondary select {
min-width: 240px;
max-width: 340px;
padding: 7px 9px;
border-radius: 8px;
border: 1px solid rgba(143, 212, 255, 0.18);
background: rgba(6, 11, 18, 0.88);
color: #f7fcff;
}
.sdpg-actions button {
border-radius: 10px;
padding: 8px 12px;
color: #f4fbff;
background: linear-gradient(180deg, #2b5f7c 0%, #1b3e55 100%);
border: 1px solid rgba(143, 212, 255, 0.22);
}
.sdpg-preset-list {
display: grid;
gap: 8px;
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.sdpg-preset-card {
display: grid;
gap: 4px;
padding: 10px;
border-radius: 10px;
background: rgba(255, 255, 255, 0.04);
}
.sdpg-preset-card strong {
color: #c8ecff;
}
.sdpg-preset-card span {
font-size: 0.8rem;
color: rgba(233, 244, 251, 0.76);
line-height: 1.35;
}
.sdpg-preset-card em {
font-size: 0.72rem;
color: rgba(143, 212, 255, 0.74);
font-style: normal;
letter-spacing: 0.04em;
text-transform: uppercase;
}
.sdpg-preview {
display: grid;
gap: 10px;
}
.sdpg-preview-frame {
min-height: 180px;
max-height: 260px;
border-radius: 12px;
border: 1px solid rgba(143, 212, 255, 0.24);
background: linear-gradient(180deg, rgba(8, 12, 18, 0.92), rgba(18, 28, 40, 0.98));
display: grid;
place-items: center;
overflow: hidden;
}
.sdpg-preview-frame img {
display: block;
width: 100%;
height: 100%;
object-fit: contain;
}
.sdpg-preview-summary {
font-size: 0.84rem;
line-height: 1.45;
color: rgba(233, 244, 251, 0.82);
}
.sdpg-scene-directory-actions {
display: flex;
flex-wrap: wrap;
gap: 6px;
margin-top: 8px;
}
@media (max-width: 980px) {
.sdpg-grid-2,
.sdpg-preset-list {
grid-template-columns: 1fr;
}
}
+304
View File
@@ -0,0 +1,304 @@
<div class="sdpg-app">
<section class="sdpg-section">
<h2>Generation</h2>
<div class="sdpg-grid sdpg-grid-2">
<label>
<span>Generation Mode</span>
<select name="mode">
{{#each modes as |mode|}}
<option value="{{mode.value}}" {{#if mode.selected}}selected{{/if}}>{{mode.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Map Profile</span>
<select name="profile">
{{#each profiles as |profile|}}
<option value="{{profile.value}}" {{#if profile.selected}}selected{{/if}}>{{profile.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Map Name</span>
<input type="text" name="shipName" value="{{defaults.shipName}}" />
</label>
<label>
<span>Seed</span>
<div class="sdpg-seed-row">
<input type="text" name="seed" value="{{defaults.seed}}" />
<button type="button" class="sdpg-reroll-seed" title="Generate new random seed">🎲</button>
</div>
</label>
<label>
<span>Deck Width</span>
<input type="number" name="columns" min="10" max="80" value="{{defaults.columns}}" />
</label>
<label>
<span>Deck Height</span>
<input type="number" name="rows" min="6" max="50" value="{{defaults.rows}}" />
</label>
<label>
<span>Grid Size</span>
<select name="gridSize">
{{#each gridSizes as |grid|}}
<option value="{{grid.value}}" {{#if grid.selected}}selected{{/if}}>{{grid.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Grid Mode</span>
<select name="gridMode">
{{#each gridModes as |grid|}}
<option value="{{grid.value}}" {{#if grid.selected}}selected{{/if}}>{{grid.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Decks</span>
<input type="number" name="decks" min="1" max="8" value="{{defaults.decks}}" />
</label>
<label>
<span>Theme</span>
<select name="theme">
{{#each themes as |theme|}}
<option value="{{theme.value}}" {{#if theme.selected}}selected{{/if}}>{{theme.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Hull / Footprint</span>
<select name="hullShape">
{{#each hullShapes as |shape|}}
<option value="{{shape.value}}" {{#if shape.selected}}selected{{/if}}>{{shape.label}}</option>
{{/each}}
</select>
</label>
<label data-modes="building" class="sdpg-mode-field">
<span>Building Type</span>
<select name="buildingSubtype">
{{#each buildingSubtypes as |subtype|}}
<option value="{{subtype.value}}" {{#if subtype.selected}}selected{{/if}}>{{subtype.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Coordinate Labels</span>
<select name="coordinates">
{{#each coordinates as |coord|}}
<option value="{{coord.value}}" {{#if coord.selected}}selected{{/if}}>{{coord.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Room Count</span>
<input type="number" name="roomCount" min="6" max="40" value="{{defaults.roomCount}}" />
</label>
<label data-modes="bsp corridor dungeon building geomorph" class="sdpg-mode-field">
<span>Corner Style</span>
<select name="cornerStyle">
{{#each cornerStyles as |style|}}
<option value="{{style.value}}" {{#if style.selected}}selected{{/if}}>{{style.label}}</option>
{{/each}}
</select>
</label>
<label data-modes="bsp corridor dungeon building geomorph" class="sdpg-mode-field">
<span>Chamfer Size</span>
<select name="chamferSize">
{{#each chamferSizes as |size|}}
<option value="{{size.value}}" {{#if size.selected}}selected{{/if}}>{{size.label}}</option>
{{/each}}
</select>
</label>
<label data-modes="bsp corridor building" class="sdpg-mode-field">
<span>Min Room Size</span>
<input type="number" name="minRoomSize" min="2" max="8" value="{{defaults.minRoomSize}}" />
</label>
<label data-modes="bsp corridor building" class="sdpg-mode-field">
<span>Max Room Size</span>
<input type="number" name="maxRoomSize" min="4" max="12" value="{{defaults.maxRoomSize}}" />
</label>
<label data-modes="bsp building" class="sdpg-mode-field">
<span>Split Bias</span>
<select name="splitBias">
{{#each splitBiases as |bias|}}
<option value="{{bias.value}}" {{#if bias.selected}}selected{{/if}}>{{bias.label}}</option>
{{/each}}
</select>
</label>
<label data-modes="bsp building" class="sdpg-mode-field">
<span>Corridor Style</span>
<select name="corridorStyle">
{{#each corridorStyles as |style|}}
<option value="{{style.value}}" {{#if style.selected}}selected{{/if}}>{{style.label}}</option>
{{/each}}
</select>
</label>
<label data-modes="corridor dungeon" class="sdpg-mode-field">
<span>Loop Factor %</span>
<input type="number" name="loopFactor" min="0" max="100" value="{{defaults.loopFactor}}" />
</label>
<label data-modes="corridor dungeon" class="sdpg-mode-field">
<span>Corridor Width</span>
<select name="corridorWidth">
{{#each corridorWidths as |width|}}
<option value="{{width.value}}" {{#if width.selected}}selected{{/if}}>{{width.label}}</option>
{{/each}}
</select>
</label>
<label data-modes="bsp corridor dungeon building" class="sdpg-mode-field">
<span>Secret Doors</span>
<select name="secretDoorDensity">
{{#each secretDoorDensities as |d|}}
<option value="{{d.value}}" {{#if d.selected}}selected{{/if}}>{{d.label}}</option>
{{/each}}
</select>
</label>
<label data-modes="bsp corridor" class="sdpg-mode-field">
<span>Maintenance Shafts</span>
<select name="maintenanceShaftDensity">
{{#each maintenanceShaftDensities as |d|}}
<option value="{{d.value}}" {{#if d.selected}}selected{{/if}}>{{d.label}}</option>
{{/each}}
</select>
</label>
<label>
<input type="checkbox" name="placeRegions" {{#if defaults.placeRegions}}checked{{/if}} />
<span>Place Scene Regions (v13)</span>
</label>
<label data-modes="bsp corridor dungeon building" class="sdpg-mode-field">
<span>Furniture</span>
<select name="furnitureDensity">
{{#each furnitureDensities as |density|}}
<option value="{{density.value}}" {{#if density.selected}}selected{{/if}}>{{density.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Mission Brief Style</span>
<select name="missionTemplate">
{{#each missionTemplates as |template|}}
<option value="{{template.value}}" {{#if template.selected}}selected{{/if}}>{{template.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Encounter Faction</span>
<select name="encounterFaction">
{{#each encounterFactions as |faction|}}
<option value="{{faction.value}}" {{#if faction.selected}}selected{{/if}}>{{faction.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Encounter Density</span>
<select name="encounterDensity">
{{#each encounterDensities as |density|}}
<option value="{{density.value}}" {{#if density.selected}}selected{{/if}}>{{density.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Encounter Actor Pack</span>
<select name="encounterPack">
{{#each actorPacks as |pack|}}
<option value="{{pack.value}}" {{#if pack.selected}}selected{{/if}}>{{pack.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Room Population Pack</span>
<select name="roomPopulationPack">
{{#each roomPopulationPacks as |pack|}}
<option value="{{pack.value}}" {{#if pack.selected}}selected{{/if}}>{{pack.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Map Age</span>
<input type="range" name="mapAge" min="0" max="100" step="5" value="{{defaults.mapAge}}" />
</label>
<label>
<span>Faction Territory</span>
<select name="factionPreset">
{{#each factionPresets as |preset|}}
<option value="{{preset.value}}" {{#if preset.selected}}selected{{/if}}>{{preset.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Reroll Target</span>
<select name="regenerateTarget">
{{#each regenerateTargets as |target|}}
<option value="{{target.value}}" {{#if target.selected}}selected{{/if}}>{{target.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Target Scene Folder</span>
<select name="targetSceneFolder">
{{#each sceneFolders as |folder|}}
<option value="{{folder.value}}" {{#if folder.selected}}selected{{/if}}>{{folder.label}}</option>
{{/each}}
</select>
</label>
</div>
<div class="sdpg-checks">
<label><input type="checkbox" name="compactPrintMode" {{#if defaults.compactPrintMode}}checked{{/if}} /> One-page compact print mode</label>
<label><input type="checkbox" name="circularSpecialRooms" {{#if defaults.circularSpecialRooms}}checked{{/if}} /> Circular special rooms</label>
<label><input type="checkbox" name="softRoomOutlines" {{#if defaults.softRoomOutlines}}checked{{/if}} /> Soft room outlines</label>
<label><input type="checkbox" name="activateScenes" {{#if defaults.activateScenes}}checked{{/if}} /> Activate final scene</label>
<label><input type="checkbox" name="regenerateInPlace" {{#if defaults.regenerateInPlace}}checked{{/if}} /> Regenerate viewed scene in place (single deck)</label>
<label><input type="checkbox" name="showRoomLabels" {{#if defaults.showRoomLabels}}checked{{/if}} /> Add room labels</label>
<label><input type="checkbox" name="placeLights" {{#if defaults.placeLights}}checked{{/if}} /> Place ambient lights</label>
<label><input type="checkbox" name="generateMissionBrief" {{#if defaults.generateMissionBrief}}checked{{/if}} /> Create mission brief journal</label>
<label><input type="checkbox" name="generateMissionPacket" {{#if defaults.generateMissionPacket}}checked{{/if}} /> Export mission packet handout</label>
<label><input type="checkbox" name="seedEncounters" {{#if defaults.seedEncounters}}checked{{/if}} /> Seed hidden encounter tokens</label>
<label><input type="checkbox" name="populateRoomsFromCompendium" {{#if defaults.populateRoomsFromCompendium}}checked{{/if}} /> Populate matching rooms from compendium</label>
<label><input type="checkbox" name="createGmOverlay" {{#if defaults.createGmOverlay}}checked{{/if}} /> Create GM-only overlay tile</label>
<label><input type="checkbox" name="createRoomNotes" {{#if defaults.createRoomNotes}}checked{{/if}} /> Create GM-only room / zone notes</label>
<label><input type="checkbox" name="exportMetadataJson" {{#if defaults.exportMetadataJson}}checked{{/if}} /> Export metadata JSON</label>
<label data-modes="bsp corridor" class="sdpg-mode-field"><input type="checkbox" name="exportMothershipJson" {{#if defaults.exportMothershipJson}}checked{{/if}} /> Export Mothership viewer JSON</label>
</div>
<div class="sdpg-actions sdpg-actions-secondary">
<select name="savedPreset">
{{#each savedPresets as |preset|}}
<option value="{{preset.value}}" {{#if preset.selected}}selected{{/if}}>{{preset.label}}</option>
{{/each}}
</select>
<button type="button" data-action="load-saved-preset"><i class="fas fa-folder-open"></i> Load Preset</button>
<button type="button" data-action="save-current-preset"><i class="fas fa-save"></i> Save Preset</button>
<button type="button" data-action="delete-saved-preset"><i class="fas fa-trash"></i> Delete Preset</button>
</div>
<div class="sdpg-actions">
<button type="button" data-action="apply-profile"><i class="fas fa-sliders"></i> Apply Profile</button>
<button type="button" data-action="preview-map"><i class="fas fa-eye"></i> Preview</button>
<button type="button" data-action="export-png"><i class="fas fa-image"></i> Save PNG</button>
<button type="button" data-action="share-seed"><i class="fas fa-share-alt"></i> Share Seed</button>
<button type="button" data-action="import-seed"><i class="fas fa-file-import"></i> Import Seed</button>
<button type="submit"><i class="fas fa-rocket"></i> Generate Map</button>
</div>
</section>
<section class="sdpg-section">
<h2>Preview</h2>
<div class="sdpg-preview" data-preview-root>
<div class="sdpg-preview-frame">
<img alt="Map preview" data-preview-image />
</div>
<div class="sdpg-preview-summary" data-preview-summary>Preview will appear here.</div>
</div>
</section>
<section class="sdpg-section">
<h2>Profiles</h2>
<div class="sdpg-preset-list">
{{#each profileCards as |profile|}}
<div class="sdpg-preset-card">
<strong>{{profile.label}}</strong>
<em>{{profile.mode}}</em>
<span>{{profile.summary}}</span>
</div>
{{/each}}
</div>
</section>
</div>