diff --git a/docs/vtv-presets.html b/docs/vtv-presets.html
index aa05afe..e0b4d47 100644
--- a/docs/vtv-presets.html
+++ b/docs/vtv-presets.html
@@ -271,26 +271,6 @@ td.fn {
-
-
- Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 SLAVER BOOST 1 CHUTE — 2 SLAVER BOOST 1 CHUTE LIFT CUT 3 SLAVER BOOST 1 LIFT CUT — 4 SLAVER BOOST 1 LIFT CUT — 5 SLAVER BOOST 1 HORN LIFT CUT 6 LIFT CUT BOOST 1 — SLAVER
-
-
-
- Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 LASER 2 BOOST 1 HORN — 2 LASER 2 BOOST 1 HORN LIFT CUT 3 LASER 2 BOOST 1 LIFT CUT — 4 LASER 2 BOOST 1 LIFT CUT HORN 5 LASER 2 BOOST 1 DEMOPACKDROPPER2 LIFT CUT 6 LIFT CUT BOOST 1 — LASER 2
-
Police hull · shared with Blacker Dragon
@@ -361,26 +341,6 @@ td.fn {
Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 RIVET 2 BOOST 1 CHUTE — 2 RIVET 2 BOOST 1 CHUTE LIFT CUT 3 RIVET 2 BOOST 1 LIFT CUT — 4 RIVET 2 BOOST 1 LIFT CUT — 5 RIVET 2 BOOST 1 HORN LIFT CUT 6 LIFT CUT BOOST 1 — RIVET 2
-
-
- Armadillo hull · shared with Armadillo, Blacker Puck
- BLACKER ARMADILLO
- blkrpuck
- 1× BOOST LASER 2
- 2 subsystems 16 mappings
-
- Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 LASER 2 BOOST 1 HORN — 2 LASER 2 BOOST 1 HORN LIFT CUT 3 LASER 2 BOOST 1 LIFT CUT — 4 LASER 2 BOOST 1 LIFT CUT HORN 5 LASER 2 BOOST 1 HORN LIFT CUT 6 LIFT CUT BOOST 1 — LASER 2
-
-
-
- Skeeter hull · shared with Chigger, Flea, Roach, Skeeter, Wasp
- BLACKER WASP
- blkrwasp
- 2× BOOST CHUTE DEMO PACK
- 4 subsystems 26 mappings
-
- Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 DEMO PACK BOOST 1 CHUTE — 2 DEMO PACK BOOST 1 CHUTE LIFT CUT 3 DEMO PACK BOOST 1 LIFT CUT — 4 DEMO PACK BOOST 1 LIFT CUT CHUTE 5 DEMO PACK BOOST 1 HORN LIFT CUT 6 LIFT CUT BOOST 1 BOOST 2 DEMO PACK
-
Skeeter hull · shared with Blacker Wasp, Flea, Roach, Skeeter, Wasp
@@ -491,76 +451,6 @@ td.fn {
Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 BOOST 1 BOOST 2 CHUTE — 2 BOOST 1 BOOST 2 CHUTE LIFT CUT 3 BOOST 1 BOOST 2 LIFT CUT — 4 BOOST 1 BOOST 2 LIFT CUT CHUTE 5 BOOST 1 BOOST 2 HORN LIFT CUT 6 LIFT CUT BOOST 1 BOOST 2 CHUTE
-
-
- Mule hull · shared with Barge, Burro, Mule, Screaming Broccoli (console says Bug)
- BLACKER BROCCOLI
- blkrbroc
- 3× BOOST CHUTE UNARMED
- 4 subsystems 28 mappings
-
- Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 BOOST 1 BOOST 2 CHUTE — 2 BOOST 1 BOOST 2 CHUTE LIFT CUT 3 BOOST 1 BOOST 2 LIFT CUT — 4 BOOST 1 BOOST 3 LIFT CUT CHUTE 5 BOOST 1 BOOST 2 HORN LIFT CUT 6 LIFT CUT BOOST 1 BOOST 2 CHUTE
-
-
-
- Quark hull · shared with Blacker Quark, Lepton, Neutrino, Quark
- BLACKER LEPTON
- blkrlepton
- 2× BOOST CHUTE UNARMED
- 3 subsystems 23 mappings
-
- Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 BOOST 1 BOOST 2 CHUTE — 2 BOOST 1 BOOST 2 CHUTE LIFT CUT 3 BOOST 1 BOOST 2 LIFT CUT — 4 BOOST 1 BOOST 2 LIFT CUT CHUTE 5 BOOST 1 BOOST 2 HORN LIFT CUT 6 LIFT CUT BOOST 1 BOOST 2 CHUTE
-
-
-
- Quark hull · shared with Blacker Lepton, Lepton, Neutrino, Quark
- BLACKER QUARK
- blkrquark
- 2× BOOST UNARMED
- 2 subsystems 17 mappings
-
- Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 BOOST 1 BOOST 2 — — 2 BOOST 1 BOOST 2 — LIFT CUT 3 BOOST 1 BOOST 2 LIFT CUT — 4 BOOST 1 BOOST 2 LIFT CUT — 5 BOOST 1 BOOST 2 HORN LIFT CUT 6 LIFT CUT BOOST 1 BOOST 2 —
-
-
-
- Bug hull · shared with Black Speck, Bug, Speck
- BLACKER SPECK
- blkrspk
- 3× BOOST CHUTE UNARMED
- 4 subsystems 28 mappings
-
- Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 BOOST 1 BOOST 2 CHUTE — 2 BOOST 1 BOOST 2 CHUTE LIFT CUT 3 BOOST 1 BOOST 2 LIFT CUT — 4 BOOST 1 BOOST 3 LIFT CUT CHUTE 5 BOOST 1 BOOST 2 HORN LIFT CUT 6 LIFT CUT BOOST 1 BOOST 2 CHUTE
-
-
-
- Bull hull · shared with Black Tarantula, Bull, Tarantula (console says Bug)
- BLACKER TARANTULA
- blkrtran
- 4× BOOST CHUTE UNARMED
- 5 subsystems 33 mappings
-
- Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 BOOST 2 — CHUTE — 2 BOOST 2 — CHUTE LIFT CUT 3 BOOST 2 — LIFT CUT — 4 BOOST 2 BOOST 4 LIFT CUT CHUTE 5 BOOST 2 — HORN LIFT CUT 6 LIFT CUT BOOST 1 BOOST 2 CHUTE
-
-
-
- Bug hull · shared with Blacker Speck, Bug, Speck
- BLACK SPECK
- blkspk
- 3× BOOST CHUTE UNARMED
- 4 subsystems 28 mappings
-
- Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 BOOST 1 BOOST 2 CHUTE — 2 BOOST 1 BOOST 2 CHUTE LIFT CUT 3 BOOST 1 BOOST 2 LIFT CUT — 4 BOOST 1 BOOST 3 LIFT CUT CHUTE 5 BOOST 1 BOOST 2 HORN LIFT CUT 6 LIFT CUT BOOST 1 BOOST 2 CHUTE
-
-
-
- Bull hull · shared with Blacker Tarantula, Bull, Tarantula
- BLACK TARANTULA
- blktrn
- 4× BOOST CHUTE UNARMED
- 5 subsystems 33 mappings
-
- Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 BOOST 2 — CHUTE — 2 BOOST 2 — CHUTE LIFT CUT 3 BOOST 2 — LIFT CUT — 4 BOOST 2 BOOST 4 LIFT CUT CHUTE 5 BOOST 2 — HORN LIFT CUT 6 LIFT CUT BOOST 1 BOOST 2 CHUTE
-
Mule hull · shared with Barge, Blacker Broccoli, Burro, Mule
@@ -650,6 +540,116 @@ td.fn {
4 subsystems 28 mappings
Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 BOOST 1 BOOST 2 CHUTE — 2 BOOST 1 BOOST 2 CHUTE LIFT CUT 3 BOOST 1 BOOST 2 LIFT CUT — 4 BOOST 1 BOOST 3 LIFT CUT CHUTE 5 BOOST 1 BOOST 2 HORN LIFT CUT 6 LIFT CUT BOOST 1 BOOST 2 CHUTE
+
+
+
+ Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 SLAVER BOOST 1 CHUTE — 2 SLAVER BOOST 1 CHUTE LIFT CUT 3 SLAVER BOOST 1 LIFT CUT — 4 SLAVER BOOST 1 LIFT CUT — 5 SLAVER BOOST 1 HORN LIFT CUT 6 LIFT CUT BOOST 1 — SLAVER
+
+
+
+ Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 LASER 2 BOOST 1 HORN — 2 LASER 2 BOOST 1 HORN LIFT CUT 3 LASER 2 BOOST 1 LIFT CUT — 4 LASER 2 BOOST 1 LIFT CUT HORN 5 LASER 2 BOOST 1 DEMOPACKDROPPER2 LIFT CUT 6 LIFT CUT BOOST 1 — LASER 2
+
+
+
+ Armadillo hull · shared with Armadillo, Blacker Puck
+ BLACKER ARMADILLO
+ blkrpuck
+ 1× BOOST LASER 2
+ 2 subsystems 16 mappings
+
+ Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 LASER 2 BOOST 1 HORN — 2 LASER 2 BOOST 1 HORN LIFT CUT 3 LASER 2 BOOST 1 LIFT CUT — 4 LASER 2 BOOST 1 LIFT CUT HORN 5 LASER 2 BOOST 1 HORN LIFT CUT 6 LIFT CUT BOOST 1 — LASER 2
+
+
+
+ Skeeter hull · shared with Chigger, Flea, Roach, Skeeter, Wasp
+ BLACKER WASP
+ blkrwasp
+ 2× BOOST CHUTE DEMO PACK
+ 4 subsystems 26 mappings
+
+ Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 DEMO PACK BOOST 1 CHUTE — 2 DEMO PACK BOOST 1 CHUTE LIFT CUT 3 DEMO PACK BOOST 1 LIFT CUT — 4 DEMO PACK BOOST 1 LIFT CUT CHUTE 5 DEMO PACK BOOST 1 HORN LIFT CUT 6 LIFT CUT BOOST 1 BOOST 2 DEMO PACK
+
+
+
+ Mule hull · shared with Barge, Burro, Mule, Screaming Broccoli
+ BLACKER BROCCOLI
+ blkrbroc
+ 3× BOOST CHUTE UNARMED
+ 4 subsystems 28 mappings
+
+ Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 BOOST 1 BOOST 2 CHUTE — 2 BOOST 1 BOOST 2 CHUTE LIFT CUT 3 BOOST 1 BOOST 2 LIFT CUT — 4 BOOST 1 BOOST 3 LIFT CUT CHUTE 5 BOOST 1 BOOST 2 HORN LIFT CUT 6 LIFT CUT BOOST 1 BOOST 2 CHUTE
+
+
+
+ Quark hull · shared with Blacker Quark, Lepton, Neutrino, Quark
+ BLACKER LEPTON
+ blkrlepton
+ 2× BOOST CHUTE UNARMED
+ 3 subsystems 23 mappings
+
+ Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 BOOST 1 BOOST 2 CHUTE — 2 BOOST 1 BOOST 2 CHUTE LIFT CUT 3 BOOST 1 BOOST 2 LIFT CUT — 4 BOOST 1 BOOST 2 LIFT CUT CHUTE 5 BOOST 1 BOOST 2 HORN LIFT CUT 6 LIFT CUT BOOST 1 BOOST 2 CHUTE
+
+
+
+ Quark hull · shared with Blacker Lepton, Lepton, Neutrino, Quark
+ BLACKER QUARK
+ blkrquark
+ 2× BOOST UNARMED
+ 2 subsystems 17 mappings
+
+ Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 BOOST 1 BOOST 2 — — 2 BOOST 1 BOOST 2 — LIFT CUT 3 BOOST 1 BOOST 2 LIFT CUT — 4 BOOST 1 BOOST 2 LIFT CUT — 5 BOOST 1 BOOST 2 HORN LIFT CUT 6 LIFT CUT BOOST 1 BOOST 2 —
+
+
+
+ Bug hull · shared with Black Speck, Bug, Speck
+ BLACKER SPECK
+ blkrspk
+ 3× BOOST CHUTE UNARMED
+ 4 subsystems 28 mappings
+
+ Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 BOOST 1 BOOST 2 CHUTE — 2 BOOST 1 BOOST 2 CHUTE LIFT CUT 3 BOOST 1 BOOST 2 LIFT CUT — 4 BOOST 1 BOOST 3 LIFT CUT CHUTE 5 BOOST 1 BOOST 2 HORN LIFT CUT 6 LIFT CUT BOOST 1 BOOST 2 CHUTE
+
+
+
+ Bull hull · shared with Black Tarantula, Bull, Tarantula (console says Bug)
+ BLACKER TARANTULA
+ blkrtran
+ 4× BOOST CHUTE UNARMED
+ 5 subsystems 33 mappings
+
+ Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 BOOST 2 — CHUTE — 2 BOOST 2 — CHUTE LIFT CUT 3 BOOST 2 — LIFT CUT — 4 BOOST 2 BOOST 4 LIFT CUT CHUTE 5 BOOST 2 — HORN LIFT CUT 6 LIFT CUT BOOST 1 BOOST 2 CHUTE
+
+
+
+ Bug hull · shared with Blacker Speck, Bug, Speck
+ BLACK SPECK
+ blkspk
+ 3× BOOST CHUTE UNARMED
+ 4 subsystems 28 mappings
+
+ Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 BOOST 1 BOOST 2 CHUTE — 2 BOOST 1 BOOST 2 CHUTE LIFT CUT 3 BOOST 1 BOOST 2 LIFT CUT — 4 BOOST 1 BOOST 3 LIFT CUT CHUTE 5 BOOST 1 BOOST 2 HORN LIFT CUT 6 LIFT CUT BOOST 1 BOOST 2 CHUTE
+
+
+
+ Bull hull · shared with Blacker Tarantula, Bull, Tarantula
+ BLACK TARANTULA
+ blktrn
+ 4× BOOST CHUTE UNARMED
+ 5 subsystems 33 mappings
+
+ Preset assignments Preset TRIGGER THUMB HIGH THUMB LOW PINKY 1 BOOST 2 — CHUTE — 2 BOOST 2 — CHUTE LIFT CUT 3 BOOST 2 — LIFT CUT — 4 BOOST 2 BOOST 4 LIFT CUT CHUTE 5 BOOST 2 — HORN LIFT CUT 6 LIFT CUT BOOST 1 BOOST 2 CHUTE
No VTV matches that.
diff --git a/tools/pages/build_page.py b/tools/pages/build_page.py
index b178b17..6557f75 100644
--- a/tools/pages/build_page.py
+++ b/tools/pages/build_page.py
@@ -36,7 +36,22 @@ for v in data.values():
masks[art], sizes[art] = hull_mask(art)
BUTTONS = ['trigger', 'thumb high', 'thumb low', 'pinky'] # index to little finger
-ORDER = sorted(data, key=lambda v: (-len(data[v]['weapons']), v))
+
+# The blacker machines are palette variants of ones already in the list, so
+# they read as duplicates when interleaved. Sort them to the end of whatever
+# list they land in - within a hull tab as well as overall - and the originals
+# come first. The console's own name is what decides it: eleven of the
+# thirty-eight are called Black or Blacker something.
+def is_variant(key):
+ return (data[key].get('display') or key).lower().startswith('black')
+
+
+ORDER = sorted(data, key=lambda v: (is_variant(v), -len(data[v]['weapons']), v))
+
+# blkrbroc's console picture is a Bug, but the game draws it on the Mule hull
+# like every other Broccoli - the console entry is simply wrong. Saying so on
+# the card raises a question the card cannot answer.
+CONSOLE_PICTURE_WRONG = {'blkrbroc'}
def kind(fn):
@@ -118,7 +133,7 @@ for name in ORDER:
if art:
w, h = sizes[art]
note = ''
- if v.get('hullMismatch'):
+ if v.get('hullMismatch') and name not in CONSOLE_PICTURE_WRONG:
note = (' '
'(console says %s) '