fertig-classic-games/data/mastervega-artwork.json

299 lines
24 KiB
JSON

{
"_readme": "Master of Vega — drop-in artwork manifest. Every sheet starts with path:null, which means VegaArt.js paints a procedural stand-in at exactly the same frame geometry. To use real art, drop the PNG in assets/images/vega/ and set its path here — no code changes. Frame layouts are documented in src/games/mastervega/sprites.md and are APPEND-ONLY.",
"_kindReadme": "kind selects the procedural painter in VegaArt.PROC_PAINTERS. Painters are keyed by kind, never by sheet name, so adding a sheet later needs no code change.",
"_portraitVideosReadme": "Species portraits are looping muted videos rather than spritesheet frames, 256x256. All ten are present. NOTE: cerebrai's file is spelled 'char-cerebai.mp4' on disk (missing the r) — the path below points at the real filename, so rename the file and this one line together if you want the spelling fixed. To add or replace one: drop the file and set its path here; nothing else changes.",
"portraitVideos": {
"human": { "key": "vega-char-human", "path": "assets/videos/vega/char-human.mp4" },
"kestrelli": { "key": "vega-char-kestrelli", "path": "assets/videos/vega/char-kestrelli.mp4" },
"ursaal": { "key": "vega-char-ursaal", "path": "assets/videos/vega/char-ursaal.mp4" },
"umbrix": { "key": "vega-char-umbrix", "path": "assets/videos/vega/char-umbrix.mp4" },
"kkrix": { "key": "vega-char-kkrix", "path": "assets/videos/vega/char-kkrix.mp4" },
"mekhan": { "key": "vega-char-mekhan", "path": "assets/videos/vega/char-mekhan.mp4" },
"rrashaa": { "key": "vega-char-rrashaa", "path": "assets/videos/vega/char-rrashaa.mp4" },
"cerebrai": { "key": "vega-char-cerebrai", "path": "assets/videos/vega/char-cerebai.mp4" },
"ssakar": { "key": "vega-char-ssakar", "path": "assets/videos/vega/char-ssakar.mp4" },
"lithox": { "key": "vega-char-lithox", "path": "assets/videos/vega/char-lithox.mp4" }
},
"_shipVideosReadme": "Per-hull SHIP COMMANDER loops — the officer flying that class — 256x256, muted, ~10s, keyed species -> hull id. These are a different thing from portraitVideos above: that is the species' leader on the diplomacy screen, this is one face per hull. A species with none recorded yet is null, and a hull with no entry inside a recorded species falls back to that species' portraitVideos clip, so the roster fills one race — or one hull — at a time with no code change. NOTE: the human colony ship's file is 'ship-human-colony.mp4' while the hull id is 'colonyship'; the path below points at the real filename, same class of mismatch as char-cerebai.mp4. There is deliberately no 'starbase' clip yet — it falls back like any other gap.",
"shipVideos": {
"human": {
"scout": { "key": "vega-ship-human-scout", "path": "assets/videos/vega/ship-human-scout.mp4" },
"colonyship": { "key": "vega-ship-human-colonyship", "path": "assets/videos/vega/ship-human-colony.mp4" },
"transport": { "key": "vega-ship-human-transport", "path": "assets/videos/vega/ship-human-transport.mp4" },
"frigate": { "key": "vega-ship-human-frigate", "path": "assets/videos/vega/ship-human-frigate.mp4" },
"destroyer": { "key": "vega-ship-human-destroyer", "path": "assets/videos/vega/ship-human-destroyer.mp4" },
"cruiser": { "key": "vega-ship-human-cruiser", "path": "assets/videos/vega/ship-human-cruiser.mp4" },
"battleship": { "key": "vega-ship-human-battleship", "path": "assets/videos/vega/ship-human-battleship.mp4" }
},
"kestrelli": {
"scout": { "key": "vega-ship-kestrelli-scout", "path": "assets/videos/vega/ship-kestrelli-scout.mp4" },
"colonyship": { "key": "vega-ship-kestrelli-colonyship", "path": "assets/videos/vega/ship-kestrelli-colony.mp4" },
"transport": { "key": "vega-ship-kestrelli-transport", "path": "assets/videos/vega/ship-kestrelli-transport.mp4" },
"frigate": { "key": "vega-ship-kestrelli-frigate", "path": "assets/videos/vega/ship-kestrelli-frigate.mp4" },
"destroyer": { "key": "vega-ship-kestrelli-destroyer", "path": "assets/videos/vega/ship-kestrelli-destroyer.mp4" },
"cruiser": { "key": "vega-ship-kestrelli-cruiser", "path": "assets/videos/vega/ship-kestrelli-cruiser.mp4" },
"battleship": { "key": "vega-ship-kestrelli-battleship", "path": "assets/videos/vega/ship-kestrelli-battleship.mp4" }
},
"ursaal": {
"scout": { "key": "vega-ship-ursaal-scout", "path": "assets/videos/vega/ship-ursaal-scout.mp4" },
"colonyship": { "key": "vega-ship-ursaal-colonyship", "path": "assets/videos/vega/ship-ursaal-colony.mp4" },
"transport": { "key": "vega-ship-ursaal-transport", "path": "assets/videos/vega/ship-ursaal-transport.mp4" },
"frigate": { "key": "vega-ship-ursaal-frigate", "path": "assets/videos/vega/ship-ursaal-frigate.mp4" },
"destroyer": { "key": "vega-ship-ursaal-destroyer", "path": "assets/videos/vega/ship-ursaal-destroyer.mp4" },
"cruiser": { "key": "vega-ship-ursaal-cruiser", "path": "assets/videos/vega/ship-ursaal-cruiser.mp4" },
"battleship": { "key": "vega-ship-ursaal-battleship", "path": "assets/videos/vega/ship-ursaal-battleship.mp4" }
},
"umbrix": {
"scout": { "key": "vega-ship-umbrix-scout", "path": "assets/videos/vega/ship-umbrix-scout.mp4" },
"colonyship": { "key": "vega-ship-umbrix-colonyship", "path": "assets/videos/vega/ship-umbrix-colony.mp4" },
"transport": { "key": "vega-ship-umbrix-transport", "path": "assets/videos/vega/ship-umbrix-transport.mp4" },
"frigate": { "key": "vega-ship-umbrix-frigate", "path": "assets/videos/vega/ship-umbrix-frigate.mp4" },
"destroyer": { "key": "vega-ship-umbrix-destroyer", "path": "assets/videos/vega/ship-umbrix-destroyer.mp4" },
"cruiser": { "key": "vega-ship-umbrix-cruiser", "path": "assets/videos/vega/ship-umbrix-cruiser.mp4" },
"battleship": { "key": "vega-ship-umbrix-battleship", "path": "assets/videos/vega/ship-umbrix-battleship.mp4" }
},
"kkrix": {
"scout": { "key": "vega-ship-kkrix-scout", "path": "assets/videos/vega/ship-kkrix-scout.mp4" },
"colonyship": { "key": "vega-ship-kkrix-colonyship", "path": "assets/videos/vega/ship-kkrix-colony.mp4" },
"transport": { "key": "vega-ship-kkrix-transport", "path": "assets/videos/vega/ship-kkrix-transport.mp4" },
"frigate": { "key": "vega-ship-kkrix-frigate", "path": "assets/videos/vega/ship-kkrix-frigate.mp4" },
"destroyer": { "key": "vega-ship-kkrix-destroyer", "path": "assets/videos/vega/ship-kkrix-destroyer.mp4" },
"cruiser": { "key": "vega-ship-kkrix-cruiser", "path": "assets/videos/vega/ship-kkrix-cruiser.mp4" },
"battleship": { "key": "vega-ship-kkrix-battleship", "path": "assets/videos/vega/ship-kkrix-battleship.mp4" }
},
"mekhan": {
"scout": { "key": "vega-ship-mekhan-scout", "path": "assets/videos/vega/ship-mekhan-scout.mp4" },
"colonyship": { "key": "vega-ship-mekhan-colonyship", "path": "assets/videos/vega/ship-mekhan-colony.mp4" },
"transport": { "key": "vega-ship-mekhan-transport", "path": "assets/videos/vega/ship-mekhan-transport.mp4" },
"frigate": { "key": "vega-ship-mekhan-frigate", "path": "assets/videos/vega/ship-mekhan-frigate.mp4" },
"destroyer": { "key": "vega-ship-mekhan-destroyer", "path": "assets/videos/vega/ship-mekhan-destroyer.mp4" },
"cruiser": { "key": "vega-ship-mekhan-cruiser", "path": "assets/videos/vega/ship-mekhan-cruiser.mp4" },
"battleship": { "key": "vega-ship-mekhan-battleship", "path": "assets/videos/vega/ship-mekhan-battleship.mp4" }
},
"rrashaa": {
"scout": { "key": "vega-ship-rrashaa-scout", "path": "assets/videos/vega/ship-rrashaa-scout.mp4" },
"colonyship": { "key": "vega-ship-rrashaa-colonyship", "path": "assets/videos/vega/ship-rrashaa-colony.mp4" },
"transport": { "key": "vega-ship-rrashaa-transport", "path": "assets/videos/vega/ship-rrashaa-transport.mp4" },
"frigate": { "key": "vega-ship-rrashaa-frigate", "path": "assets/videos/vega/ship-rrashaa-frigate.mp4" },
"destroyer": { "key": "vega-ship-rrashaa-destroyer", "path": "assets/videos/vega/ship-rrashaa-destroyer.mp4" },
"cruiser": { "key": "vega-ship-rrashaa-cruiser", "path": "assets/videos/vega/ship-rrashaa-cruiser.mp4" },
"battleship": { "key": "vega-ship-rrashaa-battleship", "path": "assets/videos/vega/ship-rrashaa-battleship.mp4" }
},
"cerebrai": {
"scout": { "key": "vega-ship-cerebrai-scout", "path": "assets/videos/vega/ship-cerebrai-scout.mp4" },
"colonyship": { "key": "vega-ship-cerebrai-colonyship", "path": "assets/videos/vega/ship-cerebrai-colony.mp4" },
"transport": { "key": "vega-ship-cerebrai-transport", "path": "assets/videos/vega/ship-cerebrai-transport.mp4" },
"frigate": { "key": "vega-ship-cerebrai-frigate", "path": "assets/videos/vega/ship-cerebrai-frigate.mp4" },
"destroyer": { "key": "vega-ship-cerebrai-destroyer", "path": "assets/videos/vega/ship-cerebrai-destroyer.mp4" },
"cruiser": { "key": "vega-ship-cerebrai-cruiser", "path": "assets/videos/vega/ship-cerebrai-cruiser.mp4" },
"battleship": { "key": "vega-ship-cerebrai-battleship", "path": "assets/videos/vega/ship-cerebrai-battleship.mp4" }
},
"ssakar": {
"scout": { "key": "vega-ship-ssakar-scout", "path": "assets/videos/vega/ship-ssakar-scout.mp4" },
"colonyship": { "key": "vega-ship-ssakar-colonyship", "path": "assets/videos/vega/ship-ssakar-colony.mp4" },
"transport": { "key": "vega-ship-ssakar-transport", "path": "assets/videos/vega/ship-ssakar-transport.mp4" },
"frigate": { "key": "vega-ship-ssakar-frigate", "path": "assets/videos/vega/ship-ssakar-frigate.mp4" },
"destroyer": { "key": "vega-ship-ssakar-destroyer", "path": "assets/videos/vega/ship-ssakar-destroyer.mp4" },
"cruiser": { "key": "vega-ship-ssakar-cruiser", "path": "assets/videos/vega/ship-ssakar-cruiser.mp4" },
"battleship": { "key": "vega-ship-ssakar-battleship", "path": "assets/videos/vega/ship-ssakar-battleship.mp4" }
},
"lithox": {
"scout": { "key": "vega-ship-lithox-scout", "path": "assets/videos/vega/ship-lithox-scout.mp4" },
"colonyship": { "key": "vega-ship-lithox-colonyship", "path": "assets/videos/vega/ship-lithox-colony.mp4" },
"transport": { "key": "vega-ship-lithox-transport", "path": "assets/videos/vega/ship-lithox-transport.mp4" },
"frigate": { "key": "vega-ship-lithox-frigate", "path": "assets/videos/vega/ship-lithox-frigate.mp4" },
"destroyer": { "key": "vega-ship-lithox-destroyer", "path": "assets/videos/vega/ship-lithox-destroyer.mp4" },
"cruiser": { "key": "vega-ship-lithox-cruiser", "path": "assets/videos/vega/ship-lithox-cruiser.mp4" },
"battleship": { "key": "vega-ship-lithox-battleship", "path": "assets/videos/vega/ship-lithox-battleship.mp4" }
}
},
"_portraitStillsReadme": "High-resolution (1024x1024) still portraits, one per species. Every species now has a video too, so these serve as the recovery path if a video fails to decode. NOTE: kestrelli's file is spelled 'char-kestralli.png' on disk — the path below points at the real filename; rename the file and this one line together if you want the spelling fixed.",
"portraitStills": {
"human": { "key": "vega-still-human", "path": "assets/images/vega/char-human.png" },
"kestrelli": { "key": "vega-still-kestrelli", "path": "assets/images/vega/char-kestralli.png" },
"ursaal": { "key": "vega-still-ursaal", "path": "assets/images/vega/char-ursaal.png" },
"umbrix": { "key": "vega-still-umbrix", "path": "assets/images/vega/char-umbrix.png" },
"kkrix": { "key": "vega-still-kkrix", "path": "assets/images/vega/char-kkrix.png" },
"mekhan": { "key": "vega-still-mekhan", "path": "assets/images/vega/char-mekhan.png" },
"rrashaa": { "key": "vega-still-rrashaa", "path": "assets/images/vega/char-rrashaa.png" },
"cerebrai": { "key": "vega-still-cerebrai", "path": "assets/images/vega/char-cerebrai.png" },
"ssakar": { "key": "vega-still-ssakar", "path": "assets/images/vega/char-ssakar.png" },
"lithox": { "key": "vega-still-lithox", "path": "assets/images/vega/char-lithox.png" }
},
"_worldBackgroundsReadme": "Full-screen 1920x1080 OPAQUE backdrops for the colony screen, one per planetType id. These are NOT the 'planets' sheet — that one holds transparent 192x192 discs for the orrery. A null path falls back to a gradient painted from planetTypes[].color, so the roster can be finished one world at a time. The '-01' suffix is a variant slot. NOTE: the gas giant's file is spelled 'world-gas-giant-01.png' with a hyphen while the rules id is 'gasgiant' — the path below points at the real filename. 'jungle' is the one colonisable type still outstanding.",
"worldBackgrounds": {
"terran": { "key": "vega-world-terran", "path": "assets/images/vega/world-terran-01.png" },
"ocean": { "key": "vega-world-ocean", "path": "assets/images/vega/world-ocean-01.png" },
"jungle": { "key": "vega-world-jungle", "path": "assets/images/vega/world-jungle-01.png" },
"steppe": { "key": "vega-world-steppe", "path": "assets/images/vega/world-steppe-01.png" },
"arid": { "key": "vega-world-arid", "path": "assets/images/vega/world-arid-01.png" },
"desert": { "key": "vega-world-desert", "path": "assets/images/vega/world-desert-01.png" },
"tundra": { "key": "vega-world-tundra", "path": "assets/images/vega/world-tundra-01.png" },
"minimal": { "key": "vega-world-minimal", "path": "assets/images/vega/world-minimal-01.png" },
"barren": { "key": "vega-world-barren", "path": "assets/images/vega/world-barren-01.png" },
"dead": { "key": "vega-world-dead", "path": "assets/images/vega/world-dead-01.png" },
"inferno": { "key": "vega-world-inferno", "path": "assets/images/vega/world-inferno-01.png" },
"toxic": { "key": "vega-world-toxic", "path": "assets/images/vega/world-toxic-01.png" },
"radiated": { "key": "vega-world-radiated", "path": "assets/images/vega/world-radiated-01.png" },
"gasgiant": { "key": "vega-world-gasgiant", "path": "assets/images/vega/world-gas-giant-01.png" },
"asteroids": { "key": "vega-world-asteroids", "path": null }
},
"_colonyVideosReadme": "Colony-founding VIGNETTE clips — 960x544, muted, ~10s, one per COLONISABLE planetType id. VegaColonyIntro.js plays one full-screen the moment the player plants a colony, over assets/music/vega/colony.mp3. Only colonisable types are listed: canColonize() rejects gasgiant and asteroids before any species trait is consulted, so a clip for those could never play. A null path — or a colonisable type missing from this block — falls back to that type's worldBackgrounds still, and then to the gradient, exactly like the colony screen, so a newly colonisable world is presentable the day it is added.",
"colonyVideos": {
"terran": { "key": "vega-colony-terran", "path": "assets/videos/vega/colony-terran.mp4" },
"ocean": { "key": "vega-colony-ocean", "path": "assets/videos/vega/colony-ocean.mp4" },
"jungle": { "key": "vega-colony-jungle", "path": "assets/videos/vega/colony-jungle.mp4" },
"steppe": { "key": "vega-colony-steppe", "path": "assets/videos/vega/colony-steppe.mp4" },
"arid": { "key": "vega-colony-arid", "path": "assets/videos/vega/colony-arid.mp4" },
"desert": { "key": "vega-colony-desert", "path": "assets/videos/vega/colony-desert.mp4" },
"tundra": { "key": "vega-colony-tundra", "path": "assets/videos/vega/colony-tundra.mp4" },
"minimal": { "key": "vega-colony-minimal", "path": "assets/videos/vega/colony-minimal.mp4" },
"barren": { "key": "vega-colony-barren", "path": "assets/videos/vega/colony-barren.mp4" },
"dead": { "key": "vega-colony-dead", "path": "assets/videos/vega/colony-dead.mp4" },
"inferno": { "key": "vega-colony-inferno", "path": "assets/videos/vega/colony-inferno.mp4" },
"toxic": { "key": "vega-colony-toxic", "path": "assets/videos/vega/colony-toxic.mp4" },
"radiated": { "key": "vega-colony-radiated", "path": "assets/videos/vega/colony-radiated.mp4" }
},
"_audienceVideosReadme": "Audience-screen MOOD clips for the full-screen diplomacy interface — one per diplomacy-capable species x {angry, neutral, happy}, muted, looping. Recorded at 896x576 (1.5556:1, close to but not exactly the 3:2 the VegaAudience.js frame is cut to — the clip is scaled by WIDTH only, never setDisplaySize, so it sits slightly short of the frame's full height rather than being stretched). Lithox has no entry at all: canNegotiate() is permanently false for them (traits.diplomacy <= -100), so the Audience screen never opens for that species and a clip would never play. A species entirely absent (null) or a mood missing inside a recorded species falls back to that species' portraitVideos clip (256x256, letterboxed to 3:2), then to portraitStills — same three-tier fallback convention as makeSpeciesPortrait, so the roster fills one species (or one mood) at a time with no code change. Naming: assets/videos/vega/audience-<speciesId>-<mood>.mp4.",
"audienceVideos": {
"human": {
"angry": { "key": "vega-audience-human-angry", "path": "assets/videos/vega/audience-human-angry.mp4" },
"neutral": { "key": "vega-audience-human-neutral", "path": "assets/videos/vega/audience-human-neutral.mp4" },
"happy": { "key": "vega-audience-human-happy", "path": "assets/videos/vega/audience-human-happy.mp4" }
},
"kestrelli": {
"angry": { "key": "vega-audience-kestrelli-angry", "path": "assets/videos/vega/audience-kestrelli-angry.mp4" },
"neutral": { "key": "vega-audience-kestrelli-neutral", "path": "assets/videos/vega/audience-kestrelli-neutral.mp4" },
"happy": { "key": "vega-audience-kestrelli-happy", "path": "assets/videos/vega/audience-kestrelli-happy.mp4" }
},
"ursaal": {
"angry": { "key": "vega-audience-ursaal-angry", "path": "assets/videos/vega/audience-ursaal-angry.mp4" },
"neutral": { "key": "vega-audience-ursaal-neutral", "path": "assets/videos/vega/audience-ursaal-neutral.mp4" },
"happy": { "key": "vega-audience-ursaal-happy", "path": "assets/videos/vega/audience-ursaal-happy.mp4" }
},
"umbrix": {
"angry": { "key": "vega-audience-umbrix-angry", "path": "assets/videos/vega/audience-umbrix-angry.mp4" },
"neutral": { "key": "vega-audience-umbrix-neutral", "path": "assets/videos/vega/audience-umbrix-neutral.mp4" },
"happy": { "key": "vega-audience-umbrix-happy", "path": "assets/videos/vega/audience-umbrix-happy.mp4" }
},
"kkrix": {
"angry": { "key": "vega-audience-kkrix-angry", "path": "assets/videos/vega/audience-kkrix-angry.mp4" },
"neutral": { "key": "vega-audience-kkrix-neutral", "path": "assets/videos/vega/audience-kkrix-neutral.mp4" },
"happy": { "key": "vega-audience-kkrix-happy", "path": "assets/videos/vega/audience-kkrix-happy.mp4" }
},
"mekhan": {
"angry": { "key": "vega-audience-mekhan-angry", "path": "assets/videos/vega/audience-mekhan-angry.mp4" },
"neutral": { "key": "vega-audience-mekhan-neutral", "path": "assets/videos/vega/audience-mekhan-neutral.mp4" },
"happy": { "key": "vega-audience-mekhan-happy", "path": "assets/videos/vega/audience-mekhan-happy.mp4" }
},
"rrashaa": {
"angry": { "key": "vega-audience-rrashaa-angry", "path": "assets/videos/vega/audience-rrashaa-angry.mp4" },
"neutral": { "key": "vega-audience-rrashaa-neutral", "path": "assets/videos/vega/audience-rrashaa-neutral.mp4" },
"happy": { "key": "vega-audience-rrashaa-happy", "path": "assets/videos/vega/audience-rrashaa-happy.mp4" }
},
"cerebrai": {
"angry": { "key": "vega-audience-cerebrai-angry", "path": "assets/videos/vega/audience-cerebrai-angry.mp4" },
"neutral": { "key": "vega-audience-cerebrai-neutral", "path": "assets/videos/vega/audience-cerebrai-neutral.mp4" },
"happy": { "key": "vega-audience-cerebrai-happy", "path": "assets/videos/vega/audience-cerebrai-happy.mp4" }
},
"ssakar": {
"angry": { "key": "vega-audience-ssakar-angry", "path": "assets/videos/vega/audience-ssakar-angry.mp4" },
"neutral": { "key": "vega-audience-ssakar-neutral", "path": "assets/videos/vega/audience-ssakar-neutral.mp4" },
"happy": { "key": "vega-audience-ssakar-happy", "path": "assets/videos/vega/audience-ssakar-happy.mp4" }
}
},
"_researchVideosReadme": "Research-screen ambient loops — one per species, showing that species' scientists at work, muted, looping continuously (setLoop(true), unlike the audience screen's play-once mood clips above). Recorded 2:3 (portrait). JIT-loaded like colonyVideos/audienceVideos, NOT eager via assetManifest.js — Research only ever shows the human player's own species, so there is no reason to fetch the other nine at game-room entry. A species with no clip recorded falls back to its portraitVideos clip (256x256, letterboxed to 2:3), then portraitStills — same three-tier fallback convention as makeSpeciesPortrait. Naming: assets/videos/vega/research-<speciesId>.mp4.",
"researchVideos": {
"human": { "key": "vega-research-human", "path": "assets/videos/vega/research-human.mp4" },
"kestrelli": { "key": "vega-research-kestrelli", "path": "assets/videos/vega/research-kestrelli.mp4" },
"ursaal": { "key": "vega-research-ursaal", "path": null },
"umbrix": { "key": "vega-research-umbrix", "path": null },
"kkrix": { "key": "vega-research-kkrix", "path": null },
"mekhan": { "key": "vega-research-mekhan", "path": null },
"rrashaa": { "key": "vega-research-rrashaa", "path": null },
"cerebrai": { "key": "vega-research-cerebrai", "path": "assets/videos/vega/research-cerebrai.mp4" },
"ssakar": { "key": "vega-research-ssakar", "path": "assets/videos/vega/research-ssakar.mp4" },
"lithox": { "key": "vega-research-lithox", "path": "assets/videos/vega/research-lithox.mp4" }
},
"sheets": {
"ships": {
"key": "vega-ships",
"path": "assets/images/vega/ships.png",
"kind": "ship",
"frameWidth": 192,
"frameHeight": 192,
"cols": 8,
"rows": 10,
"_layout": "One row per species (species.shipFrame), one column per hull (hull.frame). Frame = shipFrame * 8 + hull.frame. Ships face UP at frame rest."
},
"planets": {
"key": "vega-planets",
"path": "assets/images/vega/planets.png",
"kind": "planet",
"frameWidth": 192,
"frameHeight": 192,
"cols": 5,
"rows": 3,
"_layout": "One frame per planetType.frame, 0-14, in the order planetTypes appears in the rules file."
},
"stars": {
"key": "vega-stars",
"path": null,
"kind": "star",
"frameWidth": 192,
"frameHeight": 192,
"cols": 3,
"rows": 3,
"_layout": "One frame per starClass, in rules order: blue, white, yellow, orange, red, brown, binary, pulsar, blackhole."
},
"portraits": {
"key": "vega-portraits",
"path": null,
"kind": "portrait",
"frameWidth": 256,
"frameHeight": 256,
"cols": 5,
"rows": 2,
"_layout": "One frame per species.portraitFrame, 0-9, in rules order."
},
"leaders": {
"key": "vega-leaders",
"path": null,
"kind": "portrait",
"frameWidth": 160,
"frameHeight": 160,
"cols": 4,
"rows": 4,
"_layout": "One frame per leader.portraitFrame, 0-15, in rules order."
},
"buildings": {
"key": "vega-buildings",
"path": null,
"kind": "icon",
"frameWidth": 64,
"frameHeight": 64,
"cols": 8,
"rows": 2,
"_layout": "One frame per building.frame, 0-15, in rules order."
},
"techicons": {
"key": "vega-techicons",
"path": null,
"kind": "icon",
"frameWidth": 48,
"frameHeight": 48,
"cols": 10,
"rows": 10,
"_layout": "Frames 0-5 are the six tech FIELDS (techFields[].iconFrame); frames 6-65 are the original 60 individual techs, 66-77 are the first MOO1-branching alternates, 78-96 are a second branching pass (techs[].iconFrame). 97-99 spare."
}
}
}