Skip to content
Next — unreleased

Defined in: packages/sage/src/world/index.ts:195

Immutable Asteroid projection over a CelestialBody account.

declare const asteroid: AsteroidSnapshot;
console.log(asteroid.details.resources);
  • Omit<AsteroidAccountData, "system">

readonly address: Address;

Defined in: packages/sage/src/world/index.ts:196

readonly details: WorldAsteroidData;

Defined in: packages/sage/src/internal/c4/world.ts:412

Omit.details

readonly game: Address;

Defined in: packages/sage/src/internal/c4/world.ts:398

Omit.game

readonly id: number;

Defined in: packages/sage/src/internal/c4/world.ts:396

Omit.id

readonly kind: "asteroid";

Defined in: packages/sage/src/internal/c4/world.ts:411

Omit.kind

readonly lastSyncAtUnixSeconds: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:401

Omit.lastSyncAtUnixSeconds

readonly name: string;

Defined in: packages/sage/src/internal/c4/world.ts:397

Omit.name

readonly system: EntityRef<"starSystem">;

Defined in: packages/sage/src/world/index.ts:197

readonly systemSequenceId: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:400

Omit.systemSequenceId

readonly version: number;

Defined in: packages/sage/src/internal/c4/world.ts:395

Omit.version

toJSON(): unknown;

Defined in: packages/sage/src/world/index.ts:198

unknown


Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:115

One Claim Stake definition of a tier and whether the Planet suits it.

requiredTagsProvided is true when the Planet provides every tag the definition requires. It is not a complete eligibility verdict: permissions, rent, faction rules and concurrent placements remain chain-authoritative.

declare const entry: PlanetClaimStakePlotDefinition;
console.log(entry.definition.name, entry.requiredTagsProvided);

readonly definition: GameClaimStakeDefinitionData;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:116

readonly requiredTagsProvided: boolean;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:117


Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:95

One plot row of a Planet: the Claim Stakes placed at one Starbase level.

The program records placed stakes per Starbase level row, not per Claim Stake definition. occupied counts every stake in the row, of every tier and including deactivated stakes that still hold their plot. chronology is the stored placement order the program uses to index the row’s stakes.

declare const row: PlanetClaimStakePlotRow;
console.log(row.level, row.occupied);

readonly chronology: readonly Address[];

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:100

readonly level: WorldStarbaseLevel;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:96

readonly levelIndex: number;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:97

readonly occupied: number;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:98

readonly structures: readonly PlanetClaimStakePlotStructure[];

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:99


Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:165

Immutable Claim Stake plot availability of one Planet.

rows always holds the seven plot rows in Starbase level order, and tiers the five Claim Stake tiers in order. starbaseLevel and starbaseLevelIndex come from the Planet’s StarSystem and are absent when that System has no Starbase. Read metadata reports the older of the Planet and StarSystem observations.

declare const plots: PlanetClaimStakePlotsSnapshot;
const open = plots.tiers.filter((tier) => (tier.available ?? 0) > 0);
console.log(plots.name, open.map((tier) => tier.tier));

readonly address: Address;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:167

readonly bodyId: number;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:168

readonly game: Address;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:170

readonly kind: "planetClaimStakePlots";

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:166

readonly name: string;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:169

readonly providedTags: readonly number[];

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:174

readonly rows: readonly PlanetClaimStakePlotRow[];

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:175

readonly optional starbaseLevel?: WorldStarbaseLevel;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:172

readonly optional starbaseLevelIndex?: number;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:173

readonly system: EntityRef<"starSystem">;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:171

readonly tiers: readonly PlanetClaimStakePlotTier[];

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:176

toJSON(): unknown;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:177

unknown


Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:76

One Claim Stake structure recorded on a Planet plot.

active is true while the stored deactivation time is zero. A deactivated structure still occupies its plot until the program removes it from the Planet.

declare const structure: PlanetClaimStakePlotStructure;
console.log(structure.address, structure.active);

readonly active: boolean;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:79

readonly address: Address;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:77

readonly deactivationTimeUnixSeconds: bigint;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:78


Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:139

Plot limits and availability for one Claim Stake tier on a Planet.

plotLimitByLevel, baseRentRateByLevel and basePlacementFeeByLevel list the stored cell of every plot row in starbaseLevelIndex order. A row’s limit caps the stakes of all tiers in that row: placing a stake of this tier needs a row whose occupied count is below this tier’s limit. The program uses the first such row from level-0 up to the System’s Starbase level; placementLevel names it. available sums the free plots of this tier over those rows. Both are absent when the System has no Starbase. Tiers share rows, so availability across tiers does not add up. Definition multipliers and the exact rent and fee settlement remain program-authoritative.

declare const tier: PlanetClaimStakePlotTier;
console.log(tier.tier, tier.available, tier.placementLevel);

readonly optional available?: number;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:145

readonly basePlacementFeeByLevel: readonly WorldFixedValue[];

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:144

readonly baseRentRateByLevel: readonly WorldFixedValue[];

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:143

readonly definitions: readonly PlanetClaimStakePlotDefinition[];

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:147

readonly optional placementLevel?: WorldStarbaseLevel;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:146

readonly plotLimitByLevel: readonly number[];

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:142

readonly tier: ClaimStakeTier;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:140

readonly tierIndex: number;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:141


Defined in: packages/sage/src/world/index.ts:163

One registry-resolved resource row observed in a Planet account.

declare const resource: PlanetResourceItem;
console.log(resource.cargo.name, resource.richness.value);

readonly cargo: CargoDefinitionSummary;

Defined in: packages/sage/src/world/index.ts:164

readonly richness: WorldFixedValue;

Defined in: packages/sage/src/world/index.ts:165


Defined in: packages/sage/src/world/index.ts:175

Immutable Planet resource observation with registry-resolved cargo definitions.

declare const resources: PlanetResourcesSnapshot;
console.log(resources.name, resources.resources);

readonly address: Address;

Defined in: packages/sage/src/world/index.ts:177

readonly bodyId: number;

Defined in: packages/sage/src/world/index.ts:178

readonly game: Address;

Defined in: packages/sage/src/world/index.ts:180

readonly kind: "planetResources";

Defined in: packages/sage/src/world/index.ts:176

readonly lastSyncedAtUnixSeconds: bigint;

Defined in: packages/sage/src/world/index.ts:183

readonly name: string;

Defined in: packages/sage/src/world/index.ts:179

readonly resources: readonly PlanetResourceItem[];

Defined in: packages/sage/src/world/index.ts:184

readonly system: EntityRef<"starSystem">;

Defined in: packages/sage/src/world/index.ts:181

readonly systemSequenceId: bigint;

Defined in: packages/sage/src/world/index.ts:182

toJSON(): unknown;

Defined in: packages/sage/src/world/index.ts:185

unknown


Defined in: packages/sage/src/world/index.ts:150

Immutable Planet projection over a CelestialBody account.

Planet richness gameplay use: unverified. Version-matched program evidence does not establish a consuming activity or formula for the decoded richness values in details.resources. They are distinct from Asteroid richness used by Fleet mining and from separately decoded Claim Stake building resourceExtraction rates.

declare const planet: PlanetSnapshot;
console.log(planet.details.resources);
  • Omit<PlanetAccountData, "system">

readonly address: Address;

Defined in: packages/sage/src/world/index.ts:151

readonly details: WorldPlanetData;

Defined in: packages/sage/src/internal/c4/world.ts:408

Omit.details

readonly game: Address;

Defined in: packages/sage/src/internal/c4/world.ts:398

Omit.game

readonly id: number;

Defined in: packages/sage/src/internal/c4/world.ts:396

Omit.id

readonly kind: "planet";

Defined in: packages/sage/src/internal/c4/world.ts:407

Omit.kind

readonly lastSyncAtUnixSeconds: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:401

Omit.lastSyncAtUnixSeconds

readonly name: string;

Defined in: packages/sage/src/internal/c4/world.ts:397

Omit.name

readonly system: EntityRef<"starSystem">;

Defined in: packages/sage/src/world/index.ts:152

readonly systemSequenceId: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:400

Omit.systemSequenceId

readonly version: number;

Defined in: packages/sage/src/internal/c4/world.ts:395

Omit.version

toJSON(): unknown;

Defined in: packages/sage/src/world/index.ts:153

unknown


Defined in: packages/sage/src/world/starbase-status.ts:163

One upgrade material with its registry-resolved cargo definition.

declare const material: ResolvedStarbaseUpgradeMaterial;
console.log(material.cargo.name, material.remaining);

readonly cargo: CargoDefinitionSummary;

Defined in: packages/sage/src/world/starbase-status.ts:164

readonly cargoId: number;

Defined in: packages/sage/src/world/starbase-status.ts:66

StarbaseUpgradeMaterial.cargoId

readonly complete: boolean;

Defined in: packages/sage/src/world/starbase-status.ts:70

StarbaseUpgradeMaterial.complete

readonly crew: number;

Defined in: packages/sage/src/world/starbase-status.ts:71

StarbaseUpgradeMaterial.crew

readonly deposited: bigint;

Defined in: packages/sage/src/world/starbase-status.ts:68

StarbaseUpgradeMaterial.deposited

readonly durationSeconds: number;

Defined in: packages/sage/src/world/starbase-status.ts:72

StarbaseUpgradeMaterial.durationSeconds

readonly needed: bigint;

Defined in: packages/sage/src/world/starbase-status.ts:67

StarbaseUpgradeMaterial.needed

readonly remaining: bigint;

Defined in: packages/sage/src/world/starbase-status.ts:69

StarbaseUpgradeMaterial.remaining


Defined in: packages/sage/src/world/starbase-status.ts:175

Upgrade progress whose materials carry resolved cargo definitions.

declare const upgrade: ResolvedStarbaseUpgradeProgress;
console.log(upgrade.materials.map((material) => material.cargo.name));

readonly complete: boolean;

Defined in: packages/sage/src/world/starbase-status.ts:90

StarbaseUpgradeProgress.complete

readonly materials: readonly ResolvedStarbaseUpgradeMaterial[];

Defined in: packages/sage/src/world/starbase-status.ts:179

readonly toLevel: WorldStarbaseLevel;

Defined in: packages/sage/src/world/starbase-status.ts:89

StarbaseUpgradeProgress.toLevel


Defined in: packages/sage/src/world/starbase-status.ts:102

Whether one Starbase service is enabled at the current level.

declare const service: StarbaseServiceAvailability;
if (service.available) console.log('enabled since', service.enabledFromLevel);

readonly available: boolean;

Defined in: packages/sage/src/world/starbase-status.ts:104

readonly enabledFromLevel: WorldStarbaseLevel;

Defined in: packages/sage/src/world/starbase-status.ts:103


Defined in: packages/sage/src/world/starbase-status.ts:123

Derived status of the shared Starbase nested in one StarSystem.

current pairs the stored hull and shield points with the maximums the current level configures. pendingHullPoints mirrors the stored pendingHp field as is: the pinned contract only names it, so the SDK makes no claim about when or how the program settles it into hullPoints. timing values are raw Unix seconds, as on the Fleet combat status; shield and hull settlement rules are likewise unqualified. upgrade is absent once the Starbase has reached its maximum level.

declare const status: StarbaseStatus;
console.log(status.level, status.current.hullPoints, status.current.maxHullPoints);

readonly atMaxLevel: boolean;

Defined in: packages/sage/src/world/starbase-status.ts:130

readonly current: {
hullPoints: number;
maxHullPoints: number;
maxShieldPoints: number;
pendingHullPoints: number;
shieldPoints: number;
};

Defined in: packages/sage/src/world/starbase-status.ts:133

readonly hullPoints: number;
readonly maxHullPoints: number;
readonly maxShieldPoints: number;
readonly pendingHullPoints: number;
readonly shieldPoints: number;

readonly kind: "starbaseStatus";

Defined in: packages/sage/src/world/starbase-status.ts:124

readonly level: WorldStarbaseLevel;

Defined in: packages/sage/src/world/starbase-status.ts:126

readonly levelIndex: number;

Defined in: packages/sage/src/world/starbase-status.ts:128

Ordinal from starbaseLevelIndex; the Central Space Station is 6.

readonly levelInfo: WorldStarbaseLevelInfoData;

Defined in: packages/sage/src/world/starbase-status.ts:132

Configured values for the current level, copied from the level table.

readonly maxLevel: WorldStarbaseLevel;

Defined in: packages/sage/src/world/starbase-status.ts:129

readonly owner: WorldFaction;

Defined in: packages/sage/src/world/starbase-status.ts:125

readonly services: {
localMarket: StarbaseServiceAvailability;
repair: StarbaseServiceAvailability;
};

Defined in: packages/sage/src/world/starbase-status.ts:147

readonly localMarket: StarbaseServiceAvailability;
readonly repair: StarbaseServiceAvailability;

readonly timing: {
builtOrDestroyedAtUnixSeconds: bigint;
lastCombatUpdateAtUnixSeconds: bigint;
shieldBreakDelayEndsAtUnixSeconds: bigint;
};

Defined in: packages/sage/src/world/starbase-status.ts:140

readonly builtOrDestroyedAtUnixSeconds: bigint;

When the Starbase was last built or destroyed.

readonly lastCombatUpdateAtUnixSeconds: bigint;
readonly shieldBreakDelayEndsAtUnixSeconds: bigint;

When shield points may resume regenerating after reaching zero.

readonly optional upgrade?: StarbaseUpgradeProgress;

Defined in: packages/sage/src/world/starbase-status.ts:151

toJSON(): unknown;

Defined in: packages/sage/src/world/starbase-status.ts:152

unknown


Defined in: packages/sage/src/world/starbase-status.ts:193

Immutable shared Starbase status read for one StarSystem.

address is the StarSystem address: the nested Starbase has no account of its own. Read metadata comes from the StarSystem observation.

declare const status: StarbaseStatusSnapshot;
console.log(status.systemName, status.upgrade?.materials[0]?.cargo.name);

readonly address: Address;

Defined in: packages/sage/src/world/starbase-status.ts:197

readonly atMaxLevel: boolean;

Defined in: packages/sage/src/world/starbase-status.ts:130

StarbaseStatus.atMaxLevel

readonly current: {
hullPoints: number;
maxHullPoints: number;
maxShieldPoints: number;
pendingHullPoints: number;
shieldPoints: number;
};

Defined in: packages/sage/src/world/starbase-status.ts:133

readonly hullPoints: number;
readonly maxHullPoints: number;
readonly maxShieldPoints: number;
readonly pendingHullPoints: number;
readonly shieldPoints: number;

StarbaseStatus.current

readonly kind: "starbaseStatus";

Defined in: packages/sage/src/world/starbase-status.ts:124

StarbaseStatus.kind

readonly level: WorldStarbaseLevel;

Defined in: packages/sage/src/world/starbase-status.ts:126

StarbaseStatus.level

readonly levelIndex: number;

Defined in: packages/sage/src/world/starbase-status.ts:128

Ordinal from starbaseLevelIndex; the Central Space Station is 6.

StarbaseStatus.levelIndex

readonly levelInfo: WorldStarbaseLevelInfoData;

Defined in: packages/sage/src/world/starbase-status.ts:132

Configured values for the current level, copied from the level table.

StarbaseStatus.levelInfo

readonly maxLevel: WorldStarbaseLevel;

Defined in: packages/sage/src/world/starbase-status.ts:129

StarbaseStatus.maxLevel

readonly owner: WorldFaction;

Defined in: packages/sage/src/world/starbase-status.ts:125

StarbaseStatus.owner

readonly services: {
localMarket: StarbaseServiceAvailability;
repair: StarbaseServiceAvailability;
};

Defined in: packages/sage/src/world/starbase-status.ts:147

readonly localMarket: StarbaseServiceAvailability;
readonly repair: StarbaseServiceAvailability;

StarbaseStatus.services

readonly system: EntityRef<"starSystem">;

Defined in: packages/sage/src/world/starbase-status.ts:198

readonly systemName: string;

Defined in: packages/sage/src/world/starbase-status.ts:199

readonly timing: {
builtOrDestroyedAtUnixSeconds: bigint;
lastCombatUpdateAtUnixSeconds: bigint;
shieldBreakDelayEndsAtUnixSeconds: bigint;
};

Defined in: packages/sage/src/world/starbase-status.ts:140

readonly builtOrDestroyedAtUnixSeconds: bigint;

When the Starbase was last built or destroyed.

readonly lastCombatUpdateAtUnixSeconds: bigint;
readonly shieldBreakDelayEndsAtUnixSeconds: bigint;

When shield points may resume regenerating after reaching zero.

StarbaseStatus.timing

readonly optional upgrade?: ResolvedStarbaseUpgradeProgress;

Defined in: packages/sage/src/world/starbase-status.ts:200

toJSON(): unknown;

Defined in: packages/sage/src/world/starbase-status.ts:152

unknown

StarbaseStatus.toJSON


Defined in: packages/sage/src/world/starbase-status.ts:65

One material a shared Starbase needs before it can reach its next level.

needed, deposited and remaining are raw cargo units. complete is true once deposited has reached needed. crew and durationSeconds describe one contribution of this material: a Starbase Player installs it through its own StarbaseUpgradeProcess, which the starbases entry reads separately.

declare const material: StarbaseUpgradeMaterial;
console.log(material.cargoId, material.remaining);

readonly cargoId: number;

Defined in: packages/sage/src/world/starbase-status.ts:66

readonly complete: boolean;

Defined in: packages/sage/src/world/starbase-status.ts:70

readonly crew: number;

Defined in: packages/sage/src/world/starbase-status.ts:71

readonly deposited: bigint;

Defined in: packages/sage/src/world/starbase-status.ts:68

readonly durationSeconds: number;

Defined in: packages/sage/src/world/starbase-status.ts:72

readonly needed: bigint;

Defined in: packages/sage/src/world/starbase-status.ts:67

readonly remaining: bigint;

Defined in: packages/sage/src/world/starbase-status.ts:69


Defined in: packages/sage/src/world/starbase-status.ts:88

Shared progress of a Starbase toward its next level.

complete is true when every listed material is fully deposited. The pinned contract states that the Starbase should then change level and reset the deposits; the program applies that change, the SDK only reports the stored state.

declare const upgrade: StarbaseUpgradeProgress;
console.log(upgrade.toLevel, upgrade.complete);

readonly complete: boolean;

Defined in: packages/sage/src/world/starbase-status.ts:90

readonly materials: readonly StarbaseUpgradeMaterial[];

Defined in: packages/sage/src/world/starbase-status.ts:91

readonly toLevel: WorldStarbaseLevel;

Defined in: packages/sage/src/world/starbase-status.ts:89


Defined in: packages/sage/src/internal/c4/world.ts:271

SDK-owned decoded StarSystem data.

declare const system: StarSystemAccountData;
console.log(system.coordinates);

readonly celestialBodyAddresses: readonly Address[];

Defined in: packages/sage/src/internal/c4/world.ts:282

readonly connections: readonly WorldConnectionData[];

Defined in: packages/sage/src/internal/c4/world.ts:281

readonly coordinates: WorldCoordinates;

Defined in: packages/sage/src/internal/c4/world.ts:277

readonly coordinatesRaw: {
x: bigint;
y: bigint;
};

Defined in: packages/sage/src/internal/c4/world.ts:279

Exact stored I8F56 coordinates for movement arithmetic.

readonly x: bigint;
readonly y: bigint;

readonly game: Address;

Defined in: packages/sage/src/internal/c4/world.ts:273

readonly name: string;

Defined in: packages/sage/src/internal/c4/world.ts:275

readonly optional regionId?: number;

Defined in: packages/sage/src/internal/c4/world.ts:276

readonly sequenceId: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:280

readonly optional starbase?: WorldStarbaseData;

Defined in: packages/sage/src/internal/c4/world.ts:283

readonly systemId: number;

Defined in: packages/sage/src/internal/c4/world.ts:274

readonly version: number;

Defined in: packages/sage/src/internal/c4/world.ts:272


Defined in: packages/sage/src/world/index.ts:124

Immutable, translated StarSystem snapshot including nested shared Starbase data.

declare const system: StarSystemSnapshot;
console.log(system.name, system.coordinates);

readonly address: Address;

Defined in: packages/sage/src/world/index.ts:126

readonly celestialBodyAddresses: readonly Address[];

Defined in: packages/sage/src/internal/c4/world.ts:282

StarSystemAccountData.celestialBodyAddresses

readonly connections: readonly WorldConnectionData[];

Defined in: packages/sage/src/internal/c4/world.ts:281

StarSystemAccountData.connections

readonly coordinates: WorldCoordinates;

Defined in: packages/sage/src/internal/c4/world.ts:277

StarSystemAccountData.coordinates

readonly coordinatesRaw: {
x: bigint;
y: bigint;
};

Defined in: packages/sage/src/internal/c4/world.ts:279

Exact stored I8F56 coordinates for movement arithmetic.

readonly x: bigint;
readonly y: bigint;

StarSystemAccountData.coordinatesRaw

readonly game: Address;

Defined in: packages/sage/src/internal/c4/world.ts:273

StarSystemAccountData.game

readonly kind: "starSystem";

Defined in: packages/sage/src/world/index.ts:125

readonly name: string;

Defined in: packages/sage/src/internal/c4/world.ts:275

StarSystemAccountData.name

readonly optional regionId?: number;

Defined in: packages/sage/src/internal/c4/world.ts:276

StarSystemAccountData.regionId

readonly sequenceId: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:280

StarSystemAccountData.sequenceId

readonly optional starbase?: WorldStarbaseData;

Defined in: packages/sage/src/internal/c4/world.ts:283

StarSystemAccountData.starbase

readonly systemId: number;

Defined in: packages/sage/src/internal/c4/world.ts:274

StarSystemAccountData.systemId

readonly version: number;

Defined in: packages/sage/src/internal/c4/world.ts:272

StarSystemAccountData.version

toJSON(): unknown;

Defined in: packages/sage/src/world/index.ts:127

unknown


Defined in: packages/sage/src/internal/c4/world.ts:390

Fully translated Asteroid projection data.

declare const asteroid: WorldAsteroidData;
console.log(asteroid.resources);

readonly resources: readonly WorldAsteroidResourceData[];

Defined in: packages/sage/src/internal/c4/world.ts:391


Defined in: packages/sage/src/internal/c4/world.ts:376

One translated Asteroid resource state.

declare const resource: WorldAsteroidResourceData;
console.log(resource.amountMined);

readonly amountMined: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:379

readonly cargoId: number;

Defined in: packages/sage/src/internal/c4/world.ts:377

readonly miners: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:380

readonly richness: WorldFixedValue;

Defined in: packages/sage/src/internal/c4/world.ts:378


Defined in: packages/sage/src/internal/c4/world.ts:311

One translated nested Claim Stake structure group.

declare const group: WorldClaimStakeGroupData;
console.log(group.structures);

readonly chronoAddresses: readonly Address[];

Defined in: packages/sage/src/internal/c4/world.ts:314

readonly key: number;

Defined in: packages/sage/src/internal/c4/world.ts:312

readonly offset: number;

Defined in: packages/sage/src/internal/c4/world.ts:313

readonly structures: readonly WorldStructureData[];

Defined in: packages/sage/src/internal/c4/world.ts:315


Defined in: packages/sage/src/internal/c4/world.ts:120

Unit-explicit warp-lane costs for one connected system.

declare const costs: WorldConnectionCosts;
console.log(costs.level1Atlas);

readonly cssAtlas: number;

Defined in: packages/sage/src/internal/c4/world.ts:132

readonly cssRaw: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:131

readonly level1Atlas: number;

Defined in: packages/sage/src/internal/c4/world.ts:122

readonly level1Raw: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:121

readonly level2Atlas: number;

Defined in: packages/sage/src/internal/c4/world.ts:124

readonly level2Raw: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:123

readonly level3Atlas: number;

Defined in: packages/sage/src/internal/c4/world.ts:126

readonly level3Raw: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:125

readonly level4Atlas: number;

Defined in: packages/sage/src/internal/c4/world.ts:128

readonly level4Raw: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:127

readonly level5Atlas: number;

Defined in: packages/sage/src/internal/c4/world.ts:130

readonly level5Raw: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:129


Defined in: packages/sage/src/internal/c4/world.ts:142

One StarSystem connection keyed by the connected system id.

declare const connection: WorldConnectionData;
console.log(connection.systemId);

readonly costs: WorldConnectionCosts;

Defined in: packages/sage/src/internal/c4/world.ts:144

readonly systemId: number;

Defined in: packages/sage/src/internal/c4/world.ts:143


Defined in: packages/sage/src/internal/c4/world.ts:228

One nested Crafting Hab group retained as shared Starbase data.

declare const hab: WorldCraftingHabData;
console.log(hab.structures);

readonly chronoAddresses: readonly Address[];

Defined in: packages/sage/src/internal/c4/world.ts:231

readonly key: number;

Defined in: packages/sage/src/internal/c4/world.ts:229

readonly offset: number;

Defined in: packages/sage/src/internal/c4/world.ts:230

readonly structures: readonly WorldStructureData[];

Defined in: packages/sage/src/internal/c4/world.ts:232


Defined in: packages/sage/src/internal/c4/world.ts:80

A translated fixed-point world value retaining its exact source integer.

const value: WorldFixedValue = { raw: 65_536n, value: 1 };

readonly raw: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:81

readonly value: number;

Defined in: packages/sage/src/internal/c4/world.ts:82


Defined in: packages/sage/src/internal/c4/world.ts:340

Fully translated Planet projection data.

declare const planet: WorldPlanetData;
console.log(planet.resources);

readonly baseClaimStakePlacementFee: readonly readonly WorldFixedValue[][];

Defined in: packages/sage/src/internal/c4/world.ts:359

Base placement fee per plot, indexed like claimStakePlots.

readonly baseClaimStakeRentRate: readonly readonly WorldFixedValue[][];

Defined in: packages/sage/src/internal/c4/world.ts:357

Base rent rate per plot, indexed like claimStakePlots.

readonly claimedPlots: readonly WorldClaimStakeGroupData[];

Defined in: packages/sage/src/internal/c4/world.ts:366

Placed Claim Stake groups keyed by plot row, the Starbase level index that also indexes claimStakePlots. Each group lists the stakes of every tier placed in that row and their placement chronology.

readonly claimedPlotsUnsizedLength: number;

Defined in: packages/sage/src/internal/c4/world.ts:362

readonly claimStakePlots: readonly readonly number[][];

Defined in: packages/sage/src/internal/c4/world.ts:355

Plot counts indexed [starbaseLevelIndex][claimStakeTierIndex]: seven Starbase level rows (level-0 .. level-5, css) and five Claim Stake tier columns (one .. five).

readonly providedTags: readonly number[];

Defined in: packages/sage/src/internal/c4/world.ts:361

readonly resources: readonly WorldPlanetResourceData[];

Defined in: packages/sage/src/internal/c4/world.ts:360

readonly optional subtype?: WorldPlanetSubtype;

Defined in: packages/sage/src/internal/c4/world.ts:351

Category from the current C4 numeric tag mapping. Undefined when absent, conflicting, or tagged as an asteroid; raw providedTags remain available. Unrelated tags do not suppress a recognized category. Shares the body’s account observation and cache; no separate definition read is performed.

declare const planet: WorldPlanetData;
console.log(planet.subtype ?? 'unknown');

Defined in: packages/sage/src/internal/c4/world.ts:299

One translated Planet resource richness value.

Planet richness gameplay use: unverified. Version-matched program evidence does not establish a consuming activity or formula for this decoded Planet account value. It is distinct from Asteroid richness used by Fleet mining and from separately decoded Claim Stake building resourceExtraction rates.

declare const resource: WorldPlanetResourceData;
console.log(resource.richness.value);

readonly cargoId: number;

Defined in: packages/sage/src/internal/c4/world.ts:300

readonly richness: WorldFixedValue;

Defined in: packages/sage/src/internal/c4/world.ts:301


Defined in: packages/sage/src/internal/c4/world.ts:242

Fully translated nested shared Starbase data.

declare const starbase: WorldStarbaseData;
console.log(starbase.owner, starbase.level);

readonly baseCraftingHabPlacementFee: readonly readonly WorldFixedValue[][];

Defined in: packages/sage/src/internal/c4/world.ts:255

readonly baseCraftingHabRentRate: readonly readonly WorldFixedValue[][];

Defined in: packages/sage/src/internal/c4/world.ts:254

readonly buildingTags: readonly number[];

Defined in: packages/sage/src/internal/c4/world.ts:258

readonly builtDestroyedAtUnixSeconds: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:252

readonly craftingHabPlots: readonly readonly number[][];

Defined in: packages/sage/src/internal/c4/world.ts:253

readonly craftingHabs: readonly WorldCraftingHabData[];

Defined in: packages/sage/src/internal/c4/world.ts:261

readonly craftingHabsUnsizedLength: number;

Defined in: packages/sage/src/internal/c4/world.ts:260

readonly hp: number;

Defined in: packages/sage/src/internal/c4/world.ts:247

readonly lastCombatUpdateUnixSeconds: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:251

readonly level: WorldStarbaseLevel;

Defined in: packages/sage/src/internal/c4/world.ts:244

readonly localMarketEnableLevel: WorldStarbaseLevel;

Defined in: packages/sage/src/internal/c4/world.ts:245

readonly locationTags: readonly number[];

Defined in: packages/sage/src/internal/c4/world.ts:257

readonly maxLevel: WorldStarbaseMaxLevelData;

Defined in: packages/sage/src/internal/c4/world.ts:256

readonly owner: WorldFaction;

Defined in: packages/sage/src/internal/c4/world.ts:243

readonly pendingHp: number;

Defined in: packages/sage/src/internal/c4/world.ts:248

readonly repairEnableLevel: WorldStarbaseLevel;

Defined in: packages/sage/src/internal/c4/world.ts:246

readonly shieldBreakDelayExpiresAtUnixSeconds: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:250

readonly sp: number;

Defined in: packages/sage/src/internal/c4/world.ts:249

readonly validRecipeIds: readonly number[];

Defined in: packages/sage/src/internal/c4/world.ts:259


Defined in: packages/sage/src/internal/c4/world.ts:191

One translated level inside the Starbase maximum-level union.

declare const level: WorldStarbaseLevelData;
console.log(level.upgrades);

readonly info: WorldStarbaseLevelInfoData;

Defined in: packages/sage/src/internal/c4/world.ts:193

readonly level: WorldStarbaseLevel;

Defined in: packages/sage/src/internal/c4/world.ts:192

readonly upgrades: readonly WorldStarbaseUpgradeData[];

Defined in: packages/sage/src/internal/c4/world.ts:194


Defined in: packages/sage/src/internal/c4/world.ts:154

Fully translated combat/economy values for one Starbase level.

declare const info: WorldStarbaseLevelInfoData;
console.log(info.repairFeeAtlas);

readonly damagePerRound: number;

Defined in: packages/sage/src/internal/c4/world.ts:166

readonly hp: number;

Defined in: packages/sage/src/internal/c4/world.ts:155

readonly repairAbility: WorldFixedValue;

Defined in: packages/sage/src/internal/c4/world.ts:161

readonly repairCost: WorldFixedValue;

Defined in: packages/sage/src/internal/c4/world.ts:163

readonly repairEfficiency: WorldFixedValue;

Defined in: packages/sage/src/internal/c4/world.ts:162

readonly repairFeeAtlas: number;

Defined in: packages/sage/src/internal/c4/world.ts:165

readonly repairFeeRaw: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:164

readonly repairRate: WorldFixedValue;

Defined in: packages/sage/src/internal/c4/world.ts:160

readonly shieldBreakDelaySeconds: number;

Defined in: packages/sage/src/internal/c4/world.ts:158

readonly shieldRechargeRate: WorldFixedValue;

Defined in: packages/sage/src/internal/c4/world.ts:159

readonly sp: number;

Defined in: packages/sage/src/internal/c4/world.ts:156

readonly xp: WorldFixedValue;

Defined in: packages/sage/src/internal/c4/world.ts:157


Defined in: packages/sage/src/internal/c4/world.ts:204

Plain replacement for the generated StarbaseMaxLevel union.

declare const maximum: WorldStarbaseMaxLevelData;
console.log(maximum.kind);

readonly kind: WorldStarbaseLevel;

Defined in: packages/sage/src/internal/c4/world.ts:205

readonly levels: readonly WorldStarbaseLevelData[];

Defined in: packages/sage/src/internal/c4/world.ts:206


Defined in: packages/sage/src/internal/c4/world.ts:176

One cargo deposit requirement for an intermediate Starbase level.

declare const upgrade: WorldStarbaseUpgradeData;
console.log(upgrade.cargoId);

readonly cargoId: number;

Defined in: packages/sage/src/internal/c4/world.ts:177

readonly crew: number;

Defined in: packages/sage/src/internal/c4/world.ts:180

readonly deposited: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:179

readonly durationSeconds: number;

Defined in: packages/sage/src/internal/c4/world.ts:181

readonly needed: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:178


Defined in: packages/sage/src/internal/c4/world.ts:216

One nested shared structure value from Starbase crafting-hab data.

declare const structure: WorldStructureData;
console.log(structure.address);

readonly address: Address;

Defined in: packages/sage/src/internal/c4/world.ts:217

readonly deactivationTimeUnixSeconds: bigint;

Defined in: packages/sage/src/internal/c4/world.ts:218

type CelestialBodyDiscoveryOptions = Omit<DiscoveryRequest, "filters" | "strategy">;

Defined in: packages/sage/src/world/index.ts:112

Options for discovering Celestial Bodies across the configured Game.

const options: CelestialBodyDiscoveryOptions = { commitment: 'confirmed' };

type CelestialBodySnapshot =
| PlanetSnapshot
| AsteroidSnapshot;

Defined in: packages/sage/src/world/index.ts:208

A translated CelestialBody snapshot projected as a Planet or Asteroid.

declare const body: CelestialBodySnapshot;
if (body.kind === 'planet') console.log(body.details.claimStakePlots);

type ClaimStakeTier = C4ClaimStakeTier;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:38

Claim Stake tier label, the column axis of Planet plot tables.

const tier: ClaimStakeTier = 'two';

type StarSystemDiscoveryOptions = Omit<DiscoveryRequest, "filters" | "strategy"> & {
regionId?: number;
};

Defined in: packages/sage/src/world/index.ts:98

Options supported by galaxy-scale StarSystem discovery.

readonly optional regionId?: number;

Limits discovery to StarSystems whose fixed-width region field contains this unsigned 16-bit id.

const options: StarSystemDiscoveryOptions = {
commitment: 'confirmed',
regionId: 3,
};

type WorldFaction = "unaligned" | "mud" | "oni" | "ustur";

Defined in: packages/sage/src/internal/c4/world.ts:102

Human-readable faction labels used by shared Starbase data.

const faction: WorldFaction = 'mud';

type WorldPlanetSubtype =
| "terrestrial"
| "volcanic"
| "barren"
| "gas-giant"
| "ice-giant"
| "dark"
| "oceanic";

Defined in: packages/sage/src/internal/c4/world.ts:324

Planet category interpreted from on-chain building tags using the verified C4 mapping.

const subtype: WorldPlanetSubtype = 'ice-giant';

type WorldStarbaseLevel =
| "level-0"
| "level-1"
| "level-2"
| "level-3"
| "level-4"
| "level-5"
| "css";

Defined in: packages/sage/src/internal/c4/world.ts:110

Human-readable Starbase level labels.

const level: WorldStarbaseLevel = 'level-1';

function claimStakeTierIndex(tier): number;

Defined in: packages/sage/src/world/planet-claim-stake-plots.ts:60

Returns the zero-based column index of a Claim Stake tier.

Planet plot, base rent and base placement-fee tables are indexed [starbaseLevelIndex][claimStakeTierIndex]: seven Starbase level rows and five tier columns.

ParameterType
tierClaimStakeTier

number

declare const planet: PlanetSnapshot;
const level1TierTwo = planet.details.claimStakePlots[1]![claimStakeTierIndex('two')];

function deriveStarbaseStatus(starbase): StarbaseStatus;

Defined in: packages/sage/src/world/starbase-status.ts:279

Derives the status of a shared Starbase from already-loaded StarSystem data.

This is pure and network-free: it needs neither the context nor the Game definitions registry, so galaxy-map readers can call it on every System they already hold. The result is a new deeply frozen value; the input is left untouched. Materials carry numeric cargo ids; use getStarbaseStatus when you want them resolved to cargo definitions.

ParameterType
starbaseWorldStarbaseData

StarbaseStatus

declare const system: StarSystemSnapshot;
if (system.starbase !== undefined) {
const status = deriveStarbaseStatus(system.starbase);
console.log(status.level, status.upgrade?.toLevel);
}

function distanceBetweenStarSystems(from, to): number;

Defined in: packages/sage/src/world/index.ts:789

Returns Euclidean distance between two SAGE coordinates.

ParameterType
fromWorldCoordinates
toWorldCoordinates

number

const distance = distanceBetweenStarSystems({ x: 0, y: 0 }, { x: 3, y: 4 });

function findCelestialBodyPda(game, bodyId): Promise<Address>;

Defined in: packages/sage/src/world/index.ts:405

Derives the CelestialBody PDA for a Game and numeric body id.

ParameterType
gameAddress
bodyIdnumber

Promise<Address>

declare const game: Address;
const address = await findCelestialBodyPda(game, 11);

function findStarSystemPda(game, systemId): Promise<Address>;

Defined in: packages/sage/src/world/index.ts:391

Derives the StarSystem PDA for a Game and numeric system id.

ParameterType
gameAddress
systemIdnumber

Promise<Address>

declare const game: Address;
const address = await findStarSystemPda(game, 1);

function getAllCelestialBodies(ctx, options?): Promise<readonly CelestialBodySnapshot[]>;

Defined in: packages/sage/src/world/index.ts:683

Discovers every Celestial Body for the configured Game without system fan-out.

Uses one discovery response, with configured indexer precedence and otherwise targeted program-account filters. The context’s maxDiscoveryResults rejects an oversized response. Results reuse the address-keyed account cache; no Game definitions are loaded. Resource values are observations, not static catalogs.

ParameterType
ctxSageContext
optionsCelestialBodyDiscoveryOptions

Promise<readonly CelestialBodySnapshot[]>

declare const ctx: SageContext;
const bodies = await getAllCelestialBodies(ctx);
console.log(bodies.map(body => body.name));

function getAsteroids(
ctx,
systemAddress,
options?): Promise<readonly AsteroidSnapshot[]>;

Defined in: packages/sage/src/world/index.ts:768

Returns only Asteroid projections in one StarSystem.

ParameterType
ctxSageContext
systemAddressAddress
options?ReadOptions

Promise<readonly AsteroidSnapshot[]>

declare const ctx: SageContext;
declare const systemAddress: Address;
const asteroids = await getAsteroids(ctx, systemAddress);

function getCelestialBodies(
ctx,
systemAddress,
options?): Promise<readonly CelestialBodySnapshot[]>;

Defined in: packages/sage/src/world/index.ts:707

Traverses a StarSystem’s stored CelestialBody addresses with explicit reads.

ParameterType
ctxSageContext
systemAddressAddress
options?ReadOptions

Promise<readonly CelestialBodySnapshot[]>

declare const ctx: SageContext;
declare const systemAddress: Address;
const bodies = await getCelestialBodies(ctx, systemAddress);

function getCelestialBody(
ctx,
address,
options?): Promise<CelestialBodySnapshot>;

Defined in: packages/sage/src/world/index.ts:541

Reads a required CelestialBody by account address.

ParameterType
ctxSageContext
addressAddress
options?ReadOptions

Promise<CelestialBodySnapshot>

declare const ctx: SageContext;
declare const address: Address;
const body = await getCelestialBody(ctx, address);

function getCelestialBodyById(
ctx,
bodyId,
options?): Promise<CelestialBodySnapshot>;

Defined in: packages/sage/src/world/index.ts:649

Derives and reads a CelestialBody by its Game-scoped numeric id.

ParameterType
ctxSageContext
bodyIdnumber
options?ReadOptions

Promise<CelestialBodySnapshot>

declare const ctx: SageContext;
const body = await getCelestialBodyById(ctx, 11);

function getCelestialBodyCoordinates(
ctx,
bodyAddress,
options?): Promise<WorldCoordinates>;

Defined in: packages/sage/src/world/index.ts:804

Resolves a CelestialBody’s stored StarSystem relation to its coordinates.

ParameterType
ctxSageContext
bodyAddressAddress
options?ReadOptions

Promise<WorldCoordinates>

declare const ctx: SageContext;
declare const bodyAddress: Address;
const coordinates = await getCelestialBodyCoordinates(ctx, bodyAddress);

function getPlanetClaimStakePlots(
ctx,
planet,
options?): Promise<PlanetClaimStakePlotsSnapshot>;

Defined in: packages/sage/src/world/index.ts:600

Reads one Planet and its StarSystem, then summarizes Claim Stake plot occupancy per Starbase level row and availability for every tier.

The Planet and System stay on the shared account cache; Claim Stake definitions load lazily through the registry. The program records stakes per Starbase level row, and every tier shares a row’s occupancy, so availability is per tier across the rows up to the System’s Starbase level, matching the placement planner’s check. A Planet whose System has no Starbase still lists its rows and plot limits by level, but no availability. An Asteroid address is rejected: only Planets carry Claim Stake plots.

ParameterType
ctxSageContext
planetAddress
options?ReadOptions

Promise<PlanetClaimStakePlotsSnapshot>

declare const ctx: SageContext;
declare const planet: Address;
const plots = await getPlanetClaimStakePlots(ctx, planet);
for (const tier of plots.tiers) {
console.log(tier.tier, tier.available, tier.placementLevel);
}

function getPlanetResources(
context,
planet,
options?): Promise<PlanetResourcesSnapshot>;

Defined in: packages/sage/src/world/index.ts:567

Reads one Planet resource observation and resolves every cargo definition.

The Planet stays on the shared CelestialBody account cache. Cargo definitions load lazily through the registry and do not imply that the body and catalog were observed atomically. Unknown cargo ids reject the whole read.

ParameterType
contextSageContext
planetAddress
options?ReadOptions

Promise<PlanetResourcesSnapshot>

declare const ctx: SageContext;
declare const planet: Address;
const snapshot = await getPlanetResources(ctx, planet);
console.log(snapshot.resources[0]?.cargo.name);

function getPlanets(
ctx,
systemAddress,
options?): Promise<readonly PlanetSnapshot[]>;

Defined in: packages/sage/src/world/index.ts:745

Returns only Planet projections in one StarSystem.

ParameterType
ctxSageContext
systemAddressAddress
options?ReadOptions

Promise<readonly PlanetSnapshot[]>

declare const ctx: SageContext;
declare const systemAddress: Address;
const planets = await getPlanets(ctx, systemAddress);

function getStarbaseStatus(
ctx,
system,
options?): Promise<
| StarbaseStatusSnapshot
| undefined>;

Defined in: packages/sage/src/world/index.ts:447

Reads one StarSystem and derives the status of its shared Starbase.

Returns undefined when the System exists but has no Starbase; a missing System account still throws. The StarSystem stays on the shared account cache. Upgrade materials resolve lazily through the definitions registry, so a Starbase at its maximum level never loads the Game definitions.

ParameterType
ctxSageContext
systemAddress
options?ReadOptions

Promise< | StarbaseStatusSnapshot | undefined>

declare const ctx: SageContext;
declare const system: Address;
const status = await getStarbaseStatus(ctx, system);
console.log(status?.level, status?.current.hullPoints);

function getStarSystem(
ctx,
address,
options?): Promise<StarSystemSnapshot>;

Defined in: packages/sage/src/world/index.ts:420

Reads a required StarSystem by account address.

ParameterType
ctxSageContext
addressAddress
options?ReadOptions

Promise<StarSystemSnapshot>

declare const ctx: SageContext;
declare const address: Address;
const system = await getStarSystem(ctx, address);

function getStarSystemById(
ctx,
systemId,
options?): Promise<StarSystemSnapshot>;

Defined in: packages/sage/src/world/index.ts:489

Derives and reads a StarSystem by its Game-scoped numeric id.

ParameterType
ctxSageContext
systemIdnumber
options?ReadOptions

Promise<StarSystemSnapshot>

declare const ctx: SageContext;
const system = await getStarSystemById(ctx, 1);

function getStarSystems(ctx, options?): Promise<readonly StarSystemSnapshot[]>;

Defined in: packages/sage/src/world/index.ts:515

Discovers StarSystems for the configured Game with stable targeted filters.

ParameterType
ctxSageContext
optionsStarSystemDiscoveryOptions

Promise<readonly StarSystemSnapshot[]>

declare const ctx: SageContext;
const systems = await getStarSystems(ctx, { regionId: 3 });

function maybeGetCelestialBody(
ctx,
address,
options?): Promise<
| CelestialBodySnapshot
| undefined>;

Defined in: packages/sage/src/world/index.ts:626

Reads an optional CelestialBody by account address.

ParameterType
ctxSageContext
addressAddress
options?ReadOptions

Promise< | CelestialBodySnapshot | undefined>

declare const ctx: SageContext;
declare const address: Address;
const body = await maybeGetCelestialBody(ctx, address);

function maybeGetStarSystem(
ctx,
address,
options?): Promise<
| StarSystemSnapshot
| undefined>;

Defined in: packages/sage/src/world/index.ts:466

Reads an optional StarSystem by account address.

ParameterType
ctxSageContext
addressAddress
options?ReadOptions

Promise< | StarSystemSnapshot | undefined>

declare const ctx: SageContext;
declare const address: Address;
const system = await maybeGetStarSystem(ctx, address);

function starbaseLevelIndex(level): number;

Defined in: packages/sage/src/world/starbase-status.ts:48

Returns the zero-based ordinal of a Starbase level label.

Levels level-0 through level-5 map to 0 through 5 and the Central Space Station (css) ranks above them as 6. This is the row index used by Planet Claim Stake plot tables and Starbase Crafting Hab plot tables, and the order used to compare a Starbase level with a service enable level.

ParameterType
levelWorldStarbaseLevel

number

const unlocked = starbaseLevelIndex('level-3') >= starbaseLevelIndex('level-2');

Re-exports WorldCoordinates