UUBL teambuilder: include (OU) by technicality mons in the picker

In Gen 3 UUBL, Porygon2, Raikou, and Regice are (OU) by technicality
but explicitly unbanned from the format (smogon/pokemon-showdown#11980).
The teambuilder picker slices the tier set at the UUBL boundary, which
is set AFTER the (OU) section, so these mons fall into baseIllegalResults
and display as Illegal.

Fix is data-driven:
- build-indexes now emits formatSlices['(OU)'], so the picker has an
  index pointing at the start of the "OU by technicality" section.
- battle-dex-search.ts uses slices['(OU)'] || slices.UUBL for the uubl
  format, matching the existing fallback pattern used by RU/NU/PU/ZU.

No hardcoded pokemon IDs or gen checks — the "OU by technicality"
header and its entries are already in the tier list; we just start
the slice a little earlier.
This commit is contained in:
surfnWOB 2026-04-21 23:34:01 -04:00
parent 5abbb6fb67
commit e2a461149a
2 changed files with 2 additions and 2 deletions

View File

@ -613,7 +613,7 @@ process.stdout.write("Building `data/teambuilder-tables.js`... ");
for (const tier of tierOrder) {
if (tier in {
OU: 1, UUBL: 1, AG: 1, Uber: 1, UU: 1, RU: 1, NU: 1, PU: 1, ZU: 1, NFE: 1, LC: 1, DOU: 1, DUU: 1,
OU: 1, "(OU)": 1, UUBL: 1, AG: 1, Uber: 1, UU: 1, RU: 1, NU: 1, PU: 1, ZU: 1, NFE: 1, LC: 1, DOU: 1, DUU: 1,
"(DUU)": 1, New: 1, Legal: 1, Regular: 1, Restricted: 1, "CAP LC": 1,
}) {
let usedTier = tier;

View File

@ -1142,7 +1142,7 @@ class BattlePokemonSearch extends BattleTypedSearch<'pokemon'> {
});
}
} else if (format === 'ou') tierSet = tierSet.slice(slices.OU);
else if (format === 'uubl') tierSet = tierSet.slice(slices.UUBL);
else if (format === 'uubl') tierSet = tierSet.slice(slices['(OU)'] || slices.UUBL);
else if (format === 'uu') tierSet = tierSet.slice(slices.UU);
else if (format === 'ru') tierSet = tierSet.slice(slices.RU || slices.UU);
else if (format === 'nu') tierSet = tierSet.slice(slices.NU);