refactor(schema): rename biome_summary to planet_class (D-188)
"Biome" describes per-zone vegetation classification (Whittaker table). "Planet class" describes overall planetary character. The conflation caused the planet generator to misclassify ~270 bodies as barren. Scope: systems.db column, schema SQL, Rust atlas code, wiki table headers (Biome → Class), atlas proposal JSONs, all docs/decisions, tooling scripts. Also normalizes atmosphere vocabulary (breathable → standard) and expands planet class mapping to all 26 wiki values. Unknown classes default to temperate for modder safety. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -156,13 +156,20 @@ moist_hi = 0.15
|
||||
# ─────────────────────────────────────────────────────────────────────
|
||||
|
||||
[temperature_bands]
|
||||
temperate = [275, 305]
|
||||
oceanic = [278, 300]
|
||||
forest = [275, 308]
|
||||
arid = [295, 340]
|
||||
frozen = [210, 265]
|
||||
volcanic = [290, 380]
|
||||
barren = [180, 380]
|
||||
# Core classes
|
||||
temperate = [275, 305]
|
||||
oceanic = [278, 300]
|
||||
forest = [275, 308]
|
||||
arid = [295, 340]
|
||||
frozen = [210, 265]
|
||||
volcanic = [290, 380]
|
||||
barren = [180, 380]
|
||||
# Extended classes
|
||||
temperate_terminator = [260, 310] # sharp day/night gradient, wide band
|
||||
cold_arid = [240, 290] # cold desert (Mars-analog)
|
||||
hot_arid = [310, 360] # scorching desert
|
||||
tropical = [295, 315] # hot and wet
|
||||
boreal = [245, 278] # cold forest / taiga
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────────
|
||||
# Biome color palette
|
||||
|
||||
@@ -72,12 +72,20 @@ STAR_UV = {
|
||||
}
|
||||
|
||||
# atmosphere field → density string
|
||||
# Wiki atmosphere value → pipeline atmosphere density.
|
||||
# Both legacy ("breathable") and current ("standard") wiki values mapped.
|
||||
ATMO_MAP = {
|
||||
"none": "none",
|
||||
"thin": "thin",
|
||||
"breathable": "standard",
|
||||
"dense": "thick",
|
||||
"toxic": "thick", # Venus-style reducing atmosphere
|
||||
"none": "none",
|
||||
"trace": "none", # too thin for weather/clouds
|
||||
"thin": "thin",
|
||||
"breathable": "standard", # legacy wiki value
|
||||
"standard": "standard", # current wiki value
|
||||
"dense": "thick",
|
||||
"thick": "thick",
|
||||
"toxic": "thick", # Venus-style reducing atmosphere
|
||||
"reducing": "thick", # same as toxic
|
||||
"hydrogen-helium": "thick", # gas giant
|
||||
"gas_giant": "thick", # gas giant atmosphere field
|
||||
}
|
||||
|
||||
# hydrosphere → approximate land_fraction range [min, max]
|
||||
@@ -91,14 +99,44 @@ HYDRO_LAND = {
|
||||
}
|
||||
|
||||
# biome → planet_class
|
||||
BIOME_CLASS = {
|
||||
"temperate": "temperate",
|
||||
"arid": "arid",
|
||||
"frozen": "frozen",
|
||||
"volcanic": "volcanic",
|
||||
"barren": "barren",
|
||||
"forest": "forest",
|
||||
"oceanic": "oceanic",
|
||||
# Wiki planet class → pipeline planet class.
|
||||
# All 26 known wiki values mapped explicitly.
|
||||
# Unknown values default to "temperate" (safe for modders adding new classes).
|
||||
PLANET_CLASS_MAP = {
|
||||
# Direct matches
|
||||
"temperate": "temperate",
|
||||
"arid": "arid",
|
||||
"frozen": "frozen",
|
||||
"volcanic": "volcanic",
|
||||
"barren": "barren",
|
||||
"oceanic": "oceanic",
|
||||
# Temperate variants
|
||||
"temperate_terminator": "temperate_terminator",
|
||||
"temperate-cool": "temperate",
|
||||
"temperate_highland": "temperate",
|
||||
"temperate_maritime": "temperate",
|
||||
"temperate_savanna": "temperate",
|
||||
"temperate_coastal": "temperate",
|
||||
"temperate_riverine": "temperate",
|
||||
"temperate_ocean": "oceanic",
|
||||
"cold_temperate": "temperate",
|
||||
"floodplain_temperate": "temperate",
|
||||
# Arid variants
|
||||
"cold_arid": "cold_arid",
|
||||
"hot_arid": "hot_arid",
|
||||
# Tropical
|
||||
"tropical": "tropical",
|
||||
"tropical_ocean": "oceanic",
|
||||
"subtropical": "tropical",
|
||||
# Cold
|
||||
"ice": "frozen",
|
||||
"boreal": "boreal",
|
||||
# Warm ocean
|
||||
"warm_ocean": "oceanic",
|
||||
# Geothermal
|
||||
"geothermal": "volcanic",
|
||||
# Forest (from prototype)
|
||||
"forest": "forest",
|
||||
}
|
||||
|
||||
# planet_class → axial tilt range [min, max] degrees
|
||||
@@ -414,7 +452,9 @@ def _build_body_def(
|
||||
if btype == "gas_giant" or mass in ("gas_giant", "ice_giant"):
|
||||
planet_class = "gas_giant"
|
||||
else:
|
||||
planet_class = BIOME_CLASS.get(biome, "barren")
|
||||
planet_class = PLANET_CLASS_MAP.get(biome, "temperate")
|
||||
if biome and biome not in PLANET_CLASS_MAP and biome != "—":
|
||||
log.warning(f" {bid}: unknown planet class '{biome}' — defaulting to temperate")
|
||||
|
||||
planet_class = ov.get("planet_class", planet_class)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user