mirror of
https://github.com/smogon/pokemon-showdown.git
synced 2026-03-21 17:25:10 -05:00
Random Battle improvements
This commit is contained in:
parent
bc97a72662
commit
2bc4a51a50
|
|
@ -340,7 +340,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = {
|
|||
},
|
||||
ninetales: {
|
||||
randomBattleMoves: ["fireblast", "nastyplot", "scorchingsands", "solarbeam", "willowisp"],
|
||||
randomBattleLevel: 86,
|
||||
randomBattleLevel: 84,
|
||||
randomDoubleBattleMoves: ["heatwave", "nastyplot", "protect", "scorchingsands", "solarbeam"],
|
||||
randomDoubleBattleLevel: 84,
|
||||
tier: "NU",
|
||||
|
|
@ -527,7 +527,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = {
|
|||
},
|
||||
politoed: {
|
||||
randomBattleMoves: ["encore", "icebeam", "protect", "rest", "scald", "toxic"],
|
||||
randomBattleLevel: 82,
|
||||
randomBattleLevel: 84,
|
||||
randomDoubleBattleMoves: ["earthpower", "haze", "helpinghand", "icywind", "muddywater", "protect"],
|
||||
randomDoubleBattleLevel: 84,
|
||||
tier: "(PU)",
|
||||
|
|
@ -3163,7 +3163,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = {
|
|||
doublesTier: "DUU",
|
||||
},
|
||||
giratina: {
|
||||
randomBattleMoves: ["aurasphere", "calmmind", "dracometeor", "rest", "shadowball", "sleeptalk", "willowisp"],
|
||||
randomBattleMoves: ["defog", "hex", "rest", "toxic", "willowisp"],
|
||||
randomBattleLevel: 74,
|
||||
randomDoubleBattleMoves: ["calmmind", "dragonpulse", "rest", "shadowball", "willowisp"],
|
||||
randomDoubleBattleLevel: 74,
|
||||
|
|
@ -3171,7 +3171,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = {
|
|||
doublesTier: "DUber",
|
||||
},
|
||||
giratinaorigin: {
|
||||
randomBattleMoves: ["defog", "dracometeor", "earthquake", "hex", "thunderwave", "willowisp"],
|
||||
randomBattleMoves: ["dualwingbeat", "honeclaws", "outrage", "poltergeist", "shadowsneak"],
|
||||
randomBattleLevel: 74,
|
||||
randomDoubleBattleMoves: ["breakingswipe", "dracometeor", "shadowball", "shadowsneak", "protect", "tailwind", "willowisp"],
|
||||
randomDoubleBattleLevel: 74,
|
||||
|
|
@ -5312,7 +5312,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = {
|
|||
doublesTier: "DUU",
|
||||
},
|
||||
xurkitree: {
|
||||
randomBattleMoves: ["dazzlinggleam", "energyball", "thunderbolt", "voltswitch"],
|
||||
randomBattleMoves: ["dazzlinggleam", "energyball", "hypnosis", "thunderbolt", "voltswitch"],
|
||||
randomBattleLevel: 84,
|
||||
randomDoubleBattleMoves: ["dazzlinggleam", "energyball", "thunderbolt", "voltswitch"],
|
||||
randomDoubleBattleLevel: 84,
|
||||
|
|
@ -6061,7 +6061,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = {
|
|||
doublesTier: "(DUber)",
|
||||
},
|
||||
zarude: {
|
||||
randomBattleMoves: ["bulkup", "closecombat", "darkestlariat", "powerwhip", "uturn"],
|
||||
randomBattleMoves: ["bulkup", "closecombat", "darkestlariat", "junglehealing", "powerwhip", "uturn"],
|
||||
randomBattleLevel: 82,
|
||||
randomDoubleBattleMoves: ["closecombat", "darkestlariat", "junglehealing", "powerwhip", "protect", "rockslide"],
|
||||
randomDoubleBattleLevel: 80,
|
||||
|
|
|
|||
|
|
@ -136,12 +136,12 @@ export class RandomGen2Teams extends RandomGen3Teams {
|
|||
case 'destinybond':
|
||||
if (hasMove['explosion']) rejected = true;
|
||||
break;
|
||||
case 'thief':
|
||||
if (hasMove['rest'] || hasMove['substitute']) rejected = true;
|
||||
break;
|
||||
case 'pursuit':
|
||||
if (hasMove['crunch'] && movePool.includes('sunnyday')) rejected = true;
|
||||
break;
|
||||
case 'thief':
|
||||
if (hasMove['rest'] || hasMove['substitute']) rejected = true;
|
||||
break;
|
||||
|
||||
// Status and illegal move rejections
|
||||
case 'confuseray': case 'roar': case 'whirlwind':
|
||||
|
|
@ -190,10 +190,10 @@ export class RandomGen2Teams extends RandomGen3Teams {
|
|||
(movePool.includes('megahorn') || hasMove['present'] && movePool.includes('softboiled')) ||
|
||||
(hasMove['rest'] && movePool.includes('sleeptalk') || (hasMove['sleeptalk'] && movePool.includes('rest'))) ||
|
||||
(hasMove['sunnyday'] && movePool.includes('solarbeam') || (hasMove['solarbeam'] && movePool.includes('sunnyday'))) ||
|
||||
(movePool.includes('spore') || movePool.includes('meanlook') || movePool.includes('milkdrink') || movePool.includes('recover'))
|
||||
(movePool.includes('meanlook') || movePool.includes('milkdrink') || movePool.includes('recover') || movePool.includes('spore'))
|
||||
)) {
|
||||
// Reject Status, non-STAB, or low basepower moves
|
||||
if (move.category === 'Status' || !hasType[move.type] || move.basePower < 40 && !move.multihit) {
|
||||
if (move.category === 'Status' || !hasType[move.type] || move.basePower && move.basePower < 40) {
|
||||
rejected = true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -391,7 +391,7 @@ export class RandomGen7Teams extends RandomTeams {
|
|||
if (counter.setupType !== 'Special' && counter.stab > 1) rejected = true;
|
||||
break;
|
||||
case 'quickattack':
|
||||
if (hasType['Normal'] && (!counter.stab || counter['Normal'] > 2)) rejected = true;
|
||||
if (!!counter['recovery'] || hasType['Normal'] && (!counter.stab || counter['Normal'] > 2)) rejected = true;
|
||||
if (hasMove['feint'] || hasType['Rock'] && !!counter.Status) rejected = true;
|
||||
break;
|
||||
case 'weatherball':
|
||||
|
|
@ -479,7 +479,7 @@ export class RandomGen7Teams extends RandomTeams {
|
|||
break;
|
||||
case 'substitute':
|
||||
if (hasMove['dracometeor'] || hasMove['leafstorm'] && !hasAbility['Contrary']) rejected = true;
|
||||
if (hasMove['pursuit'] || hasMove['rest'] || hasMove['taunt'] || hasMove['uturn'] || hasMove['voltswitch'] || hasMove['whirlwind']) rejected = true;
|
||||
if (hasMove['encore'] || hasMove['pursuit'] || hasMove['rest'] || hasMove['taunt'] || hasMove['uturn'] || hasMove['voltswitch'] || hasMove['whirlwind']) rejected = true;
|
||||
if (movePool.includes('copycat')) rejected = true;
|
||||
break;
|
||||
case 'powersplit':
|
||||
|
|
@ -532,12 +532,13 @@ export class RandomGen7Teams extends RandomTeams {
|
|||
(hasAbility['Slow Start'] && movePool.includes('substitute')) ||
|
||||
((movePool.includes('recover') || movePool.includes('roost') || movePool.includes('slackoff') || movePool.includes('softboiled')) &&
|
||||
!!counter.Status && !counter.setupType && !hasMove['healingwish'] && !hasMove['trick'] && !hasMove['trickroom']) ||
|
||||
(movePool.includes('milkdrink') || movePool.includes('stickyweb') && !counter.setupType && !teamDetails.stickyWeb) ||
|
||||
(movePool.includes('milkdrink') || movePool.includes('shoreup') || movePool.includes('stickyweb') && !counter.setupType && !teamDetails.stickyWeb) ||
|
||||
(isLead && movePool.includes('stealthrock') && !!counter.Status && !counter.setupType && !counter['speedsetup'] && !hasMove['substitute']) ||
|
||||
(species.requiredMove && movePool.includes(toID(species.requiredMove)))
|
||||
)) {
|
||||
// Reject Status or non-STAB
|
||||
if (!isSetup && !move.weather && !move.stallingMove && !move.damage && (move.category !== 'Status' || !move.flags.heal)) {
|
||||
if (move.category === 'Status' || !hasType[move.type] || move.basePower < 40 && !move.multihit) {
|
||||
if (move.category === 'Status' || !hasType[move.type] || move.basePower && move.basePower < 40 && !move.multihit) {
|
||||
rejected = true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -647,7 +647,7 @@ export class RandomTeams {
|
|||
|
||||
switch (moveid) {
|
||||
// Not very useful without their supporting moves
|
||||
case 'acrobatics': case 'drainingkiss':
|
||||
case 'acrobatics': case 'drainingkiss': case 'junglehealing':
|
||||
if (!counter.setupType && !isDoubles) rejected = true;
|
||||
break;
|
||||
case 'destinybond': case 'healbell':
|
||||
|
|
@ -734,8 +734,8 @@ export class RandomTeams {
|
|||
if ((hasMove['substitute'] && !hasType['Fighting']) || hasMove['toxic'] && movePool.includes('substitute')) rejected = true;
|
||||
if (moveid === 'closecombat' && (hasMove['highjumpkick'] || movePool.includes('highjumpkick')) && !counter.setupType) rejected = true;
|
||||
break;
|
||||
case 'dracometeor': case 'stormthrow':
|
||||
if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true;
|
||||
case 'defog':
|
||||
if (counter.setupType || hasMove['healbell'] || hasMove['stealthrock'] || hasMove['toxicspikes'] || teamDetails.defog) rejected = true;
|
||||
break;
|
||||
case 'fakeout':
|
||||
if (counter.setupType || hasMove['protect'] || hasMove['rapidspin'] || hasMove['substitute'] || hasMove['uturn']) rejected = true;
|
||||
|
|
@ -763,8 +763,8 @@ export class RandomTeams {
|
|||
if (counter.setupType && counter['Fighting'] >= 2) rejected = true;
|
||||
break;
|
||||
case 'shadowsneak':
|
||||
if (hasMove['trickroom'] || !hasType['Ghost'] && !!counter['recovery']) rejected = true;
|
||||
if (hasMove['substitute'] || hasMove['toxic'] || hasMove['rest'] && hasMove['sleeptalk']) rejected = true;
|
||||
if (hasMove['substitute'] || hasMove['trickroom']) rejected = true;
|
||||
if (hasMove['dualwingbeat'] || hasMove['toxic'] || hasMove['rest'] && hasMove['sleeptalk']) rejected = true;
|
||||
break;
|
||||
case 'spikes':
|
||||
if (counter.setupType || teamDetails.spikes && teamDetails.spikes > 1) rejected = true;
|
||||
|
|
@ -872,6 +872,9 @@ export class RandomTeams {
|
|||
case 'seismictoss':
|
||||
if (hasMove['protect'] && hasType['Water']) rejected = true;
|
||||
break;
|
||||
case 'stormthrow':
|
||||
if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true;
|
||||
break;
|
||||
case 'superpower':
|
||||
if (hasMove['hydropump'] || counter.Physical >= 4 && movePool.includes('uturn')) rejected = true;
|
||||
if (hasMove['substitute'] && !hasAbility['Contrary']) rejected = true;
|
||||
|
|
@ -889,6 +892,16 @@ export class RandomTeams {
|
|||
if (hasMove['earthpower'] || hasMove['toxic'] && movePool.includes('earthpower')) rejected = true;
|
||||
if (hasMove['willowisp']) rejected = true;
|
||||
break;
|
||||
case 'airslash':
|
||||
if ((hasMove['hurricane'] && !counter.setupType) || hasMove['rest'] && hasMove['sleeptalk']) rejected = true;
|
||||
if (movePool.includes('flamethrower') || hasAbility['Simple'] && !!counter['recovery']) rejected = true;
|
||||
break;
|
||||
case 'bravebird':
|
||||
if (hasMove['dragondance']) rejected = true;
|
||||
break;
|
||||
case 'hurricane':
|
||||
if (hasAbility['Tinted Lens'] && counter.setupType && !isDoubles) rejected = true;
|
||||
break;
|
||||
case 'photongeyser':
|
||||
if (hasMove['morningsun']) rejected = true;
|
||||
break;
|
||||
|
|
@ -912,16 +925,6 @@ export class RandomTeams {
|
|||
if (hasMove['rockblast'] || hasMove['rockslide'] || !!counter.Status && movePool.includes('rockslide')) rejected = true;
|
||||
if (hasAbility['Guts'] && (!hasMove['dynamicpunch'] || hasMove['spikes'])) rejected = true;
|
||||
break;
|
||||
case 'airslash':
|
||||
if ((hasMove['hurricane'] && !counter.setupType) || hasMove['rest'] && hasMove['sleeptalk']) rejected = true;
|
||||
if (movePool.includes('flamethrower') || hasAbility['Simple'] && !!counter['recovery']) rejected = true;
|
||||
break;
|
||||
case 'bravebird':
|
||||
if (hasMove['dragondance']) rejected = true;
|
||||
break;
|
||||
case 'hurricane':
|
||||
if (hasAbility['Tinted Lens'] && counter.setupType && !isDoubles) rejected = true;
|
||||
break;
|
||||
case 'poltergeist':
|
||||
if (hasMove['knockoff']) rejected = true;
|
||||
break;
|
||||
|
|
@ -961,12 +964,11 @@ export class RandomTeams {
|
|||
case 'haze':
|
||||
if ((hasMove['stealthrock'] || movePool.includes('stealthrock')) && !teamDetails.stealthRock) rejected = true;
|
||||
break;
|
||||
case 'hypnosis': case 'willowisp': case 'yawn':
|
||||
if (hasMove['thunderwave'] || hasMove['toxic']) rejected = true;
|
||||
case 'hypnosis':
|
||||
if (hasMove['voltswitch']) rejected = true;
|
||||
break;
|
||||
case 'defog':
|
||||
if (hasMove['healbell'] || hasMove['stealthrock'] || hasMove['toxicspikes'] || teamDetails.defog) rejected = true;
|
||||
if (counter.setupType || hasMove['hex'] && !hasMove['thunderwave'] && !hasMove['willowisp']) rejected = true;
|
||||
case 'willowisp': case 'yawn':
|
||||
if (hasMove['thunderwave'] || hasMove['toxic']) rejected = true;
|
||||
break;
|
||||
case 'painsplit': case 'recover': case 'synthesis':
|
||||
if (hasMove['rest'] || hasMove['wish']) rejected = true;
|
||||
|
|
@ -1026,10 +1028,11 @@ export class RandomTeams {
|
|||
((movePool.includes('morningsun') || movePool.includes('recover') || movePool.includes('roost') || movePool.includes('slackoff') || movePool.includes('softboiled')) &&
|
||||
!!counter.Status && !counter.setupType && !hasMove['healingwish'] && !hasMove['switcheroo'] && !hasMove['trick'] && !hasMove['trickroom'] && !isDoubles) ||
|
||||
(movePool.includes('milkdrink') || movePool.includes('quiverdance') || movePool.includes('stickyweb') && !counter.setupType && !teamDetails.stickyWeb) ||
|
||||
(isLead && movePool.includes('stealthrock') && !!counter.Status && !counter.setupType && !counter['speedsetup'] && !hasMove['substitute']) ||
|
||||
(isDoubles && species.baseStats.def >= 140 && movePool.includes('bodypress'))
|
||||
)) {
|
||||
// Reject Status, non-STAB, or low basepower moves
|
||||
if (move.category === 'Status' || !hasType[move.type] || move.basePower < 50 && !move.multihit && !hasAbility['Technician']) {
|
||||
if (move.category === 'Status' || !hasType[move.type] || move.basePower && move.basePower < 50 && !move.multihit && !hasAbility['Technician']) {
|
||||
rejected = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -1302,8 +1305,10 @@ export class RandomTeams {
|
|||
item = (ability === 'Grassy Surge') ? 'Grassy Seed' : '';
|
||||
} else if (hasMove['auroraveil'] || hasMove['lightscreen'] && hasMove['reflect']) {
|
||||
item = 'Light Clay';
|
||||
} else if (hasMove['rest'] && !hasMove['sleeptalk'] && ability !== 'Shed Skin') {
|
||||
} else if (hasMove['rest'] && !hasMove['sleeptalk'] && ability !== 'Pressure' && ability !== 'Shed Skin') {
|
||||
item = 'Chesto Berry';
|
||||
} else if (hasMove['hypnosis'] && ability === 'Beast Boost') {
|
||||
item = 'Blunder Policy';
|
||||
} else if (this.dex.getEffectiveness('Rock', species) >= 2 && !isDoubles) {
|
||||
item = 'Heavy-Duty Boots';
|
||||
|
||||
|
|
@ -1369,12 +1374,12 @@ export class RandomTeams {
|
|||
item = 'Heavy-Duty Boots';
|
||||
} else if (this.dex.getEffectiveness('Ground', species) >= 2 && !hasType['Poison'] && ability !== 'Levitate' && !hasAbility['Iron Barbs'] && !isDoubles) {
|
||||
item = 'Air Balloon';
|
||||
} else if (counter.damagingMoves.length >= 4 && !counter['Dragon'] && !counter['Normal'] && !isDoubles) {
|
||||
item = 'Expert Belt';
|
||||
} else if (counter.damagingMoves.length >= 3 && !counter['damage'] && ability !== 'Sturdy' && !hasMove['clearsmog'] && !hasMove['foulplay'] && !hasMove['rapidspin'] && !hasMove['substitute'] && !hasMove['uturn'] && !isDoubles &&
|
||||
(!!counter['speedsetup'] || hasMove['trickroom'] || !!counter['drain'] || hasMove['psystrike'] || (species.baseStats.spe > 40 && species.baseStats.hp + species.baseStats.def + species.baseStats.spd < 275))
|
||||
) {
|
||||
item = 'Life Orb';
|
||||
} else if (counter.damagingMoves.length >= 4 && !counter['Dragon'] && !counter['Normal'] && !isDoubles) {
|
||||
item = 'Expert Belt';
|
||||
} else if ((hasMove['dragondance'] || hasMove['swordsdance']) && !isDoubles &&
|
||||
(hasMove['outrage'] || !hasType['Bug'] && !hasType['Fire'] && !hasType['Ground'] && !hasType['Normal'] && !hasType['Poison'] && !['Pastel Veil', 'Storm Drain'].includes(ability))
|
||||
) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user