-
Notifications
You must be signed in to change notification settings - Fork 156
/
edmc_data.py
612 lines (571 loc) · 25.7 KB
/
edmc_data.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
"""
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 (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',
'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',
'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