orbit/data/landing.json

97 lines
7.4 KiB
JSON

{
"_comment": [
"Landing + surface videos, keyed by the world's SHEET FRAME (same index the",
"sprite uses): videos = planets.png frames (0..2 terran, 3..5 gas giants,",
"6..8 rocky — data/planets.json → frames); stationVideos = spacestations.png",
"VARIANT frames (0..2 — the deep-space station types, data/stations.json →",
"variants; the same frame the station is drawn with and its comms label",
"reads, data/stations.json → typeLabels). See data/stations.json for the",
"station variants.",
"",
"`land` — the full-screen one-shot clip played when the ship lands.",
"`surface` — the looping clip shown on the surface deck behind the action bar.",
"`shop` — the looping clip the SHOP button swaps in over the surface",
" clip (press SHOP again to swap back). null/missing = no shop",
" on that world (a console note instead of a clip).",
"`bar` — the looping clip the EXPLORE drawer's BAR button (the neutral",
" capital) swaps in over the surface clip (press LEAVE BAR to",
" swap back). null/missing = no bar on that world.",
"`takeoff` — the full-screen one-shot clip played on TAKE OFF, before the",
" flight world resumes. A null/missing entry takes off instantly.",
"",
"Entries are stubbed with the existing videos where a specific clip is",
"missing: set `land`/`surface` to the real file name (in `videoBase`) when",
"it is authored — no code change needed. Gas-giant surface clips don't",
"exist yet, so they loop a terran surface clip as a placeholder.",
"An entry may set `land`/`surface` to null to skip that stage entirely",
"(land goes straight to the surface; a null surface shows the flat deck).",
"A DOUBLE-CLICK (two quick presses) during the `land` or `takeoff`",
"clips skips the rest of the clip — the deck / the flight world comes",
"up immediately (no setting; the 350 ms window lives in SurfaceScene).",
"",
"Station surface/shop clips are authored later: the stationVideos entries",
"carry null `surface`/`shop` slots until then — the deck degrades (flat",
"deck, SHOP notes 'no shop') exactly like an unset planet slot. Land and",
"takeoff are the ss-land-0N / ss-takeoff-0N clips (variant 1 = frame 0,",
"…).",
"",
"Set `enabled` to false to disable landing entirely (REQUEST LANDING is",
"greyed out in comms, same as a reputation ban)."
],
"enabled": true,
"combatDenyToast": {
"_comment": "The COMBAT gate (js/scenes/GameScene.js → startLanding): a live fight (CombatSystem.active — a wave run in flight or hostiles up) holds the ship in the air — landing would sleep the flight scene under the wave and let the player hide on the surface, so a landing request mid-combat is a flat denial on the console (the comms panel already closed — the toast is the ack; the ✗ mark reads the deny). Same shape as the capital's claim gate (data/quests.json → capitalDenyToast).",
"glyph": "✗",
"color": "#ff5c77",
"text": "CANNOT LAND WHILE UNDER ATTACK"
},
"videoBase": "assets/videos/",
"volume": 1,
"_hud_comment": "The upper-left HUD while the surface clip loops: the planet's NAME (Ethnocentric, the SAME shade the menu's game title uses — data/menu.json → colors.title — with a black stroke behind it so it holds over any clip) and, beneath it in the body face (Centauri), the planet TYPE + TETHER LEVEL (\"Terran World, Tether Level 1\"). Both decode in with the shared scramble (the name first). marginX/marginY = corner offsets (px); name/line = font sizes, letter spacing (px), stroke color/thickness, and line color (the theme's dim by default).",
"hud": {
"marginX": 24,
"marginY": 20,
"nameFontSize": 32,
"nameLetterSpacing": 2,
"nameStroke": "#000000",
"nameStrokeWidth": 4,
"lineGap": 10,
"lineFontSize": 16,
"lineLetterSpacing": 1,
"lineColor": "#7d92c4",
"lineStroke": "#000000",
"lineStrokeWidth": 2,
"shopPanelGap": 18
},
"videos": [
{ "land": "terran-land-01.mp4", "surface": "terran-surface-01.mp4", "takeoff": "terran-takeoff-01.mp4", "shop": "terran-shop-01.mp4" },
{ "land": "terran-land-02.mp4", "surface": "terran-surface-02.mp4", "takeoff": "terran-takeoff-02.mp4", "shop": "terran-shop-02.mp4" },
{ "land": "terran-land-03.mp4", "surface": "terran-surface-03.mp4", "takeoff": "terran-takeoff-03.mp4", "shop": "terran-shop-03.mp4" },
{ "land": "gasgiant-land-01.mp4", "surface": "gasgiant-surface-01.mp4", "takeoff": "gasgiant-takeoff-01.mp4", "shop": "gasgiant-shop-01.mp4" },
{ "land": "gasgiant-land-02.mp4", "surface": "gasgiant-surface-02.mp4", "takeoff": "gasgiant-takeoff-02.mp4", "shop": "gasgiant-shop-02.mp4" },
{ "land": "gasgiant-land-03.mp4", "surface": "gasgiant-surface-03.mp4", "takeoff": "gasgiant-takeoff-03.mp4", "shop": "gasgiant-shop-03.mp4" },
{ "land": "rocky-land-01.mp4", "surface": "rocky-surface-01.mp4", "takeoff": "rocky-takeoff-01.mp4", "shop": "rocky-shop-01.mp4" },
{ "land": "rocky-land-02.mp4", "surface": "rocky-surface-02.mp4", "takeoff": "rocky-takeoff-02.mp4", "shop": "rocky-shop-02.mp4" },
{ "land": "rocky-land-03.mp4", "surface": "rocky-surface-03.mp4", "takeoff": "rocky-takeoff-03.mp4", "shop": "rocky-shop-03.mp4" },
{ "land": "ice-land-01.mp4", "surface": "ice-surface-01.mp4", "takeoff": "ice-takeoff-01.mp4", "shop": "ice-shop-01.mp4" },
{ "land": "ice-land-02.mp4", "surface": "ice-surface-02.mp4", "takeoff": "ice-takeoff-02.mp4", "shop": "ice-shop-02.mp4" },
{ "land": "ice-land-03.mp4", "surface": "ice-surface-03.mp4", "takeoff": "ice-takeoff-03.mp4", "shop": "ice-shop-03.mp4" },
{ "land": "lava-land-01.mp4", "surface": "lava-surface-01.mp4", "takeoff": "lava-takeoff-01.mp4", "shop": "ice-shop-01.mp4" },
{ "land": "lava-land-02.mp4", "surface": "lava-surface-02.mp4", "takeoff": "lava-takeoff-02.mp4", "shop": "lava-shop-02.mp4" },
{ "land": "lava-land-03.mp4", "surface": "lava-surface-03.mp4", "takeoff": "lava-takeoff-03.mp4", "shop": "ice-shop-03.mp4" },
{ "land": "arid-land-01.mp4", "surface": "arid-surface-01.mp4", "takeoff": "arid-takeoff-01.mp4", "shop": "ice-shop-01.mp4" },
{ "land": "arid-land-02.mp4", "surface": "arid-surface-02.mp4", "takeoff": "arid-takeoff-02.mp4", "shop": "ice-shop-02.mp4" },
{ "land": "arid-land-03.mp4", "surface": "arid-surface-03.mp4", "takeoff": "arid-takeoff-03.mp4", "shop": "arid-shop-03.mp4" },
{ "land": "capital-land-neutral.mp4", "surface": "capital-surface-neutral.mp4", "takeoff": "capital-takeoff-neutral.mp4", "shop": "capital-shop-neutral.mp4", "bar": "capital-bar-neutral.mp4" },
{ "land": "lava-land-02.mp4", "surface": "lava-surface-02.mp4", "takeoff": "lava-takeoff-02.mp4", "shop": "ice-shop-02.mp4" },
{ "land": "ice-land-03.mp4", "surface": "ice-surface-03.mp4", "takeoff": "ice-takeoff-03.mp4", "shop": "ice-shop-03.mp4" },
{ "land": "ice-land-01.mp4", "surface": "ice-surface-01.mp4", "takeoff": "ice-takeoff-01.mp4", "shop": "ice-shop-01.mp4" }
],
"stationVideos": [
{ "land": "ss-land-01.mp4", "surface": "ss-surface-01.mp4", "takeoff": "ss-takeoff-01.mp4", "shop": "ss-shop-01.mp4" },
{ "land": "ss-land-02.mp4", "surface": "ss-surface-02.mp4", "takeoff": "ss-takeoff-02.mp4", "shop": "ss-shop-02.mp4" },
{ "land": "ss-land-03.mp4", "surface": "ss-surface-03.mp4", "takeoff": "ss-takeoff-03.mp4", "shop": "ss-shop-03.mp4" }
]
}