"""
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_medium': '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',
'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',
'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',
'orca': 'Orca',
'python': 'Python',
'scout': 'Taipan Fighter',
'sidewinder': 'Sidewinder',
'testbuggy': 'Scarab',
'type6': 'Type-6 Transporter',
'type7': 'Type-7 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