Merge branch 'master' of https://github.com/mosuzi/Fantasy-Map-Generator into localization-dev

This commit is contained in:
mosuzi 2023-10-09 10:03:54 +08:00
commit b3dc77578c
303 changed files with 11387 additions and 2609 deletions

View file

@ -30,6 +30,16 @@
/>
<meta name="twitter:image" content="images/preview.png" />
<script async src="https://www.googletagmanager.com/gtag/js?id=G-VJL3J26W7R"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "G-VJL3J26W7R");
</script>
<link rel="icon" type="image/png" href="images/icons/favicon-32x32.png" sizes="32x32" />
<link rel="icon" type="image/png" href="images/icons/favicon-16x16.png" sizes="16x16" />
<link rel="apple-touch-icon" href="images/icons/maskable_icon_x192.png" />
@ -128,7 +138,7 @@
}
</style>
<link rel="preload" href="index.css?v=1.89.21" as="style" onload="this.onload=null; this.rel='stylesheet'" />
<link rel="preload" href="index.css?v=1.93.04" as="style" onload="this.onload=null; this.rel='stylesheet'" />
<link rel="preload" href="icons.css" as="style" onload="this.onload=null; this.rel='stylesheet'" />
<link rel="preload" href="libs/jquery-ui.css" as="style" onload="this.onload=null; this.rel='stylesheet'" />
</head>
@ -365,7 +375,7 @@
<div id="loading-typography">
<div id="titleName">Azgaar's</div>
<div id="title">Fantasy Map Generator</div>
<div id="versionText"></div>
<div id="versionText"> </div>
<p id="loading-text">LOADING<span>.</span><span>.</span><span>.</span></p>
</div>
</div>
@ -855,7 +865,7 @@
<td>Image</td>
<td>
<select id="styleTextureInput">
<option value="none">None</option>
<option value="">No texture</option>
<option value="https://i2.wp.com/azgaar.files.wordpress.com/2021/10/folded-paper-big.jpg">
Folded paper big
</option>
@ -1765,6 +1775,18 @@
</td>
</tr>
<tr data-tip="Set what Generator should do on load">
<td></td>
<td>Onload behavior</td>
<td>
<select id="onloadBehavior" data-stored="onloadBehavior">
<option value="random" selected>Generate random map</option>
<option value="lastSaved">Open last saved map</option>
</select>
</td>
<td></td>
</tr>
<tr data-tip="Select speech synthesis voice to pronounce generated names">
<td></td>
<td>Speaker voice</td>
@ -2197,8 +2219,8 @@
<a href="https://github.com/Azgaar/Fantasy-Map-Generator/blob/master/LICENSE" target="_blank"
>open source</a
>
tool which procedurally generates fantasy maps. You may use auto-generated maps as they are, edit them or
even create a new map from scratch. Check out the
tool by Azgaar. You may use auto-generated maps as they are, edit them or even create a new map from
scratch. Check out the
<a href="https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Quick-Start-Tutorial" target="_blank"
>Quick start</a
>, <a href="https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Q&A" target="_blank">Q&A</a>,
@ -2276,6 +2298,18 @@
</a>
</div> -->
<div style="text-align: left">
<p>Check out our other projects:</p>
<div>
<a href="https://azgaar.github.io/Armoria" target="_blank">Armoria</a>: a tool for creating heraldic
coats of arms
</div>
<div>
<a href="https://deorum.vercel.app" target="_blank">Deorum</a>: a vast gallery of customizable fantasy
characters
</div>
</div>
<ul class="share-buttons">
<li>
<a
@ -2320,8 +2354,8 @@
<div id="sticked">
<button id="newMapButton" data-tip="Generate a new map based on options" data-shortcut="F2">New Map</button>
<button id="exportButton" data-tip="Select format to download image or export map data">Export</button>
<button id="saveButton" data-tip="Save fully-functional map in .map format">Save</button>
<button id="loadButton" data-tip="Load fully-functional map in .map format">Load</button>
<button id="saveButton" data-tip="Save fully-functional map file">Save</button>
<button id="loadButton" data-tip="Load fully-functional map (.map or .gz formats)">Load</button>
<button id="zoomReset" data-tip="Reset map zoom" data-shortcut="0 (zero)">Reset Zoom</button>
</div>
</div>
@ -2337,29 +2371,58 @@
<div id="dialogs">
<div id="worldConfigurator" class="dialog stable" style="display: none">
<div>
<div style="display: flex">
<div id="worldControls">
<div>
<i data-locked="0" id="lock_temperatureEquator" class="icon-lock-open"></i>
<label data-tip="Set temperature at equator">
<i>Equator:</i>
<input
id="temperatureEquatorInput"
data-stored="temperatureEquator"
type="number"
min="-50"
max="50"
/>°C = <span id="temperatureEquatorF"></span>°F
<input id="temperatureEquatorInput" data-stored="temperatureEquator" type="number" min="-50" max="50" />
<span>°C = <span id="temperatureEquatorF"></span></span>
<input id="temperatureEquatorOutput" data-stored="temperatureEquator" type="range" min="-50" max="50" />
</label>
</div>
<div>
<i data-locked="0" id="lock_temperaturePole" class="icon-lock-open"></i>
<label data-tip="Set temperature near poles">
<i>Poles:</i>
<input id="temperaturePoleInput" data-stored="temperaturePole" type="number" min="-50" max="50" />°C =
<span id="temperaturePoleF"></span>°F
<input id="temperaturePoleOutput" data-stored="temperaturePole" type="range" min="-50" max="50" />
<label data-tip="Set the North Pole average yearly temperature">
<i data-locked="0" id="lock_temperatureNorthPole" class="icon-lock-open"></i>
<i>North Pole:</i>
<input
id="temperatureNorthPoleInput"
data-stored="temperatureNorthPole"
type="number"
min="-50"
max="50"
/>
<span>°C = <span id="temperatureNorthPoleF"></span></span>
<input
id="temperatureNorthPoleOutput"
data-stored="temperatureNorthPole"
type="range"
min="-50"
max="50"
/>
</label>
</div>
<div>
<label data-tip="Set the South Pole average yearly temperature">
<i data-locked="0" id="lock_temperatureSouthPole" class="icon-lock-open"></i>
<i>South Pole:</i>
<input
id="temperatureSouthPoleInput"
data-stored="temperatureSouthPole"
type="number"
min="-50"
max="50"
/>
<span>°C = <span id="temperatureSouthPoleF"></span></span>
<input
id="temperatureSouthPoleOutput"
data-stored="temperatureSouthPole"
type="range"
min="-50"
max="50"
/>
</label>
</div>
<div>
@ -2415,59 +2478,65 @@
<div data-tip="Map coordinates on globe"><i>Coords:</i> <span id="mapCoordinates"></span></div>
</div>
<svg id="globe" width="22em" height="22em" viewBox="-20 -25 240 240">
<defs>
<linearGradient id="temperatureGradient" x1="0" x2="0" y1="0" y2="1">
<stop class="tempGradient90" offset="0%" stop-color="blue" />
<stop class="tempGradient60" offset="16.6%" stop-color="green" />
<stop class="tempGradient30" offset="33.3%" stop-color="yellow" />
<stop class="tempGradient0" offset="50%" stop-color="red" />
<stop class="tempGradient30" offset="66.6%" stop-color="yellow" />
<stop class="tempGradient60" offset="83.3%" stop-color="green" />
<stop class="tempGradient90" offset="100%" stop-color="blue" />
</linearGradient>
</defs>
<g id="globeNoteLines">
<line x1="5" x2="220" y1="0" y2="0" />
<line x1="5" x2="220" y1="13" y2="13" />
<line x1="5" x2="220" y1="49.5" y2="49.5" />
<line x1="-5" x2="220" y1="100" y2="100" />
<line x1="5" x2="220" y1="150.5" y2="150.5" />
<line x1="5" x2="220" y1="187" y2="187" />
<line x1="5" x2="220" y1="200" y2="200" />
</g>
<g id="globeWindArrows" data-tip="Click to change wind direction" stroke-linejoin="round">
<circle cx="210" cy="6" r="12" />
<path data-tier="0" d="M210,11 v-10 l-3,3 m6,0 l-3,-3" transform="rotate(225 210 6)" />
<circle cx="210" cy="30" r="12" />
<path data-tier="1" d="M210,35 v-10 l-3,3 m6,0 l-3,-3" transform="rotate(45 210 30)" />
<circle cx="210" cy="75" r="12" />
<path data-tier="2" d="M210,80 v-10 l-3,3 m6,0 l-3,-3" transform="rotate(225 210 75)" />
<circle cx="210" cy="130" r="12" />
<path data-tier="3" d="M210,135 v-10 l-3,3 m6,0 l-3,-3" transform="rotate(315 210 130)" />
<circle cx="210" cy="173" r="12" />
<path data-tier="4" d="M210,178 v-10 l-3,3 m6,0 l-3,-3" transform="rotate(135 210 173)" />
<circle cx="210" cy="194" r="12" />
<path data-tier="5" d="M210,199 v-10 l-3,3 m6,0 l-3,-3" transform="rotate(315 210 194)" />
</g>
<g id="globaAxisLabels">
<text x="82%" y="-4%">wind</text>
<text x="-8%" y="-4%">latitude</text>
</g>
<g id="globeLatLabels">
<text x="-15" y="5">90°</text>
<text x="-15" y="18">60°</text>
<text x="-15" y="53">30°</text>
<text x="-15" y="103"></text>
<text x="-15" y="153">30°</text>
<text x="-15" y="190">60°</text>
<text x="-15" y="204">90°</text>
</g>
<circle id="globeOutline" cx="100" cy="100" r="100" />
<line id="globeEquator" x1="1" x2="199" y1="100" y2="100" />
<path id="globeGraticule" />
<path id="globeArea" />
</svg>
<div style="display: flex; flex-direction: column; align-items: flex-end">
<svg id="globe" width="22em" viewBox="-20 -25 240 240">
<defs>
<linearGradient id="temperatureGradient" x1="0" x2="0" y1="0" y2="1">
<stop id="grad90" offset="0%" stop-color="blue" />
<stop id="grad60" offset="16.6%" stop-color="green" />
<stop id="grad30" offset="33.3%" stop-color="yellow" />
<stop id="grad0" offset="50%" stop-color="red" />
<stop id="grad-30" offset="66.6%" stop-color="yellow" />
<stop id="grad-60" offset="83.3%" stop-color="green" />
<stop id="grad-90" offset="100%" stop-color="blue" />
</linearGradient>
</defs>
<g id="globeNoteLines">
<line x1="5" x2="220" y1="0" y2="0" />
<line x1="5" x2="220" y1="13" y2="13" />
<line x1="5" x2="220" y1="49.5" y2="49.5" />
<line x1="-5" x2="220" y1="100" y2="100" />
<line x1="5" x2="220" y1="150.5" y2="150.5" />
<line x1="5" x2="220" y1="187" y2="187" />
<line x1="5" x2="220" y1="200" y2="200" />
</g>
<g id="globeWindArrows" data-tip="Click to change wind direction" stroke-linejoin="round">
<circle cx="210" cy="6" r="12" />
<path data-tier="0" d="M210,11 v-10 l-3,3 m6,0 l-3,-3" transform="rotate(225 210 6)" />
<circle cx="210" cy="30" r="12" />
<path data-tier="1" d="M210,35 v-10 l-3,3 m6,0 l-3,-3" transform="rotate(45 210 30)" />
<circle cx="210" cy="75" r="12" />
<path data-tier="2" d="M210,80 v-10 l-3,3 m6,0 l-3,-3" transform="rotate(225 210 75)" />
<circle cx="210" cy="130" r="12" />
<path data-tier="3" d="M210,135 v-10 l-3,3 m6,0 l-3,-3" transform="rotate(315 210 130)" />
<circle cx="210" cy="173" r="12" />
<path data-tier="4" d="M210,178 v-10 l-3,3 m6,0 l-3,-3" transform="rotate(135 210 173)" />
<circle cx="210" cy="194" r="12" />
<path data-tier="5" d="M210,199 v-10 l-3,3 m6,0 l-3,-3" transform="rotate(315 210 194)" />
</g>
<g id="globaAxisLabels">
<text x="82%" y="-4%">wind</text>
<text x="-8%" y="-4%">latitude</text>
</g>
<g id="globeLatLabels">
<text x="-15" y="5">90°</text>
<text x="-15" y="18">60°</text>
<text x="-15" y="53">30°</text>
<text x="-15" y="103"></text>
<text x="-15" y="153">30°</text>
<text x="-15" y="190">60°</text>
<text x="-15" y="204">90°</text>
</g>
<circle id="globeOutline" cx="100" cy="100" r="100" />
<line id="globeEquator" x1="1" x2="199" y1="100" y2="100" />
<path id="globeGraticule" />
<path id="globeArea" />
</svg>
<button id="restoreWinds" data-tip="Click to restore default (Earth-based) wind directions">
Restore winds
</button>
</div>
</div>
</div>
@ -5500,6 +5569,11 @@
<div id="markersBottom">
<button id="markersOverviewRefresh" data-tip="Refresh the Overview screen" class="icon-cw"></button>
<input type="hidden" id="addedMarkerType" name="addedMarkerType" value="" />
<span id="markerTypeSelectorWrapper">
<button id="markerTypeSelector" data-tip="Select marker type for newly added markers."></button>
<div id="markerTypeSelectMenu"></div>
</span>
<button
id="markersAddFromOverview"
data-tip="Add a new marker. Hold Shift to add multiple"
@ -5649,6 +5723,17 @@
<input id="options3dLightnessNumber" type="number" min="0" max="500" style="width: 4em" />
</div>
<div data-tip="Set mesh texture resolution">
<div>Texture resolution:</div>
<select id="options3dMeshSkinResolution" style="width: 10em">
<option value="512">512x512px</option>
<option value="1024">1024x1024px</option>
<option value="2048">2048x2048px</option>
<option value="4096">4096x4096px</option>
<option value="8192">8192x8192px</option>
</select>
</div>
<div data-tip="Set sun position (x, y, z) to define shadows">
<div>Sun position:</div>
<input id="options3dSunX" type="number" min="-2500" max="2500" step="100" style="width: 4.7em" />
@ -5666,6 +5751,25 @@
<label for="options3dMeshSkyMode" class="checkbox-label"><i>Show sky and extend water</i></label>
</div>
<div
data-tip="Increases the polygon count to smooth the sharp points. Please note that it can take some time to calculate"
style="margin: 0.6em 0 0.3em -0.2em"
>
<input id="options3dSubdivide" class="checkbox" type="checkbox" />
<label for="options3dSubdivide" class="checkbox-label">
<i>Smooth geometry <small style="color: darkred">[slow]</small></i>
</label>
</div>
<div data-tip="Set Sun Color" id="options3dSunColorSection">
<span>Sun Color:</span
><input
id="options3dSunColor"
type="color"
style="width: 4.4em; height: 1em; border: 0; padding: 0; margin: 0 0.2em"
/>
</div>
<div data-tip="Set sky and water color" id="options3dColorSection" style="display: none">
<span>Sky:</span
><input
@ -5805,37 +5909,42 @@
<div id="saveMapData" style="display: none" class="dialog">
<div style="margin-top: 0.3em">
<strong>Save map to</strong>
<button onclick="dowloadMap()" data-tip="Download .map file to your local disk" data-shortcut="Ctrl + S">
<button onclick="saveMap('machine')" data-tip="Download map file to your local disk" data-shortcut="Ctrl + S">
machine
</button>
<button onclick="saveToDropbox()" data-tip="Save .map file to your Dropbox" data-shortcut="Ctrl + C">
<button onclick="saveMap('dropbox')" data-tip="Save map file to your Dropbox" data-shortcut="Ctrl + C">
dropbox
</button>
<button
onclick="quickSave()"
data-tip="Save the project to browser storage. It will overwrite the latest autosave"
data-shortcut="F6"
>
<button onclick="saveMap('storage')" data-tip="Save the project to browser storage only" data-shortcut="F6">
browser
</button>
</div>
<p>
Maps are saved in <i>.map</i> format, that can be loaded back via the <i>Load</i> in menu. There is no way to
restore the progress if file is lost. Please keep old <i>.map</i> files on your machine or cloud storage as
backups.
restore the progress if file is lost. Please keep old save files on your machine or cloud storage as backups.
</p>
</div>
<div id="loadMapData" style="display: none" class="dialog">
<div>
<strong>Load map from</strong>
<button onclick="mapToLoad.click()" data-tip="Load .map file from your local disk">machine</button>
<button onclick="loadURL()" data-tip="Load .map file from URL (server should allow CORS)">URL</button>
<button onclick="mapToLoad.click()" data-tip="Load map file (.map or .gz) from your local disk">
machine
</button>
<button
onclick="loadURL()"
data-tip="Load map file (.map or .gz) file from URL. Note that the server should allow CORS"
>
URL
</button>
<button onclick="quickLoad()" data-tip="Load map from browser storage (if saved before)">storage</button>
</div>
<p>Click on <i>storage</i> to open the last saved map.</p>
<div id="loadFromDropbox">
<p style="margin-bottom: 0.3em">
From your Dropbox account
Or load from your Dropbox account
<button
id="dropboxConnectButton"
onclick="connectToDropbox()"
@ -5847,7 +5956,7 @@
<select id="loadFromDropboxSelect" style="width: 22em"></select>
<div id="loadFromDropboxButtons" style="margin-bottom: 0.6em">
<button onclick="loadFromDropbox()" data-tip="Load .map file from your Dropbox">Load</button>
<button onclick="loadFromDropbox()" data-tip="Load map file (.map or .gz) from your Dropbox">Load</button>
<button
onclick="createSharableDropboxLink()"
data-tip="Select file and create a link to share with your friends"
@ -5916,7 +6025,7 @@
<div id="resampleDialog" style="display: none" class="dialog">
<div style="width: 34em; max-width: 80vw; font-weight: bold; padding: 6px">
This operation is destructive and irreversible. It will create a completely new map based on the current one.
Don't forget to save the current project as a .map file first!
Don't forget to save the current project to your machine first!
</div>
<div
@ -6037,10 +6146,10 @@
data-main="Сlick the arrow button for options. Zoom in to see the map in details"
></div>
<div id="mapOverlay" style="display: none">Drop a .map file to open</div>
<div id="mapOverlay" style="display: none">Drop a map file to open</div>
<div id="fileInputs" style="display: none">
<input type="file" accept=".map" id="mapToLoad" />
<input type="file" accept=".map,.gz" id="mapToLoad" />
<input type="file" accept=".txt,.csv" id="burgsListToLoad" />
<input type="file" accept=".txt" id="legendsToLoad" />
<input type="file" accept="image/*" id="imageToLoad" />
@ -7842,16 +7951,16 @@
<script src="libs/d3.min.js"></script>
<script src="libs/priority-queue.min.js"></script>
<script src="libs/delaunator.min.js"></script>
<script src="libs/indexedDB.js?v=1.89.32"></script>
<script src="libs/indexedDB.js?v=1.91.01"></script>
<script src="utils/shorthands.js"></script>
<script src="utils/commonUtils.js?v=1.89.29"></script>
<script src="utils/arrayUtils.js"></script>
<script src="utils/colorUtils.js"></script>
<script src="utils/graphUtils.js?v=1.88.02"></script>
<script src="utils/graphUtils.js?v=1.90.01"></script>
<script src="utils/nodeUtils.js"></script>
<script src="utils/numberUtils.js?v=1.89.08"></script>
<script src="utils/polyfills.js"></script>
<script src="utils/polyfills.js?v=1.93.00"></script>
<script src="utils/probabilityUtils.js?v=1.88.00"></script>
<script src="utils/stringUtils.js"></script>
<script src="utils/languageUtils.js"></script>
@ -7861,18 +7970,20 @@
<script src="config/heightmap-templates.js"></script>
<script src="config/precreated-heightmaps.js"></script>
<script src="modules/heightmap-generator.js?v=1.88.00"></script>
<script src="modules/ocean-layers.js?v=1.89.08"></script>
<script src="modules/ocean-layers.js?v=1.91.02"></script>
<script src="modules/river-generator.js?v=1.89.13"></script>
<script src="modules/lakes.js"></script>
<script src="modules/biomes.js"></script>
<script src="modules/names-generator.js?v=1.87.14"></script>
<script src="modules/cultures-generator.js?v=1.89.10"></script>
<script src="modules/burgs-and-states.js?v=1.89.07"></script>
<script src="modules/renderers/state-labels.js"></script>
<script src="modules/burgs-and-states.js?v=1.92.00"></script>
<script src="modules/routes-generator.js"></script>
<script src="modules/religions-generator.js?v=1.89.28"></script>
<script src="modules/religions-generator.js?v=1.89.36"></script>
<script src="modules/military-generator.js"></script>
<script src="modules/markers-generator.js?v=1.89.34"></script>
<script src="modules/coa-generator.js"></script>
<script src="modules/submap.js?v=1.88.05"></script>
<script src="modules/markers-generator.js?v=1.93.04"></script>
<script src="modules/coa-generator.js?v=1.91.00"></script>
<script src="modules/submap.js?v=1.91.05"></script>
<script src="libs/polylabel.min.js"></script>
<script src="libs/lineclip.min.js"></script>
<script src="libs/alea.min.js"></script>
@ -7881,26 +7992,26 @@
<script src="modules/ui/measurers.js?v=1.87.02"></script>
<script src="modules/ui/stylePresets.js?v=1.89.11"></script>
<script src="modules/ui/general.js?v=1.87.03"></script>
<script src="modules/ui/options.js?v=1.89.19"></script>
<script src="main.js?v=1.89.32"></script>
<script src="modules/ui/general.js?v=1.93.04"></script>
<script src="modules/ui/options.js?v=1.93.03"></script>
<script src="main.js?v=1.93.02"></script>
<script defer src="modules/relief-icons.js"></script>
<script defer src="modules/ui/style.js"></script>
<script defer src="modules/ui/editors.js?v=1.89.35"></script>
<script defer src="modules/ui/tools.js?v=1.89.27"></script>
<script defer src="modules/ui/world-configurator.js"></script>
<script defer src="modules/ui/heightmap-editor.js?v=1.89.06"></script>
<script defer src="modules/ui/provinces-editor.js?v=1.89.00"></script>
<script defer src="modules/ui/biomes-editor.js"></script>
<script defer src="modules/ui/editors.js?v=1.92.00"></script>
<script defer src="modules/ui/tools.js?v=1.92.00"></script>
<script defer src="modules/ui/world-configurator.js?v=1.91.05"></script>
<script defer src="modules/ui/heightmap-editor.js?v=1.93.00"></script>
<script defer src="modules/ui/provinces-editor.js?v=1.92.00"></script>
<script defer src="modules/ui/biomes-editor.js?v=1.91.05"></script>
<script defer src="modules/ui/namesbase-editor.js?v=1.89.26"></script>
<script defer src="modules/ui/elevation-profile.js"></script>
<script defer src="modules/ui/temperature-graph.js"></script>
<script defer src="modules/ui/temperature-graph.js?v=1.90.03"></script>
<script defer src="modules/ui/routes-editor.js?v=1.89.04"></script>
<script defer src="modules/ui/ice-editor.js?v=1.89.08"></script>
<script defer src="modules/ui/lakes-editor.js?v=1.87.10"></script>
<script defer src="modules/ui/coastline-editor.js"></script>
<script defer src="modules/ui/labels-editor.js"></script>
<script defer src="modules/ui/labels-editor.js?v=1.92.00"></script>
<script defer src="modules/ui/rivers-editor.js"></script>
<script defer src="modules/ui/rivers-creator.js?v=1.89.13"></script>
<script defer src="modules/ui/relief-editor.js"></script>
@ -7913,22 +8024,21 @@
<script defer src="modules/ui/rivers-overview.js"></script>
<script defer src="modules/ui/military-overview.js"></script>
<script defer src="modules/ui/regiments-overview.js?v=1.89.20"></script>
<script defer src="modules/ui/markers-overview.js?v=1.89.20"></script>
<script defer src="modules/ui/markers-overview.js?v=1.89.38"></script>
<script defer src="modules/ui/regiment-editor.js"></script>
<script defer src="modules/ui/battle-screen.js"></script>
<script defer src="modules/ui/emblems-editor.js?v=1.89.21"></script>
<script defer src="modules/ui/emblems-editor.js?v=1.91.00"></script>
<script defer src="modules/ui/markers-editor.js"></script>
<script defer src="modules/ui/3d.js"></script>
<script defer src="modules/ui/submap.js"></script>
<script defer src="modules/ui/hotkeys.js?v=1.88.00"></script>
<script defer src="modules/coa-renderer.js?v=1.87.08"></script>
<script defer src="modules/ui/3d.js?v=1.89.36"></script>
<script defer src="modules/ui/submap.js?v=1.92.00"></script>
<script defer src="modules/ui/hotkeys.js?v=1.93.00"></script>
<script defer src="modules/coa-renderer.js?v=1.91.00"></script>
<script defer src="libs/rgbquant.min.js"></script>
<script defer src="libs/jquery.ui.touch-punch.min.js"></script>
<script defer src="modules/io/save.js?v=1.89.29"></script>
<script defer src="modules/io/load.js?v=1.89.30"></script>
<script defer src="modules/io/save.js?v=1.93.02"></script>
<script defer src="modules/io/load.js?v=1.93.02"></script>
<script defer src="modules/io/cloud.js"></script>
<script defer src="modules/io/export.js?v=1.89.17"></script>
<script defer src="modules/io/export.js?v=1.89.36"></script>
<script defer src="modules/io/formats.js"></script>
<!-- Web Components -->