From 2cb27ddc0e873bbaada1d46fadbb584b05e9d845 Mon Sep 17 00:00:00 2001
From: Jonathan Harris <jonathan@marginal.org.uk>
Date: Wed, 21 Oct 2015 15:33:14 +0100
Subject: [PATCH] Tidy up handling of Discovery Scanners and Docking Computer.

---
 coriolis.py   | 10 +++++-----
 outfitting.py | 35 +++++++++++++++--------------------
 2 files changed, 20 insertions(+), 25 deletions(-)

diff --git a/coriolis.py b/coriolis.py
index b7368e8a..0eb4f69f 100644
--- a/coriolis.py
+++ b/coriolis.py
@@ -57,7 +57,7 @@ weaponmount_map = {
 
 # Modules that have a name as well as a group
 bulkheads       = outfitting.armour_map.values()
-scanners        = [x[0] for x in outfitting.stellar_map.values()]
+scanners        = [x[0] for x in outfitting.misc_internal_map.values()]
 countermeasures = [x[0] for x in outfitting.countermeasure_map.values()]
 fixup_map = {
     'Advanced Plasma Accelerator'   : ('Plasma Accelerator', 'Advanced Plasma Accelerator'),
@@ -134,15 +134,15 @@ def export(data):
                     loadout['components'][category][standard_map[module['name']]] = thing
             else:
                 # All other items have a "group" member, some also have a "name"
-                if module['name'] in scanners:
+                if module['name'] in fixup_map:
+                    thing['group'], name = fixup_map[module['name']]
+                    if name: thing['name'] = name
+                elif module['name'] in scanners:
                     thing['group'] = 'Scanner'
                     thing['name'] = module['name']
                 elif module['name'] in countermeasures:
                     thing['group'] = 'Countermeasure'
                     thing['name'] = module['name']
-                elif module['name'] in fixup_map:
-                    thing['group'], name = fixup_map[module['name']]
-                    if name: thing['name'] = name
                 else:
                     thing['group'] = module['name']
 
diff --git a/outfitting.py b/outfitting.py
index 5c5629f7..9a8b7293 100755
--- a/outfitting.py
+++ b/outfitting.py
@@ -174,6 +174,14 @@ rating_map = {
     '5': 'A',
 }
 
+misc_internal_map = {
+    ('detailedsurfacescanner',      'tiny')         : ('Detailed Surface Scanner', 'C'),
+    ('dockingcomputer',             'standard')     : ('Standard Docking Computer', 'E'),
+    ('stellarbodydiscoveryscanner', 'standard')     : ('Basic Discovery Scanner', 'E'),
+    ('stellarbodydiscoveryscanner', 'intermediate') : ('Intermediate Discovery Scanner', 'D'),
+    ('stellarbodydiscoveryscanner', 'advanced')     : ('Advanced Discovery Scanner', 'C'),
+}
+
 standard_map = {
     # 'armour'         : handled separately
     'engine'           : 'Thrusters',
@@ -185,13 +193,6 @@ standard_map = {
     'sensors'          : 'Sensors',
 }
 
-stellar_map = {
-    'standard'     : ('Basic Discovery Scanner', 'E'),
-    'intermediate' : ('Intermediate Discovery Scanner', 'D'),
-    'advanced'     : ('Advanced Discovery Scanner', 'C'),
-    'tiny'         : ('Detailed Surface Scanner', 'C'),
-}
-
 internal_map = {
     'cargorack'         : 'Cargo Rack',
     'collection'        : 'Collector Limpet Controller',
@@ -280,28 +281,22 @@ def lookup(module):
     elif name[0]=='hpt':
         raise AssertionError('%s: Unknown weapon "%s"' % (module['id'], name[1]))
 
-    # Stellar scanners - e.g. Int_StellarBodyDiscoveryScanner_Standard
-    elif name[1] in ['stellarbodydiscoveryscanner', 'detailedsurfacescanner']:
-        new['category'] = 'internal'
-        new['name'], new['rating'] = stellar_map[name[2]]
-        new['class'] = '1'
+    elif name[0]!='int':
+        raise AssertionError('%s: Unknown prefix "%s"' % (module['id'], name[0]))
 
-    # Docking Computer - e.g. Int_DockingComputer_Standard
-    elif name[1] == 'dockingcomputer' and name[2] == 'standard':
+    # Miscellaneous Class 1 - e.g. Int_StellarBodyDiscoveryScanner_Advanced, Int_DockingComputer_Standard
+    elif (name[1],name[2]) in misc_internal_map:
+        # Reported category is not necessarily helpful. e.g. "Int_DockingComputer_Standard" has category "utility"
         new['category'] = 'internal'
-        new['name'] = 'Standard Docking Computer'
+        new['name'], new['rating'] = misc_internal_map[(name[1],name[2])]
         new['class'] = '1'
-        new['rating'] = 'E'
 
     # Standard & Internal
     else:
-        # Reported category is not necessarily helpful. e.g. "Int_DockingComputer_Standard" has category "utility"
-        if name[0] != 'int': raise AssertionError('%s: Unknown prefix "%s"' % (module['id'], name[0]))
-
         if name[1] == 'dronecontrol':	# e.g. Int_DroneControl_Collection_Size1_Class1
             name.pop(0)
 
-        if name[1] in standard_map:	# e.g. Int_Engine_Size2_Class1
+        if name[1] in standard_map:	# e.g. Int_Engine_Size2_Class1, Int_ShieldGenerator_Size8_Class5_Strong
             new['category'] = 'standard'
             new['name'] = standard_map[len(name)>4 and (name[1],name[4]) or name[1]]
         elif name[1] in internal_map:	# e.g. Int_CargoRack_Size8_Class1