From 7b25b6ecbeca298255e28d9f6237cdb51caca565 Mon Sep 17 00:00:00 2001 From: Webster Sheets Date: Sun, 12 Nov 2023 00:50:49 -0500 Subject: [PATCH 1/2] scan_enums writes enum values to lua meta files - This provides some code-completion support via the @enum decorator for the enum table --- scripts/scan_enums.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/scripts/scan_enums.py b/scripts/scan_enums.py index a82d6ecc64f..a67eb856e1f 100755 --- a/scripts/scan_enums.py +++ b/scripts/scan_enums.py @@ -281,12 +281,15 @@ def write_c_header(s, fl): def write_meta_decl(s, fl): id = s.ident() fl.write('-- A string\n') - fl.write('---@class ' + id + ': string\n\n') - - def write_meta_def(s, fl): - id = s.ident() - fl.write('---@type ' + id + '[]\n') - fl.write('Constants.' + id + ' = {}\n\n') + fl.write('---@enum ' + id + '\n') + fl.write('Constants.' + id + ' = {\n') + index = 1 + for item in s.items: + if item.skip: continue + id = item.name if item.name is not None else item.identifier + fl.write("\t[" + str(index) + "] = \"" + id + "\",\n" ) + index += 1 + fl.write("}\n\n") RX_ENUM_TAG = re.compile(r'<\s*enum((?:\s+[a-zA-Z_]+(?:=(\w+|\'[^\']*\'|"[^"]*"))?)*)\s*>') RX_ENUM_ATTR = re.compile(r'([a-zA-Z_]+)(?:=(\w+|\'[^\']*\'|"[^"]*"))?') @@ -425,18 +428,15 @@ def write_meta(enums, fl): fl.write('-- ============================================================================\n\n') - fl.write('-- Document lua Constants as typed subclasses of string for API visibility sake\n\n') - - for e in enums: - e.write_meta_decl(fl) - - fl.write('-- ============================================================================\n\n') - fl.write('-- Global Constants namespace\n') fl.write('Constants = {}\n\n') + fl.write('-- Document lua string Constants as enum tables for autocomplete support\n\n') + fl.write('-- Use a literal string value when passing an enum constant rather than\n') + fl.write('-- retrieving a value from these tables\n\n') + for e in enums: - e.write_meta_def(fl) + e.write_meta_decl(fl) def extract_enums(lines): lines = splice_lines(lines) From bf6bf74cbb82fc8b59e6d2ca5e4c7e41b65934ef Mon Sep 17 00:00:00 2001 From: Webster Sheets Date: Sun, 12 Nov 2023 00:51:34 -0500 Subject: [PATCH 2/2] Update enum_table.cpp --- data/meta/Constants.lua | 375 ++++++++++++++++++++++++++++------------ src/enum_table.cpp | 94 +++++----- 2 files changed, 312 insertions(+), 157 deletions(-) diff --git a/data/meta/Constants.lua b/data/meta/Constants.lua index b7100403a1c..e992dda1d67 100644 --- a/data/meta/Constants.lua +++ b/data/meta/Constants.lua @@ -8,166 +8,321 @@ -- ============================================================================ --- Document lua Constants as typed subclasses of string for API visibility sake +-- Global Constants namespace +Constants = {} + +-- Document lua string Constants as enum tables for autocomplete support + +-- Use a literal string value when passing an enum constant rather than +-- retrieving a value from these tables -- A string ----@class PhysicsObjectType: string +---@enum PhysicsObjectType +Constants.PhysicsObjectType = { + [1] = "BODY", + [2] = "MODELBODY", + [3] = "SHIP", + [4] = "PLAYER", + [5] = "SPACESTATION", + [6] = "PLANET", + [7] = "STAR", + [8] = "CARGOBODY", + [9] = "MISSILE", +} -- A string ----@class ShipAIError: string +---@enum ShipAIError +Constants.ShipAIError = { + [1] = "NONE", + [2] = "GRAV_TOO_HIGH", + [3] = "REFUSED_PERM", + [4] = "PRESS_TOO_HIGH", + [5] = "ORBIT_IMPOSSIBLE", +} -- A string ----@class ShipFlightState: string +---@enum ShipFlightState +Constants.ShipFlightState = { + [1] = "FLYING", + [2] = "DOCKING", + [3] = "UNDOCKING", + [4] = "DOCKED", + [5] = "LANDED", + [6] = "JUMPING", + [7] = "HYPERSPACE", +} -- A string ----@class ShipJumpStatus: string +---@enum ShipJumpStatus +Constants.ShipJumpStatus = { + [1] = "OK", + [2] = "CURRENT_SYSTEM", + [3] = "NO_DRIVE", + [4] = "INITIATED", + [5] = "DRIVE_ACTIVE", + [6] = "OUT_OF_RANGE", + [7] = "INSUFFICIENT_FUEL", + [8] = "SAFETY_LOCKOUT", +} -- A string ----@class ShipAlertStatus: string +---@enum ShipAlertStatus +Constants.ShipAlertStatus = { + [1] = "NONE", + [2] = "SHIP_NEARBY", + [3] = "SHIP_FIRING", + [4] = "MISSILE_DETECTED", +} -- A string ----@class ShipAICmdName: string +---@enum ShipAICmdName +Constants.ShipAICmdName = { + [1] = "CMD_NONE", + [2] = "CMD_DOCK", + [3] = "CMD_FLYTO", + [4] = "CMD_FLYAROUND", + [5] = "CMD_KILL", + [6] = "CMD_KAMIKAZE", + [7] = "CMD_HOLDPOSITION", + [8] = "CMD_FORMATION", +} -- A string ----@class DualLaserOrientation: string +---@enum DualLaserOrientation +Constants.DualLaserOrientation = { + [1] = "HORIZONTAL", + [2] = "VERTICAL", +} -- A string ----@class ShipTypeTag: string +---@enum ShipTypeTag +Constants.ShipTypeTag = { + [1] = "NONE", + [2] = "SHIP", + [3] = "STATIC_SHIP", + [4] = "MISSILE", +} -- A string ----@class DockingRefusedReason: string +---@enum DockingRefusedReason +Constants.DockingRefusedReason = { + [1] = "ClearanceAlreadyGranted", + [2] = "TooFarFromStation", + [3] = "NoBaysAvailable", +} -- A string ----@class ProjectableTypes: string +---@enum ProjectableTypes +Constants.ProjectableTypes = { + [1] = "NONE", + [2] = "OBJECT", + [3] = "L4", + [4] = "L5", + [5] = "APOAPSIS", + [6] = "PERIAPSIS", +} -- A string ----@class ProjectableBases: string +---@enum ProjectableBases +Constants.ProjectableBases = { + [1] = "SYSTEMBODY", + [2] = "BODY", + [3] = "SHIP", + [4] = "PLAYER", + [5] = "PLANNER", +} -- A string ----@class SystemViewMode: string +---@enum SystemViewMode +Constants.SystemViewMode = { + [1] = "Orrery", + [2] = "Atlas", +} -- A string ----@class SystemViewColorIndex: string +---@enum SystemViewColorIndex +Constants.SystemViewColorIndex = { + [1] = "GRID", + [2] = "GRID_LEG", + [3] = "SYSTEMBODY", + [4] = "SYSTEMBODY_ORBIT", + [5] = "PLAYER_ORBIT", + [6] = "PLANNER_ORBIT", + [7] = "SELECTED_SHIP_ORBIT", + [8] = "SHIP_ORBIT", +} -- A string ----@class PolitEcon: string +---@enum PolitEcon +Constants.PolitEcon = { + [1] = "NONE", + [2] = "VERY_CAPITALIST", + [3] = "CAPITALIST", + [4] = "MIXED", + [5] = "PLANNED", +} -- A string ----@class PolitGovType: string +---@enum PolitGovType +Constants.PolitGovType = { + [1] = "NONE", + [2] = "EARTHCOLONIAL", + [3] = "EARTHDEMOC", + [4] = "EMPIRERULE", + [5] = "CISLIBDEM", + [6] = "CISSOCDEM", + [7] = "LIBDEM", + [8] = "CORPORATE", + [9] = "SOCDEM", + [10] = "EARTHMILDICT", + [11] = "MILDICT1", + [12] = "MILDICT2", + [13] = "EMPIREMILDICT", + [14] = "COMMUNIST", + [15] = "PLUTOCRATIC", + [16] = "DISORDER", +} -- A string ----@class BodyType: string +---@enum BodyType +Constants.BodyType = { + [1] = "GRAVPOINT", + [2] = "BROWN_DWARF", + [3] = "WHITE_DWARF", + [4] = "STAR_M", + [5] = "STAR_K", + [6] = "STAR_G", + [7] = "STAR_F", + [8] = "STAR_A", + [9] = "STAR_B", + [10] = "STAR_O", + [11] = "STAR_M_GIANT", + [12] = "STAR_K_GIANT", + [13] = "STAR_G_GIANT", + [14] = "STAR_F_GIANT", + [15] = "STAR_A_GIANT", + [16] = "STAR_B_GIANT", + [17] = "STAR_O_GIANT", + [18] = "STAR_M_SUPER_GIANT", + [19] = "STAR_K_SUPER_GIANT", + [20] = "STAR_G_SUPER_GIANT", + [21] = "STAR_F_SUPER_GIANT", + [22] = "STAR_A_SUPER_GIANT", + [23] = "STAR_B_SUPER_GIANT", + [24] = "STAR_O_SUPER_GIANT", + [25] = "STAR_M_HYPER_GIANT", + [26] = "STAR_K_HYPER_GIANT", + [27] = "STAR_G_HYPER_GIANT", + [28] = "STAR_F_HYPER_GIANT", + [29] = "STAR_A_HYPER_GIANT", + [30] = "STAR_B_HYPER_GIANT", + [31] = "STAR_O_HYPER_GIANT", + [32] = "STAR_M_WF", + [33] = "STAR_B_WF", + [34] = "STAR_O_WF", + [35] = "STAR_S_BH", + [36] = "STAR_IM_BH", + [37] = "STAR_SM_BH", + [38] = "PLANET_GAS_GIANT", + [39] = "PLANET_ASTEROID", + [40] = "PLANET_TERRESTRIAL", + [41] = "STARPORT_ORBITAL", + [42] = "STARPORT_SURFACE", +} -- A string ----@class BodySuperType: string +---@enum BodySuperType +Constants.BodySuperType = { + [1] = "NONE", + [2] = "STAR", + [3] = "ROCKY_PLANET", + [4] = "GAS_GIANT", + [5] = "STARPORT", +} -- A string ----@class DetailLevel: string +---@enum DetailLevel +Constants.DetailLevel = { + [1] = "VERY_LOW", + [2] = "LOW", + [3] = "MEDIUM", + [4] = "HIGH", + [5] = "VERY_HIGH", +} -- A string ----@class FileSystemRoot: string +---@enum FileSystemRoot +Constants.FileSystemRoot = { + [1] = "USER", + [2] = "DATA", +} -- A string ----@class PiGuiFaceFlags: string +---@enum PiGuiFaceFlags +Constants.PiGuiFaceFlags = { + [1] = "RAND", + [2] = "MALE", + [3] = "FEMALE", + [4] = "ARMOUR", +} -- A string ----@class ModelDebugFlags: string +---@enum ModelDebugFlags +Constants.ModelDebugFlags = { + [1] = "NONE", + [2] = "BBOX", + [3] = "COLLMESH", + [4] = "WIREFRAME", + [5] = "TAGS", + [6] = "DOCKING", + [7] = "GEOMBBOX", +} -- A string ----@class CruiseDirection: string +---@enum CruiseDirection +Constants.CruiseDirection = { + [1] = "CRUISE_FWD", + [2] = "CRUISE_UP", +} -- A string ----@class FollowMode: string +---@enum FollowMode +Constants.FollowMode = { + [1] = "FOLLOW_POS", + [2] = "FOLLOW_ORI", +} -- A string ----@class ShipTypeThruster: string +---@enum ShipTypeThruster +Constants.ShipTypeThruster = { + [1] = "REVERSE", + [2] = "FORWARD", + [3] = "UP", + [4] = "DOWN", + [5] = "LEFT", + [6] = "RIGHT", +} -- A string ----@class PropulsionFuelStatus: string +---@enum PropulsionFuelStatus +Constants.PropulsionFuelStatus = { + [1] = "OK", + [2] = "WARNING", + [3] = "EMPTY", +} -- A string ----@class ShipControllerFlightControlState: string - --- ============================================================================ - --- Global Constants namespace -Constants = {} - ----@type PhysicsObjectType[] -Constants.PhysicsObjectType = {} - ----@type ShipAIError[] -Constants.ShipAIError = {} - ----@type ShipFlightState[] -Constants.ShipFlightState = {} - ----@type ShipJumpStatus[] -Constants.ShipJumpStatus = {} - ----@type ShipAlertStatus[] -Constants.ShipAlertStatus = {} - ----@type ShipAICmdName[] -Constants.ShipAICmdName = {} - ----@type DualLaserOrientation[] -Constants.DualLaserOrientation = {} - ----@type ShipTypeTag[] -Constants.ShipTypeTag = {} - ----@type DockingRefusedReason[] -Constants.DockingRefusedReason = {} - ----@type ProjectableTypes[] -Constants.ProjectableTypes = {} - ----@type ProjectableBases[] -Constants.ProjectableBases = {} - ----@type SystemViewMode[] -Constants.SystemViewMode = {} - ----@type SystemViewColorIndex[] -Constants.SystemViewColorIndex = {} - ----@type PolitEcon[] -Constants.PolitEcon = {} - ----@type PolitGovType[] -Constants.PolitGovType = {} - ----@type BodyType[] -Constants.BodyType = {} - ----@type BodySuperType[] -Constants.BodySuperType = {} - ----@type DetailLevel[] -Constants.DetailLevel = {} - ----@type FileSystemRoot[] -Constants.FileSystemRoot = {} - ----@type PiGuiFaceFlags[] -Constants.PiGuiFaceFlags = {} - ----@type ModelDebugFlags[] -Constants.ModelDebugFlags = {} - ----@type CruiseDirection[] -Constants.CruiseDirection = {} - ----@type FollowMode[] -Constants.FollowMode = {} - ----@type ShipTypeThruster[] -Constants.ShipTypeThruster = {} - ----@type PropulsionFuelStatus[] -Constants.PropulsionFuelStatus = {} - ----@type ShipControllerFlightControlState[] -Constants.ShipControllerFlightControlState = {} +---@enum ShipControllerFlightControlState +Constants.ShipControllerFlightControlState = { + [1] = "CONTROL_MANUAL", + [2] = "CONTROL_FIXSPEED", + [3] = "CONTROL_FIXHEADING_FORWARD", + [4] = "CONTROL_FIXHEADING_BACKWARD", + [5] = "CONTROL_FIXHEADING_NORMAL", + [6] = "CONTROL_FIXHEADING_ANTINORMAL", + [7] = "CONTROL_FIXHEADING_RADIALLY_INWARD", + [8] = "CONTROL_FIXHEADING_RADIALLY_OUTWARD", + [9] = "CONTROL_FIXHEADING_KILLROT", + [10] = "CONTROL_AUTOPILOT", +} diff --git a/src/enum_table.cpp b/src/enum_table.cpp index e8ee25f5b0e..2c5911b96bb 100644 --- a/src/enum_table.cpp +++ b/src/enum_table.cpp @@ -175,57 +175,57 @@ const struct EnumItem ENUM_PolitGovType[] = { }; const struct EnumItem ENUM_BodyType[] = { - { "GRAVPOINT", int(SystemBody::TYPE_GRAVPOINT) }, - { "BROWN_DWARF", int(SystemBody::TYPE_BROWN_DWARF) }, - { "WHITE_DWARF", int(SystemBody::TYPE_WHITE_DWARF) }, - { "STAR_M", int(SystemBody::TYPE_STAR_M) }, - { "STAR_K", int(SystemBody::TYPE_STAR_K) }, - { "STAR_G", int(SystemBody::TYPE_STAR_G) }, - { "STAR_F", int(SystemBody::TYPE_STAR_F) }, - { "STAR_A", int(SystemBody::TYPE_STAR_A) }, - { "STAR_B", int(SystemBody::TYPE_STAR_B) }, - { "STAR_O", int(SystemBody::TYPE_STAR_O) }, - { "STAR_M_GIANT", int(SystemBody::TYPE_STAR_M_GIANT) }, - { "STAR_K_GIANT", int(SystemBody::TYPE_STAR_K_GIANT) }, - { "STAR_G_GIANT", int(SystemBody::TYPE_STAR_G_GIANT) }, - { "STAR_F_GIANT", int(SystemBody::TYPE_STAR_F_GIANT) }, - { "STAR_A_GIANT", int(SystemBody::TYPE_STAR_A_GIANT) }, - { "STAR_B_GIANT", int(SystemBody::TYPE_STAR_B_GIANT) }, - { "STAR_O_GIANT", int(SystemBody::TYPE_STAR_O_GIANT) }, - { "STAR_M_SUPER_GIANT", int(SystemBody::TYPE_STAR_M_SUPER_GIANT) }, - { "STAR_K_SUPER_GIANT", int(SystemBody::TYPE_STAR_K_SUPER_GIANT) }, - { "STAR_G_SUPER_GIANT", int(SystemBody::TYPE_STAR_G_SUPER_GIANT) }, - { "STAR_F_SUPER_GIANT", int(SystemBody::TYPE_STAR_F_SUPER_GIANT) }, - { "STAR_A_SUPER_GIANT", int(SystemBody::TYPE_STAR_A_SUPER_GIANT) }, - { "STAR_B_SUPER_GIANT", int(SystemBody::TYPE_STAR_B_SUPER_GIANT) }, - { "STAR_O_SUPER_GIANT", int(SystemBody::TYPE_STAR_O_SUPER_GIANT) }, - { "STAR_M_HYPER_GIANT", int(SystemBody::TYPE_STAR_M_HYPER_GIANT) }, - { "STAR_K_HYPER_GIANT", int(SystemBody::TYPE_STAR_K_HYPER_GIANT) }, - { "STAR_G_HYPER_GIANT", int(SystemBody::TYPE_STAR_G_HYPER_GIANT) }, - { "STAR_F_HYPER_GIANT", int(SystemBody::TYPE_STAR_F_HYPER_GIANT) }, - { "STAR_A_HYPER_GIANT", int(SystemBody::TYPE_STAR_A_HYPER_GIANT) }, - { "STAR_B_HYPER_GIANT", int(SystemBody::TYPE_STAR_B_HYPER_GIANT) }, - { "STAR_O_HYPER_GIANT", int(SystemBody::TYPE_STAR_O_HYPER_GIANT) }, - { "STAR_M_WF", int(SystemBody::TYPE_STAR_M_WF) }, - { "STAR_B_WF", int(SystemBody::TYPE_STAR_B_WF) }, - { "STAR_O_WF", int(SystemBody::TYPE_STAR_O_WF) }, - { "STAR_S_BH", int(SystemBody::TYPE_STAR_S_BH) }, - { "STAR_IM_BH", int(SystemBody::TYPE_STAR_IM_BH) }, - { "STAR_SM_BH", int(SystemBody::TYPE_STAR_SM_BH) }, - { "PLANET_GAS_GIANT", int(SystemBody::TYPE_PLANET_GAS_GIANT) }, - { "PLANET_ASTEROID", int(SystemBody::TYPE_PLANET_ASTEROID) }, - { "PLANET_TERRESTRIAL", int(SystemBody::TYPE_PLANET_TERRESTRIAL) }, - { "STARPORT_ORBITAL", int(SystemBody::TYPE_STARPORT_ORBITAL) }, - { "STARPORT_SURFACE", int(SystemBody::TYPE_STARPORT_SURFACE) }, + { "GRAVPOINT", int(SystemBodyType::TYPE_GRAVPOINT) }, + { "BROWN_DWARF", int(SystemBodyType::TYPE_BROWN_DWARF) }, + { "WHITE_DWARF", int(SystemBodyType::TYPE_WHITE_DWARF) }, + { "STAR_M", int(SystemBodyType::TYPE_STAR_M) }, + { "STAR_K", int(SystemBodyType::TYPE_STAR_K) }, + { "STAR_G", int(SystemBodyType::TYPE_STAR_G) }, + { "STAR_F", int(SystemBodyType::TYPE_STAR_F) }, + { "STAR_A", int(SystemBodyType::TYPE_STAR_A) }, + { "STAR_B", int(SystemBodyType::TYPE_STAR_B) }, + { "STAR_O", int(SystemBodyType::TYPE_STAR_O) }, + { "STAR_M_GIANT", int(SystemBodyType::TYPE_STAR_M_GIANT) }, + { "STAR_K_GIANT", int(SystemBodyType::TYPE_STAR_K_GIANT) }, + { "STAR_G_GIANT", int(SystemBodyType::TYPE_STAR_G_GIANT) }, + { "STAR_F_GIANT", int(SystemBodyType::TYPE_STAR_F_GIANT) }, + { "STAR_A_GIANT", int(SystemBodyType::TYPE_STAR_A_GIANT) }, + { "STAR_B_GIANT", int(SystemBodyType::TYPE_STAR_B_GIANT) }, + { "STAR_O_GIANT", int(SystemBodyType::TYPE_STAR_O_GIANT) }, + { "STAR_M_SUPER_GIANT", int(SystemBodyType::TYPE_STAR_M_SUPER_GIANT) }, + { "STAR_K_SUPER_GIANT", int(SystemBodyType::TYPE_STAR_K_SUPER_GIANT) }, + { "STAR_G_SUPER_GIANT", int(SystemBodyType::TYPE_STAR_G_SUPER_GIANT) }, + { "STAR_F_SUPER_GIANT", int(SystemBodyType::TYPE_STAR_F_SUPER_GIANT) }, + { "STAR_A_SUPER_GIANT", int(SystemBodyType::TYPE_STAR_A_SUPER_GIANT) }, + { "STAR_B_SUPER_GIANT", int(SystemBodyType::TYPE_STAR_B_SUPER_GIANT) }, + { "STAR_O_SUPER_GIANT", int(SystemBodyType::TYPE_STAR_O_SUPER_GIANT) }, + { "STAR_M_HYPER_GIANT", int(SystemBodyType::TYPE_STAR_M_HYPER_GIANT) }, + { "STAR_K_HYPER_GIANT", int(SystemBodyType::TYPE_STAR_K_HYPER_GIANT) }, + { "STAR_G_HYPER_GIANT", int(SystemBodyType::TYPE_STAR_G_HYPER_GIANT) }, + { "STAR_F_HYPER_GIANT", int(SystemBodyType::TYPE_STAR_F_HYPER_GIANT) }, + { "STAR_A_HYPER_GIANT", int(SystemBodyType::TYPE_STAR_A_HYPER_GIANT) }, + { "STAR_B_HYPER_GIANT", int(SystemBodyType::TYPE_STAR_B_HYPER_GIANT) }, + { "STAR_O_HYPER_GIANT", int(SystemBodyType::TYPE_STAR_O_HYPER_GIANT) }, + { "STAR_M_WF", int(SystemBodyType::TYPE_STAR_M_WF) }, + { "STAR_B_WF", int(SystemBodyType::TYPE_STAR_B_WF) }, + { "STAR_O_WF", int(SystemBodyType::TYPE_STAR_O_WF) }, + { "STAR_S_BH", int(SystemBodyType::TYPE_STAR_S_BH) }, + { "STAR_IM_BH", int(SystemBodyType::TYPE_STAR_IM_BH) }, + { "STAR_SM_BH", int(SystemBodyType::TYPE_STAR_SM_BH) }, + { "PLANET_GAS_GIANT", int(SystemBodyType::TYPE_PLANET_GAS_GIANT) }, + { "PLANET_ASTEROID", int(SystemBodyType::TYPE_PLANET_ASTEROID) }, + { "PLANET_TERRESTRIAL", int(SystemBodyType::TYPE_PLANET_TERRESTRIAL) }, + { "STARPORT_ORBITAL", int(SystemBodyType::TYPE_STARPORT_ORBITAL) }, + { "STARPORT_SURFACE", int(SystemBodyType::TYPE_STARPORT_SURFACE) }, { 0, 0 }, }; const struct EnumItem ENUM_BodySuperType[] = { - { "NONE", int(SystemBody::SUPERTYPE_NONE) }, - { "STAR", int(SystemBody::SUPERTYPE_STAR) }, - { "ROCKY_PLANET", int(SystemBody::SUPERTYPE_ROCKY_PLANET) }, - { "GAS_GIANT", int(SystemBody::SUPERTYPE_GAS_GIANT) }, - { "STARPORT", int(SystemBody::SUPERTYPE_STARPORT) }, + { "NONE", int(SystemBodyType::SUPERTYPE_NONE) }, + { "STAR", int(SystemBodyType::SUPERTYPE_STAR) }, + { "ROCKY_PLANET", int(SystemBodyType::SUPERTYPE_ROCKY_PLANET) }, + { "GAS_GIANT", int(SystemBodyType::SUPERTYPE_GAS_GIANT) }, + { "STARPORT", int(SystemBodyType::SUPERTYPE_STARPORT) }, { 0, 0 }, };