From ad5b8abd2ed5e25d54daa153d2fdf1113419c983 Mon Sep 17 00:00:00 2001 From: Kris Johnson <11083252+KrisXV@users.noreply.github.com> Date: Wed, 19 Feb 2020 17:11:50 -0700 Subject: [PATCH] Add teambuilder support for Metronome Battle (#1443) --- build-tools/build-indexes | 50 +++++++++++++++++++++++++++++++++++---- js/search.js | 9 ++++++- 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/build-tools/build-indexes b/build-tools/build-indexes index 4ec5e066c..dde2192de 100755 --- a/build-tools/build-indexes +++ b/build-tools/build-indexes @@ -286,8 +286,9 @@ process.stdout.write("Building `data/teambuilder-tables.js`... "); let buf = '// DO NOT EDIT - automatically built with build-tools/build-indexes\n\n'; // process.stdout.write("\n "); - for (const genIdent of [8.1, 8, -8, 7.1, 7, -7.5, -7, 6, -6, 5, -5, 4, -4, 3, 2, 1]) { + for (const genIdent of [8.2, 8.1, 8, -8, 7.1, 7, -7.5, -7, 6, -6, 5, -5, 4, -4, 3, 2, 1]) { const isLetsGo = (genIdent === 7.1); + const isMetBattle = (genIdent === 8.2); const isNatDex = (genIdent === 8.1); const isDoubles = (genIdent < 0); const isVGC = (genIdent === -7.5); @@ -304,9 +305,6 @@ process.stdout.write("Building `data/teambuilder-tables.js`... "); const template = Dex.mod(gen).getTemplate(id); if (template.gen > genNum) continue; const tier = (() => { - if (template.tier === 'CAP' || template.tier === 'CAP NFE' || template.tier === 'CAP LC') { - return template.tier; - } if (isNatDex) { let tier = template.tier; if (template.tier === 'Illegal' || template.isNonstandard === 'Past' || template.isUnreleased === 'Past') tier = Dex.mod('gen7').getTemplate(template.species).tier; @@ -318,6 +316,7 @@ process.stdout.write("Building `data/teambuilder-tables.js`... "); ['Zygarde-Complete', 'Necrozma-Ultra'].includes(template.species) ) { tier = 'Uber'; + if (template.species === 'Eternatus-Eternamax') tier = 'Illegal'; return tier; } else if (tier === 'Uber' && !template.isGigantamax) { // This check is for Pokemon tiered as Uber but aren't in the banlist for National Dex tier = 'OU'; @@ -327,6 +326,35 @@ process.stdout.write("Building `data/teambuilder-tables.js`... "); if (template.isGigantamax) tier = 'Uber'; return tier; } + if (isMetBattle) { + let tier = template.tier; + if (template.isNonstandard) { + if (template.isNonstandard === 'Past') { + tier = Dex.mod('gen7').getTemplate(template.species).tier; + } else { + tier = 'OU'; + } + } + if (template.tier === 'CAP LC') tier = 'LC'; + if (template.tier === 'CAP NFE') tier = 'NFE'; + if (template.tier === 'CAP') tier = 'OU'; + if (template.isUnreleased) { + if (template.isUnreleased === 'Past') { + tier = Dex.mod('gen7').getTemplate(template.species).tier; + } else { + tier = 'Unreleased'; + } + } + let banlist = Dex.getFormat('gen8metronomebattle').banlist; + let bst = 0; + for (const stat of Object.values(template.baseStats)) { + bst += stat; + } + if (bst > 625) tier = 'Illegal'; + if (banlist.includes(template.species) || banlist.includes(template.species + '-Base')) tier = 'Illegal'; + if (template.types.includes('Steel')) tier = 'Illegal'; + return tier; + } if (isLetsGo) { let baseTemplate = Dex.mod(gen).getTemplate(template.baseSpecies); let validNum = (baseTemplate.num <= 151 && baseTemplate.num >= 1) || [808, 809].includes(baseTemplate.num); @@ -346,6 +374,9 @@ process.stdout.write("Building `data/teambuilder-tables.js`... "); } return 'Regular'; } + if (template.tier === 'CAP' || template.tier === 'CAP NFE' || template.tier === 'CAP LC') { + return template.tier; + } if (isDoubles) { return template.doublesTier; } @@ -430,6 +461,11 @@ process.stdout.write("Building `data/teambuilder-tables.js`... "); BattleTeambuilderTable['natdex'].tiers = tiers; BattleTeambuilderTable['natdex'].items = items; BattleTeambuilderTable['natdex'].formatSlices = formatSlices; + } else if (isMetBattle) { + BattleTeambuilderTable['metronome'] = {}; + BattleTeambuilderTable['metronome'].tiers = tiers; + BattleTeambuilderTable['metronome'].items = items; + BattleTeambuilderTable['metronome'].formatSlices = formatSlices; } else if (isLetsGo) { BattleTeambuilderTable['letsgo'] = {}; BattleTeambuilderTable['letsgo'].learnsets = {}; @@ -536,7 +572,7 @@ process.stdout.write("Building `data/teambuilder-tables.js`... "); if (item.gen > genNum) { continue; } - if (item.isNonstandard) { + if (item.isNonstandard && !isMetBattle) { if (isNatDex) { if (item.isNonstandard !== "Past") continue; if (!item.itemUser && !item.zMove) continue; @@ -544,6 +580,10 @@ process.stdout.write("Building `data/teambuilder-tables.js`... "); continue; } } + if (isMetBattle) { + const banlist = Dex.getFormat('gen8metronomebattle').banlist; + if (banlist.includes(item.name)) continue; + } switch (id) { case 'leftovers': case 'lifeorb': diff --git a/js/search.js b/js/search.js index 62d384252..9a3ad5595 100644 --- a/js/search.js +++ b/js/search.js @@ -807,6 +807,8 @@ this.mod = 'natdex'; if (!format) format = 'ou'; } + var isMetBattle = format.includes('metronome'); + if (isMetBattle) this.mod = 'natdex'; var requirePentagon = (format === 'battlespotsingles' || format === 'battledoubles' || format.slice(0, 3) === 'vgc'); var requireGalar = (format.indexOf('battlestadium') >= 0 || (format.slice(0, 3) === 'vgc' && this.gen === 8)); var template; @@ -835,6 +837,8 @@ table = table['letsgo']; } else if (isNatDex) { table = table['natdex']; + } else if (isMetBattle) { + table = table['metronome']; } if (!table.tierSet) { @@ -904,6 +908,8 @@ table = table['gen' + this.gen]; } else if (isNatDex) { table = table['natdex']; + } else if (isMetBattle) { + table = table['metronome']; } if (!table.itemSet) { @@ -935,7 +941,7 @@ abilitySet.push(['header', "Special Event Ability"]); abilitySet.push(['ability', toID(template.abilities['S'])]); } - if (format === 'almostanyability' || isBH) { + if (format === 'almostanyability' || isBH || isMetBattle) { template = Dex.getTemplate(set.species); var abilities = []; if (template.isMega) { @@ -1001,6 +1007,7 @@ } learnsetid = this.nextLearnsetid(learnsetid, template.id); } + if (isMetBattle) moves = ['metronome']; if (sketch || isBH) { if (isBH) moves = []; for (var i in BattleMovedex) {