54 lines
2.9 KiB
JSON
54 lines
2.9 KiB
JSON
{
|
||
"_comment": "ASTEROID CLUSTERS — loose groups of slowly tumbling rocks drifting in the system's void. texture = spritesheet of frameWidth×frameHeight asteroid frames (frameCount frames). cluster = how a group looks & moves: groupSize = rocks per cluster (minFullSize guarantees at least one full-size rock), sizes = per-rock diameter px, spread = how far a rock may sit from the cluster center, gapFactor = the small edge-gap between ANY two rocks, as a multiple of their combined radii (1.0 = touching, 1.12 = a subtle gap — the generator pushes apart just the overlapping pairs, each by half, so groups stay compact), spin = each rock's OWN very slow tumble (deg/s, direction per-rock random), groupSpin = the whole loose group drifts around its center (deg/s), tint = subtle warm/cool starlight per cluster (anchors blended toward white by strength), halo = soft glow behind the group, debris = a halo of fine dust motes orbiting just outside the rocks. distribution = how many clusters a system gets: targetObjects − planetCount, ±jitter, clamped to [minClusters, maxClusters] (more planets ⇒ fewer clusters); the starting system always gets at least startingSystemMinClusters, and those first ones are placed INSIDE the player's initial tether so they're reachable from the spawn. placement = where clusters may sit: minObjectSpacing = no cluster may be closer (center-to-center) than this to ANY other object (home world, planets, free-space stations, other clusters); minRadius/maxRadius = the annulus around the origin random clusters live in; tetherMargin = how far inside the tether rim a starting-system cluster must sit (whole group stays reachable). shipClearance = how close (edge-to-edge) the ship may get to a rock — clusters are solid, like worlds.",
|
||
"enabled": true,
|
||
"texture": "assets/images/asteroids.png",
|
||
"frameWidth": 128,
|
||
"frameHeight": 128,
|
||
"frameCount": 10,
|
||
"typeLabel": "Asteroid Cluster",
|
||
"compassColor": "#c8d2e0",
|
||
"shipClearance": 50,
|
||
"cluster": {
|
||
"groupSize": { "min": 4, "max": 8 },
|
||
"sizes": { "min": 64, "max": 128 },
|
||
"minFullSize": 1,
|
||
"spread": 140,
|
||
"gapFactor": 1.12,
|
||
"spin": { "minDegPerSec": 0.3, "maxDegPerSec": 1.6 },
|
||
"groupSpin": { "minDegPerSec": 0.12, "maxDegPerSec": 0.4 },
|
||
"tint": {
|
||
"enabled": true,
|
||
"anchors": ["#dfe9ff", "#ffe9d6", "#e8e4f8"],
|
||
"strength": 0.5
|
||
},
|
||
"halo": {
|
||
"enabled": true,
|
||
"scale": 2.8,
|
||
"alpha": 0.26,
|
||
"color": "#7fa8d8"
|
||
},
|
||
"debris": {
|
||
"enabled": true,
|
||
"count": [18, 36],
|
||
"inner": 0.9,
|
||
"outer": 2.4,
|
||
"size": [2.5, 6],
|
||
"alpha": [0.4, 0.85]
|
||
}
|
||
},
|
||
"distribution": {
|
||
"targetObjects": 9,
|
||
"jitter": 1,
|
||
"minClusters": 1,
|
||
"maxClusters": 6,
|
||
"startingSystemMinClusters": 2
|
||
},
|
||
"placement": {
|
||
"minObjectSpacing": 1024,
|
||
"minRadius": 2048,
|
||
"maxRadius": 18432,
|
||
"tetherMargin": 96,
|
||
"maxPlacementAttempts": 400
|
||
}
|
||
}
|