chore: initial deploy — SLA Industries Foundry VTT

This commit is contained in:
2026-04-08 09:29:06 +01:00
commit 7a7d328544
6 changed files with 1825 additions and 0 deletions
+5
View File
@@ -0,0 +1,5 @@
node_modules/
.DS_Store
._*
*.swp
worlds/
+8
View File
@@ -0,0 +1,8 @@
{
"QBM.SceneButton": "Quick Battle Map",
"QBM.MenuName": "Quick Battle Map Builder",
"QBM.MenuHint": "Create a quick scene with terrain, grid coordinates, and procedural building or dungeon generation.",
"QBM.AppTitle": "Quick Battle Map Builder",
"QBM.ToolbarGroup": "Battle Map",
"QBM.ToolbarOpen": "Open Quick Battle Map Builder"
}
+33
View File
@@ -0,0 +1,33 @@
{
"id": "quick-battlemap-builder",
"title": "Quick Battle Map Builder",
"description": "Create quick procedural battlemaps with square or hex grids, terrain backgrounds, random buildings, random dungeons, walls, doors, and windows.",
"version": "0.3.0",
"compatibility": {
"minimum": "13",
"verified": "13.350",
"maximum": "13"
},
"authors": [
{
"name": "Tim Evans",
"flags": {}
}
],
"esmodules": [
"module/quick-battlemap-builder.mjs"
],
"styles": [
"styles/quick-battlemap-builder.css"
],
"languages": [
{
"lang": "en",
"name": "English",
"path": "lang/en.json",
"flags": {}
}
],
"manifest": "https://raw.githubusercontent.com/slaguru666/quick-battlemap-builder/main/module.json",
"download": "https://github.com/slaguru666/quick-battlemap-builder/releases/latest/download/quick-battlemap-builder.zip"
}
File diff suppressed because it is too large Load Diff
+146
View File
@@ -0,0 +1,146 @@
.quick-battlemap-builder .window-content,
.qbm-app {
background: linear-gradient(180deg, #10161c 0%, #17212a 100%);
color: #edf1f4;
}
.qbm-app {
display: grid;
gap: 14px;
padding: 8px;
}
.qbm-section {
background: rgba(255, 255, 255, 0.06);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 12px;
padding: 12px;
}
.qbm-section h2 {
margin: 0 0 10px;
font-size: 1.05rem;
letter-spacing: 0.04em;
text-transform: uppercase;
}
.qbm-grid {
display: grid;
gap: 10px;
}
.qbm-grid-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.qbm-grid label,
.qbm-checks label {
display: grid;
gap: 4px;
}
.qbm-grid label span {
font-size: 0.85rem;
color: rgba(237, 241, 244, 0.82);
}
.qbm-grid input,
.qbm-grid select {
width: 100%;
color: #f8fafc;
background: rgba(8, 12, 17, 0.88);
border: 1px solid rgba(255, 255, 255, 0.16);
border-radius: 8px;
padding: 6px 8px;
}
.qbm-checks {
display: grid;
gap: 6px;
margin-top: 10px;
}
.qbm-checks input {
margin-right: 6px;
}
.qbm-actions {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: 12px;
}
.qbm-actions button {
color: #f8fafc;
background: linear-gradient(180deg, #29455a 0%, #1c2f3e 100%);
border: 1px solid rgba(255, 255, 255, 0.14);
border-radius: 10px;
padding: 8px 12px;
}
.qbm-actions button:hover,
.qbm-actions button:focus {
box-shadow: 0 0 0 1px rgba(240, 194, 75, 0.45);
}
.qbm-note {
margin: 10px 0 0;
font-size: 0.83rem;
color: rgba(237, 241, 244, 0.78);
}
.qbm-note-block {
display: grid;
gap: 4px;
align-content: start;
padding: 10px 12px;
border-radius: 10px;
background: rgba(255, 255, 255, 0.05);
}
.qbm-note-block strong {
font-size: 0.9rem;
}
.qbm-note-block span {
font-size: 0.82rem;
line-height: 1.35;
color: rgba(237, 241, 244, 0.8);
}
.qbm-preset-list {
display: grid;
gap: 8px;
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.qbm-preset-card {
display: grid;
gap: 4px;
background: rgba(255, 255, 255, 0.05);
border-radius: 10px;
padding: 10px;
}
.qbm-preset-card strong {
font-size: 0.9rem;
}
.qbm-preset-card span {
font-size: 0.8rem;
color: rgba(237, 241, 244, 0.78);
line-height: 1.3;
}
.qbm-scene-directory-actions {
display: flex;
flex-wrap: wrap;
gap: 6px;
margin-top: 8px;
}
.qbm-scene-directory-actions button {
flex: 1 1 auto;
min-width: 160px;
}
+159
View File
@@ -0,0 +1,159 @@
<form class="qbm-app">
<section class="qbm-section">
<h2>New Scene</h2>
<div class="qbm-grid qbm-grid-2">
<label>
<span>Scene Name</span>
<input type="text" name="sceneName" value="{{defaults.sceneName}}" />
</label>
<label>
<span>Scene Folder</span>
<input type="text" name="sceneFolder" value="{{defaults.sceneFolder}}" />
</label>
<label>
<span>Grid Layout</span>
<select name="gridPreset">
{{#each gridOptions as |option|}}
<option value="{{option.value}}" {{#if option.selected}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Terrain</span>
<select name="terrain">
{{#each terrainOptions as |option|}}
<option value="{{option.value}}" {{#if option.selected}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Generator</span>
<select name="generatorType">
{{#each generatorOptions as |option|}}
<option value="{{option.value}}" {{#if option.selected}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Columns</span>
<input type="number" name="columns" min="4" max="80" value="{{defaults.columns}}" />
</label>
<label>
<span>Rows</span>
<input type="number" name="rows" min="4" max="80" value="{{defaults.rows}}" />
</label>
<label>
<span>Grid Size (px)</span>
<input type="number" name="gridSize" min="40" max="256" step="10" value="{{defaults.gridSize}}" />
</label>
<label>
<span>Distance per Cell</span>
<input type="number" name="distance" min="1" max="100" step="1" value="{{defaults.distance}}" />
</label>
<label>
<span>Units</span>
<input type="text" name="units" value="{{defaults.units}}" />
</label>
<label>
<span>Coordinate Labels</span>
<select name="coordinates">
{{#each coordinateOptions as |option|}}
<option value="{{option.value}}" {{#if option.selected}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Room Count</span>
<input type="number" name="generatorRooms" min="3" max="20" value="{{defaults.generatorRooms}}" />
</label>
</div>
<div class="qbm-checks">
<label><input type="checkbox" name="activateScene" {{#if defaults.activateScene}}checked{{/if}} /> Activate and view scene</label>
<label><input type="checkbox" name="applyOutlineOnCreate" {{#if defaults.applyOutlineOnCreate}}checked{{/if}} /> Generate a layout when creating the scene</label>
<label><input type="checkbox" name="addBorderWalls" {{#if defaults.addBorderWalls}}checked{{/if}} /> Add border walls</label>
<label><input type="checkbox" name="enableTokenVision" {{#if defaults.enableTokenVision}}checked{{/if}} /> Enable token vision</label>
</div>
<div class="qbm-actions">
<button type="button" class="qbm-create-scene"><i class="fas fa-map"></i> Create Generated Scene</button>
</div>
</section>
<section class="qbm-section">
<h2>Layout Generator</h2>
<div class="qbm-grid qbm-grid-2">
<label>
<span>Target Scene</span>
<select name="sceneId">
{{#each sceneOptions as |option|}}
<option value="{{option.value}}" {{#if option.selected}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</label>
<label>
<span>Start X (cells)</span>
<input type="number" name="startX" min="0" max="200" value="{{defaults.startX}}" />
</label>
<label>
<span>Start Y (cells)</span>
<input type="number" name="startY" min="0" max="200" value="{{defaults.startY}}" />
</label>
<label>
<span>Width (cells)</span>
<input type="number" name="stampWidth" min="1" max="200" value="{{defaults.stampWidth}}" />
</label>
<label>
<span>Height (cells)</span>
<input type="number" name="stampHeight" min="1" max="200" value="{{defaults.stampHeight}}" />
</label>
<label>
<span>Quick Stamp</span>
<select name="stampType">
{{#each stampOptions as |option|}}
<option value="{{option.value}}" {{#if option.selected}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</label>
</div>
<div class="qbm-actions">
<button type="button" class="qbm-generate-layout"><i class="fas fa-wand-magic-sparkles"></i> Generate On Target Scene</button>
<button type="button" class="qbm-add-stamp"><i class="fas fa-draw-polygon"></i> Add Wall Stamp</button>
<button type="button" class="qbm-add-perimeter"><i class="fas fa-border-all"></i> Add Scene Border</button>
<button type="button" class="qbm-clear-generated"><i class="fas fa-eraser"></i> Remove Generated Geometry</button>
</div>
<p class="qbm-note">Use this for random buildings with rooms, doors, and windows, or dungeons with rooms, corridors, and door openings. Quick Stamps remain as simple manual tools.</p>
</section>
<section class="qbm-section">
<h2>Legacy Manual Shapes</h2>
<div class="qbm-grid qbm-grid-2">
<label>
<span>Outline Preset</span>
<select name="outlineType">
{{#each outlineOptions as |option|}}
<option value="{{option.value}}" {{#if option.selected}}selected{{/if}}>{{option.label}}</option>
{{/each}}
</select>
</label>
<div class="qbm-note-block">
<strong>Quick Use</strong>
<span>These add a visible outline drawing and matching walls together, so buildings and dungeon shells are immediately playable.</span>
</div>
</div>
<div class="qbm-actions">
<button type="button" class="qbm-add-outline"><i class="fas fa-city"></i> Add Outline + Walls</button>
</div>
<p class="qbm-note">These older shell presets stay here as a fallback. The new generator above is the recommended path for buildings and dungeons.</p>
</section>
<section class="qbm-section">
<h2>Presets</h2>
<div class="qbm-preset-list">
{{#each presetNotes as |note|}}
<div class="qbm-preset-card">
<strong>{{note.title}}</strong>
<span>{{note.copy}}</span>
</div>
{{/each}}
</div>
</section>
</form>