""" Static data. For easy reference any variable should be prefixed with the name of the file it was either in originally, or where the primary code utilising it is. """ # Map numeric 'demand/supply brackets' to the names as shown in-game. commodity_bracketmap = { 0: '', 1: 'Low', 2: 'Med', 3: 'High', } # Map values reported by the Companion interface to names displayed in-game. # May be imported by plugins. companion_category_map = { 'Narcotics': 'Legal Drugs', 'Slaves': 'Slavery', 'Waste ': 'Waste', 'NonMarketable': False, # Don't appear in the in-game market so don't report } # Map suit symbol names to English localised names companion_suit_type_map = { 'TacticalSuit_Class1': 'Dominator Suit', } # Map Coriolis's names to names displayed in the in-game shipyard. coriolis_ship_map = { 'Cobra Mk III': 'Cobra MkIII', 'Cobra Mk IV': 'Cobra MkIV', 'Krait Mk II': 'Krait MkII', 'Viper': 'Viper MkIII', 'Viper Mk IV': 'Viper MkIV', } # Map API slot names to E:D Shipyard slot names edshipyard_slot_map = { 'hugehardpoint': 'H', 'largehardpoint': 'L', 'mediumhardpoint': 'M', 'smallhardpoint': 'S', 'tinyhardpoint': 'U', 'armour': 'BH', 'powerplant': 'RB', 'mainengines': 'TM', 'frameshiftdrive': 'FH', 'lifesupport': 'EC', 'powerdistributor': 'PC', 'radar': 'SS', 'fueltank': 'FS', 'military': 'MC', } # Map API module names to in-game names outfitting_armour_map = { 'grade1': 'Lightweight Alloy', 'grade2': 'Reinforced Alloy', 'grade3': 'Military Grade Composite', 'mirrored': 'Mirrored Surface Composite', 'reactive': 'Reactive Surface Composite', } outfitting_weapon_map = { 'advancedtorppylon': 'Torpedo Pylon', 'atdumbfiremissile': 'AX Missile Rack', 'atmulticannon': 'AX Multi-Cannon', ('atmulticannon', 'v2'): 'Enhanced AX Multi-Cannon', ('atdumbfiremissile', 'v2'): 'Enhanced AX Missile Rack', 'basicmissilerack': 'Seeker Missile Rack', 'beamlaser': 'Beam Laser', ('beamlaser', 'heat'): 'Retributor Beam Laser', 'cannon': 'Cannon', 'causticmissile': 'Enzyme Missile Rack', 'drunkmissilerack': 'Pack-Hound Missile Rack', 'dumbfiremissilerack': 'Missile Rack', ('dumbfiremissilerack', 'advanced'): 'Advanced Missile Rack', ('dumbfiremissilerack', 'lasso'): 'Rocket Propelled FSD Disruptor', 'flakmortar': 'Remote Release Flak Launcher', 'flechettelauncher': 'Remote Release Flechette Launcher', 'guardian_gausscannon': 'Guardian Gauss Cannon', 'guardian_plasmalauncher': 'Guardian Plasma Charger', 'guardian_shardcannon': 'Guardian Shard Cannon', 'minelauncher': 'Mine Launcher', ('minelauncher', 'impulse'): 'Shock Mine Launcher', 'mining_abrblstr': 'Abrasion Blaster', 'mining_seismchrgwarhd': 'Seismic Charge Launcher', 'mining_subsurfdispmisle': 'Sub-Surface Displacement Missile', 'human_extraction': 'Sub-Surface Extraction Missile', 'atventdisruptorpylon': 'Guardian Nanite Torpedo Pylon', 'mininglaser': 'Mining Laser', ('mininglaser', 'advanced'): 'Mining Lance Beam Laser', 'multicannon': 'Multi-Cannon', ('multicannon', 'advanced'): 'Advanced Multi-Cannon', ('multicannon', 'strong'): 'Enforcer Cannon', 'plasmaaccelerator': 'Plasma Accelerator', ('plasmaaccelerator', 'advanced'): 'Advanced Plasma Accelerator', 'plasmashockcannon': 'Shock Cannon', 'pulselaser': 'Pulse Laser', ('pulselaser', 'disruptor'): 'Pulse Disruptor Laser', 'pulselaserburst': 'Burst Laser', ('pulselaserburst', 'scatter'): 'Cytoscrambler Burst Laser', 'railgun': 'Rail Gun', ('railgun', 'burst'): 'Imperial Hammer Rail Gun', 'slugshot': 'Fragment Cannon', ('slugshot', 'range'): 'Pacifier Frag-Cannon', } outfitting_missiletype_map = { 'advancedtorppylon': 'Seeker', 'atdumbfiremissile': 'Dumbfire', 'basicmissilerack': 'Seeker', 'causticmissile': 'Dumbfire', 'drunkmissilerack': 'Swarm', 'dumbfiremissilerack': 'Dumbfire', 'mining_subsurfdispmisle': 'Seeker', 'mining_seismchrgwarhd': 'Seeker', } outfitting_weaponmount_map = { 'basic': 'Utility', 'fixed': 'Fixed', 'gimbal': 'Gimballed', 'turret': 'Turreted', } outfitting_weaponclass_map = { 'tiny': '0', 'small': '1', 'smallfree': '1', 'medium': '2', 'large': '3', 'huge': '4', } # There's no discernable pattern for weapon ratings, so here's a lookup table outfitting_weaponrating_map = { 'hpt_advancedtorppylon_fixed_small': 'I', 'hpt_advancedtorppylon_fixed_medium': 'I', 'hpt_advancedtorppylon_fixed_large': 'I', 'hpt_atdumbfiremissile_fixed_medium': 'B', 'hpt_atdumbfiremissile_fixed_large': 'A', 'hpt_atdumbfiremissile_turret_medium': 'B', 'hpt_atdumbfiremissile_turret_large': 'A', 'hpt_atmulticannon_fixed_medium': 'E', 'hpt_atmulticannon_fixed_large': 'C', 'hpt_atmulticannon_turret_medium': 'F', 'hpt_atmulticannon_turret_large': 'E', 'hpt_basicmissilerack_fixed_small': 'B', 'hpt_basicmissilerack_fixed_medium': 'B', 'hpt_basicmissilerack_fixed_large': 'A', 'hpt_beamlaser_fixed_small': 'E', 'hpt_beamlaser_fixed_medium': 'D', 'hpt_beamlaser_fixed_large': 'C', 'hpt_beamlaser_fixed_huge': 'A', 'hpt_beamlaser_gimbal_small': 'E', 'hpt_beamlaser_gimbal_medium': 'D', 'hpt_beamlaser_gimbal_large': 'C', 'hpt_beamlaser_gimbal_huge': 'A', 'hpt_beamlaser_turret_small': 'F', 'hpt_beamlaser_turret_medium': 'E', 'hpt_beamlaser_turret_large': 'D', 'hpt_cannon_fixed_small': 'D', 'hpt_cannon_fixed_medium': 'D', 'hpt_cannon_fixed_large': 'C', 'hpt_cannon_fixed_huge': 'B', 'hpt_cannon_gimbal_small': 'E', 'hpt_cannon_gimbal_medium': 'D', 'hpt_cannon_gimbal_large': 'C', 'hpt_cannon_gimbal_huge': 'B', 'hpt_cannon_turret_small': 'F', 'hpt_cannon_turret_medium': 'E', 'hpt_cannon_turret_large': 'D', 'hpt_causticmissile_fixed_medium': 'B', 'hpt_drunkmissilerack_fixed_medium': 'B', 'hpt_dumbfiremissilerack_fixed_small': 'B', 'hpt_dumbfiremissilerack_fixed_medium': 'B', 'hpt_dumbfiremissilerack_fixed_large': 'A', 'hpt_flakmortar_fixed_medium': 'B', 'hpt_flakmortar_turret_medium': 'B', 'hpt_flechettelauncher_fixed_medium': 'B', 'hpt_flechettelauncher_turret_medium': 'B', 'hpt_guardian_gausscannon_fixed_small': 'D', 'hpt_guardian_gausscannon_fixed_medium': 'B', 'hpt_guardian_plasmalauncher_fixed_small': 'D', 'hpt_guardian_plasmalauncher_fixed_medium': 'B', 'hpt_guardian_plasmalauncher_fixed_large': 'C', 'hpt_guardian_plasmalauncher_turret_small': 'F', 'hpt_guardian_plasmalauncher_turret_medium': 'E', 'hpt_guardian_plasmalauncher_turret_large': 'D', 'hpt_guardian_shardcannon_fixed_small': 'D', 'hpt_guardian_shardcannon_fixed_medium': 'A', 'hpt_guardian_shardcannon_fixed_large': 'C', 'hpt_guardian_shardcannon_turret_small': 'F', 'hpt_guardian_shardcannon_turret_medium': 'D', 'hpt_guardian_shardcannon_turret_large': 'D', 'hpt_minelauncher_fixed_small': 'I', 'hpt_minelauncher_fixed_medium': 'I', 'hpt_mining_abrblstr_fixed_small': 'D', 'hpt_mining_abrblstr_turret_small': 'D', 'hpt_mining_seismchrgwarhd_fixed_medium': 'B', 'hpt_mining_seismchrgwarhd_turret_medium': 'B', 'hpt_mining_subsurfdispmisle_fixed_small': 'B', 'hpt_mining_subsurfdispmisle_fixed_medium': 'B', 'hpt_mining_subsurfdispmisle_turret_small': 'B', 'hpt_mining_subsurfdispmisle_turret_medium': 'B', 'hpt_mininglaser_fixed_small': 'D', 'hpt_mininglaser_fixed_medium': 'D', 'hpt_mininglaser_turret_small': 'D', 'hpt_mininglaser_turret_medium': 'D', 'hpt_multicannon_fixed_small': 'F', 'hpt_multicannon_fixed_small_advanced': 'F', 'hpt_multicannon_fixed_medium': 'E', 'hpt_multicannon_fixed_medium_advanced': 'E', 'hpt_multicannon_fixed_large': 'C', 'hpt_multicannon_fixed_huge': 'A', 'hpt_multicannon_gimbal_small': 'G', 'hpt_multicannon_gimbal_medium': 'F', 'hpt_multicannon_gimbal_large': 'C', 'hpt_multicannon_gimbal_huge': 'A', 'hpt_multicannon_turret_small': 'G', 'hpt_multicannon_turret_medium': 'F', 'hpt_multicannon_turret_large': 'E', 'hpt_plasmaaccelerator_fixed_medium': 'C', 'hpt_plasmaaccelerator_fixed_large': 'B', 'hpt_plasmaaccelerator_fixed_huge': 'A', 'hpt_plasmashockcannon_fixed_small': 'D', 'hpt_plasmashockcannon_fixed_medium': 'D', 'hpt_plasmashockcannon_fixed_large': 'C', 'hpt_plasmashockcannon_gimbal_small': 'E', 'hpt_plasmashockcannon_gimbal_medium': 'D', 'hpt_plasmashockcannon_gimbal_large': 'C', 'hpt_plasmashockcannon_turret_small': 'F', 'hpt_plasmashockcannon_turret_medium': 'E', 'hpt_plasmashockcannon_turret_large': 'D', 'hpt_pulselaser_fixed_small': 'F', 'hpt_pulselaser_fixed_smallfree': 'F', 'hpt_pulselaser_fixed_medium': 'E', 'hpt_pulselaser_fixed_large': 'D', 'hpt_pulselaser_fixed_huge': 'A', 'hpt_pulselaser_gimbal_small': 'G', 'hpt_pulselaser_gimbal_medium': 'F', 'hpt_pulselaser_gimbal_large': 'E', 'hpt_pulselaser_gimbal_huge': 'A', 'hpt_pulselaser_turret_small': 'G', 'hpt_pulselaser_turret_medium': 'F', 'hpt_pulselaser_turret_large': 'F', 'hpt_pulselaserburst_fixed_small': 'F', 'hpt_pulselaserburst_fixed_medium': 'E', 'hpt_pulselaserburst_fixed_large': 'D', 'hpt_pulselaserburst_fixed_huge': 'E', 'hpt_pulselaserburst_gimbal_small': 'G', 'hpt_pulselaserburst_gimbal_medium': 'F', 'hpt_pulselaserburst_gimbal_large': 'E', 'hpt_pulselaserburst_gimbal_huge': 'E', 'hpt_pulselaserburst_turret_small': 'G', 'hpt_pulselaserburst_turret_medium': 'F', 'hpt_pulselaserburst_turret_large': 'E', 'hpt_railgun_fixed_small': 'D', 'hpt_railgun_fixed_medium': 'B', 'hpt_slugshot_fixed_small': 'E', 'hpt_slugshot_fixed_medium': 'A', 'hpt_slugshot_fixed_large': 'C', 'hpt_slugshot_gimbal_small': 'E', 'hpt_slugshot_gimbal_medium': 'D', 'hpt_slugshot_gimbal_large': 'C', 'hpt_slugshot_turret_small': 'E', 'hpt_slugshot_turret_medium': 'D', 'hpt_slugshot_turret_large': 'C', 'hpt_xenoscannermk2_basic_tiny': '?', 'hpt_atmulticannon_gimbal_large': 'C', 'hpt_atmulticannon_gimbal_medium': 'E', 'hpt_human_extraction_fixed_medium': 'B', 'hpt_atventdisruptorpylon_fixed_medium': 'I', 'hpt_atventdisruptorpylon_fixed_large': 'I', } # Old standard weapon variants outfitting_weaponoldvariant_map = { 'f': 'Focussed', 'hi': 'High Impact', 'lh': 'Low Heat', 'oc': 'Overcharged', 'ss': 'Scatter Spray', } outfitting_countermeasure_map = { 'antiunknownshutdown': ('Shutdown Field Neutraliser', 'F'), ('antiunknownshutdown', 'v2'): ('Thargoid Pulse Neutraliser', 'E'), 'chafflauncher': ('Chaff Launcher', 'I'), 'electroniccountermeasure': ('Electronic Countermeasure', 'F'), 'heatsinklauncher': ('Heat Sink Launcher', 'I'), 'plasmapointdefence': ('Point Defence', 'I'), 'xenoscanner': ('Xeno Scanner', 'E'), 'xenoscannermk2': ('Unknown Xeno Scanner Mk II', '?'), } outfitting_utility_map = { 'cargoscanner': 'Cargo Scanner', 'cloudscanner': 'Frame Shift Wake Scanner', 'crimescanner': 'Kill Warrant Scanner', 'mrascanner': 'Pulse Wave Analyser', 'shieldbooster': 'Shield Booster', } outfitting_cabin_map = { '0': 'Prisoner Cells', '1': 'Economy Class Passenger Cabin', '2': 'Business Class Passenger Cabin', '3': 'First Class Passenger Cabin', '4': 'Luxury Class Passenger Cabin', '5': 'Passenger Cabin', # not seen } outfitting_rating_map = { '1': 'E', '2': 'D', '3': 'C', '4': 'B', '5': 'A', } # Ratings are weird for the following outfitting_corrosion_rating_map = { '1': 'E', '2': 'F', } outfitting_planet_rating_map = { '1': 'H', '2': 'G', } outfitting_fighter_rating_map = { '1': 'D', } outfitting_misc_internal_map = { ('detailedsurfacescanner', 'tiny'): ('Detailed Surface Scanner', 'I'), ('dockingcomputer', 'advanced'): ('Advanced Docking Computer', 'E'), ('dockingcomputer', 'standard'): ('Standard Docking Computer', 'E'), 'planetapproachsuite': ('Planetary Approach Suite', 'I'), ('stellarbodydiscoveryscanner', 'standard'): ('Basic Discovery Scanner', 'E'), ('stellarbodydiscoveryscanner', 'intermediate'): ('Intermediate Discovery Scanner', 'D'), ('stellarbodydiscoveryscanner', 'advanced'): ('Advanced Discovery Scanner', 'C'), 'supercruiseassist': ('Supercruise Assist', 'E'), } outfitting_standard_map = { # 'armour': handled separately 'engine': 'Thrusters', ('engine', 'fast'): 'Enhanced Performance Thrusters', 'fueltank': 'Fuel Tank', 'guardianpowerdistributor': 'Guardian Hybrid Power Distributor', 'guardianpowerplant': 'Guardian Hybrid Power Plant', 'hyperdrive': 'Frame Shift Drive', ('hyperdrive', 'overcharge'): 'Frame Shift Drive (SCO)', 'lifesupport': 'Life Support', # 'planetapproachsuite': handled separately 'powerdistributor': 'Power Distributor', 'powerplant': 'Power Plant', 'sensors': 'Sensors', } outfitting_internal_map = { 'buggybay': 'Planetary Vehicle Hangar', 'cargorack': 'Cargo Rack', 'collection': 'Collector Limpet Controller', 'corrosionproofcargorack': 'Corrosion Resistant Cargo Rack', 'decontamination': 'Decontamination Limpet Controller', 'fighterbay': 'Fighter Hangar', 'fsdinterdictor': 'Frame Shift Drive Interdictor', 'fuelscoop': 'Fuel Scoop', 'fueltransfer': 'Fuel Transfer Limpet Controller', 'guardianfsdbooster': 'Guardian FSD Booster', 'guardianhullreinforcement': 'Guardian Hull Reinforcement', 'guardianmodulereinforcement': 'Guardian Module Reinforcement', 'guardianshieldreinforcement': 'Guardian Shield Reinforcement', 'hullreinforcement': 'Hull Reinforcement Package', 'metaalloyhullreinforcement': 'Meta Alloy Hull Reinforcement', 'modulereinforcement': 'Module Reinforcement Package', 'passengercabin': 'Passenger Cabin', 'prospector': 'Prospector Limpet Controller', 'refinery': 'Refinery', 'recon': 'Recon Limpet Controller', 'repair': 'Repair Limpet Controller', 'rescue': 'Rescue Limpet Controller', 'mining': 'Mining Multi Limpet Controller', 'xeno': 'Xeno Multi Limpet Controller', 'operations': 'Operations Multi Limpet Controller', 'universal': 'Universal Multi Limpet Controller', 'repairer': 'Auto Field-Maintenance Unit', 'resourcesiphon': 'Hatch Breaker Limpet Controller', 'shieldcellbank': 'Shield Cell Bank', 'shieldgenerator': 'Shield Generator', ('shieldgenerator', 'fast'): 'Bi-Weave Shield Generator', ('shieldgenerator', 'strong'): 'Prismatic Shield Generator', 'unkvesselresearch': 'Research Limpet Controller', 'expmodulestabiliser': 'Experimental Weapon Stabiliser', } # Dashboard Flags constants FlagsDocked = 1 << 0 # on a landing pad FlagsLanded = 1 << 1 # on planet surface FlagsLandingGearDown = 1 << 2 FlagsShieldsUp = 1 << 3 FlagsSupercruise = 1 << 4 FlagsFlightAssistOff = 1 << 5 FlagsHardpointsDeployed = 1 << 6 FlagsInWing = 1 << 7 FlagsLightsOn = 1 << 8 FlagsCargoScoopDeployed = 1 << 9 FlagsSilentRunning = 1 << 10 FlagsScoopingFuel = 1 << 11 FlagsSrvHandbrake = 1 << 12 FlagsSrvTurret = 1 << 13 # using turret view FlagsSrvUnderShip = 1 << 14 # turret retracted FlagsSrvDriveAssist = 1 << 15 FlagsFsdMassLocked = 1 << 16 FlagsFsdCharging = 1 << 17 FlagsFsdCooldown = 1 << 18 FlagsLowFuel = 1 << 19 # < 25% FlagsOverHeating = 1 << 20 # > 100%, or is this 80% now ? FlagsHasLatLong = 1 << 21 FlagsIsInDanger = 1 << 22 FlagsBeingInterdicted = 1 << 23 FlagsInMainShip = 1 << 24 FlagsInFighter = 1 << 25 FlagsInSRV = 1 << 26 FlagsAnalysisMode = 1 << 27 # Hud in Analysis mode FlagsNightVision = 1 << 28 FlagsAverageAltitude = 1 << 29 # Altitude from Average radius FlagsFsdJump = 1 << 30 FlagsSrvHighBeam = 1 << 31 # Status.json / Dashboard flags2 Flags2OnFoot = 1 << 0 Flags2InTaxi = 1 << 1 # (or dropship/shuttle) Flags2InMulticrew = 1 << 2 # (ie in someone else’s ship) Flags2OnFootInStation = 1 << 3 Flags2OnFootOnPlanet = 1 << 4 Flags2AimDownSight = 1 << 5 Flags2LowOxygen = 1 << 6 Flags2LowHealth = 1 << 7 Flags2Cold = 1 << 8 Flags2Hot = 1 << 9 Flags2VeryCold = 1 << 10 Flags2VeryHot = 1 << 11 Flags2GlideMode = 1 << 12 Flags2OnFootInHangar = 1 << 13 Flags2OnFootSocialSpace = 1 << 14 Flags2OnFootExterior = 1 << 15 Flags2BreathableAtmosphere = 1 << 16 # Dashboard GuiFocus constants GuiFocusNoFocus = 0 GuiFocusInternalPanel = 1 # right hand side GuiFocusExternalPanel = 2 # left hand side GuiFocusCommsPanel = 3 # top GuiFocusRolePanel = 4 # bottom GuiFocusStationServices = 5 GuiFocusGalaxyMap = 6 GuiFocusSystemMap = 7 GuiFocusOrrery = 8 GuiFocusFSS = 9 GuiFocusSAA = 10 GuiFocusCodex = 11 ship_name_map = { 'adder': 'Adder', 'anaconda': 'Anaconda', 'asp': 'Asp Explorer', 'asp_scout': 'Asp Scout', 'belugaliner': 'Beluga Liner', 'cobramkiii': 'Cobra MkIII', 'cobramkiv': 'Cobra MkIV', 'cobramkv': 'Cobra MkV', 'clipper': 'Panther Clipper', 'cutter': 'Imperial Cutter', 'diamondback': 'Diamondback Scout', 'diamondbackxl': 'Diamondback Explorer', 'dolphin': 'Dolphin', 'eagle': 'Eagle', 'empire_courier': 'Imperial Courier', 'empire_eagle': 'Imperial Eagle', 'empire_fighter': 'Imperial Fighter', 'empire_trader': 'Imperial Clipper', 'federation_corvette': 'Federal Corvette', 'federation_dropship': 'Federal Dropship', 'federation_dropship_mkii': 'Federal Assault Ship', 'federation_gunship': 'Federal Gunship', 'federation_fighter': 'F63 Condor', 'ferdelance': 'Fer-de-Lance', 'hauler': 'Hauler', 'independant_trader': 'Keelback', 'independent_fighter': 'Taipan Fighter', 'krait_mkii': 'Krait MkII', 'krait_light': 'Krait Phantom', 'mamba': 'Mamba', 'mandalay': 'Mandalay', 'orca': 'Orca', 'python': 'Python', 'python_nx': 'Python Mk II', 'scout': 'Taipan Fighter', 'sidewinder': 'Sidewinder', 'testbuggy': 'Scarab', 'type6': 'Type-6 Transporter', 'type7': 'Type-7 Transporter', 'type8': 'Type-8 Transporter', 'type9': 'Type-9 Heavy', 'type9_military': 'Type-10 Defender', 'typex': 'Alliance Chieftain', 'typex_2': 'Alliance Crusader', 'typex_3': 'Alliance Challenger', 'viper': 'Viper MkIII', 'viper_mkiv': 'Viper MkIV', 'vulture': 'Vulture', } # Odyssey Suit Names edmc_suit_shortnames = { 'Flight Suit': 'Flight', # EN 'Artemis Suit': 'Artemis', # EN 'Dominator Suit': 'Dominator', # EN 'Maverick Suit': 'Maverick', # EN 'Flug-Anzug': 'Flug', # DE 'Artemis-Anzug': 'Artemis', # DE 'Dominator-Anzug': 'Dominator', # DE 'Maverick-Anzug': 'Maverick', # DE 'Traje de vuelo': 'de vuelo', # ES 'Traje Artemis': 'Artemis', # ES 'Traje Dominator': 'Dominator', # ES 'Traje Maverick': 'Maverick', # ES 'Combinaison de vol': 'de vol', # FR 'Combinaison Artemis': 'Artemis', # FR 'Combinaison Dominator': 'Dominator', # FR 'Combinaison Maverick': 'Maverick', # FR 'Traje voador': 'voador', # PT-BR # These are duplicates of the ES ones, but kept here for clarity # 'Traje Artemis': 'Artemis', # PT-BR # 'Traje Dominator': 'Dominator', # PT-BR # 'Traje Maverick': 'Maverick', # PT-BR 'Летный комбинезон': 'Летный', # RU 'Комбинезон Artemis': 'Artemis', # RU 'Комбинезон Dominator': 'Dominator', # RU 'Комбинезон Maverick': 'Maverick', # RU } edmc_suit_symbol_localised = { # The key here should match what's seen in Fileheader 'language', but with # any in-file `\\` already unescaped to a single `\`. r'English\UK': { 'flightsuit': 'Flight Suit', 'explorationsuit': 'Artemis Suit', 'tacticalsuit': 'Dominator Suit', 'utilitysuit': 'Maverick Suit', }, r'German\DE': { 'flightsuit': 'Flug-Anzug', 'explorationsuit': 'Artemis-Anzug', 'tacticalsuit': 'Dominator-Anzug', 'utilitysuit': 'Maverick-Anzug', }, r'French\FR': { 'flightsuit': 'Combinaison de vol', 'explorationsuit': 'Combinaison Artemis', 'tacticalsuit': 'Combinaison Dominator', 'utilitysuit': 'Combinaison Maverick', }, r'Portuguese\BR': { 'flightsuit': 'Traje voador', 'explorationsuit': 'Traje Artemis', 'tacticalsuit': 'Traje Dominator', 'utilitysuit': 'Traje Maverick', }, r'Russian\RU': { 'flightsuit': 'Летный комбинезон', 'explorationsuit': 'Комбинезон Artemis', 'tacticalsuit': 'Комбинезон Dominator', 'utilitysuit': 'Комбинезон Maverick', }, r'Spanish\ES': { 'flightsuit': 'Traje de vuelo', 'explorationsuit': 'Traje Artemis', 'tacticalsuit': 'Traje Dominator', 'utilitysuit': 'Traje Maverick', }, } # WORKAROUND 2021-07-03 | 4.0.0.600 Update 5: duplicates of `fileheader` keys in `LoadGame`, # but the GameLanguage in the latter has doubled up the `\`, so cater for either here. # This is sourced from what the game is passed by the launcher, caveat emptor. It was mentioned that / is also # an option # This is only run once when this file is imported by something, no runtime cost or repeated expansions will occur __keys = list(edmc_suit_symbol_localised.keys()) for lang in __keys: new_lang = lang.replace('\\', r'\\') new_lang_2 = lang.replace('\\', '/') edmc_suit_symbol_localised[new_lang] = edmc_suit_symbol_localised[lang] edmc_suit_symbol_localised[new_lang_2] = edmc_suit_symbol_localised[lang] # Local webserver for debugging. See implementation in debug_webserver.py DEBUG_WEBSERVER_HOST = '127.0.0.1' DEBUG_WEBSERVER_PORT = 9090