From 7158ead19aeac8750849df2840eabb6dbec77df6 Mon Sep 17 00:00:00 2001 From: livid washed <115855253+livid-washed@users.noreply.github.com> Date: Mon, 20 May 2024 03:46:49 +1000 Subject: [PATCH] Randomized format updates (#10306) --- data/random-battles/gen2/sets.json | 6 +- data/random-battles/gen3/sets.json | 8 +-- data/random-battles/gen4/sets.json | 66 +++++++++++++----- data/random-battles/gen4/teams.ts | 22 ++++-- data/random-battles/gen5/sets.json | 51 ++++++++------ data/random-battles/gen5/teams.ts | 31 ++++++--- data/random-battles/gen6/sets.json | 52 ++++++++------ data/random-battles/gen6/teams.ts | 28 ++++++-- data/random-battles/gen7/sets.json | 80 +++++++++++++++------- data/random-battles/gen7/teams.ts | 28 ++++++-- data/random-battles/gen9/doubles-sets.json | 40 +++++++---- data/random-battles/gen9/teams.ts | 2 +- test/random-battles/gen7.js | 6 -- 13 files changed, 277 insertions(+), 143 deletions(-) diff --git a/data/random-battles/gen2/sets.json b/data/random-battles/gen2/sets.json index c0964384f823..d97458ad810a 100644 --- a/data/random-battles/gen2/sets.json +++ b/data/random-battles/gen2/sets.json @@ -524,7 +524,7 @@ }, { "role": "Fast Attacker", - "movepool": ["explosion", "hiddenpowerice", "lightscreen", "reflect", "thunder"] + "movepool": ["explosion", "hiddenpowerice", "lightscreen", "reflect", "thunder", "thunderbolt"] } ] }, @@ -1160,10 +1160,6 @@ { "role": "Generalist", "movepool": ["encore", "hiddenpowerflying", "leechseed", "stunspore"] - }, - { - "role": "Bulky Support", - "movepool": ["encore", "reflect", "stunspore", "synthesis"] } ] }, diff --git a/data/random-battles/gen3/sets.json b/data/random-battles/gen3/sets.json index 90cac838d033..a2952acd68a3 100644 --- a/data/random-battles/gen3/sets.json +++ b/data/random-battles/gen3/sets.json @@ -1387,8 +1387,8 @@ "movepool": ["doubleedge", "earthquake", "explosion", "hiddenpowerrock", "irontail", "rest", "roar", "toxic"] }, { - "role": "Bulky Support", - "movepool": ["doubleedge", "earthquake", "hiddenpowerrock", "rest", "sleeptalk"] + "role": "Staller", + "movepool": ["doubleedge", "earthquake", "hiddenpowerrock", "protect", "toxic"] } ] }, @@ -1976,10 +1976,6 @@ "slaking": { "level": 79, "sets": [ - { - "role": "Wallbreaker", - "movepool": ["doubleedge", "earthquake", "focuspunch", "return", "shadowball"] - }, { "role": "Fast Attacker", "movepool": ["doubleedge", "earthquake", "hyperbeam", "return", "shadowball"] diff --git a/data/random-battles/gen4/sets.json b/data/random-battles/gen4/sets.json index b57118c17557..27ec45f3190d 100644 --- a/data/random-battles/gen4/sets.json +++ b/data/random-battles/gen4/sets.json @@ -195,7 +195,7 @@ }, { "role": "Setup Sweeper", - "movepool": ["hiddenpowerfire", "sludgebomb", "solarbeam", "sunnyday", "synthesis"] + "movepool": ["hiddenpowerfire", "sludgebomb", "solarbeam", "sunnyday"] } ] }, @@ -944,7 +944,7 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["energyball", "hiddenpowerfire", "hiddenpowerrock", "leafstorm", "sleeppowder", "stunspore", "synthesis"] + "movepool": ["energyball", "hiddenpowerfire", "hiddenpowerrock", "leafstorm", "leechseed", "sleeppowder", "stunspore", "synthesis"] } ] }, @@ -1020,11 +1020,11 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "hiddenpowerfire", "morningsun", "psychic", "signalbeam", "trick"] + "movepool": ["calmmind", "hiddenpowerfighting", "morningsun", "psychic", "signalbeam", "trick"] }, { "role": "Setup Sweeper", - "movepool": ["batonpass", "calmmind", "hiddenpowerfire", "morningsun", "psychic", "substitute"] + "movepool": ["batonpass", "calmmind", "hiddenpowerfighting", "morningsun", "psychic", "substitute"] } ] }, @@ -1112,6 +1112,10 @@ { "role": "Bulky Support", "movepool": ["earthquake", "explosion", "ironhead", "roar", "stealthrock", "stoneedge", "toxic"] + }, + { + "role": "Staller", + "movepool": ["earthquake", "ironhead", "protect", "toxic"] } ] }, @@ -1150,8 +1154,8 @@ "level": 93, "sets": [ { - "role": "Staller", - "movepool": ["encore", "knockoff", "rest", "stealthrock", "toxic"] + "role": "Bulky Support", + "movepool": ["encore", "knockoff", "protect", "stealthrock", "toxic"] } ] }, @@ -1218,7 +1222,11 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["hiddenpowerflying", "rest", "sleeptalk", "surf", "toxic"] + "movepool": ["rest", "sleeptalk", "surf", "toxic"] + }, + { + "role": "Staller", + "movepool": ["hiddenpowerflying", "protect", "surf", "toxic"] } ] }, @@ -1736,6 +1744,10 @@ { "role": "Bulky Setup", "movepool": ["batonpass", "encore", "hiddenpowerice", "nastyplot", "thunderbolt"] + }, + { + "role": "Setup Sweeper", + "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"] } ] }, @@ -1745,6 +1757,10 @@ { "role": "Bulky Setup", "movepool": ["batonpass", "encore", "hiddenpowerice", "nastyplot", "thunderbolt"] + }, + { + "role": "Setup Sweeper", + "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"] } ] }, @@ -2226,7 +2242,7 @@ }, { "role": "Staller", - "movepool": ["protect", "seismictoss", "stealthrock", "toxic"] + "movepool": ["protect", "seismictoss", "stealthrock", "thunderwave", "toxic"] } ] }, @@ -2493,7 +2509,7 @@ "sets": [ { "role": "Staller", - "movepool": ["flashcannon", "protect", "stealthrock", "toxic"] + "movepool": ["flashcannon", "protect", "stealthrock", "suckerpunch", "toxic"] } ] }, @@ -2619,7 +2635,7 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["fakeout", "return", "shadowclaw", "taunt", "uturn"] + "movepool": ["fakeout", "irontail", "return", "shadowclaw", "uturn"] } ] }, @@ -2693,7 +2709,7 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["closecombat", "crunch", "extremespeed", "icepunch", "swordsdance"], + "movepool": ["closecombat", "crunch", "extremespeed", "stoneedge", "swordsdance"], "preferredTypes": ["Normal"] } ] @@ -2950,9 +2966,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "icepunch", "painsplit", "shadowsneak", "trick", "willowisp"], + "movepool": ["earthquake", "icepunch", "painsplit", "shadowsneak", "toxic", "trick", "willowisp"], "preferredTypes": ["Ground"] }, + { + "role": "Staller", + "movepool": ["earthquake", "protect", "shadowsneak", "toxic"] + }, { "role": "Bulky Attacker", "movepool": ["focuspunch", "painsplit", "shadowsneak", "substitute"] @@ -2984,6 +3004,10 @@ "role": "Bulky Attacker", "movepool": ["overheat", "painsplit", "shadowball", "thunderbolt", "trick", "willowisp"], "preferredTypes": ["Fire"] + }, + { + "role": "Bulky Support", + "movepool": ["rest", "shadowball", "sleeptalk", "thunderbolt"] } ] }, @@ -2994,6 +3018,10 @@ "role": "Bulky Attacker", "movepool": ["hydropump", "painsplit", "shadowball", "thunderbolt", "trick", "willowisp"], "preferredTypes": ["Water"] + }, + { + "role": "Bulky Support", + "movepool": ["rest", "shadowball", "sleeptalk", "thunderbolt"] } ] }, @@ -3031,6 +3059,10 @@ "role": "Bulky Attacker", "movepool": ["leafstorm", "painsplit", "shadowball", "thunderbolt", "trick", "willowisp"], "preferredTypes": ["Grass"] + }, + { + "role": "Bulky Support", + "movepool": ["rest", "shadowball", "sleeptalk", "thunderbolt"] } ] }, @@ -3048,11 +3080,11 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "healingwish", "hiddenpowerfire", "icebeam", "psychic", "thunderbolt", "trick", "uturn"] + "movepool": ["calmmind", "healingwish", "hiddenpowerfighting", "icebeam", "psychic", "thunderbolt", "trick", "uturn"] }, { "role": "Bulky Support", - "movepool": ["hiddenpowerfire", "psychic", "stealthrock", "thunderwave", "toxic", "uturn"] + "movepool": ["hiddenpowerfighting", "psychic", "stealthrock", "thunderwave", "toxic", "uturn"] } ] }, @@ -3351,11 +3383,13 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "fireblast", "recover", "sludgebomb"] + "movepool": ["calmmind", "earthpower", "fireblast", "recover", "sludgebomb"], + "preferredTypes": ["Ground"] }, { "role": "Bulky Attacker", - "movepool": ["earthquake", "fireblast", "icebeam", "recover", "sludgebomb", "stealthrock", "willowisp"] + "movepool": ["earthquake", "fireblast", "icebeam", "recover", "sludgebomb", "stealthrock", "willowisp"], + "preferredTypes": ["Ground"] } ] }, diff --git a/data/random-battles/gen4/teams.ts b/data/random-battles/gen4/teams.ts index 8b1e5cfdfdf6..af367fa8c43d 100644 --- a/data/random-battles/gen4/teams.ts +++ b/data/random-battles/gen4/teams.ts @@ -59,7 +59,7 @@ export class RandomGen4Teams extends RandomGen5Teams { Electric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'), Fighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting'), Fire: (movePool, moves, abilities, types, counter) => !counter.get('Fire'), - Flying: (movePool, moves, abilities, types, counter, species) => (!counter.get('Flying') && species.id !== 'mantine'), + Flying: (movePool, moves, abilities, types, counter, species) => !counter.get('Flying'), Ghost: (movePool, moves, abilities, types, counter) => !counter.get('Ghost'), Grass: (movePool, moves, abilities, types, counter, species) => ( !counter.get('Grass') && @@ -201,6 +201,8 @@ export class RandomGen4Teams extends RandomGen5Teams { ['bodyslam', 'healingwish'], // Blaziken ['agility', 'vacuumwave'], + // Shuckle + ['knockoff', 'protect'], ]; for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]); @@ -209,6 +211,18 @@ export class RandomGen4Teams extends RandomGen5Teams { if (role !== 'Staller') { this.incompatibleMoves(moves, movePool, statusInflictingMoves, statusInflictingMoves); } + + // Cull filler moves for otherwise fixed set Stealth Rock users + if (!teamDetails.stealthRock) { + if (species.id === 'registeel' && role === 'Staller') { + if (movePool.includes('thunderwave')) this.fastPop(movePool, movePool.indexOf('thunderwave')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (species.id === 'wormadamtrash' && role === 'Staller') { + if (movePool.includes('suckerpunch')) this.fastPop(movePool, movePool.indexOf('suckerpunch')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + } } // Generate random moveset for a given species, role, preferred type. @@ -635,8 +649,7 @@ export class RandomGen4Teams extends RandomGen5Teams { if (['batonpass', 'protect', 'substitute'].some(m => moves.has(m))) return 'Leftovers'; if ( role === 'Fast Support' && isLead && defensiveStatTotal < 255 && !counter.get('recovery') && - (!counter.get('recoil') || ability === 'Rock Head') && - (counter.get('hazards') || !moves.has('uturn')) + (counter.get('hazards') || counter.get('setup')) && (!counter.get('recoil') || ability === 'Rock Head') ) return 'Focus Sash'; // Default Items @@ -755,7 +768,8 @@ export class RandomGen4Teams extends RandomGen5Teams { if (hp % 2 === 0) break; } else { // Maximize number of Stealth Rock switch-ins - if (srWeakness <= 0 || ['Black Sludge', 'Leftovers', 'Life Orb'].includes(item)) break; + if (srWeakness <= 0) break; + if (srWeakness === 1 && ['Black Sludge', 'Leftovers', 'Life Orb'].includes(item)) break; if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break; // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry if (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break; diff --git a/data/random-battles/gen5/sets.json b/data/random-battles/gen5/sets.json index 23efd39a61b7..4cc2045d254e 100644 --- a/data/random-battles/gen5/sets.json +++ b/data/random-battles/gen5/sets.json @@ -567,11 +567,7 @@ "sets": [ { "role": "Staller", - "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic"] - }, - { - "role": "Bulky Support", - "movepool": ["seismictoss", "softboiled", "toxic", "wish"] + "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic", "wish"] } ] }, @@ -1068,7 +1064,7 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "hiddenpowerfire", "morningsun", "psychic", "psyshock", "signalbeam", "trick"] + "movepool": ["calmmind", "hiddenpowerfighting", "morningsun", "psychic", "psyshock", "signalbeam", "trick"] } ] }, @@ -1220,11 +1216,7 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["encore", "knockoff", "stealthrock", "toxic"] - }, - { - "role": "Staller", - "movepool": ["encore", "protect", "stealthrock", "toxic"] + "movepool": ["encore", "knockoff", "protect", "stealthrock", "toxic"] } ] }, @@ -1805,6 +1797,10 @@ "role": "Bulky Setup", "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"], "preferredTypes": ["Ice"] + }, + { + "role": "Setup Sweeper", + "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"] } ] }, @@ -1815,6 +1811,10 @@ "role": "Bulky Setup", "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"], "preferredTypes": ["Ice"] + }, + { + "role": "Setup Sweeper", + "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"] } ] }, @@ -2245,7 +2245,8 @@ }, { "role": "Bulky Attacker", - "movepool": ["icebeam", "rest", "sleeptalk", "thunderbolt"] + "movepool": ["focusblast", "icebeam", "rest", "sleeptalk", "thunderbolt", "thunderwave"], + "preferredTypes": ["Electric"] }, { "role": "Setup Sweeper", @@ -2266,7 +2267,7 @@ }, { "role": "Staller", - "movepool": ["protect", "seismictoss", "stealthrock", "toxic"] + "movepool": ["protect", "seismictoss", "stealthrock", "thunderwave", "toxic"] } ] }, @@ -2517,7 +2518,7 @@ "sets": [ { "role": "Staller", - "movepool": ["earthquake", "protect", "stealthrock", "toxic"] + "movepool": ["earthquake", "protect", "stealthrock", "suckerpunch", "toxic"] } ] }, @@ -2526,7 +2527,7 @@ "sets": [ { "role": "Staller", - "movepool": ["flashcannon", "protect", "stealthrock", "toxic"] + "movepool": ["flashcannon", "protect", "stealthrock", "suckerpunch", "toxic"] } ] }, @@ -2726,7 +2727,7 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["closecombat", "crunch", "extremespeed", "icepunch", "swordsdance"], + "movepool": ["closecombat", "crunch", "extremespeed", "stoneedge", "swordsdance"], "preferredTypes": ["Normal"] }, { @@ -2987,8 +2988,12 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "icepunch", "painsplit", "shadowsneak", "trick", "willowisp"], + "movepool": ["earthquake", "icepunch", "painsplit", "shadowsneak", "toxic", "trick", "willowisp"], "preferredTypes": ["Ground"] + }, + { + "role": "Staller", + "movepool": ["earthquake", "protect", "shadowsneak", "toxic"] } ] }, @@ -3069,11 +3074,11 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "healingwish", "hiddenpowerfire", "icebeam", "psychic", "psyshock", "signalbeam", "thunderbolt", "trick", "uturn"] + "movepool": ["calmmind", "healingwish", "hiddenpowerfighting", "icebeam", "psychic", "psyshock", "signalbeam", "thunderbolt", "trick", "uturn"] }, { "role": "Bulky Support", - "movepool": ["hiddenpowerfire", "psychic", "stealthrock", "thunderwave", "toxic", "uturn"] + "movepool": ["hiddenpowerfighting", "psychic", "stealthrock", "thunderwave", "toxic", "uturn"] } ] }, @@ -3359,11 +3364,13 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "fireblast", "recover", "sludgebomb"] + "movepool": ["calmmind", "earthpower", "fireblast", "recover", "sludgebomb"], + "preferredTypes": ["Ground"] }, { "role": "Bulky Attacker", - "movepool": ["earthquake", "fireblast", "icebeam", "recover", "sludgebomb", "stealthrock", "willowisp"] + "movepool": ["earthquake", "fireblast", "icebeam", "recover", "sludgebomb", "stealthrock", "willowisp"], + "preferredTypes": ["Ground"] } ] }, @@ -4239,7 +4246,7 @@ }, { "role": "Fast Support", - "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "taunt", "thunderbolt", "thunderwave"] + "movepool": ["hiddenpowerflying", "hiddenpowerice", "superpower", "taunt", "thunderbolt", "thunderwave"] } ] }, diff --git a/data/random-battles/gen5/teams.ts b/data/random-battles/gen5/teams.ts index 616d626612d5..fad01c79990c 100644 --- a/data/random-battles/gen5/teams.ts +++ b/data/random-battles/gen5/teams.ts @@ -219,6 +219,8 @@ export class RandomGen5Teams extends RandomGen6Teams { ['switcheroo', 'suckerpunch'], // Jirachi ['bodyslam', 'healingwish'], + // Shuckle + ['knockoff', 'protect'], ]; for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]); @@ -231,6 +233,18 @@ export class RandomGen5Teams extends RandomGen6Teams { } if (abilities.has('Guts')) this.incompatibleMoves(moves, movePool, 'protect', 'swordsdance'); + + // Cull filler moves for otherwise fixed set Stealth Rock users + if (!teamDetails.stealthRock) { + if (species.id === 'registeel' && role === 'Staller') { + if (movePool.includes('thunderwave')) this.fastPop(movePool, movePool.indexOf('thunderwave')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (species.baseSpecies === 'Wormadam' && role === 'Staller') { + if (movePool.includes('suckerpunch')) this.fastPop(movePool, movePool.indexOf('suckerpunch')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + } } // Generate random moveset for a given species, role, preferred type. @@ -392,7 +406,7 @@ export class RandomGen5Teams extends RandomGen6Teams { // Enforce Staller moves if (role === 'Staller') { - const enforcedMoves = ['protect', 'toxic', 'wish']; + const enforcedMoves = ['protect', 'toxic']; for (const move of enforcedMoves) { if (movePool.includes(move)) { counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, @@ -504,7 +518,7 @@ export class RandomGen5Teams extends RandomGen6Teams { return !counter.get(toID(ability)); case 'Defiant': case 'Justified': return !counter.get('Physical'); - case 'Guts': + case 'Guts': case 'Quick Feet': return (!moves.has('facade') && !moves.has('sleeptalk')); case 'Hustle': return (counter.get('Physical') < 2 || species.id === 'delibird'); @@ -771,8 +785,7 @@ export class RandomGen5Teams extends RandomGen6Teams { } if ( role === 'Fast Support' && isLead && defensiveStatTotal < 255 && !counter.get('recovery') && - (!counter.get('recoil') || ability === 'Rock Head') && - (counter.get('hazards') || !(moves.has('uturn') || moves.has('voltswitch'))) + (counter.get('hazards') || counter.get('setup')) && (!counter.get('recoil') || ability === 'Rock Head') ) return 'Focus Sash'; // Default Items @@ -883,9 +896,7 @@ export class RandomGen5Teams extends RandomGen6Teams { // Prepare optimal HP const srImmunity = ability === 'Magic Guard'; - let srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species); - // Crash damage move users want an odd HP to survive two misses - if (['highjumpkick', 'jumpkick'].some(m => moves.has(m))) srWeakness = 2; + const srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species); while (evs.hp > 1) { const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); if (moves.has('substitute') && !['Black Sludge', 'Leftovers'].includes(item)) { @@ -899,9 +910,13 @@ export class RandomGen5Teams extends RandomGen6Teams { } else if (moves.has('bellydrum') && item === 'Sitrus Berry') { // Belly Drum should activate Sitrus Berry if (hp % 2 === 0) break; + } else if (['highjumpkick', 'jumpkick'].some(m => moves.has(m))) { + // Crash damage move users want an odd HP to survive two misses + if (hp % 2 > 0) break; } else { // Maximize number of Stealth Rock switch-ins - if (srWeakness <= 0 || ability === 'Regenerator' || ['Black Sludge', 'Leftovers', 'Life Orb'].includes(item)) break; + if (srWeakness <= 0 || ability === 'Regenerator') break; + if (srWeakness === 1 && ['Black Sludge', 'Leftovers', 'Life Orb'].includes(item)) break; if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break; // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry if (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break; diff --git a/data/random-battles/gen6/sets.json b/data/random-battles/gen6/sets.json index c5df51b83e93..8f982cc57503 100644 --- a/data/random-battles/gen6/sets.json +++ b/data/random-battles/gen6/sets.json @@ -621,11 +621,7 @@ "sets": [ { "role": "Staller", - "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic"] - }, - { - "role": "Bulky Support", - "movepool": ["seismictoss", "softboiled", "toxic", "wish"] + "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic", "wish"] } ] }, @@ -968,7 +964,7 @@ "sets": [ { "role": "Staller", - "movepool": ["aromatherapy", "dragontail", "earthquake", "gigadrain", "leechseed", "synthesis", "toxic"] + "movepool": ["aromatherapy", "dragontail", "earthquake", "energyball", "leechseed", "synthesis", "toxic"] } ] }, @@ -1692,7 +1688,7 @@ "level": 74, "sets": [ { - "role": "Wallbreaker", + "role": "Setup Sweeper", "movepool": ["flareblitz", "highjumpkick", "knockoff", "protect", "stoneedge", "swordsdance"] } ] @@ -2024,6 +2020,10 @@ "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"], "preferredTypes": ["Ice"] }, + { + "role": "Setup Sweeper", + "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"] + }, { "role": "Bulky Attacker", "movepool": ["encore", "hiddenpowerice", "nuzzle", "thunderbolt", "toxic", "voltswitch"] @@ -2038,6 +2038,10 @@ "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"], "preferredTypes": ["Ice"] }, + { + "role": "Setup Sweeper", + "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"] + }, { "role": "Bulky Attacker", "movepool": ["encore", "hiddenpowerice", "nuzzle", "thunderbolt", "toxic", "voltswitch"] @@ -2513,7 +2517,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["agility", "earthquake", "hammerarm", "icepunch", "meteormash", "zenheadbutt"] + "movepool": ["agility", "earthquake", "hammerarm", "meteormash", "zenheadbutt"], + "preferredTypes": ["Psychic"] } ] }, @@ -2560,7 +2565,7 @@ }, { "role": "Staller", - "movepool": ["protect", "seismictoss", "stealthrock", "toxic"] + "movepool": ["protect", "seismictoss", "stealthrock", "thunderwave", "toxic"] } ] }, @@ -2860,7 +2865,7 @@ "sets": [ { "role": "Staller", - "movepool": ["earthquake", "protect", "stealthrock", "toxic"] + "movepool": ["earthquake", "protect", "stealthrock", "suckerpunch", "toxic"] } ] }, @@ -2869,7 +2874,7 @@ "sets": [ { "role": "Staller", - "movepool": ["flashcannon", "protect", "stealthrock", "toxic"] + "movepool": ["flashcannon", "protect", "stealthrock", "suckerpunch", "toxic"] } ] }, @@ -3005,7 +3010,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["fakeout", "knockoff", "return", "uturn"] + "movepool": ["fakeout", "knockoff", "return", "uturn", "wakeupslap"], + "preferredTypes": ["Dark"] } ] }, @@ -3023,11 +3029,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "ironhead", "psychic", "stealthrock", "toxic"] + "movepool": ["earthquake", "ironhead", "psychic", "stealthrock", "toxic"], + "preferredTypes": ["Ground"] }, { "role": "Staller", - "movepool": ["earthquake", "ironhead", "protect", "psychic", "toxic"] + "movepool": ["earthquake", "ironhead", "protect", "psychic", "toxic"], + "preferredTypes": ["Ground"] } ] }, @@ -3102,7 +3110,7 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["bulletpunch", "closecombat", "icepunch", "swordsdance"] + "movepool": ["bulletpunch", "closecombat", "irontail", "swordsdance"] }, { "role": "Setup Sweeper", @@ -3708,8 +3716,8 @@ "level": 71, "sets": [ { - "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "icebeam", "judgment", "recover", "thunderbolt"] + "role": "Bulky Setup", + "movepool": ["calmmind", "earthpower", "energyball", "judgment", "recover"] } ] }, @@ -3780,11 +3788,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "fireblast", "icebeam", "recover", "sludgebomb"] + "movepool": ["defog", "earthquake", "icebeam", "recover", "sludgebomb"], + "preferredTypes": ["Ground"] }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "fireblast", "icebeam", "recover", "sludgebomb"] + "movepool": ["calmmind", "earthpower", "icebeam", "recover", "sludgebomb"], + "preferredTypes": ["Ground"] } ] }, @@ -4684,7 +4694,7 @@ }, { "role": "Fast Attacker", - "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "knockoff", "taunt", "thunderbolt", "thunderwave"] + "movepool": ["hiddenpowerflying", "hiddenpowerice", "knockoff", "superpower", "taunt", "thunderbolt", "thunderwave"] } ] }, @@ -4831,7 +4841,7 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["drainpunch", "leechseed", "spikes", "synthesis", "woodhammer"] + "movepool": ["bulkup", "drainpunch", "spikes", "synthesis", "toxic", "woodhammer"] }, { "role": "Staller", diff --git a/data/random-battles/gen6/teams.ts b/data/random-battles/gen6/teams.ts index 2973bfb9a838..756a671cf25e 100644 --- a/data/random-battles/gen6/teams.ts +++ b/data/random-battles/gen6/teams.ts @@ -268,6 +268,18 @@ export class RandomGen6Teams extends RandomGen7Teams { if (species.id === 'beedrillmega') { this.incompatibleMoves(moves, movePool, 'drillrun', 'knockoff'); } + + // Cull filler moves for otherwise fixed set Stealth Rock users + if (!teamDetails.stealthRock) { + if (species.id === 'registeel' && role === 'Staller') { + if (movePool.includes('thunderwave')) this.fastPop(movePool, movePool.indexOf('thunderwave')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (species.baseSpecies === 'Wormadam' && role === 'Staller') { + if (movePool.includes('suckerpunch')) this.fastPop(movePool, movePool.indexOf('suckerpunch')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + } } // Generate random moveset for a given species, role, preferred type. @@ -439,7 +451,7 @@ export class RandomGen6Teams extends RandomGen7Teams { // Enforce Staller moves if (role === 'Staller') { - const enforcedMoves = [...PROTECT_MOVES, 'toxic', 'wish']; + const enforcedMoves = [...PROTECT_MOVES, 'toxic']; for (const move of enforcedMoves) { if (movePool.includes(move)) { counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, @@ -841,8 +853,8 @@ export class RandomGen6Teams extends RandomGen7Teams { } if ( (role === 'Fast Support' || moves.has('stickyweb')) && isLead && defensiveStatTotal < 255 && - !counter.get('recovery') && !moves.has('defog') && (!counter.get('recoil') || ability === 'Rock Head') && - ability !== 'Regenerator' + !counter.get('recovery') && (counter.get('hazards') || counter.get('setup')) && + (!counter.get('recoil') || ability === 'Rock Head') ) return 'Focus Sash'; // Default Items @@ -944,9 +956,7 @@ export class RandomGen6Teams extends RandomGen7Teams { // Prepare optimal HP const srImmunity = ability === 'Magic Guard'; - let srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species); - // Crash damage move users want an odd HP to survive two misses - if (['highjumpkick', 'jumpkick'].some(m => moves.has(m))) srWeakness = 2; + const srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species); while (evs.hp > 1) { const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); if (moves.has('substitute') && !['Black Sludge', 'Leftovers'].includes(item)) { @@ -960,9 +970,13 @@ export class RandomGen6Teams extends RandomGen7Teams { } else if (moves.has('bellydrum') && item === 'Sitrus Berry') { // Belly Drum should activate Sitrus Berry if (hp % 2 === 0) break; + } else if (['highjumpkick', 'jumpkick'].some(m => moves.has(m))) { + // Crash damage move users want an odd HP to survive two misses + if (hp % 2 > 0) break; } else { // Maximize number of Stealth Rock switch-ins - if (srWeakness <= 0 || ability === 'Regenerator' || ['Black Sludge', 'Leftovers', 'Life Orb'].includes(item)) break; + if (srWeakness <= 0 || ability === 'Regenerator') break; + if (srWeakness === 1 && ['Black Sludge', 'Leftovers', 'Life Orb'].includes(item)) break; if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break; // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry if (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break; diff --git a/data/random-battles/gen7/sets.json b/data/random-battles/gen7/sets.json index 7d05aa78e9af..ad0a7b1c49df 100644 --- a/data/random-battles/gen7/sets.json +++ b/data/random-battles/gen7/sets.json @@ -149,6 +149,11 @@ { "role": "Wallbreaker", "movepool": ["doubleedge", "knockoff", "pursuit", "return", "suckerpunch", "swordsdance"] + }, + { + "role": "Z-Move user", + "movepool": ["doubleedge", "knockoff", "suckerpunch", "swordsdance"], + "preferredTypes": ["Normal"] } ] }, @@ -710,6 +715,10 @@ { "role": "Bulky Attacker", "movepool": ["dracometeor", "flamethrower", "gigadrain", "leafstorm"] + }, + { + "role": "AV Pivot", + "movepool": ["dracometeor", "flamethrower", "gigadrain", "knockoff"] } ] }, @@ -779,11 +788,7 @@ "sets": [ { "role": "Staller", - "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic"] - }, - { - "role": "Bulky Support", - "movepool": ["seismictoss", "softboiled", "toxic", "wish"] + "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic", "wish"] } ] }, @@ -1020,6 +1025,11 @@ "role": "Fast Support", "movepool": ["defog", "doubleedge", "earthquake", "pursuit", "roost", "stealthrock", "stoneedge"], "preferredTypes": ["Ground"] + }, + { + "role": "Z-Move user", + "movepool": ["earthquake", "honeclaws", "skyattack", "stoneedge"], + "preferredTypes": ["Flying"] } ] }, @@ -1141,7 +1151,7 @@ "sets": [ { "role": "Staller", - "movepool": ["aromatherapy", "dragontail", "earthquake", "gigadrain", "leechseed", "synthesis", "toxic"] + "movepool": ["aromatherapy", "dragontail", "earthquake", "energyball", "leechseed", "synthesis", "toxic"] } ] }, @@ -1866,7 +1876,7 @@ "level": 74, "sets": [ { - "role": "Wallbreaker", + "role": "Setup Sweeper", "movepool": ["flareblitz", "highjumpkick", "knockoff", "protect", "stoneedge", "swordsdance"] } ] @@ -2206,6 +2216,10 @@ "role": "Bulky Setup", "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"], "preferredTypes": ["Ice"] + }, + { + "role": "Setup Sweeper", + "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"] } ] }, @@ -2216,6 +2230,10 @@ "role": "Bulky Setup", "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"], "preferredTypes": ["Ice"] + }, + { + "role": "Setup Sweeper", + "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"] } ] }, @@ -2318,6 +2336,10 @@ { "role": "Bulky Support", "movepool": ["focusblast", "healbell", "psychic", "thunderwave", "toxic", "whirlwind"] + }, + { + "role": "Bulky Setup", + "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recycle"] } ] }, @@ -2706,7 +2728,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["agility", "earthquake", "hammerarm", "icepunch", "meteormash", "zenheadbutt"] + "movepool": ["agility", "earthquake", "hammerarm", "meteormash", "zenheadbutt"], + "preferredTypes": ["Psychic"] } ] }, @@ -2753,7 +2776,7 @@ }, { "role": "Staller", - "movepool": ["protect", "seismictoss", "stealthrock", "toxic"] + "movepool": ["protect", "seismictoss", "stealthrock", "thunderwave", "toxic"] } ] }, @@ -2898,7 +2921,7 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["extremespeed", "firepunch", "icebeam", "knockoff", "psychoboost", "stealthrock", "superpower"], + "movepool": ["extremespeed", "icebeam", "knockoff", "psychoboost", "stealthrock", "superpower"], "preferredTypes": ["Fighting"] } ] @@ -2908,7 +2931,7 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["extremespeed", "firepunch", "icebeam", "knockoff", "psychoboost", "superpower"], + "movepool": ["extremespeed", "icebeam", "knockoff", "psychoboost", "superpower"], "preferredTypes": ["Fighting"] } ] @@ -3070,7 +3093,7 @@ "sets": [ { "role": "Staller", - "movepool": ["earthquake", "protect", "stealthrock", "toxic"] + "movepool": ["earthquake", "protect", "stealthrock", "suckerpunch", "toxic"] } ] }, @@ -3079,7 +3102,7 @@ "sets": [ { "role": "Staller", - "movepool": ["flashcannon", "protect", "stealthrock", "toxic"] + "movepool": ["flashcannon", "protect", "stealthrock", "suckerpunch", "toxic"] } ] }, @@ -3249,11 +3272,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "ironhead", "psychic", "stealthrock", "toxic"] + "movepool": ["earthquake", "ironhead", "psychic", "stealthrock", "toxic"], + "preferredTypes": ["Ground"] }, { "role": "Staller", - "movepool": ["earthquake", "ironhead", "protect", "psychic", "toxic"] + "movepool": ["earthquake", "ironhead", "protect", "psychic", "toxic"], + "preferredTypes": ["Ground"] } ] }, @@ -3964,12 +3989,12 @@ "level": 72, "sets": [ { - "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "icebeam", "judgment", "recover", "thunderbolt"] + "role": "Bulky Setup", + "movepool": ["calmmind", "earthpower", "energyball", "judgment", "recover"] }, { "role": "Z-Move user", - "movepool": ["calmmind", "earthpower", "fireblast", "icebeam", "recover", "thunderbolt"] + "movepool": ["calmmind", "earthpower", "energyball", "fireblast", "recover"] } ] }, @@ -4040,15 +4065,18 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "fireblast", "icebeam", "recover", "sludgebomb"] + "movepool": ["defog", "earthquake", "icebeam", "recover", "sludgebomb"], + "preferredTypes": ["Ground"] }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "fireblast", "icebeam", "recover", "sludgebomb"] + "movepool": ["calmmind", "earthpower", "icebeam", "recover", "sludgebomb"], + "preferredTypes": ["Ground"] }, { "role": "Z-Move user", - "movepool": ["calmmind", "earthpower", "fireblast", "icebeam", "recover", "sludgebomb"] + "movepool": ["calmmind", "earthpower", "icebeam", "recover", "sludgebomb"], + "preferredTypes": ["Ground"] } ] }, @@ -5007,7 +5035,7 @@ }, { "role": "Fast Attacker", - "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "knockoff", "taunt", "thunderbolt", "thunderwave"] + "movepool": ["hiddenpowerflying", "hiddenpowerice", "knockoff", "superpower", "taunt", "thunderbolt", "thunderwave"] } ] }, @@ -5169,7 +5197,7 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["drainpunch", "leechseed", "spikes", "synthesis", "woodhammer"] + "movepool": ["bulkup", "drainpunch", "spikes", "synthesis", "toxic", "woodhammer"] }, { "role": "Staller", @@ -5992,7 +6020,8 @@ }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "drainingkiss", "gigadrain", "hiddenpowerground"] + "movepool": ["calmmind", "drainingkiss", "gigadrain", "hiddenpowerground", "synthesis"], + "preferredTypes": ["Ground"] } ] }, @@ -6431,7 +6460,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["grassknot", "hiddenpowerfire", "hiddenpowerground", "powergem", "sludgewave", "stealthrock", "thunderbolt", "toxicspikes"] + "movepool": ["grassknot", "hiddenpowerfire", "hiddenpowerground", "powergem", "sludgewave", "stealthrock", "thunderbolt", "toxicspikes"], + "preferredTypes": ["Rock"] } ] }, diff --git a/data/random-battles/gen7/teams.ts b/data/random-battles/gen7/teams.ts index e7cb6179663a..b222f50c02bd 100644 --- a/data/random-battles/gen7/teams.ts +++ b/data/random-battles/gen7/teams.ts @@ -387,6 +387,18 @@ export class RandomGen7Teams extends RandomGen8Teams { if (species.id === 'porygonz') { this.incompatibleMoves(moves, movePool, 'shadowball', 'recover'); } + + // Cull filler moves for otherwise fixed set Stealth Rock users + if (!teamDetails.stealthRock) { + if (species.id === 'registeel' && role === 'Staller') { + if (movePool.includes('thunderwave')) this.fastPop(movePool, movePool.indexOf('thunderwave')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (species.baseSpecies === 'Wormadam' && role === 'Staller') { + if (movePool.includes('suckerpunch')) this.fastPop(movePool, movePool.indexOf('suckerpunch')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + } } // Checks for and removes incompatible moves, starting with the first move in movesA. @@ -624,7 +636,7 @@ export class RandomGen7Teams extends RandomGen8Teams { // Enforce Staller moves if (role === 'Staller') { - const enforcedMoves = [...PROTECT_MOVES, 'toxic', 'wish']; + const enforcedMoves = [...PROTECT_MOVES, 'toxic']; for (const move of enforcedMoves) { if (movePool.includes(move)) { counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, @@ -1089,8 +1101,8 @@ export class RandomGen7Teams extends RandomGen8Teams { } if ( (role === 'Fast Support' || moves.has('stickyweb')) && isLead && defensiveStatTotal < 255 && - !counter.get('recovery') && !moves.has('defog') && (!counter.get('recoil') || ability === 'Rock Head') && - ability !== 'Regenerator' + !counter.get('recovery') && (counter.get('hazards') || counter.get('setup')) && + (!counter.get('recoil') || ability === 'Rock Head') ) return 'Focus Sash'; // Default Items @@ -1242,9 +1254,7 @@ export class RandomGen7Teams extends RandomGen8Teams { // Prepare optimal HP const srImmunity = ability === 'Magic Guard'; - let srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species); - // Crash damage move users want an odd HP to survive two misses - if (['highjumpkick', 'jumpkick'].some(m => moves.has(m))) srWeakness = 2; + const srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species); while (evs.hp > 1) { const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); if (moves.has('substitute') && !['Black Sludge', 'Leftovers'].includes(item)) { @@ -1258,9 +1268,13 @@ export class RandomGen7Teams extends RandomGen8Teams { } else if (moves.has('bellydrum') && (item === 'Sitrus Berry' || ability === 'Gluttony')) { // Belly Drum should activate Sitrus Berry if (hp % 2 === 0) break; + } else if (['highjumpkick', 'jumpkick'].some(m => moves.has(m))) { + // Crash damage move users want an odd HP to survive two misses + if (hp % 2 > 0) break; } else { // Maximize number of Stealth Rock switch-ins - if (srWeakness <= 0 || ability === 'Regenerator' || ['Black Sludge', 'Leftovers', 'Life Orb'].includes(item)) break; + if (srWeakness <= 0 || ability === 'Regenerator') break; + if (srWeakness === 1 && ['Black Sludge', 'Leftovers', 'Life Orb'].includes(item)) break; if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break; // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry if (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break; diff --git a/data/random-battles/gen9/doubles-sets.json b/data/random-battles/gen9/doubles-sets.json index 6d639587d8c1..9b005a3e2659 100644 --- a/data/random-battles/gen9/doubles-sets.json +++ b/data/random-battles/gen9/doubles-sets.json @@ -2059,7 +2059,7 @@ "sets": [ { "role": "Doubles Bulky Setup", - "movepool": ["Body Press", "Foul Play", "Iron Defense", "Wide Guard"], + "movepool": ["Body Press", "Foul Play", "Iron Defense", "Rest", "Wide Guard"], "teraTypes": ["Fighting", "Flying"] } ] @@ -2421,6 +2421,11 @@ "role": "Doubles Bulky Setup", "movepool": ["Body Press", "Flash Cannon", "Iron Defense", "Rest", "Thunder Wave"], "teraTypes": ["Fighting"] + }, + { + "role": "Doubles Setup Sweeper", + "movepool": ["Body Press", "Iron Defense", "Power Gem", "Rest", "Thunder Wave"], + "teraTypes": ["Fighting"] } ] }, @@ -2754,8 +2759,8 @@ "sets": [ { "role": "Doubles Setup Sweeper", - "movepool": ["Aura Sphere", "Calm Mind", "Earth Power", "Fire Blast", "Judgment", "Recover", "Sludge Bomb"], - "teraTypes": ["Poison"] + "movepool": ["Calm Mind", "Fire Blast", "Judgment", "Recover", "Sludge Bomb"], + "teraTypes": ["Fire", "Poison"] } ] }, @@ -4828,8 +4833,8 @@ "level": 76, "sets": [ { - "role": "Doubles Fast Attacker", - "movepool": ["Close Combat", "Protect", "Sucker Punch", "Swords Dance", "Wicked Blow"], + "role": "Doubles Wallbreaker", + "movepool": ["Close Combat", "Poison Jab", "Protect", "Sucker Punch", "Wicked Blow"], "teraTypes": ["Dark", "Poison"] } ] @@ -4838,9 +4843,9 @@ "level": 78, "sets": [ { - "role": "Doubles Fast Attacker", - "movepool": ["Aqua Jet", "Close Combat", "Protect", "Surging Strikes", "Swords Dance"], - "teraTypes": ["Steel", "Water"] + "role": "Doubles Wallbreaker", + "movepool": ["Aqua Jet", "Close Combat", "Ice Spinner", "Protect", "Surging Strikes", "U-turn"], + "teraTypes": ["Water"] } ] }, @@ -5193,8 +5198,8 @@ "level": 81, "sets": [ { - "role": "Doubles Bulky Setup", - "movepool": ["Protect", "Recover", "Salt Cure", "Wide Guard"], + "role": "Bulky Protect", + "movepool": ["Protect", "Recover", "Salt Cure", "Stealth Rock", "Wide Guard"], "teraTypes": ["Ghost"] } ] @@ -5679,7 +5684,7 @@ }, { "role": "Doubles Bulky Attacker", - "movepool": ["Acid Spray", "Energy Ball", "Fire Blast", "Heat Wave", "Protect"], + "movepool": ["Acid Spray", "Energy Ball", "Heat Wave", "Protect"], "teraTypes": ["Poison"] } ] @@ -5739,7 +5744,7 @@ "sets": [ { "role": "Offensive Protect", - "movepool": ["Close Combat", "Dazzling Gleam", "Knock Off", "Moonblast", "Protect", "Taunt"], + "movepool": ["Close Combat", "Dazzling Gleam", "Encore", "Knock Off", "Moonblast", "Protect"], "teraTypes": ["Dark", "Fairy", "Fighting"] } ] @@ -5789,8 +5794,13 @@ "sets": [ { "role": "Offensive Protect", - "movepool": ["Icicle Crash", "Lash Out", "Protect", "Sacred Sword", "Sucker Punch", "Throat Chop"], - "teraTypes": ["Dark", "Fighting", "Ghost"] + "movepool": ["Icicle Crash", "Lash Out", "Protect", "Sucker Punch", "Throat Chop"], + "teraTypes": ["Dark", "Ghost"] + }, + { + "role": "Doubles Wallbreaker", + "movepool": ["Icicle Crash", "Protect", "Sacred Sword", "Sucker Punch"], + "teraTypes": ["Fighting", "Ghost"] } ] }, @@ -5924,7 +5934,7 @@ "sets": [ { "role": "Doubles Support", - "movepool": ["Gunk Shot", "Icy Wind", "Roost", "Taunt"], + "movepool": ["Gunk Shot", "Icy Wind", "Play Rough", "Roost"], "teraTypes": ["Dark", "Steel", "Water"] }, { diff --git a/data/random-battles/gen9/teams.ts b/data/random-battles/gen9/teams.ts index efe6db1e0e1d..460f5d360031 100644 --- a/data/random-battles/gen9/teams.ts +++ b/data/random-battles/gen9/teams.ts @@ -1424,7 +1424,7 @@ export class RandomTeams { } if ( (role === 'Bulky Protect' && counter.get('setup')) || moves.has('substitute') || moves.has('irondefense') || - species.id === 'eternatus' + species.id === 'eternatus' || species.id === 'regigigas' ) return 'Leftovers'; if (species.id === 'sylveon') return 'Pixie Plate'; if ( diff --git a/test/random-battles/gen7.js b/test/random-battles/gen7.js index ec8c8d8e98c3..eef3342028b3 100644 --- a/test/random-battles/gen7.js +++ b/test/random-battles/gen7.js @@ -135,12 +135,6 @@ describe('[Gen 7] Random Battle (slow)', () => { it('should prevent double Hidden Power', () => testHiddenPower('thundurustherian', options)); - it('should give Meganium STAB', () => { - testSet('meganium', options, set => { - assert(set.moves.includes('gigadrain'), `Meganium: got ${set.moves}`); - }); - }); - it('should never give Xerneas Assault Vest', () => { testSet('xerneas', options, set => assert.notEqual(set.item, 'Assault Vest')); });