@onimaxxing/sussy-seeds-mcp 0.9.2 → 0.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +495 -51
- package/dist/oni_roll_wasm_bg.wasm +0 -0
- package/package.json +5 -4
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
7
7
|
// package.json
|
|
8
8
|
var package_default = {
|
|
9
9
|
name: "@onimaxxing/sussy-seeds-mcp",
|
|
10
|
-
version: "0.9.
|
|
10
|
+
version: "0.9.4",
|
|
11
11
|
description: "MCP server for Oxygen Not Included seed hunting. Runs the sussy-seeds wasm scanner over stdio; the LLM composes Builder AST specs and drives cluster / summary / map-tier scans against the game's real worldgen.",
|
|
12
12
|
keywords: [
|
|
13
13
|
"claude",
|
|
@@ -54,17 +54,18 @@ var package_default = {
|
|
|
54
54
|
},
|
|
55
55
|
dependencies: {
|
|
56
56
|
"@modelcontextprotocol/sdk": "1.26.0",
|
|
57
|
-
"@onimaxxing/worldgen-node": "0.33.
|
|
57
|
+
"@onimaxxing/worldgen-node": "0.33.3",
|
|
58
58
|
zod: "^3.25.0"
|
|
59
59
|
},
|
|
60
60
|
devDependencies: {
|
|
61
61
|
"@onimaxxing/coord-codec": "workspace:*",
|
|
62
|
+
"@onimaxxing/geyser-roll": "workspace:*",
|
|
62
63
|
"@onimaxxing/i18n": "workspace:*",
|
|
63
64
|
"@onimaxxing/knowledge-graph": "workspace:*",
|
|
64
65
|
"@onimaxxing/prefab-kind": "workspace:*",
|
|
65
|
-
"@onimaxxing/worldgen": "0.33.
|
|
66
|
+
"@onimaxxing/worldgen": "0.33.3",
|
|
66
67
|
"@onimaxxing/worldmaxxing-registry": "workspace:*",
|
|
67
|
-
"@tigin-backwards/oxygen-not-included-gambling": "0.6.
|
|
68
|
+
"@tigin-backwards/oxygen-not-included-gambling": "0.6.5",
|
|
68
69
|
"@tigin-backwards/oxygen-not-included-mod-extensions": "0.13.0",
|
|
69
70
|
"@types/node": "^24.10.1",
|
|
70
71
|
oxfmt: "0.53.0",
|
|
@@ -26418,6 +26419,31 @@ function worldName(worldPath) {
|
|
|
26418
26419
|
const tail = worldPath.split("/").pop() ?? worldPath;
|
|
26419
26420
|
return fallback(tail);
|
|
26420
26421
|
}
|
|
26422
|
+
var SPACEDEST_PARENTS = ["ASTEROIDS", "DWARFPLANETS", "GIANTS", "PLANETS", "DEBRIS"];
|
|
26423
|
+
var SPACEDEST_ID_ALIASES = {
|
|
26424
|
+
OilyAsteriod: "OilyAsteroid",
|
|
26425
|
+
HeliumGiant: "HydrogenGiant",
|
|
26426
|
+
DustyMoon: "DustyDwarf",
|
|
26427
|
+
DLC5AquaticSpaceDestination: "DLC5AquaticSpaceDescription"
|
|
26428
|
+
};
|
|
26429
|
+
var SPACEDEST_TYPENAME_FALLBACK = {
|
|
26430
|
+
Earth: "Shattered Planet"
|
|
26431
|
+
};
|
|
26432
|
+
function spaceDestinationName(id) {
|
|
26433
|
+
if (id === null || id === void 0 || id === "") return "";
|
|
26434
|
+
const resolved = SPACEDEST_ID_ALIASES[id] ?? id;
|
|
26435
|
+
const upper = resolved.toUpperCase();
|
|
26436
|
+
const direct = lookup(`UI.SPACEDESTINATIONS.${upper}.NAME`);
|
|
26437
|
+
if (direct) return direct;
|
|
26438
|
+
for (const parent of SPACEDEST_PARENTS) {
|
|
26439
|
+
const hit = lookup(`UI.SPACEDESTINATIONS.${parent}.${upper}.NAME`);
|
|
26440
|
+
if (hit) return hit;
|
|
26441
|
+
}
|
|
26442
|
+
const typeNameFallback = SPACEDEST_TYPENAME_FALLBACK[id];
|
|
26443
|
+
if (typeNameFallback) return typeNameFallback;
|
|
26444
|
+
console.error(`[@onimaxxing/i18n] no UI.SPACEDESTINATIONS.* match for '${id}'`);
|
|
26445
|
+
return id;
|
|
26446
|
+
}
|
|
26421
26447
|
function biomeName(subworldPath) {
|
|
26422
26448
|
if (subworldPath === null || subworldPath === void 0 || subworldPath === "") return "";
|
|
26423
26449
|
const tail = subworldPath.split("/").pop() ?? subworldPath;
|
|
@@ -35095,7 +35121,7 @@ var jsYaml = {
|
|
|
35095
35121
|
safeDump
|
|
35096
35122
|
};
|
|
35097
35123
|
|
|
35098
|
-
// ../../node_modules/.pnpm/@onimaxxing+worldgen@0.33.
|
|
35124
|
+
// ../../node_modules/.pnpm/@onimaxxing+worldgen@0.33.3/node_modules/@onimaxxing/worldgen/yaml.js
|
|
35099
35125
|
var KleiBool = new jsYaml.Type("tag:yaml.org,2002:bool", {
|
|
35100
35126
|
kind: "scalar",
|
|
35101
35127
|
// Single-letter `y`/`n` are intentionally EXCLUDED: many files
|
|
@@ -463746,6 +463772,13 @@ function translateCgmPreset(engine, presetJson) {
|
|
|
463746
463772
|
// src/worldgen.ts
|
|
463747
463773
|
import { createRequire } from "module";
|
|
463748
463774
|
|
|
463775
|
+
// ../knowledge-graph/dist/tables/geysers.json
|
|
463776
|
+
var geysers_default = [{ DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "Magma", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "big_volcano", idHash: "0xA115A2F3", maxIterationLength: 12e3, maxIterationPercent: 0.009999999776482582, maxPressure: 150, maxRatePerCycle: 1600, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 6e3, minIterationPercent: 0.004999999888241291, minRatePerCycle: 800, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Molten", temperature: 2e3 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "ChlorineGas", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "chlorine_gas", idHash: "0x58719BD0", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 5, maxRatePerCycle: 140, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 70, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Gas", temperature: 333.1499938964844 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "ChlorineGas", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "chlorine_gas_cool", idHash: "0xE1B0F818", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 5, maxRatePerCycle: 140, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 70, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Gas", temperature: 278.1499938964844 }, { DlcID: null, diseaseInfo: { count: 2e4, idx: 0 }, element: "DirtyWater", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "filthy_water", idHash: "0xE7593594", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 500, maxRatePerCycle: 4e3, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 2e3, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Liquid", temperature: 303.1499938964844 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "CarbonDioxide", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "hot_co2", idHash: "0xDB00AC74", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 5, maxRatePerCycle: 140, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 70, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Gas", temperature: 773.1500244140625 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "Hydrogen", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "hot_hydrogen", idHash: "0x42F75412", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 5, maxRatePerCycle: 140, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 70, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Gas", temperature: 773.1500244140625 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "ContaminatedOxygen", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "hot_po2", idHash: "0xE1677601", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 5, maxRatePerCycle: 140, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 70, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Gas", temperature: 773.1500244140625 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "Steam", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "hot_steam", idHash: "0x876FE53E", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 5, maxRatePerCycle: 1e3, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 500, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Gas", temperature: 773.1500244140625 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "Water", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "hot_water", idHash: "0x2A86CCA5", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 500, maxRatePerCycle: 4e3, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 2e3, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Liquid", temperature: 368.1499938964844 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "LiquidCarbonDioxide", forbiddenDlcIds: null, geyserTemperature: 218, id: "liquid_co2", idHash: "0x5856E7C3", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 50, maxRatePerCycle: 200, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 100, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Liquid", temperature: 218 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "LiquidSulfur", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "liquid_sulfur", idHash: "0x96C23E5C", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 500, maxRatePerCycle: 2e3, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 1e3, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: ["EXPANSION1_ID"], shape: "Liquid", temperature: 438.3499755859375 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "Methane", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "methane", idHash: "0xCDDBC02C", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 5, maxRatePerCycle: 140, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 70, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Gas", temperature: 423.1499938964844 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "MoltenAluminum", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "molten_aluminum", idHash: "0xC645C58C", maxIterationLength: 1080, maxIterationPercent: 0.10000000149011612, maxPressure: 150, maxRatePerCycle: 400, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 480, minIterationPercent: 0.01666666753590107, minRatePerCycle: 200, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: ["EXPANSION1_ID"], shape: "Molten", temperature: 2e3 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "MoltenCobalt", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "molten_cobalt", idHash: "0x43D33A5F", maxIterationLength: 1080, maxIterationPercent: 0.10000000149011612, maxPressure: 150, maxRatePerCycle: 400, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 480, minIterationPercent: 0.01666666753590107, minRatePerCycle: 200, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: ["EXPANSION1_ID"], shape: "Molten", temperature: 2500 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "MoltenCopper", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "molten_copper", idHash: "0xD68E8BA5", maxIterationLength: 1080, maxIterationPercent: 0.10000000149011612, maxPressure: 150, maxRatePerCycle: 400, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 480, minIterationPercent: 0.01666666753590107, minRatePerCycle: 200, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Molten", temperature: 2500 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "MoltenGold", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "molten_gold", idHash: "0xB09A604C", maxIterationLength: 1080, maxIterationPercent: 0.10000000149011612, maxPressure: 150, maxRatePerCycle: 400, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 480, minIterationPercent: 0.01666666753590107, minRatePerCycle: 200, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Molten", temperature: 2900 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "MoltenIron", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "molten_iron", idHash: "0xF253114", maxIterationLength: 1080, maxIterationPercent: 0.10000000149011612, maxPressure: 150, maxRatePerCycle: 400, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 480, minIterationPercent: 0.01666666753590107, minRatePerCycle: 200, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Molten", temperature: 2800 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "MoltenNiobium", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "molten_niobium", idHash: "0x3A36CB67", maxIterationLength: 12e3, maxIterationPercent: 0.009999999776482582, maxPressure: 150, maxRatePerCycle: 1600, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 6e3, minIterationPercent: 0.004999999888241291, minRatePerCycle: 800, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Molten", temperature: 3500 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "MoltenNiobium", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "molten_niobium", idHash: "0x3A36CB67", maxIterationLength: 12e3, maxIterationPercent: 0.009999999776482582, maxPressure: 150, maxRatePerCycle: 1600, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 6e3, minIterationPercent: 0.004999999888241291, minRatePerCycle: 800, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: ["EXPANSION1_ID"], shape: "Molten", temperature: 3500 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "MoltenTungsten", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "molten_tungsten", idHash: "0x97FF710", maxIterationLength: 1080, maxIterationPercent: 0.10000000149011612, maxPressure: 150, maxRatePerCycle: 400, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 480, minIterationPercent: 0.01666666753590107, minRatePerCycle: 200, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: ["EXPANSION1_ID"], shape: "Molten", temperature: 4e3 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "MurkyBrine", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "murky_brine", idHash: "0x46FCCA29", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 500, maxRatePerCycle: 4e3, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 2e3, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: ["DLC5_ID"], shape: "Liquid", temperature: 368.1499938964844 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "CrudeOil", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "oil_drip", idHash: "0x80EDB902", maxIterationLength: 600, maxIterationPercent: 1, maxPressure: 50, maxRatePerCycle: 250, maxYearLength: 500, maxYearPercent: 0.800000011920929, minIterationLength: 600, minIterationPercent: 1, minRatePerCycle: 1, minYearLength: 100, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Liquid", temperature: 600 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "SaltWater", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "salt_water", idHash: "0x2596C7AE", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 500, maxRatePerCycle: 4e3, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 2e3, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Liquid", temperature: 368.1499938964844 }, { DlcID: null, diseaseInfo: { count: 5e3, idx: 1 }, element: "ContaminatedOxygen", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "slimy_po2", idHash: "0x7EDED410", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 5, maxRatePerCycle: 140, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 70, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Gas", temperature: 333.1499938964844 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "Brine", forbiddenDlcIds: null, geyserTemperature: 263, id: "slush_salt_water", idHash: "0x7650909C", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 500, maxRatePerCycle: 2e3, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 1e3, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Liquid", temperature: 263.1499938964844 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "DirtyWater", forbiddenDlcIds: null, geyserTemperature: 263, id: "slush_water", idHash: "0x4C574F29", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 500, maxRatePerCycle: 2e3, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 1e3, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Liquid", temperature: 263.1499938964844 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "Magma", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "small_volcano", idHash: "0xE3E454FA", maxIterationLength: 12e3, maxIterationPercent: 0.009999999776482582, maxPressure: 150, maxRatePerCycle: 800, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 6e3, minIterationPercent: 0.004999999888241291, minRatePerCycle: 400, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Molten", temperature: 2e3 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "Steam", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "steam", idHash: "0xCA627A30", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 5, maxRatePerCycle: 2e3, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 1e3, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Gas", temperature: 383.1499938964844 }];
|
|
463777
|
+
|
|
463778
|
+
// ../knowledge-graph/src/tables/geysers.ts
|
|
463779
|
+
var geysers = geysers_default;
|
|
463780
|
+
var geysers_default2 = geysers;
|
|
463781
|
+
|
|
463749
463782
|
// ../knowledge-graph/dist/tables/biome-elements.json
|
|
463750
463783
|
var biome_elements_default = [
|
|
463751
463784
|
{
|
|
@@ -528355,9 +528388,30 @@ function buildOracle(inputs) {
|
|
|
528355
528388
|
clusterTags: CLUSTER_TAGS_BY_PREFIX.get(inputs.mixing.clusterPrefix) ?? [],
|
|
528356
528389
|
stockCluster: CLUSTER_TAGS_BY_PREFIX.has(inputs.mixing.clusterPrefix)
|
|
528357
528390
|
} : void 0,
|
|
528391
|
+
baseGame: isBaseGameClusterPrefix(inputs.clusterPrefix),
|
|
528358
528392
|
cache: /* @__PURE__ */ new Map()
|
|
528359
528393
|
};
|
|
528360
528394
|
}
|
|
528395
|
+
var BASE_GAME_CLUSTER_PREFIXES = (() => {
|
|
528396
|
+
const spacedOut = /* @__PURE__ */ new Map();
|
|
528397
|
+
for (const c of clusters_default2) {
|
|
528398
|
+
const so = (c.requiredDlcIds ?? []).includes("EXPANSION1_ID");
|
|
528399
|
+
spacedOut.set(c.coordinatePrefix, (spacedOut.get(c.coordinatePrefix) ?? false) || so);
|
|
528400
|
+
}
|
|
528401
|
+
return new Set([...spacedOut].filter(([, so]) => !so).map(([prefix]) => prefix));
|
|
528402
|
+
})();
|
|
528403
|
+
function isBaseGameClusterPrefix(prefix) {
|
|
528404
|
+
return prefix != null && BASE_GAME_CLUSTER_PREFIXES.has(prefix);
|
|
528405
|
+
}
|
|
528406
|
+
var SPACED_OUT_GEYSER_IDS = new Set(
|
|
528407
|
+
geysers_default2.filter((g) => g.requiredDlcIds?.includes("EXPANSION1_ID")).map((g) => g.id)
|
|
528408
|
+
);
|
|
528409
|
+
var BASE_GAME_GENERIC_GEYSER_POOL_IDS = GENERIC_GEYSER_POOL_IDS.filter(
|
|
528410
|
+
(id) => !SPACED_OUT_GEYSER_IDS.has(id)
|
|
528411
|
+
);
|
|
528412
|
+
function genericGeyserPool() {
|
|
528413
|
+
return activeOracle.baseGame ? BASE_GAME_GENERIC_GEYSER_POOL_IDS : GENERIC_GEYSER_POOL_IDS;
|
|
528414
|
+
}
|
|
528361
528415
|
var STOCK_ORACLE = buildOracle({});
|
|
528362
528416
|
var activeOracle = STOCK_ORACLE;
|
|
528363
528417
|
function withOracle(oracle, fn) {
|
|
@@ -528473,7 +528527,7 @@ function harvestSubworld(subName) {
|
|
|
528473
528527
|
for (const r of sub.subworldTemplateRules ?? []) {
|
|
528474
528528
|
for (const n of r.names ?? []) {
|
|
528475
528529
|
if (isGenericGeyserPoolRef(n)) {
|
|
528476
|
-
for (const g of
|
|
528530
|
+
for (const g of genericGeyserPool()) geysers2.add(g);
|
|
528477
528531
|
continue;
|
|
528478
528532
|
}
|
|
528479
528533
|
if (isOilWellTemplateRef(n)) {
|
|
@@ -528498,7 +528552,7 @@ function harvestSubworld(subName) {
|
|
|
528498
528552
|
for (const r of subExtras.templateRules ?? []) {
|
|
528499
528553
|
for (const n of r.names ?? []) {
|
|
528500
528554
|
if (isGenericGeyserPoolRef(n)) {
|
|
528501
|
-
for (const g of
|
|
528555
|
+
for (const g of genericGeyserPool()) geysers2.add(g);
|
|
528502
528556
|
continue;
|
|
528503
528557
|
}
|
|
528504
528558
|
if (isOilWellTemplateRef(n)) {
|
|
@@ -528524,7 +528578,7 @@ function harvestWorldTemplateGeysers(world) {
|
|
|
528524
528578
|
for (const r of worldExtras(world).worldTemplateRules ?? []) {
|
|
528525
528579
|
for (const n of r.names ?? []) {
|
|
528526
528580
|
if (isGenericGeyserPoolRef(n)) {
|
|
528527
|
-
for (const g of
|
|
528581
|
+
for (const g of genericGeyserPool()) out.add(g);
|
|
528528
528582
|
continue;
|
|
528529
528583
|
}
|
|
528530
528584
|
if (isOilWellTemplateRef(n)) {
|
|
@@ -528550,7 +528604,7 @@ function harvestTraitGeysers(traitId) {
|
|
|
528550
528604
|
}
|
|
528551
528605
|
for (const tplRef of row.templates) {
|
|
528552
528606
|
if (isGenericGeyserPoolRef(tplRef)) {
|
|
528553
|
-
for (const g of
|
|
528607
|
+
for (const g of genericGeyserPool()) out.add(g);
|
|
528554
528608
|
continue;
|
|
528555
528609
|
}
|
|
528556
528610
|
if (isOilWellTemplateRef(tplRef)) {
|
|
@@ -528734,7 +528788,7 @@ function computeAdmissibility(worldPath) {
|
|
|
528734
528788
|
for (const r of extras ?? []) {
|
|
528735
528789
|
for (const n of r.names ?? []) {
|
|
528736
528790
|
if (isGenericGeyserPoolRef(n)) {
|
|
528737
|
-
for (const g of
|
|
528791
|
+
for (const g of genericGeyserPool()) if (!geysers2.has(g)) mixG.add(g);
|
|
528738
528792
|
continue;
|
|
528739
528793
|
}
|
|
528740
528794
|
if (isOilWellTemplateRef(n)) {
|
|
@@ -528812,7 +528866,7 @@ function computeAdmissibility(worldPath) {
|
|
|
528812
528866
|
for (const r of raw.additionalWorldTemplateRules ?? []) {
|
|
528813
528867
|
for (const n of r.names ?? []) {
|
|
528814
528868
|
if (isGenericGeyserPoolRef(n)) {
|
|
528815
|
-
for (const g of
|
|
528869
|
+
for (const g of genericGeyserPool()) geysers2.add(g);
|
|
528816
528870
|
continue;
|
|
528817
528871
|
}
|
|
528818
528872
|
if (isOilWellTemplateRef(n)) {
|
|
@@ -529142,16 +529196,20 @@ var ORACLE_CACHE_CAP = 4;
|
|
|
529142
529196
|
async function oracleForCoord(coord) {
|
|
529143
529197
|
const { source, files, key: snapshotKey, overlaysActive } = await ensureSnapshotForCoord(coord);
|
|
529144
529198
|
const modContent = source.kind !== "stock" || overlaysActive;
|
|
529145
|
-
const
|
|
529146
|
-
|
|
529147
|
-
const
|
|
529199
|
+
const clusterPrefix = clusterPrefixForCoord(coord);
|
|
529200
|
+
const mixing = oracleMixingForCoord(coord, clusterPrefix);
|
|
529201
|
+
const baseGame = isBaseGameClusterPrefix(clusterPrefix);
|
|
529202
|
+
if (files === null && !modContent && !mixing && !baseGame) {
|
|
529203
|
+
return { oracle: STOCK_ORACLE, source };
|
|
529204
|
+
}
|
|
529205
|
+
const key = `${snapshotKey}|mc:${modContent}|mx:${mixing?.key ?? ""}|bg:${baseGame}`;
|
|
529148
529206
|
let oracle = ORACLE_CACHE.get(key);
|
|
529149
529207
|
if (oracle) {
|
|
529150
529208
|
ORACLE_CACHE.delete(key);
|
|
529151
529209
|
ORACLE_CACHE.set(key, oracle);
|
|
529152
529210
|
}
|
|
529153
529211
|
if (!oracle) {
|
|
529154
|
-
oracle = buildOracle({ snapshotFiles: files, modContent, mixing });
|
|
529212
|
+
oracle = buildOracle({ snapshotFiles: files, modContent, mixing, clusterPrefix });
|
|
529155
529213
|
ORACLE_CACHE.set(key, oracle);
|
|
529156
529214
|
if (ORACLE_CACHE.size > ORACLE_CACHE_CAP) {
|
|
529157
529215
|
const oldest = ORACLE_CACHE.keys().next().value;
|
|
@@ -530123,6 +530181,7 @@ var CONSTRAINT_KIND_META = {
|
|
|
530123
530181
|
"world.distToHome": { tier: "bytecode-capable", scope: "world" },
|
|
530124
530182
|
"world.distTo": { tier: "bytecode-capable", scope: "world-pair" },
|
|
530125
530183
|
"poi.count": { tier: "bytecode-capable", scope: "cluster" },
|
|
530184
|
+
"destination.count": { tier: "bytecode-capable", scope: "cluster" },
|
|
530126
530185
|
"world.traitCount": { tier: "bytecode-capable", scope: "world" },
|
|
530127
530186
|
"world.asteroidRemix": { tier: "bytecode-capable", scope: "world" },
|
|
530128
530187
|
// Partial-worldgen tier (JS + await worldgenPartial(...)): the
|
|
@@ -530132,6 +530191,7 @@ var CONSTRAINT_KIND_META = {
|
|
|
530132
530191
|
// for the near-start distance, OilWell reservoirs).
|
|
530133
530192
|
"world.geyser": { tier: "partial-worldgen", scope: "world" },
|
|
530134
530193
|
"world.oilWells": { tier: "partial-worldgen", scope: "world" },
|
|
530194
|
+
"world.geyserGodRoll": { tier: "partial-worldgen", scope: "world" },
|
|
530135
530195
|
"home.geyserNearStart": { tier: "partial-worldgen", scope: "home" },
|
|
530136
530196
|
// Template stamps are part of the partial contract's guaranteed
|
|
530137
530197
|
// payload (everything but story traits places, bit-identical), and
|
|
@@ -530185,13 +530245,6 @@ function constraintBytecodeCapable(kind) {
|
|
|
530185
530245
|
return CONSTRAINT_KIND_META[kind].tier === "bytecode-capable";
|
|
530186
530246
|
}
|
|
530187
530247
|
|
|
530188
|
-
// ../knowledge-graph/dist/tables/geysers.json
|
|
530189
|
-
var geysers_default = [{ DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "Magma", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "big_volcano", idHash: "0xA115A2F3", maxIterationLength: 12e3, maxIterationPercent: 0.009999999776482582, maxPressure: 150, maxRatePerCycle: 1600, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 6e3, minIterationPercent: 0.004999999888241291, minRatePerCycle: 800, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Molten", temperature: 2e3 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "ChlorineGas", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "chlorine_gas", idHash: "0x58719BD0", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 5, maxRatePerCycle: 140, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 70, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Gas", temperature: 333.1499938964844 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "ChlorineGas", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "chlorine_gas_cool", idHash: "0xE1B0F818", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 5, maxRatePerCycle: 140, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 70, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Gas", temperature: 278.1499938964844 }, { DlcID: null, diseaseInfo: { count: 2e4, idx: 0 }, element: "DirtyWater", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "filthy_water", idHash: "0xE7593594", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 500, maxRatePerCycle: 4e3, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 2e3, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Liquid", temperature: 303.1499938964844 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "CarbonDioxide", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "hot_co2", idHash: "0xDB00AC74", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 5, maxRatePerCycle: 140, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 70, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Gas", temperature: 773.1500244140625 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "Hydrogen", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "hot_hydrogen", idHash: "0x42F75412", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 5, maxRatePerCycle: 140, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 70, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Gas", temperature: 773.1500244140625 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "ContaminatedOxygen", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "hot_po2", idHash: "0xE1677601", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 5, maxRatePerCycle: 140, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 70, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Gas", temperature: 773.1500244140625 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "Steam", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "hot_steam", idHash: "0x876FE53E", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 5, maxRatePerCycle: 1e3, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 500, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Gas", temperature: 773.1500244140625 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "Water", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "hot_water", idHash: "0x2A86CCA5", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 500, maxRatePerCycle: 4e3, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 2e3, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Liquid", temperature: 368.1499938964844 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "LiquidCarbonDioxide", forbiddenDlcIds: null, geyserTemperature: 218, id: "liquid_co2", idHash: "0x5856E7C3", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 50, maxRatePerCycle: 200, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 100, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Liquid", temperature: 218 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "LiquidSulfur", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "liquid_sulfur", idHash: "0x96C23E5C", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 500, maxRatePerCycle: 2e3, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 1e3, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: ["EXPANSION1_ID"], shape: "Liquid", temperature: 438.3499755859375 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "Methane", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "methane", idHash: "0xCDDBC02C", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 5, maxRatePerCycle: 140, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 70, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Gas", temperature: 423.1499938964844 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "MoltenAluminum", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "molten_aluminum", idHash: "0xC645C58C", maxIterationLength: 1080, maxIterationPercent: 0.10000000149011612, maxPressure: 150, maxRatePerCycle: 400, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 480, minIterationPercent: 0.01666666753590107, minRatePerCycle: 200, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: ["EXPANSION1_ID"], shape: "Molten", temperature: 2e3 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "MoltenCobalt", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "molten_cobalt", idHash: "0x43D33A5F", maxIterationLength: 1080, maxIterationPercent: 0.10000000149011612, maxPressure: 150, maxRatePerCycle: 400, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 480, minIterationPercent: 0.01666666753590107, minRatePerCycle: 200, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: ["EXPANSION1_ID"], shape: "Molten", temperature: 2500 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "MoltenCopper", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "molten_copper", idHash: "0xD68E8BA5", maxIterationLength: 1080, maxIterationPercent: 0.10000000149011612, maxPressure: 150, maxRatePerCycle: 400, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 480, minIterationPercent: 0.01666666753590107, minRatePerCycle: 200, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Molten", temperature: 2500 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "MoltenGold", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "molten_gold", idHash: "0xB09A604C", maxIterationLength: 1080, maxIterationPercent: 0.10000000149011612, maxPressure: 150, maxRatePerCycle: 400, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 480, minIterationPercent: 0.01666666753590107, minRatePerCycle: 200, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Molten", temperature: 2900 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "MoltenIron", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "molten_iron", idHash: "0xF253114", maxIterationLength: 1080, maxIterationPercent: 0.10000000149011612, maxPressure: 150, maxRatePerCycle: 400, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 480, minIterationPercent: 0.01666666753590107, minRatePerCycle: 200, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Molten", temperature: 2800 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "MoltenNiobium", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "molten_niobium", idHash: "0x3A36CB67", maxIterationLength: 12e3, maxIterationPercent: 0.009999999776482582, maxPressure: 150, maxRatePerCycle: 1600, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 6e3, minIterationPercent: 0.004999999888241291, minRatePerCycle: 800, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Molten", temperature: 3500 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "MoltenNiobium", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "molten_niobium", idHash: "0x3A36CB67", maxIterationLength: 12e3, maxIterationPercent: 0.009999999776482582, maxPressure: 150, maxRatePerCycle: 1600, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 6e3, minIterationPercent: 0.004999999888241291, minRatePerCycle: 800, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: ["EXPANSION1_ID"], shape: "Molten", temperature: 3500 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "MoltenTungsten", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "molten_tungsten", idHash: "0x97FF710", maxIterationLength: 1080, maxIterationPercent: 0.10000000149011612, maxPressure: 150, maxRatePerCycle: 400, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 480, minIterationPercent: 0.01666666753590107, minRatePerCycle: 200, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: ["EXPANSION1_ID"], shape: "Molten", temperature: 4e3 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "MurkyBrine", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "murky_brine", idHash: "0x46FCCA29", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 500, maxRatePerCycle: 4e3, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 2e3, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: ["DLC5_ID"], shape: "Liquid", temperature: 368.1499938964844 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "CrudeOil", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "oil_drip", idHash: "0x80EDB902", maxIterationLength: 600, maxIterationPercent: 1, maxPressure: 50, maxRatePerCycle: 250, maxYearLength: 500, maxYearPercent: 0.800000011920929, minIterationLength: 600, minIterationPercent: 1, minRatePerCycle: 1, minYearLength: 100, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Liquid", temperature: 600 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "SaltWater", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "salt_water", idHash: "0x2596C7AE", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 500, maxRatePerCycle: 4e3, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 2e3, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Liquid", temperature: 368.1499938964844 }, { DlcID: null, diseaseInfo: { count: 5e3, idx: 1 }, element: "ContaminatedOxygen", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "slimy_po2", idHash: "0x7EDED410", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 5, maxRatePerCycle: 140, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 70, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Gas", temperature: 333.1499938964844 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "Brine", forbiddenDlcIds: null, geyserTemperature: 263, id: "slush_salt_water", idHash: "0x7650909C", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 500, maxRatePerCycle: 2e3, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 1e3, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Liquid", temperature: 263.1499938964844 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "DirtyWater", forbiddenDlcIds: null, geyserTemperature: 263, id: "slush_water", idHash: "0x4C574F29", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 500, maxRatePerCycle: 2e3, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 1e3, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Liquid", temperature: 263.1499938964844 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "Magma", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "small_volcano", idHash: "0xE3E454FA", maxIterationLength: 12e3, maxIterationPercent: 0.009999999776482582, maxPressure: 150, maxRatePerCycle: 800, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 6e3, minIterationPercent: 0.004999999888241291, minRatePerCycle: 400, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Molten", temperature: 2e3 }, { DlcID: null, diseaseInfo: { count: 0, idx: 255 }, element: "Steam", forbiddenDlcIds: null, geyserTemperature: 372.1499938964844, id: "steam", idHash: "0xCA627A30", maxIterationLength: 1140, maxIterationPercent: 0.8999999761581421, maxPressure: 5, maxRatePerCycle: 2e3, maxYearLength: 135e3, maxYearPercent: 0.800000011920929, minIterationLength: 60, minIterationPercent: 0.10000000149011612, minRatePerCycle: 1e3, minYearLength: 15e3, minYearPercent: 0.4000000059604645, requiredDlcIds: null, shape: "Gas", temperature: 383.1499938964844 }];
|
|
530190
|
-
|
|
530191
|
-
// ../knowledge-graph/src/tables/geysers.ts
|
|
530192
|
-
var geysers = geysers_default;
|
|
530193
|
-
var geysers_default2 = geysers;
|
|
530194
|
-
|
|
530195
530248
|
// ../knowledge-graph/dist/tables/space-poi-config.json
|
|
530196
530249
|
var space_poi_config_default = [{ anim: "cloud", canProvideArtifacts: true, capacityMax: 45e3, capacityMin: 3e4, forbiddenDlcIds: [], id: "CarbonAsteroidField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "Carbon", weight: 5.5 }, { element: "RefinedCarbon", weight: 1.5 }] }, { anim: "chlorine_cloud", canProvideArtifacts: true, capacityMax: 81e3, capacityMin: 54e3, forbiddenDlcIds: [], id: "ChlorineCloud", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "BleachStone", weight: 7.5 }, { element: "Chlorine", weight: 2.5 }] }, { anim: "ceres_debris_field", canProvideArtifacts: true, capacityMax: 25e3, capacityMin: 15e3, forbiddenDlcIds: [], id: "DLC2CeresField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID", "DLC2_ID"], weights: [{ element: "Cinnabar", weight: 4.5 }, { element: "Ice", weight: 2.5 }, { element: "Mercury", weight: 2.5 }] }, { anim: "ceres_starting_field", canProvideArtifacts: true, capacityMax: 25e3, capacityMin: 15e3, forbiddenDlcIds: [], id: "DLC2CeresOreField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID", "DLC2_ID"], weights: [{ element: "Cinnabar", weight: 2.5 }, { element: "Ice", weight: 3.5 }, { element: "Mercury", weight: 2.5 }] }, { anim: "prehistoric_impactor_1", canProvideArtifacts: false, capacityMax: 45e3, capacityMin: 35e3, forbiddenDlcIds: [], id: "DLC4ImpactorDebrisField1", initialDataBanks: 50, rechargeMax: 3e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID", "DLC4_ID"], weights: [{ element: "Gold", weight: 2.0999999046325684 }, { element: "Granite", weight: 3.9000000953674316 }, { element: "Iridium", weight: 1.7000000476837158 }, { element: "MaficRock", weight: 2.299999952316284 }] }, { anim: "prehistoric_impactor_2", canProvideArtifacts: false, capacityMax: 66800, capacityMin: 33400, forbiddenDlcIds: [], id: "DLC4ImpactorDebrisField2", initialDataBanks: 50, rechargeMax: 3e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID", "DLC4_ID"], weights: [{ element: "Isoresin", weight: 1.7999999523162842 }, { element: "LiquidSulfur", weight: 4.699999809265137 }, { element: "Petroleum", weight: 3.5 }] }, { anim: "prehistoric_impactor_3", canProvideArtifacts: false, capacityMax: 137500, capacityMin: 11e4, forbiddenDlcIds: [], id: "DLC4ImpactorDebrisField3", initialDataBanks: 50, rechargeMax: 3e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID", "DLC4_ID"], weights: [{ element: "LiquidHydrogen", weight: 0.6000000238418579 }, { element: "LiquidOxygen", weight: 0.6000000238418579 }, { element: "Magma", weight: 5.099999904632568 }, { element: "MoltenIridium", weight: 3.700000047683716 }] }, { anim: "prehistoric_SO1", canProvideArtifacts: true, capacityMax: 25e3, capacityMin: 15e3, forbiddenDlcIds: [], id: "DLC4PrehistoricMixingField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID", "DLC4_ID"], weights: [{ element: "Amber", weight: 1 }, { element: "Iridium", weight: 0.5 }, { element: "NickelOre", weight: 4.5 }, { element: "Peat", weight: 2.5 }, { element: "Shale", weight: 1 }] }, { anim: "prehistoric_SO2", canProvideArtifacts: true, capacityMax: 25e3, capacityMin: 15e3, forbiddenDlcIds: [], id: "DLC4PrehistoricOreField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID", "DLC4_ID"], weights: [{ element: "Amber", weight: 1 }, { element: "NickelOre", weight: 1.5 }, { element: "Peat", weight: 2.5 }, { element: "Shale", weight: 1 }] }, { anim: "aquatic_mix", canProvideArtifacts: true, capacityMax: 25e3, capacityMin: 15e3, forbiddenDlcIds: [], id: "DLC5AquaticMixingField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID", "DLC5_ID"], weights: [{ element: "Basalt", weight: 1.5 }, { element: "Coquina", weight: 1.5 }, { element: "Corallium", weight: 2.5 }, { element: "SiltStone", weight: 2.5 }, { element: "ZincOre", weight: 4.5 }] }, { anim: "aquatic_field", canProvideArtifacts: true, capacityMax: 25e3, capacityMin: 15e3, forbiddenDlcIds: [], id: "DLC5AquaticOreField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID", "DLC5_ID"], weights: [{ element: "Basalt", weight: 1.5 }, { element: "Coquina", weight: 1.5 }, { element: "Corallium", weight: 2.5 }, { element: "SiltStone", weight: 2.5 }, { element: "ZincOre", weight: 4.5 }] }, { anim: "foresty_ore_field", canProvideArtifacts: true, capacityMax: 81e3, capacityMin: 54e3, forbiddenDlcIds: [], id: "ForestyOreField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "AluminumOre", weight: 1 }, { element: "CarbonDioxide", weight: 2 }, { element: "IgneousRock", weight: 7 }] }, { anim: "frozen_ore_field", canProvideArtifacts: true, capacityMax: 81e3, capacityMin: 54e3, forbiddenDlcIds: [], id: "FrozenOreField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "AluminumOre", weight: 2 }, { element: "DirtyIce", weight: 2.3299999237060547 }, { element: "Ice", weight: 2.3299999237060547 }, { element: "Snow", weight: 1.8300000429153442 }] }, { anim: "gas_giant_cloud", canProvideArtifacts: true, capacityMax: 2e4, capacityMin: 15e3, forbiddenDlcIds: [], id: "GasGiantCloud", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "Hydrogen", weight: 7 }, { element: "LiquidMethane", weight: 1 }, { element: "Methane", weight: 1 }, { element: "SolidMethane", weight: 1 }] }, { anim: "gilded_asteroid_field", canProvideArtifacts: true, capacityMax: 45e3, capacityMin: 3e4, forbiddenDlcIds: [], id: "GildedAsteroidField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "Fullerene", weight: 1 }, { element: "Gold", weight: 2.5 }, { element: "RefinedCarbon", weight: 1 }, { element: "Regolith", weight: 1 }, { element: "SedimentaryRock", weight: 4.5 }] }, { anim: "glimmering_asteroid_field", canProvideArtifacts: true, capacityMax: 45e3, capacityMin: 3e4, forbiddenDlcIds: [], id: "GlimmeringAsteroidField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "Carbon", weight: 1 }, { element: "CarbonDioxide", weight: 1 }, { element: "MoltenTungsten", weight: 2 }, { element: "Wolframite", weight: 6 }] }, { anim: "helium_cloud", canProvideArtifacts: true, capacityMax: 45e3, capacityMin: 3e4, forbiddenDlcIds: [], id: "HeliumCloud", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "Hydrogen", weight: 2 }, { element: "Water", weight: 8 }] }, { anim: "ice_asteroid_field", canProvideArtifacts: true, capacityMax: 81e3, capacityMin: 54e3, forbiddenDlcIds: [], id: "IceAsteroidField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "Ice", weight: 6 }, { element: "Oxygen", weight: 1.5 }, { element: "SolidCarbonDioxide", weight: 2 }, { element: "SolidMethane", weight: 0.5 }] }, { anim: "interstellar_ice_field", canProvideArtifacts: true, capacityMax: 81e3, capacityMin: 54e3, forbiddenDlcIds: [], id: "InterstellarIceField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "Ice", weight: 2.5 }, { element: "SolidCarbonDioxide", weight: 7 }, { element: "SolidOxygen", weight: 0.5 }] }, { anim: "interstellar_ocean", canProvideArtifacts: true, capacityMax: 25e3, capacityMin: 15e3, forbiddenDlcIds: [], id: "InterstellarOcean", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "Brine", weight: 2.5 }, { element: "Ice", weight: 2.5 }, { element: "Salt", weight: 2.5 }, { element: "SaltWater", weight: 2.5 }] }, { anim: "metallic_asteroid_field", canProvideArtifacts: true, capacityMax: 81e3, capacityMin: 54e3, forbiddenDlcIds: [], id: "MetallicAsteroidField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "Cuprite", weight: 1.75 }, { element: "MoltenIron", weight: 1.25 }, { element: "MoltenLead", weight: 1.75 }, { element: "Obsidian", weight: 6.25 }] }, { anim: "oily_asteroid_field", canProvideArtifacts: true, capacityMax: 25e3, capacityMin: 15e3, forbiddenDlcIds: [], id: "OilyAsteroidField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "CrudeOil", weight: 1.125 }, { element: "SolidCarbonDioxide", weight: 7.75 }, { element: "SolidMethane", weight: 1.125 }] }, { anim: "organic_mass_field", canProvideArtifacts: true, capacityMax: 81e3, capacityMin: 54e3, forbiddenDlcIds: [], id: "OrganicMassField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "Algae", weight: 3 }, { element: "ContaminatedOxygen", weight: 1 }, { element: "Dirt", weight: 3 }, { element: "SlimeMold", weight: 3 }] }, { anim: "oxidized_asteroid_field", canProvideArtifacts: true, capacityMax: 81e3, capacityMin: 54e3, forbiddenDlcIds: [], id: "OxidizedAsteroidField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "Rust", weight: 8 }, { element: "SolidCarbonDioxide", weight: 2 }] }, { anim: "oxygen_rich_asteroid_field", canProvideArtifacts: true, capacityMax: 25e3, capacityMin: 15e3, forbiddenDlcIds: [], id: "OxygenRichAsteroidField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "ContaminatedOxygen", weight: 2 }, { element: "Ice", weight: 4 }, { element: "Water", weight: 4 }] }, { anim: "radioactive_asteroid_field", canProvideArtifacts: true, capacityMax: 1e4, capacityMin: 5e3, forbiddenDlcIds: [], id: "RadioactiveAsteroidField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "BleachStone", weight: 2 }, { element: "Rust", weight: 4 }, { element: "Sulfur", weight: 3 }, { element: "UraniumOre", weight: 2 }] }, { anim: "radioactive_gas_cloud", canProvideArtifacts: true, capacityMax: 1e4, capacityMin: 5e3, forbiddenDlcIds: [], id: "RadioactiveGasCloud", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "CarbonDioxide", weight: 7 }, { element: "Chlorine", weight: 2 }, { element: "UraniumOre", weight: 2 }] }, { anim: "rocky_asteroid_field", canProvideArtifacts: true, capacityMax: 94e3, capacityMin: 81e3, forbiddenDlcIds: [], id: "RockyAsteroidField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "Granite", weight: 2 }, { element: "IgneousRock", weight: 3 }, { element: "Katairite", weight: 2 }, { element: "SedimentaryRock", weight: 3 }] }, { anim: "salty_asteroid_field", canProvideArtifacts: true, capacityMax: 81e3, capacityMin: 54e3, forbiddenDlcIds: [], id: "SaltyAsteroidField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "Brine", weight: 4 }, { element: "SaltWater", weight: 5 }, { element: "SolidCarbonDioxide", weight: 1 }] }, { anim: "sandy_ore_field", canProvideArtifacts: true, capacityMax: 81e3, capacityMin: 54e3, forbiddenDlcIds: [], id: "SandyOreField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "Algae", weight: 2 }, { element: "Cuprite", weight: 1 }, { element: "Sand", weight: 3 }, { element: "SandStone", weight: 4 }] }, { anim: "satellite_field", canProvideArtifacts: true, capacityMax: 45e3, capacityMin: 3e4, forbiddenDlcIds: [], id: "SatelliteField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "Glass", weight: 1.3300000429153442 }, { element: "IronOre", weight: 3 }, { element: "MoltenCopper", weight: 2.6700000762939453 }, { element: "Sand", weight: 3 }] }, { anim: "swampy_ore_field", canProvideArtifacts: true, capacityMax: 81e3, capacityMin: 54e3, forbiddenDlcIds: [], id: "SwampyOreField", initialDataBanks: 50, rechargeMax: 6e4, rechargeMin: 3e4, requiredDlcIds: ["EXPANSION1_ID"], weights: [{ element: "Cobaltite", weight: 1 }, { element: "Mud", weight: 2 }, { element: "ToxicSand", weight: 7 }] }];
|
|
530197
530250
|
|
|
@@ -534433,7 +534486,8 @@ var scene_layers_default = [
|
|
|
534433
534486
|
id: "FetchDrone",
|
|
534434
534487
|
initialAnim: "idle_loop",
|
|
534435
534488
|
sceneLayer: "Move",
|
|
534436
|
-
source: "kbac"
|
|
534489
|
+
source: "kbac",
|
|
534490
|
+
runtimeForegroundLayer: "InteriorWall"
|
|
534437
534491
|
},
|
|
534438
534492
|
{
|
|
534439
534493
|
id: "FieldRation",
|
|
@@ -541811,7 +541865,8 @@ var scene_layers_default = [
|
|
|
541811
541865
|
id: "PropFacilityDisplay3",
|
|
541812
541866
|
initialAnim: "off",
|
|
541813
541867
|
sceneLayer: "Building",
|
|
541814
|
-
source: "kbac"
|
|
541868
|
+
source: "kbac",
|
|
541869
|
+
runtimeForegroundLayer: "InteriorWall"
|
|
541815
541870
|
},
|
|
541816
541871
|
{
|
|
541817
541872
|
id: "PropFacilityGlobeDroors",
|
|
@@ -610961,21 +611016,201 @@ var ROWS = [
|
|
|
610961
611016
|
];
|
|
610962
611017
|
var BY_ID = new Map(ROWS.map((r) => [r.id, r]));
|
|
610963
611018
|
|
|
610964
|
-
//
|
|
611019
|
+
// ../geyser-roll/src/index.ts
|
|
611020
|
+
var I32_MAX = 2147483647;
|
|
611021
|
+
var I32_MIN = -2147483648;
|
|
611022
|
+
var MBIG = I32_MAX;
|
|
611023
|
+
var MSEED = 161803398;
|
|
611024
|
+
function toI32(n) {
|
|
611025
|
+
return n | 0;
|
|
611026
|
+
}
|
|
611027
|
+
function addI32(a, b) {
|
|
611028
|
+
return a + b | 0;
|
|
611029
|
+
}
|
|
611030
|
+
function subI32(a, b) {
|
|
611031
|
+
return a - b | 0;
|
|
611032
|
+
}
|
|
610965
611033
|
var f32 = Math.fround;
|
|
611034
|
+
var KRandom = class {
|
|
611035
|
+
seedArray;
|
|
611036
|
+
inext;
|
|
611037
|
+
inextp;
|
|
611038
|
+
constructor(seed) {
|
|
611039
|
+
seed = toI32(seed);
|
|
611040
|
+
const seedArray = new Int32Array(56);
|
|
611041
|
+
const absSeed = seed === I32_MIN ? I32_MAX : Math.abs(seed);
|
|
611042
|
+
let mj = subI32(MSEED, absSeed);
|
|
611043
|
+
seedArray[55] = mj;
|
|
611044
|
+
let mk = 1;
|
|
611045
|
+
for (let i = 1; i < 55; i++) {
|
|
611046
|
+
const ii = 21 * i % 55;
|
|
611047
|
+
seedArray[ii] = mk;
|
|
611048
|
+
mk = subI32(mj, mk);
|
|
611049
|
+
if (mk < 0) mk = addI32(mk, MBIG);
|
|
611050
|
+
mj = seedArray[ii];
|
|
611051
|
+
}
|
|
611052
|
+
for (let iter = 1; iter < 5; iter++) {
|
|
611053
|
+
for (let k = 1; k < 56; k++) {
|
|
611054
|
+
seedArray[k] = subI32(seedArray[k], seedArray[1 + (k + 30) % 55]);
|
|
611055
|
+
if (seedArray[k] < 0) seedArray[k] = addI32(seedArray[k], MBIG);
|
|
611056
|
+
}
|
|
611057
|
+
}
|
|
611058
|
+
this.seedArray = seedArray;
|
|
611059
|
+
this.inext = 0;
|
|
611060
|
+
this.inextp = 21;
|
|
611061
|
+
}
|
|
611062
|
+
internalSample() {
|
|
611063
|
+
let num = this.inext;
|
|
611064
|
+
let num2 = this.inextp;
|
|
611065
|
+
num += 1;
|
|
611066
|
+
if (num >= 56) num = 1;
|
|
611067
|
+
num2 += 1;
|
|
611068
|
+
if (num2 >= 56) num2 = 1;
|
|
611069
|
+
let num3 = subI32(this.seedArray[num], this.seedArray[num2]);
|
|
611070
|
+
if (num3 === MBIG) num3 -= 1;
|
|
611071
|
+
if (num3 < 0) num3 = addI32(num3, MBIG);
|
|
611072
|
+
this.seedArray[num] = num3;
|
|
611073
|
+
this.inext = num;
|
|
611074
|
+
this.inextp = num2;
|
|
611075
|
+
return num3;
|
|
611076
|
+
}
|
|
611077
|
+
nextDouble() {
|
|
611078
|
+
return this.internalSample() * 4656612875245797e-25;
|
|
611079
|
+
}
|
|
611080
|
+
};
|
|
611081
|
+
function resample(t2, min, max) {
|
|
611082
|
+
const num2 = f32(2472623e-9);
|
|
611083
|
+
const num3 = f32(t2 * (1 - num2 * 2) + num2);
|
|
611084
|
+
const logArg = f32(1 / num3 - 1);
|
|
611085
|
+
const logF32 = f32(Math.log(logArg));
|
|
611086
|
+
return f32((-logF32 + 6) / 12 * (max - min) + min);
|
|
611087
|
+
}
|
|
611088
|
+
var BOUNDS_BY_TEMPLATE = /* @__PURE__ */ new Map();
|
|
611089
|
+
for (const g of geysers_default2) {
|
|
611090
|
+
if (g.minRatePerCycle === void 0 || g.maxRatePerCycle === void 0 || g.minIterationLength === void 0 || g.maxIterationLength === void 0 || g.minIterationPercent === void 0 || g.maxIterationPercent === void 0 || g.minYearLength === void 0 || g.maxYearLength === void 0 || g.minYearPercent === void 0 || g.maxYearPercent === void 0) {
|
|
611091
|
+
continue;
|
|
611092
|
+
}
|
|
611093
|
+
BOUNDS_BY_TEMPLATE.set(g.id, {
|
|
611094
|
+
minRatePerCycle: g.minRatePerCycle,
|
|
611095
|
+
maxRatePerCycle: g.maxRatePerCycle,
|
|
611096
|
+
minIterationLength: g.minIterationLength,
|
|
611097
|
+
maxIterationLength: g.maxIterationLength,
|
|
611098
|
+
minIterationPercent: g.minIterationPercent,
|
|
611099
|
+
maxIterationPercent: g.maxIterationPercent,
|
|
611100
|
+
minYearLength: g.minYearLength,
|
|
611101
|
+
maxYearLength: g.maxYearLength,
|
|
611102
|
+
minYearPercent: g.minYearPercent,
|
|
611103
|
+
maxYearPercent: g.maxYearPercent
|
|
611104
|
+
});
|
|
611105
|
+
}
|
|
611106
|
+
function rollScaled(template, clusterX, clusterY, globalWorldSeed) {
|
|
611107
|
+
const b = BOUNDS_BY_TEMPLATE.get(template);
|
|
611108
|
+
if (!b) return null;
|
|
611109
|
+
const seed = toI32(globalWorldSeed + toI32(clusterX) + toI32(clusterY));
|
|
611110
|
+
const rs = new KRandom(seed);
|
|
611111
|
+
const rateRoll = f32(rs.nextDouble());
|
|
611112
|
+
const iterLenRoll = f32(rs.nextDouble());
|
|
611113
|
+
const iterPctRoll = f32(rs.nextDouble());
|
|
611114
|
+
const yearLenRoll = f32(rs.nextDouble());
|
|
611115
|
+
const yearPctRoll = f32(rs.nextDouble());
|
|
611116
|
+
return {
|
|
611117
|
+
scaled_rate: resample(rateRoll, b.minRatePerCycle, b.maxRatePerCycle),
|
|
611118
|
+
scaled_iter_len: resample(iterLenRoll, b.minIterationLength, b.maxIterationLength),
|
|
611119
|
+
scaled_iter_pct: resample(iterPctRoll, b.minIterationPercent, b.maxIterationPercent),
|
|
611120
|
+
scaled_year_len: resample(yearLenRoll, b.minYearLength, b.maxYearLength),
|
|
611121
|
+
scaled_year_pct: resample(yearPctRoll, b.minYearPercent, b.maxYearPercent),
|
|
611122
|
+
rateRoll,
|
|
611123
|
+
iterationLengthRoll: iterLenRoll,
|
|
611124
|
+
iterationPercentRoll: iterPctRoll,
|
|
611125
|
+
yearLengthRoll: yearLenRoll,
|
|
611126
|
+
yearPercentRoll: yearPctRoll
|
|
611127
|
+
};
|
|
611128
|
+
}
|
|
611129
|
+
|
|
611130
|
+
// ../../apps/onimaxxing/src/gambling/builder/god-roll.ts
|
|
611131
|
+
var GOD_ROLL_SEED_INPUT = 71414151;
|
|
611132
|
+
var FALLBACK_SUM_MAX = 4096;
|
|
611133
|
+
var FALLBACK_WORLD_COUNT = 16;
|
|
611134
|
+
var expectedByType = /* @__PURE__ */ new Map();
|
|
611135
|
+
function expectedFor(type2) {
|
|
611136
|
+
const hit = expectedByType.get(type2);
|
|
611137
|
+
if (hit !== void 0) return hit;
|
|
611138
|
+
const r = rollScaled(type2, 0, 0, GOD_ROLL_SEED_INPUT);
|
|
611139
|
+
const v = r ? [r.scaled_rate, r.scaled_iter_len, r.scaled_iter_pct, r.scaled_year_len, r.scaled_year_pct] : null;
|
|
611140
|
+
expectedByType.set(type2, v);
|
|
611141
|
+
return v;
|
|
611142
|
+
}
|
|
611143
|
+
function close(a, b) {
|
|
611144
|
+
return a !== void 0 && Math.abs(a - b) <= 1e-6 * Math.max(1, Math.abs(b));
|
|
611145
|
+
}
|
|
611146
|
+
function isGodRollGeyser(type2, g) {
|
|
611147
|
+
const e = expectedFor(type2);
|
|
611148
|
+
if (!e) return false;
|
|
611149
|
+
return close(g.scaled_rate, e[0]) && close(g.scaled_iter_len, e[1]) && close(g.scaled_iter_pct, e[2]) && close(g.scaled_year_len, e[3]) && close(g.scaled_year_pct, e[4]);
|
|
611150
|
+
}
|
|
611151
|
+
function canonicalWorldPath(yamlPath) {
|
|
611152
|
+
const dlc = /^dlc\/([^/]+)\/worldgen\/worlds\/(.+)\.yaml$/.exec(yamlPath);
|
|
611153
|
+
if (dlc) return `${dlc[1]}::worlds/${dlc[2]}`;
|
|
611154
|
+
const base = /^worldgen\/worlds\/(.+)\.yaml$/.exec(yamlPath);
|
|
611155
|
+
return base ? `worlds/${base[1]}` : null;
|
|
611156
|
+
}
|
|
611157
|
+
var SIZE_BY_PATH = /* @__PURE__ */ new Map();
|
|
611158
|
+
var mixingMax = { w: 0, h: 0 };
|
|
611159
|
+
for (const row of worlds_default2) {
|
|
611160
|
+
const path = canonicalWorldPath(row.yamlPath);
|
|
611161
|
+
if (!path) continue;
|
|
611162
|
+
const raw = row;
|
|
611163
|
+
if (raw.worldsize?.X === void 0 || raw.worldsize.Y === void 0) continue;
|
|
611164
|
+
const size = { w: raw.worldsize.X, h: raw.worldsize.Y };
|
|
611165
|
+
SIZE_BY_PATH.set(path, size);
|
|
611166
|
+
if (raw.worldTags?.includes("Mixing")) {
|
|
611167
|
+
mixingMax = { w: Math.max(mixingMax.w, size.w), h: Math.max(mixingMax.h, size.h) };
|
|
611168
|
+
}
|
|
611169
|
+
}
|
|
611170
|
+
function clusterSumMax(placements) {
|
|
611171
|
+
let widths = 0;
|
|
611172
|
+
let tallest = 0;
|
|
611173
|
+
for (const p of placements) {
|
|
611174
|
+
const size = p.world ? SIZE_BY_PATH.get(p.world) : void 0;
|
|
611175
|
+
if (!size) return null;
|
|
611176
|
+
const w = p.worldMixing ? Math.max(size.w, mixingMax.w) : size.w;
|
|
611177
|
+
const h = p.worldMixing ? Math.max(size.h, mixingMax.h) : size.h;
|
|
611178
|
+
widths += w + 2;
|
|
611179
|
+
tallest = Math.max(tallest, h);
|
|
611180
|
+
}
|
|
611181
|
+
return widths + tallest + 32;
|
|
611182
|
+
}
|
|
611183
|
+
function godRollSeedWindow(coord) {
|
|
611184
|
+
const prefix = matchClusterPrefix(coord);
|
|
611185
|
+
const cluster = prefix ? clusters_default2.find((c) => c.coordinatePrefix === prefix) : void 0;
|
|
611186
|
+
const placements = cluster?.worldPlacements ?? [];
|
|
611187
|
+
const sumMax = placements.length > 0 ? clusterSumMax(placements) : null;
|
|
611188
|
+
if (sumMax === null) {
|
|
611189
|
+
const lo = GOD_ROLL_SEED_INPUT - (FALLBACK_WORLD_COUNT - 1) - FALLBACK_SUM_MAX;
|
|
611190
|
+
return { lo: Math.max(0, lo), hi: GOD_ROLL_SEED_INPUT + 1 };
|
|
611191
|
+
}
|
|
611192
|
+
const top = GOD_ROLL_SEED_INPUT - (placements.length - 1);
|
|
611193
|
+
return { lo: Math.max(0, top - sumMax), hi: top + 1 };
|
|
611194
|
+
}
|
|
611195
|
+
function specGodRollWindow(constraints, coord) {
|
|
611196
|
+
return constraints.some((c) => c.kind === "world.geyserGodRoll") ? godRollSeedWindow(coord) : null;
|
|
611197
|
+
}
|
|
611198
|
+
|
|
611199
|
+
// ../../apps/onimaxxing/src/gambling/query/validate-ast.ts
|
|
611200
|
+
var f322 = Math.fround;
|
|
610966
611201
|
function projectAvgKgPerS(g) {
|
|
610967
611202
|
const { scaled_rate, scaled_iter_len, scaled_iter_pct, scaled_year_len, scaled_year_pct } = g;
|
|
610968
611203
|
if (scaled_rate === void 0 || scaled_iter_len === void 0 || scaled_iter_pct === void 0 || scaled_year_len === void 0 || scaled_year_pct === void 0) {
|
|
610969
611204
|
return 0;
|
|
610970
611205
|
}
|
|
610971
611206
|
const iterationLength = scaled_iter_len;
|
|
610972
|
-
const iterationPercent =
|
|
610973
|
-
const onDuration =
|
|
611207
|
+
const iterationPercent = f322(Math.max(0, Math.min(1, scaled_iter_pct)));
|
|
611208
|
+
const onDuration = f322(iterationLength * iterationPercent);
|
|
610974
611209
|
const yearLength = scaled_year_len;
|
|
610975
|
-
const yearPercent =
|
|
610976
|
-
const yearOnDuration =
|
|
610977
|
-
const emitRate = onDuration > 0 ?
|
|
610978
|
-
const avg =
|
|
611210
|
+
const yearPercent = f322(Math.max(0, Math.min(1, scaled_year_pct)));
|
|
611211
|
+
const yearOnDuration = f322(yearLength * yearPercent);
|
|
611212
|
+
const emitRate = onDuration > 0 ? f322(f322(scaled_rate / f322(600 / iterationLength)) / onDuration) : 0;
|
|
611213
|
+
const avg = f322(yearOnDuration / iterationLength * (emitRate * onDuration) / yearLength);
|
|
610979
611214
|
return Number.isFinite(avg) ? avg : 0;
|
|
610980
611215
|
}
|
|
610981
611216
|
function summarizeWorldgen(data2, spacePoiScore = 0) {
|
|
@@ -611248,6 +611483,14 @@ function geyserCount(world, type2) {
|
|
|
611248
611483
|
}
|
|
611249
611484
|
return n;
|
|
611250
611485
|
}
|
|
611486
|
+
function godRollGeyserCount(world, type2) {
|
|
611487
|
+
if (!world) return 0;
|
|
611488
|
+
let n = 0;
|
|
611489
|
+
for (const g of world.geysers) {
|
|
611490
|
+
if ((g.type ?? g.tag) === type2 && isGodRollGeyser(type2, g)) n++;
|
|
611491
|
+
}
|
|
611492
|
+
return n;
|
|
611493
|
+
}
|
|
611251
611494
|
function clusterGeyserSum(map2, type2) {
|
|
611252
611495
|
let sum = 0;
|
|
611253
611496
|
for (const w of map2.worlds) sum += geyserSum(w, type2);
|
|
@@ -611824,6 +612067,7 @@ var ADVANCED_HELPERS = {
|
|
|
611824
612067
|
clusterSpawnCount,
|
|
611825
612068
|
templateCount,
|
|
611826
612069
|
clusterTemplateCount,
|
|
612070
|
+
godRollGeyserCount,
|
|
611827
612071
|
oilWells,
|
|
611828
612072
|
critterCount,
|
|
611829
612073
|
plantCount,
|
|
@@ -612395,6 +612639,16 @@ var CONSTRAINT_KIND_CATALOG = [
|
|
|
612395
612639
|
},
|
|
612396
612640
|
outputHint: "Set `output` to shape the rate gate: `uniform` demands EACH geyser meet the threshold; `sum` gates on the combined kg/s; `tiers` compares [sorted geyser rates] against your ordered thresholds slot-by-slot. `null` (default) means count-only, no rate gate."
|
|
612397
612641
|
},
|
|
612642
|
+
{
|
|
612643
|
+
kind: "world.geyserGodRoll",
|
|
612644
|
+
hint: "A geyser of this type with the best stats it can roll (seed input 71414151). A filter only (mode `require`): the scan covers only the cluster seeds that can place one, so seedRangeStart/End are replaced by that window.",
|
|
612645
|
+
example: {
|
|
612646
|
+
kind: "world.geyserGodRoll",
|
|
612647
|
+
mode: "require",
|
|
612648
|
+
world: { kind: "homeWorld" },
|
|
612649
|
+
geyser: "salt_water"
|
|
612650
|
+
}
|
|
612651
|
+
},
|
|
612398
612652
|
{
|
|
612399
612653
|
kind: "world.distToHome",
|
|
612400
612654
|
hint: "Hex distance from home to a specific world.",
|
|
@@ -612429,6 +612683,18 @@ var CONSTRAINT_KIND_CATALOG = [
|
|
|
612429
612683
|
n: 2
|
|
612430
612684
|
}
|
|
612431
612685
|
},
|
|
612686
|
+
{
|
|
612687
|
+
kind: "destination.count",
|
|
612688
|
+
hint: "Count of a base-game starmap destination type, optionally within a distance tier. Base-game clusters only. Worldgen fixes type and distance; masses roll in game.",
|
|
612689
|
+
example: {
|
|
612690
|
+
kind: "destination.count",
|
|
612691
|
+
mode: "require",
|
|
612692
|
+
destType: "GoldAsteroid",
|
|
612693
|
+
op: ">=",
|
|
612694
|
+
n: 1,
|
|
612695
|
+
maxDistance: 4
|
|
612696
|
+
}
|
|
612697
|
+
},
|
|
612432
612698
|
{
|
|
612433
612699
|
kind: "poi.count",
|
|
612434
612700
|
hint: "Count of a POI type in the cluster, with optional cap/recharge gates.",
|
|
@@ -612697,7 +612963,7 @@ import { createRequire as createRequire2 } from "module";
|
|
|
612697
612963
|
import { dirname, join } from "path";
|
|
612698
612964
|
import { fileURLToPath } from "url";
|
|
612699
612965
|
|
|
612700
|
-
// ../../node_modules/.pnpm/@tigin-backwards+oxygen-not-included-gambling@0.6.
|
|
612966
|
+
// ../../node_modules/.pnpm/@tigin-backwards+oxygen-not-included-gambling@0.6.5/node_modules/@tigin-backwards/oxygen-not-included-gambling/oni_roll_wasm.js
|
|
612701
612967
|
var Roller = class {
|
|
612702
612968
|
__destroy_into_raw() {
|
|
612703
612969
|
const ptr = this.__wbg_ptr;
|
|
@@ -613230,19 +613496,19 @@ function projectDeep(map2) {
|
|
|
613230
613496
|
});
|
|
613231
613497
|
}
|
|
613232
613498
|
function projectAvgKgPerS3(g) {
|
|
613233
|
-
const
|
|
613499
|
+
const f323 = Math.fround;
|
|
613234
613500
|
const { scaled_rate, scaled_iter_len, scaled_iter_pct, scaled_year_len, scaled_year_pct } = g;
|
|
613235
613501
|
if (scaled_rate === void 0 || scaled_iter_len === void 0 || scaled_iter_pct === void 0 || scaled_year_len === void 0 || scaled_year_pct === void 0) {
|
|
613236
613502
|
return 0;
|
|
613237
613503
|
}
|
|
613238
613504
|
const iterationLength = scaled_iter_len;
|
|
613239
|
-
const iterationPercent =
|
|
613240
|
-
const onDuration =
|
|
613505
|
+
const iterationPercent = f323(Math.max(0, Math.min(1, scaled_iter_pct)));
|
|
613506
|
+
const onDuration = f323(iterationLength * iterationPercent);
|
|
613241
613507
|
const yearLength = scaled_year_len;
|
|
613242
|
-
const yearPercent =
|
|
613243
|
-
const yearOnDuration =
|
|
613244
|
-
const emitRate = onDuration > 0 ?
|
|
613245
|
-
const avg =
|
|
613508
|
+
const yearPercent = f323(Math.max(0, Math.min(1, scaled_year_pct)));
|
|
613509
|
+
const yearOnDuration = f323(yearLength * yearPercent);
|
|
613510
|
+
const emitRate = onDuration > 0 ? f323(f323(scaled_rate / f323(600 / iterationLength)) / onDuration) : 0;
|
|
613511
|
+
const avg = f323(yearOnDuration / iterationLength * (emitRate * onDuration) / yearLength);
|
|
613246
613512
|
return Number.isFinite(avg) ? avg : 0;
|
|
613247
613513
|
}
|
|
613248
613514
|
function narrateSeed(seedCoord, summary, deep) {
|
|
@@ -613579,6 +613845,13 @@ function describeConstraint(c) {
|
|
|
613579
613845
|
const tiers = c.output.tiers.map((t2) => `${t2} kg/s`).join(" + ");
|
|
613580
613846
|
return `${head}, with tiered rates ${tiers}`;
|
|
613581
613847
|
}
|
|
613848
|
+
case "world.geyserGodRoll":
|
|
613849
|
+
return `${refLabel(c.world)} has a ${geyserTemplateName(c.geyser)} with the best possible roll`;
|
|
613850
|
+
case "destination.count": {
|
|
613851
|
+
const name = spaceDestinationName(c.destType);
|
|
613852
|
+
const head = `The starmap has ${cmpCount(c.op, c.n, name, pluralize(name))}`;
|
|
613853
|
+
return c.maxDistance === null ? head : `${head} within ${destinationDistanceKm(c.maxDistance)}`;
|
|
613854
|
+
}
|
|
613582
613855
|
case "poi.count": {
|
|
613583
613856
|
const name = spacePoiName(c.poiType);
|
|
613584
613857
|
let head = `The cluster has ${cmpCount(c.op, c.n, name, pluralize(name))}`;
|
|
@@ -613659,6 +613932,9 @@ function pluralize(name) {
|
|
|
613659
613932
|
if (/o$/i.test(name)) return `${name}es`;
|
|
613660
613933
|
return `${name}s`;
|
|
613661
613934
|
}
|
|
613935
|
+
function destinationDistanceKm(tier) {
|
|
613936
|
+
return `${((tier + 1) * 1e4).toLocaleString("en-US")} km`;
|
|
613937
|
+
}
|
|
613662
613938
|
function cmpCount(op, n, singular, plural) {
|
|
613663
613939
|
const noun = n === 1 ? singular : plural;
|
|
613664
613940
|
switch (op) {
|
|
@@ -613838,7 +614114,7 @@ function compileToJs(constraints, opts = {}) {
|
|
|
613838
614114
|
for (const c of partials) {
|
|
613839
614115
|
let ref2 = null;
|
|
613840
614116
|
if (c.kind === "home.geyserNearStart") ref2 = { kind: "homeWorld" };
|
|
613841
|
-
else if (c.kind === "world.geyser" || c.kind === "world.oilWells" || c.kind === "world.template") {
|
|
614117
|
+
else if (c.kind === "world.geyser" || c.kind === "world.geyserGodRoll" || c.kind === "world.oilWells" || c.kind === "world.template") {
|
|
613842
614118
|
ref2 = c.world;
|
|
613843
614119
|
}
|
|
613844
614120
|
if (ref2 === null) continue;
|
|
@@ -613953,8 +614229,20 @@ function compileRequire(c, emit) {
|
|
|
613953
614229
|
case "world.geyser":
|
|
613954
614230
|
case "cluster.geyser":
|
|
613955
614231
|
return compileGeyserRequire(c, emit);
|
|
614232
|
+
case "world.geyserGodRoll": {
|
|
614233
|
+
const v = emit(c.world);
|
|
614234
|
+
return [
|
|
614235
|
+
`// ${describe(c)}`,
|
|
614236
|
+
`if (${v} < 0 || godRollGeyserCount(${worldExprFor(c.world)}, ${jsstr(c.geyser)}) < 1) return { pass: false };`
|
|
614237
|
+
];
|
|
614238
|
+
}
|
|
613956
614239
|
case "poi.count":
|
|
613957
614240
|
return compilePoiCountRequire(c);
|
|
614241
|
+
case "destination.count":
|
|
614242
|
+
return [
|
|
614243
|
+
`// ${describe(c)}`,
|
|
614244
|
+
`if (!(${destinationCountExpr(c)} ${c.op} ${c.n})) return { pass: false };`
|
|
614245
|
+
];
|
|
613958
614246
|
case "map.elementMass": {
|
|
613959
614247
|
const worldExpr = c.world.kind === "homeWorld" ? "homeWorld(map)" : `findWorld(map, ${jsstr(pathClassName(c.world.path))})`;
|
|
613960
614248
|
return [
|
|
@@ -614127,8 +614415,12 @@ function colExpr(c, emit) {
|
|
|
614127
614415
|
case "world.geyser":
|
|
614128
614416
|
case "cluster.geyser":
|
|
614129
614417
|
return geyserPool(c, emit).sumCall;
|
|
614418
|
+
case "world.geyserGodRoll":
|
|
614419
|
+
return `godRollGeyserCount(${worldExprFor(c.world)}, ${jsstr(c.geyser)})`;
|
|
614130
614420
|
case "poi.count":
|
|
614131
614421
|
return poiCountDiagnosticExpr(c);
|
|
614422
|
+
case "destination.count":
|
|
614423
|
+
return destinationCountExpr(c);
|
|
614132
614424
|
case "map.elementMass": {
|
|
614133
614425
|
const wExpr = c.world.kind === "homeWorld" ? "homeWorld(map)" : `findWorld(map, ${jsstr(pathClassName(c.world.path))})`;
|
|
614134
614426
|
return `elementMass(map, ${jsstr(c.element)}, ${wExpr})`;
|
|
@@ -614238,8 +614530,14 @@ function preferMatchExpr(c, emit) {
|
|
|
614238
614530
|
case "world.geyser":
|
|
614239
614531
|
case "cluster.geyser":
|
|
614240
614532
|
return compileGeyserPreferExpr(c, emit);
|
|
614533
|
+
case "world.geyserGodRoll": {
|
|
614534
|
+
const v = emit(c.world);
|
|
614535
|
+
return `${v} >= 0 && godRollGeyserCount(${worldExprFor(c.world)}, ${jsstr(c.geyser)}) >= 1`;
|
|
614536
|
+
}
|
|
614241
614537
|
case "poi.count":
|
|
614242
614538
|
return poiCountMatchExpr(c);
|
|
614539
|
+
case "destination.count":
|
|
614540
|
+
return `(${destinationCountExpr(c)} ${c.op} ${c.n})`;
|
|
614243
614541
|
case "map.elementMass": {
|
|
614244
614542
|
const worldExpr = c.world.kind === "homeWorld" ? "homeWorld(map)" : `findWorld(map, ${jsstr(pathClassName(c.world.path))})`;
|
|
614245
614543
|
return `elementMass(map, ${jsstr(c.element)}, ${worldExpr}) ${c.op} ${c.kg}`;
|
|
@@ -614346,8 +614644,12 @@ function columnName(c, idx) {
|
|
|
614346
614644
|
return `${refTag(c.world)}_${c.geyser}_geyser`;
|
|
614347
614645
|
case "cluster.geyser":
|
|
614348
614646
|
return `cluster_${c.geyser}_geyser`;
|
|
614647
|
+
case "world.geyserGodRoll":
|
|
614648
|
+
return `${refTag(c.world)}_${c.geyser}_godRoll`;
|
|
614349
614649
|
case "poi.count":
|
|
614350
614650
|
return `poi_${c.poiType.replace(/^HarvestableSpacePOI_|^ArtifactSpacePOI_/, "")}`;
|
|
614651
|
+
case "destination.count":
|
|
614652
|
+
return `dest_${c.destType}`;
|
|
614351
614653
|
case "map.elementMass":
|
|
614352
614654
|
return `${refTag(c.world)}_${c.element}`;
|
|
614353
614655
|
case "home.geyserNearStart":
|
|
@@ -614487,6 +614789,10 @@ function poiCountDiagnosticExpr(c) {
|
|
|
614487
614789
|
}
|
|
614488
614790
|
return `(() => { const s = (${caps}).slice().sort((a,b)=>b-a); return s[${c.output.tiers.length - 1}] ?? -1; })()`;
|
|
614489
614791
|
}
|
|
614792
|
+
function destinationCountExpr(c) {
|
|
614793
|
+
if (c.maxDistance === null) return `countVanilla(summary, ${jsstr(c.destType)})`;
|
|
614794
|
+
return `summary.vanilla_destinations.filter(d => d.dest_type === ${jsstr(c.destType)} && d.distance <= ${c.maxDistance}).length`;
|
|
614795
|
+
}
|
|
614490
614796
|
function jsident(s) {
|
|
614491
614797
|
return s.replace(/[^A-Za-z0-9_]/g, "_");
|
|
614492
614798
|
}
|
|
@@ -614836,6 +615142,12 @@ var constraintSchema = z7.discriminatedUnion("kind", [
|
|
|
614836
615142
|
n: z7.number().int(),
|
|
614837
615143
|
output: GeyserOutputSpec.default(null)
|
|
614838
615144
|
}),
|
|
615145
|
+
z7.object({
|
|
615146
|
+
kind: z7.literal("world.geyserGodRoll"),
|
|
615147
|
+
mode: z7.literal("require").describe("A filter only: no prefer form."),
|
|
615148
|
+
world: WorldRef,
|
|
615149
|
+
geyser: z7.string().describe("KG geyser template id (e.g. 'salt_water', 'methane', 'molten_iron').")
|
|
615150
|
+
}),
|
|
614839
615151
|
z7.object({
|
|
614840
615152
|
kind: z7.literal("world.distToHome"),
|
|
614841
615153
|
mode: ConstraintMode,
|
|
@@ -614872,6 +615184,20 @@ var constraintSchema = z7.discriminatedUnion("kind", [
|
|
|
614872
615184
|
output: PoiOutputSpec.default(null),
|
|
614873
615185
|
recharge: PoiRechargeFilter.default(null)
|
|
614874
615186
|
}),
|
|
615187
|
+
// ── Base-game starmap destination (summary tier) ───────────────
|
|
615188
|
+
z7.object({
|
|
615189
|
+
kind: z7.literal("destination.count"),
|
|
615190
|
+
mode: ConstraintMode,
|
|
615191
|
+
weight: z7.number().optional(),
|
|
615192
|
+
destType: z7.string().describe(
|
|
615193
|
+
"SpaceDestinationTypes id on the base-game linear starmap, e.g. 'GoldAsteroid', 'TerraPlanet'. Base-game clusters only; Spaced Out clusters place none."
|
|
615194
|
+
),
|
|
615195
|
+
op: CmpOp,
|
|
615196
|
+
n: z7.number().int(),
|
|
615197
|
+
maxDistance: z7.number().int().min(0).nullable().default(null).describe(
|
|
615198
|
+
"Count only destinations at this zero-based distance tier or closer (tier d = (d+1) x 10,000 km in game). null = any distance."
|
|
615199
|
+
)
|
|
615200
|
+
}),
|
|
614875
615201
|
// ── Map-level (JS tier, awaits worldgen) ───────────────────────
|
|
614876
615202
|
z7.object({
|
|
614877
615203
|
kind: z7.literal("map.elementMass"),
|
|
@@ -615196,6 +615522,96 @@ function progressLine(args) {
|
|
|
615196
615522
|
return parts.join(", ");
|
|
615197
615523
|
}
|
|
615198
615524
|
|
|
615525
|
+
// ../knowledge-graph/dist/tables/space-destination-tiers.json
|
|
615526
|
+
var space_destination_tiers_default = { always: [{ distance: 4, type: "Earth" }, { distance: 17, type: "Wormhole" }], fixed: [{ distance: 0, type: "CarbonaceousAsteroid" }, { distance: 0, type: "CarbonaceousAsteroid" }, { distance: 1, type: "MetallicAsteroid" }, { distance: 2, type: "RockyAsteroid" }, { distance: 3, type: "IcyDwarf" }, { distance: 4, type: "OrganicDwarf" }], mixed: [{ dlcId: "DLC2_ID", maxTier: 10, minTier: 3, type: "DLC2CeresSpaceDestination" }, { dlcId: "DLC4_ID", maxTier: 10, minTier: 3, type: "DLC4PrehistoricSpaceDestination" }, { dlcId: "DLC5_ID", maxTier: 10, minTier: 3, type: "DLC5AquaticSpaceDestination" }], picksPerTier: 3, randomCountMaxExclusive: 25, randomCountMin: 15, tiers: [{ distance: 0, types: [] }, { distance: 1, types: ["OilyAsteriod"] }, { distance: 2, types: ["Satellite"] }, { distance: 3, types: ["Satellite", "RockyAsteroid", "CarbonaceousAsteroid", "ForestPlanet"] }, { distance: 4, types: ["MetallicAsteroid", "RockyAsteroid", "CarbonaceousAsteroid", "SaltDwarf"] }, { distance: 5, types: ["MetallicAsteroid", "RockyAsteroid", "CarbonaceousAsteroid", "IcyDwarf", "OrganicDwarf"] }, { distance: 6, types: ["IcyDwarf", "OrganicDwarf", "DustyMoon", "ChlorinePlanet", "RedDwarf"] }, { distance: 7, types: ["DustyMoon", "TerraPlanet", "VolcanoPlanet"] }, { distance: 8, types: ["TerraPlanet", "GasGiant", "IceGiant", "RustPlanet"] }, { distance: 9, types: ["GasGiant", "IceGiant", "HeliumGiant"] }, { distance: 10, types: ["RustPlanet", "VolcanoPlanet", "RockyAsteroid", "TerraPlanet", "MetallicAsteroid"] }, { distance: 11, types: ["ShinyPlanet", "MetallicAsteroid", "RockyAsteroid"] }, { distance: 12, types: ["GoldAsteroid", "OrganicDwarf", "ForestPlanet", "ChlorinePlanet"] }, { distance: 13, types: ["IcyDwarf", "MetallicAsteroid", "DustyMoon", "VolcanoPlanet", "IceGiant"] }, { distance: 14, types: ["ShinyPlanet", "RedDwarf", "RockyAsteroid", "GasGiant"] }, { distance: 15, types: ["HeliumGiant", "ForestPlanet", "OilyAsteriod"] }, { distance: 16, types: ["GoldAsteroid", "SaltDwarf", "TerraPlanet", "VolcanoPlanet"] }] };
|
|
615527
|
+
|
|
615528
|
+
// ../knowledge-graph/src/tables/space-destination-tiers.ts
|
|
615529
|
+
var spaceDestinationTiers = space_destination_tiers_default;
|
|
615530
|
+
var space_destination_tiers_default2 = spaceDestinationTiers;
|
|
615531
|
+
|
|
615532
|
+
// ../../apps/onimaxxing/src/shared/destination-admissibility.ts
|
|
615533
|
+
var RANDOM_MAX = space_destination_tiers_default2.randomCountMaxExclusive - 1;
|
|
615534
|
+
var PERMISSIVE = { mixingOff: /* @__PURE__ */ new Set(), spacedOut: false };
|
|
615535
|
+
function destinationContextForCoord(coord, clusterPrefix) {
|
|
615536
|
+
const mixing = oracleMixingForCoord(coord, clusterPrefix);
|
|
615537
|
+
if (!mixing) return PERMISSIVE;
|
|
615538
|
+
const required = new Set(
|
|
615539
|
+
clusters_default2.filter((c) => c.coordinatePrefix === mixing.clusterPrefix).flatMap((c) => c.requiredDlcIds ?? [])
|
|
615540
|
+
);
|
|
615541
|
+
if (required.has("EXPANSION1_ID")) return { mixingOff: /* @__PURE__ */ new Set(), spacedOut: true };
|
|
615542
|
+
const off = /* @__PURE__ */ new Set();
|
|
615543
|
+
for (const m of space_destination_tiers_default2.mixed) {
|
|
615544
|
+
const level = mixing.levels[m.dlcId.replace(/_ID$/, "Mixing")] ?? 0;
|
|
615545
|
+
if (level === 0 && !required.has(m.dlcId)) off.add(m.dlcId);
|
|
615546
|
+
}
|
|
615547
|
+
return { mixingOff: off, spacedOut: false };
|
|
615548
|
+
}
|
|
615549
|
+
function nearestDestinationTier(destType, ctx = PERMISSIVE) {
|
|
615550
|
+
if (ctx.spacedOut) return null;
|
|
615551
|
+
const candidates = [];
|
|
615552
|
+
for (const p of [...space_destination_tiers_default2.fixed, ...space_destination_tiers_default2.always]) {
|
|
615553
|
+
if (p.type === destType) candidates.push(p.distance);
|
|
615554
|
+
}
|
|
615555
|
+
for (const t2 of space_destination_tiers_default2.tiers) if (t2.types.includes(destType)) candidates.push(t2.distance);
|
|
615556
|
+
for (const m of space_destination_tiers_default2.mixed) {
|
|
615557
|
+
if (m.type === destType && !ctx.mixingOff.has(m.dlcId)) candidates.push(m.minTier);
|
|
615558
|
+
}
|
|
615559
|
+
return candidates.length === 0 ? null : Math.min(...candidates);
|
|
615560
|
+
}
|
|
615561
|
+
function destinationCountBounds(destType, maxDistance, ctx = PERMISSIVE) {
|
|
615562
|
+
if (ctx.spacedOut) return { min: 0, max: 0 };
|
|
615563
|
+
const within = (d) => maxDistance === null || d <= maxDistance;
|
|
615564
|
+
let guaranteed = 0;
|
|
615565
|
+
for (const p of [...space_destination_tiers_default2.fixed, ...space_destination_tiers_default2.always]) {
|
|
615566
|
+
if (p.type === destType && within(p.distance)) guaranteed++;
|
|
615567
|
+
}
|
|
615568
|
+
let random = 0;
|
|
615569
|
+
for (const t2 of space_destination_tiers_default2.tiers) {
|
|
615570
|
+
if (within(t2.distance) && t2.types.includes(destType)) random += space_destination_tiers_default2.picksPerTier;
|
|
615571
|
+
}
|
|
615572
|
+
let mixed = 0;
|
|
615573
|
+
for (const m of space_destination_tiers_default2.mixed) {
|
|
615574
|
+
if (m.type === destType && !ctx.mixingOff.has(m.dlcId) && within(m.minTier)) mixed++;
|
|
615575
|
+
}
|
|
615576
|
+
return { min: guaranteed, max: guaranteed + Math.min(random, RANDOM_MAX) + mixed };
|
|
615577
|
+
}
|
|
615578
|
+
function satisfiable(op, n, min, max) {
|
|
615579
|
+
switch (op) {
|
|
615580
|
+
case ">=":
|
|
615581
|
+
return max >= n;
|
|
615582
|
+
case ">":
|
|
615583
|
+
return max > n;
|
|
615584
|
+
case "<=":
|
|
615585
|
+
return min <= n;
|
|
615586
|
+
case "<":
|
|
615587
|
+
return min < n;
|
|
615588
|
+
case "==":
|
|
615589
|
+
return n >= min && n <= max;
|
|
615590
|
+
case "!=":
|
|
615591
|
+
return !(min === max && min === n);
|
|
615592
|
+
}
|
|
615593
|
+
}
|
|
615594
|
+
function destinationCountVerdict(rule, ctx = PERMISSIVE) {
|
|
615595
|
+
const { min, max } = destinationCountBounds(rule.destType, rule.maxDistance, ctx);
|
|
615596
|
+
if (satisfiable(rule.op, rule.n, min, max)) return { kind: "admitted" };
|
|
615597
|
+
const nearestTier = nearestDestinationTier(rule.destType, ctx);
|
|
615598
|
+
const anywhere = destinationCountBounds(rule.destType, null, ctx);
|
|
615599
|
+
const why = ctx.spacedOut ? "spaced-out" : nearestTier === null ? "never-placed" : max === 0 && anywhere.max > 0 && satisfiable(rule.op, rule.n, anywhere.min, anywhere.max) ? "too-close" : "count";
|
|
615600
|
+
return { kind: "impossible", why, nearestTier, min, max };
|
|
615601
|
+
}
|
|
615602
|
+
function describeDestinationVerdict(v, destType) {
|
|
615603
|
+
switch (v.why) {
|
|
615604
|
+
case "spaced-out":
|
|
615605
|
+
return "Spaced Out clusters have no base-game starmap, so they place no destinations.";
|
|
615606
|
+
case "never-placed":
|
|
615607
|
+
return `Worldgen never places '${destType}' on this cluster's starmap.`;
|
|
615608
|
+
case "too-close":
|
|
615609
|
+
return `'${destType}' is never closer than distance tier ${v.nearestTier}.`;
|
|
615610
|
+
case "count":
|
|
615611
|
+
return `A seed has between ${v.min} and ${v.max} '${destType}' in that range.`;
|
|
615612
|
+
}
|
|
615613
|
+
}
|
|
615614
|
+
|
|
615199
615615
|
// src/verdicts.ts
|
|
615200
615616
|
var STORY_TRAIT_BASENAMES2 = new Set(
|
|
615201
615617
|
storytraits_default2.map(
|
|
@@ -615239,6 +615655,13 @@ function verdictOfConstraintSync(coord, c, vopts) {
|
|
|
615239
615655
|
if (v.kind === "impossible") return v;
|
|
615240
615656
|
return v.kind === "remix-only" ? v : admitted();
|
|
615241
615657
|
}
|
|
615658
|
+
case "world.geyserGodRoll": {
|
|
615659
|
+
const worldPath = resolveWorldPath(coord, c.world);
|
|
615660
|
+
if (!worldPath) return { kind: "admitted", unknown: true };
|
|
615661
|
+
const v = worldAdmitsGeyserVerdict(worldPath, c.geyser, vopts);
|
|
615662
|
+
if (v.kind === "impossible") return v;
|
|
615663
|
+
return v.kind === "remix-only" ? v : admitted();
|
|
615664
|
+
}
|
|
615242
615665
|
case "cluster.geyser": {
|
|
615243
615666
|
if (!requiresPresence(c.countOp, c.n)) return admitted();
|
|
615244
615667
|
const paths = allWorldPaths(coord);
|
|
@@ -615289,6 +615712,13 @@ function verdictOfConstraintSync(coord, c, vopts) {
|
|
|
615289
615712
|
if (!pathA || !pathB) return { kind: "admitted", unknown: true };
|
|
615290
615713
|
return worldToWorldDistanceVerdict(clusterPrefix, pathA, pathB, c.op, c.hexes);
|
|
615291
615714
|
}
|
|
615715
|
+
case "destination.count": {
|
|
615716
|
+
const v = destinationCountVerdict(
|
|
615717
|
+
c,
|
|
615718
|
+
destinationContextForCoord(coord, clusterPrefixForCoord(coord))
|
|
615719
|
+
);
|
|
615720
|
+
return v.kind === "impossible" ? { kind: "impossible", reason: describeDestinationVerdict(v, c.destType) } : admitted();
|
|
615721
|
+
}
|
|
615292
615722
|
case "map.elementMass": {
|
|
615293
615723
|
const worldPath = resolveWorldPath(coord, c.world);
|
|
615294
615724
|
if (!worldPath) return { kind: "admitted", unknown: true };
|
|
@@ -615733,6 +616163,7 @@ function canCompile(c) {
|
|
|
615733
616163
|
if (c.mode !== "require") return false;
|
|
615734
616164
|
if (!constraintBytecodeCapable(c.kind)) return false;
|
|
615735
616165
|
if (c.kind === "poi.count" && (c.output !== null || c.recharge !== null)) return false;
|
|
616166
|
+
if (c.kind === "destination.count" && c.maxDistance !== null) return false;
|
|
615736
616167
|
return true;
|
|
615737
616168
|
}
|
|
615738
616169
|
function needsHomeSubstitution(c) {
|
|
@@ -615807,6 +616238,7 @@ function tryCompileToBytecodeSource(constraints, clusterCoord) {
|
|
|
615807
616238
|
addWorld(c.to);
|
|
615808
616239
|
break;
|
|
615809
616240
|
case "poi.count":
|
|
616241
|
+
case "destination.count":
|
|
615810
616242
|
break;
|
|
615811
616243
|
}
|
|
615812
616244
|
}
|
|
@@ -615849,6 +616281,10 @@ function tryCompileToBytecodeSource(constraints, clusterCoord) {
|
|
|
615849
616281
|
lines.push(`require(countPoi(${jsstr2(c.poiType)}) ${c.op} ${c.n});`);
|
|
615850
616282
|
break;
|
|
615851
616283
|
}
|
|
616284
|
+
case "destination.count": {
|
|
616285
|
+
lines.push(`require(countVanilla(${jsstr2(c.destType)}) ${c.op} ${c.n});`);
|
|
616286
|
+
break;
|
|
616287
|
+
}
|
|
615852
616288
|
}
|
|
615853
616289
|
}
|
|
615854
616290
|
const seenColNames = /* @__PURE__ */ new Set();
|
|
@@ -615878,6 +616314,8 @@ function bytecodeColExpr(c) {
|
|
|
615878
616314
|
return `dist(${refExpr(c.from)}, ${refExpr(c.to)})`;
|
|
615879
616315
|
case "poi.count":
|
|
615880
616316
|
return `countPoi(${jsstr2(c.poiType)})`;
|
|
616317
|
+
case "destination.count":
|
|
616318
|
+
return `countVanilla(${jsstr2(c.destType)})`;
|
|
615881
616319
|
case "world.trait":
|
|
615882
616320
|
case "world.asteroidRemix":
|
|
615883
616321
|
return null;
|
|
@@ -615897,6 +616335,8 @@ function bytecodeColName(c, idx) {
|
|
|
615897
616335
|
return `${refTag2(c.from)}_${refTag2(c.to)}_dist`;
|
|
615898
616336
|
case "poi.count":
|
|
615899
616337
|
return `poi_${c.poiType.replace(/^HarvestableSpacePOI_|^ArtifactSpacePOI_/, "")}`;
|
|
616338
|
+
case "destination.count":
|
|
616339
|
+
return `dest_${c.destType}`;
|
|
615900
616340
|
default:
|
|
615901
616341
|
return `col_${idx}`;
|
|
615902
616342
|
}
|
|
@@ -617888,9 +618328,9 @@ pp$7.parseBindingAtom = function() {
|
|
|
617888
618328
|
}
|
|
617889
618329
|
return this.parseIdent();
|
|
617890
618330
|
};
|
|
617891
|
-
pp$7.parseBindingList = function(
|
|
618331
|
+
pp$7.parseBindingList = function(close2, allowEmpty, allowTrailingComma, allowModifiers) {
|
|
617892
618332
|
var elts = [], first = true;
|
|
617893
|
-
while (!this.eat(
|
|
618333
|
+
while (!this.eat(close2)) {
|
|
617894
618334
|
if (first) {
|
|
617895
618335
|
first = false;
|
|
617896
618336
|
} else {
|
|
@@ -617898,7 +618338,7 @@ pp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowMod
|
|
|
617898
618338
|
}
|
|
617899
618339
|
if (allowEmpty && this.type === types$1.comma) {
|
|
617900
618340
|
elts.push(null);
|
|
617901
|
-
} else if (allowTrailingComma && this.afterTrailingComma(
|
|
618341
|
+
} else if (allowTrailingComma && this.afterTrailingComma(close2)) {
|
|
617902
618342
|
break;
|
|
617903
618343
|
} else if (this.type === types$1.ellipsis) {
|
|
617904
618344
|
var rest = this.parseRestBinding();
|
|
@@ -617907,7 +618347,7 @@ pp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowMod
|
|
|
617907
618347
|
if (this.type === types$1.comma) {
|
|
617908
618348
|
this.raiseRecoverable(this.start, "Comma is not permitted after the rest element");
|
|
617909
618349
|
}
|
|
617910
|
-
this.expect(
|
|
618350
|
+
this.expect(close2);
|
|
617911
618351
|
break;
|
|
617912
618352
|
} else {
|
|
617913
618353
|
elts.push(this.parseAssignableListItem(allowModifiers));
|
|
@@ -619073,12 +619513,12 @@ pp$5.checkParams = function(node, allowDuplicates) {
|
|
|
619073
619513
|
this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);
|
|
619074
619514
|
}
|
|
619075
619515
|
};
|
|
619076
|
-
pp$5.parseExprList = function(
|
|
619516
|
+
pp$5.parseExprList = function(close2, allowTrailingComma, allowEmpty, refDestructuringErrors) {
|
|
619077
619517
|
var elts = [], first = true;
|
|
619078
|
-
while (!this.eat(
|
|
619518
|
+
while (!this.eat(close2)) {
|
|
619079
619519
|
if (!first) {
|
|
619080
619520
|
this.expect(types$1.comma);
|
|
619081
|
-
if (allowTrailingComma && this.afterTrailingComma(
|
|
619521
|
+
if (allowTrailingComma && this.afterTrailingComma(close2)) {
|
|
619082
619522
|
break;
|
|
619083
619523
|
}
|
|
619084
619524
|
} else {
|
|
@@ -621569,7 +622009,7 @@ function parse3(input, options) {
|
|
|
621569
622009
|
return Parser.parse(input, options);
|
|
621570
622010
|
}
|
|
621571
622011
|
|
|
621572
|
-
// ../../node_modules/.pnpm/@tigin-backwards+oxygen-not-included-gambling@0.6.
|
|
622012
|
+
// ../../node_modules/.pnpm/@tigin-backwards+oxygen-not-included-gambling@0.6.5/node_modules/@tigin-backwards/oxygen-not-included-gambling/query.js
|
|
621573
622013
|
var OP = {
|
|
621574
622014
|
Nop: 0,
|
|
621575
622015
|
PushI32: 1,
|
|
@@ -622751,7 +623191,7 @@ function registerScanTool(server) {
|
|
|
622751
623191
|
coord: z9.string().min(3).describe("Cluster coord (e.g. 'V-AQU-C-1-0-0-0')."),
|
|
622752
623192
|
spec: z9.object({
|
|
622753
623193
|
constraints: z9.array(constraintSchema).describe(
|
|
622754
|
-
"Builder AST constraint list. v0.4 covers every kind the web app builder supports: world.trait, world.geyser, world.distToHome, world.distTo, world.traitCount, world.oilWells, world.critter, world.plant, world.spawn, world.biomeCount, world.marshyTungstenInMagma, world.niobiumVolcanoAccess, world.sussy, world.trash, world.asteroidRemix, poi.count, map.elementMass, home.geyserNearStart, cluster.geyser, cluster.oilWells, cluster.critter, cluster.plant, cluster.spawn, cluster.sussy, cluster.trash. Call listConstraintKinds (v0.5) for the shape catalog."
|
|
623194
|
+
"Builder AST constraint list. v0.4 covers every kind the web app builder supports: world.trait, world.geyser, world.geyserGodRoll, world.distToHome, world.distTo, world.traitCount, world.oilWells, world.critter, world.plant, world.spawn, world.biomeCount, world.marshyTungstenInMagma, world.niobiumVolcanoAccess, world.sussy, world.trash, world.asteroidRemix, poi.count, destination.count, map.elementMass, home.geyserNearStart, cluster.geyser, cluster.oilWells, cluster.critter, cluster.plant, cluster.spawn, cluster.sussy, cluster.trash. Call listConstraintKinds (v0.5) for the shape catalog."
|
|
622755
623195
|
),
|
|
622756
623196
|
preHook: z9.string().optional().describe(
|
|
622757
623197
|
"v0.6 raw-JS escape hatch. Runs BEFORE Builder requires. Can `return {pass: false}` to skip a seed cheaper than any AST constraint. Async-first: top-level `await worldgen()` works, and an async `{pass: false}` gates the seed. Keep the cheap summary checks (hasTrait etc.) BEFORE the first await so rejected seeds never pay the worldgen cost. Store computed values on `scratch` (per-seed {}) for the postHook to turn into a score. Bindings: summary, seed, worldgen, col, scratch, plus every ADVANCED_HELPERS function (call listHelpers). Forces JS-tier (bytecode won't run). Must not shadow reserved names."
|
|
@@ -622784,8 +623224,10 @@ function registerScanTool(server) {
|
|
|
622784
623224
|
},
|
|
622785
623225
|
async ({ coord, spec, opts }, extra) => {
|
|
622786
623226
|
const constraints = spec.constraints;
|
|
622787
|
-
const
|
|
622788
|
-
const
|
|
623227
|
+
const godRollWindow = specGodRollWindow(constraints, coord);
|
|
623228
|
+
const rangeStart = godRollWindow?.lo ?? opts.seedRangeStart;
|
|
623229
|
+
const rangeEnd = godRollWindow?.hi ?? opts.seedRangeEnd;
|
|
623230
|
+
const rangeNote = godRollWindow ? `Range replaced by the god-roll window: only cluster seeds ${godRollWindow.lo} to ${godRollWindow.hi - 1} can place a geyser that rolled from seed input ${GOD_ROLL_SEED_INPUT}.` : void 0;
|
|
622789
623231
|
const topN = opts.topN;
|
|
622790
623232
|
const sortBy = opts.sortBy;
|
|
622791
623233
|
const order = opts.order;
|
|
@@ -622937,6 +623379,7 @@ function registerScanTool(server) {
|
|
|
622937
623379
|
topN,
|
|
622938
623380
|
rangeStart,
|
|
622939
623381
|
rangeEnd,
|
|
623382
|
+
...rangeNote !== void 0 ? { rangeNote } : {},
|
|
622940
623383
|
sortBy,
|
|
622941
623384
|
...spec.hooksTier !== void 0 ? { declaredHooksTier: spec.hooksTier } : {},
|
|
622942
623385
|
...firstEvalError !== void 0 ? { evalError: firstEvalError } : {},
|
|
@@ -622988,6 +623431,7 @@ function successResponse(a) {
|
|
|
622988
623431
|
totalScanned: a.totalScanned,
|
|
622989
623432
|
seedRangeStart: a.rangeStart,
|
|
622990
623433
|
seedRangeEnd: a.rangeEnd,
|
|
623434
|
+
...a.rangeNote !== void 0 ? { seedRangeNote: a.rangeNote } : {},
|
|
622991
623435
|
rollerBootMs: a.rollerBootMs,
|
|
622992
623436
|
scanMs: a.scanMs,
|
|
622993
623437
|
topN: a.topN,
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onimaxxing/sussy-seeds-mcp",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.4",
|
|
4
4
|
"description": "MCP server for Oxygen Not Included seed hunting. Runs the sussy-seeds wasm scanner over stdio; the LLM composes Builder AST specs and drives cluster / summary / map-tier scans against the game's real worldgen.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude",
|
|
@@ -47,17 +47,18 @@
|
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@modelcontextprotocol/sdk": "1.26.0",
|
|
50
|
-
"@onimaxxing/worldgen-node": "0.33.
|
|
50
|
+
"@onimaxxing/worldgen-node": "0.33.3",
|
|
51
51
|
"zod": "^3.25.0"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@onimaxxing/coord-codec": "workspace:*",
|
|
55
|
+
"@onimaxxing/geyser-roll": "workspace:*",
|
|
55
56
|
"@onimaxxing/i18n": "workspace:*",
|
|
56
57
|
"@onimaxxing/knowledge-graph": "workspace:*",
|
|
57
58
|
"@onimaxxing/prefab-kind": "workspace:*",
|
|
58
|
-
"@onimaxxing/worldgen": "0.33.
|
|
59
|
+
"@onimaxxing/worldgen": "0.33.3",
|
|
59
60
|
"@onimaxxing/worldmaxxing-registry": "workspace:*",
|
|
60
|
-
"@tigin-backwards/oxygen-not-included-gambling": "0.6.
|
|
61
|
+
"@tigin-backwards/oxygen-not-included-gambling": "0.6.5",
|
|
61
62
|
"@tigin-backwards/oxygen-not-included-mod-extensions": "0.13.0",
|
|
62
63
|
"@types/node": "^24.10.1",
|
|
63
64
|
"oxfmt": "0.53.0",
|