Mapwright v0.5.0 — procedural battle map generator for Foundry VTT
Buildings (modern/fantasy, multi-floor, footprint shapes), caves, outdoor biomes, and town/village + city-block settlements. Auto-places Foundry walls, doors, windows, lighting; furniture as locked tiles; live preview. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
/** Dev harness for the cave engine. node dev/render-cave-sample.mjs */
|
||||
import { writeFileSync } from "node:fs";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { dirname, join } from "node:path";
|
||||
|
||||
import { generateCave } from "../module/lib/dungeon.mjs";
|
||||
import { renderCaveSVG } from "../module/lib/render-cave.mjs";
|
||||
|
||||
const here = dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
const SAMPLES = [
|
||||
{ name: "cave-stone", theme: "cave", cols: 30, rows: 22, seed: "deep-4" },
|
||||
{ name: "cave-crypt", theme: "crypt", cols: 28, rows: 20, seed: "tomb-7" },
|
||||
{ name: "cave-sewer", theme: "sewer", cols: 26, rows: 20, seed: "drain-2" }
|
||||
];
|
||||
|
||||
for (const cfg of SAMPLES) {
|
||||
const model = generateCave({ cols: cfg.cols, rows: cfg.rows, seed: cfg.seed });
|
||||
const svg = renderCaveSVG({ model, gridSize: 70, theme: cfg.theme, seed: cfg.seed });
|
||||
const segCount = model.segments.length;
|
||||
console.log(`${cfg.name.padEnd(12)} loops:${model.loops.length} segments:${segCount} features:${model.features.length}`);
|
||||
writeFileSync(join(here, `${cfg.name}.svg`), svg);
|
||||
}
|
||||
console.log("\nWrote cave samples to", here);
|
||||
Reference in New Issue
Block a user