mirror of
https://github.com/smogon/pokemon-showdown.git
synced 2026-06-02 22:08:36 -05:00
Merge branch 'master' into booster-energy
This commit is contained in:
commit
b9e5f8f7f8
File diff suppressed because it is too large
Load Diff
|
|
@ -108,6 +108,7 @@ export const Aliases: import('../sim/dex').AliasesTable = {
|
|||
megacharizardy: "Charizard-Mega-Y",
|
||||
yard: "Charizard-Mega-Y",
|
||||
zardy: "Charizard-Mega-Y",
|
||||
megacruci: "Crucibelle-Mega",
|
||||
mdia: "Diancie-Mega",
|
||||
floetteeternalmega: "Floette-Mega",
|
||||
megafloetteeternal: "Floette-Mega",
|
||||
|
|
@ -126,6 +127,7 @@ export const Aliases: import('../sim/dex').AliasesTable = {
|
|||
megamaw: "Mawile-Mega",
|
||||
mmedi: "Medicham-Mega",
|
||||
megamedi: "Medicham-Mega",
|
||||
meowsticmega: "Meowstic-M-Mega",
|
||||
mmx: "Mewtwo-Mega-X",
|
||||
megamewtwox: "Mewtwo-Mega-X",
|
||||
mewtwox: "Mewtwo-Mega-X",
|
||||
|
|
@ -136,6 +138,7 @@ export const Aliases: import('../sim/dex').AliasesTable = {
|
|||
megashark: "Sharpedo-Mega",
|
||||
mbro: "Slowbro-Mega",
|
||||
megabro: "Slowbro-Mega",
|
||||
tatsugirimega: "Tatsugiri-Curly-Mega",
|
||||
megasaur: "Venusaur-Mega",
|
||||
megazygardecomplete: "Zygarde-Mega",
|
||||
zygardecompletemega: "Zygarde-Mega",
|
||||
|
|
@ -723,8 +726,6 @@ export const Aliases: import('../sim/dex').AliasesTable = {
|
|||
sawsbuckautumn: "Sawsbuck",
|
||||
sawsbuckwinter: "Sawsbuck",
|
||||
tatsugiricurly: "Tatsugiri",
|
||||
tatsugiridroopy: "Tatsugiri",
|
||||
tatsugiristretchy: "Tatsugiri",
|
||||
unowna: "Unown",
|
||||
unownb: "Unown",
|
||||
unownc: "Unown",
|
||||
|
|
@ -2557,7 +2558,6 @@ export const Aliases: import('../sim/dex').AliasesTable = {
|
|||
krilo: "Krilowatt",
|
||||
libra: "Equilibra",
|
||||
mala: "Malaconda",
|
||||
megacruci: "Crucibelle-Mega",
|
||||
navi: "Naviathan",
|
||||
nect: "Necturna",
|
||||
ohmagod: "Plasmanta",
|
||||
|
|
|
|||
|
|
@ -259,6 +259,14 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
raichumegax: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
raichumegay: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
sandshrew: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -488,7 +496,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
natDexTier: "RU",
|
||||
},
|
||||
politoed: {
|
||||
tier: "NUBL",
|
||||
tier: "RU",
|
||||
doublesTier: "DUU",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -552,7 +560,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tentacruel: {
|
||||
tier: "NU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
natDexTier: "UU",
|
||||
},
|
||||
geodude: {
|
||||
tier: "LC",
|
||||
|
|
@ -610,7 +618,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
slowbromega: {
|
||||
isNonstandard: "Past",
|
||||
tier: "Illegal",
|
||||
natDexTier: "UU",
|
||||
natDexTier: "RUBL",
|
||||
},
|
||||
slowbrogalar: {
|
||||
tier: "NU",
|
||||
|
|
@ -620,7 +628,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
slowking: {
|
||||
tier: "UU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
natDexTier: "UU",
|
||||
},
|
||||
slowkinggalar: {
|
||||
tier: "OU",
|
||||
|
|
@ -638,7 +646,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
magnezone: {
|
||||
tier: "RU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "UU",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
farfetchd: {
|
||||
isNonstandard: "Past",
|
||||
|
|
@ -860,14 +868,14 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "LC",
|
||||
},
|
||||
chansey: {
|
||||
tier: "RU",
|
||||
tier: "NU",
|
||||
doublesTier: "NFE",
|
||||
natDexTier: "UU",
|
||||
},
|
||||
blissey: {
|
||||
tier: "RU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
natDexTier: "UU",
|
||||
},
|
||||
tangela: {
|
||||
isNonstandard: "Past",
|
||||
|
|
@ -950,7 +958,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
natDexTier: "NFE",
|
||||
},
|
||||
scizor: {
|
||||
tier: "OU",
|
||||
tier: "UU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "UU",
|
||||
},
|
||||
|
|
@ -1080,7 +1088,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
natDexTier: "RU",
|
||||
},
|
||||
espeon: {
|
||||
tier: "PU",
|
||||
tier: "NU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -1113,7 +1121,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
natDexTier: "NFE",
|
||||
},
|
||||
porygonz: {
|
||||
tier: "NUBL",
|
||||
tier: "RU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "UU",
|
||||
},
|
||||
|
|
@ -1470,7 +1478,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "NFE",
|
||||
},
|
||||
dudunsparce: {
|
||||
tier: "PU",
|
||||
tier: "NU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -1520,7 +1528,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
heracrossmega: {
|
||||
isNonstandard: "Past",
|
||||
tier: "Illegal",
|
||||
natDexTier: "RUBL",
|
||||
natDexTier: "UU",
|
||||
},
|
||||
sneasel: {
|
||||
tier: "NFE",
|
||||
|
|
@ -1674,7 +1682,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
natDexTier: "RU",
|
||||
},
|
||||
suicune: {
|
||||
tier: "NUBL",
|
||||
tier: "RU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -1685,7 +1693,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "NFE",
|
||||
},
|
||||
tyranitar: {
|
||||
tier: "UU",
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
natDexTier: "UU",
|
||||
},
|
||||
|
|
@ -1755,7 +1763,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
swampertmega: {
|
||||
isNonstandard: "Past",
|
||||
tier: "Illegal",
|
||||
natDexTier: "RU",
|
||||
natDexTier: "UU",
|
||||
},
|
||||
poochyena: {
|
||||
tier: "LC",
|
||||
|
|
@ -1869,7 +1877,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
gardevoirmega: {
|
||||
isNonstandard: "Past",
|
||||
tier: "Illegal",
|
||||
natDexTier: "UU",
|
||||
natDexTier: "RUBL",
|
||||
},
|
||||
gallade: {
|
||||
tier: "RU",
|
||||
|
|
@ -1893,7 +1901,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "LC",
|
||||
},
|
||||
breloom: {
|
||||
tier: "NU",
|
||||
tier: "RU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -2293,6 +2301,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
chimechomega: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
absol: {
|
||||
isNonstandard: "Past",
|
||||
tier: "Illegal",
|
||||
|
|
@ -2303,6 +2315,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "Illegal",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
absolmegaz: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
snorunt: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -2374,7 +2390,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
salamence: {
|
||||
tier: "RUBL",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "UU",
|
||||
natDexTier: "RUBL",
|
||||
},
|
||||
salamencemega: {
|
||||
isNonstandard: "Past",
|
||||
|
|
@ -2494,7 +2510,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "NFE",
|
||||
},
|
||||
torterra: {
|
||||
tier: "PUBL",
|
||||
tier: "RU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -2518,7 +2534,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
empoleon: {
|
||||
tier: "RU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
natDexTier: "UU",
|
||||
},
|
||||
starly: {
|
||||
tier: "LC",
|
||||
|
|
@ -2531,6 +2547,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
staraptormega: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
bidoof: {
|
||||
isNonstandard: "Past",
|
||||
tier: "Illegal",
|
||||
|
|
@ -2618,7 +2638,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "LC",
|
||||
},
|
||||
floatzel: {
|
||||
tier: "ZUBL",
|
||||
tier: "PU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -2719,6 +2739,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "Illegal",
|
||||
natDexTier: "(OU)",
|
||||
},
|
||||
garchompmegaz: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
riolu: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -2732,11 +2756,15 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "Illegal",
|
||||
natDexTier: "Uber",
|
||||
},
|
||||
lucariomegaz: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
hippopotas: {
|
||||
tier: "LC",
|
||||
},
|
||||
hippowdon: {
|
||||
tier: "RU",
|
||||
tier: "UU",
|
||||
doublesTier: "DUU",
|
||||
natDexTier: "UU",
|
||||
},
|
||||
|
|
@ -2754,7 +2782,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "LC",
|
||||
},
|
||||
toxicroak: {
|
||||
tier: "NU",
|
||||
tier: "ZU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -2854,6 +2882,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
doublesTier: "DUU",
|
||||
natDexTier: "OU",
|
||||
},
|
||||
heatranmega: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
regigigas: {
|
||||
tier: "ZU",
|
||||
doublesTier: "(DUU)",
|
||||
|
|
@ -2889,6 +2921,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
doublesTier: "DUber",
|
||||
natDexTier: "Uber",
|
||||
},
|
||||
darkraimega: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
shaymin: {
|
||||
tier: "ZU",
|
||||
doublesTier: "(DUU)",
|
||||
|
|
@ -3179,7 +3215,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
natDexTier: "RU",
|
||||
},
|
||||
lilliganthisui: {
|
||||
tier: "RU",
|
||||
tier: "RUBL",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RUBL",
|
||||
},
|
||||
|
|
@ -3363,7 +3399,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "NFE",
|
||||
},
|
||||
reuniclus: {
|
||||
tier: "RU",
|
||||
tier: "NU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -3419,7 +3455,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
amoonguss: {
|
||||
tier: "PU",
|
||||
doublesTier: "DOU",
|
||||
natDexTier: "RU",
|
||||
natDexTier: "UU",
|
||||
},
|
||||
frillish: {
|
||||
isNonstandard: "Past",
|
||||
|
|
@ -3440,7 +3476,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "LC",
|
||||
},
|
||||
galvantula: {
|
||||
tier: "NU",
|
||||
tier: "PU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -3557,7 +3593,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "LC",
|
||||
},
|
||||
mienshao: {
|
||||
tier: "NUBL",
|
||||
tier: "RU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RUBL",
|
||||
},
|
||||
|
|
@ -3574,6 +3610,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
golurkmega: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
pawniard: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -3591,7 +3631,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "NFE",
|
||||
},
|
||||
braviary: {
|
||||
tier: "ZU",
|
||||
tier: "NU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -3606,7 +3646,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
mandibuzz: {
|
||||
tier: "UU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
natDexTier: "UU",
|
||||
},
|
||||
heatmor: {
|
||||
isNonstandard: "Past",
|
||||
|
|
@ -3660,12 +3700,12 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tornadustherian: {
|
||||
tier: "OU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "UUBL",
|
||||
natDexTier: "OU",
|
||||
},
|
||||
thundurus: {
|
||||
tier: "RUBL",
|
||||
doublesTier: "DUU",
|
||||
natDexTier: "RUBL",
|
||||
natDexTier: "UU",
|
||||
},
|
||||
thundurustherian: {
|
||||
tier: "UU",
|
||||
|
|
@ -3694,7 +3734,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
},
|
||||
kyurem: {
|
||||
tier: "OU",
|
||||
doublesTier: "DUU",
|
||||
doublesTier: "DOU",
|
||||
natDexTier: "OU",
|
||||
},
|
||||
kyuremblack: {
|
||||
|
|
@ -3809,7 +3849,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
},
|
||||
talonflame: {
|
||||
tier: "RU",
|
||||
doublesTier: "DUU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
scatterbug: {
|
||||
|
|
@ -3885,6 +3925,14 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
meowsticmmega: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
meowsticfmega: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
honedge: {
|
||||
isNonstandard: "Past",
|
||||
tier: "Illegal",
|
||||
|
|
@ -4028,7 +4076,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "NFE",
|
||||
},
|
||||
goodra: {
|
||||
tier: "PU",
|
||||
tier: "NU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -4192,8 +4240,8 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
},
|
||||
primarina: {
|
||||
tier: "OU",
|
||||
doublesTier: "DUU",
|
||||
natDexTier: "RU",
|
||||
doublesTier: "DOU",
|
||||
natDexTier: "UU",
|
||||
},
|
||||
pikipek: {
|
||||
tier: "LC",
|
||||
|
|
@ -4241,6 +4289,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
crabominablemega: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
oricorio: {
|
||||
tier: "ZU",
|
||||
doublesTier: "(DUU)",
|
||||
|
|
@ -4265,7 +4317,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "NFE",
|
||||
},
|
||||
ribombee: {
|
||||
tier: "NU",
|
||||
tier: "RU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -4408,7 +4460,11 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
golisopod: {
|
||||
isNonstandard: "Past",
|
||||
tier: "Illegal",
|
||||
natDexTier: "RU",
|
||||
natDexTier: "UU",
|
||||
},
|
||||
golisopodmega: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
sandygast: {
|
||||
tier: "LC",
|
||||
|
|
@ -4653,7 +4709,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
kartana: {
|
||||
isNonstandard: "Past",
|
||||
tier: "Illegal",
|
||||
natDexTier: "OU",
|
||||
natDexTier: "UUBL",
|
||||
},
|
||||
guzzlord: {
|
||||
isNonstandard: "Past",
|
||||
|
|
@ -4685,6 +4741,14 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
doublesTier: "DUber",
|
||||
natDexTier: "Uber",
|
||||
},
|
||||
magearnamega: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
magearnaoriginalmega: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
marshadow: {
|
||||
isNonstandard: "Past",
|
||||
tier: "Illegal",
|
||||
|
|
@ -4713,7 +4777,11 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
zeraora: {
|
||||
isNonstandard: "Past",
|
||||
tier: "Illegal",
|
||||
natDexTier: "UU",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
zeraoramega: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
meltan: {
|
||||
isNonstandard: "Past",
|
||||
|
|
@ -4733,7 +4801,9 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "LC",
|
||||
},
|
||||
thwackey: {
|
||||
tier: "NFE",
|
||||
tier: "NU",
|
||||
doublesTier: "NFE",
|
||||
natDexTier: "NFE",
|
||||
},
|
||||
rillaboom: {
|
||||
tier: "OU",
|
||||
|
|
@ -5040,7 +5110,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "LC",
|
||||
},
|
||||
frosmoth: {
|
||||
tier: "PU",
|
||||
tier: "PUBL",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -5172,7 +5242,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "Illegal",
|
||||
},
|
||||
zarude: {
|
||||
tier: "UU",
|
||||
tier: "UUBL",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -5213,7 +5283,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
},
|
||||
enamorus: {
|
||||
tier: "OU",
|
||||
doublesTier: "(DUU)",
|
||||
doublesTier: "DUU",
|
||||
natDexTier: "RUBL",
|
||||
},
|
||||
enamorustherian: {
|
||||
|
|
@ -5281,7 +5351,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
lokix: {
|
||||
tier: "UU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
natDexTier: "UU",
|
||||
},
|
||||
rellor: {
|
||||
tier: "LC",
|
||||
|
|
@ -5352,6 +5422,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
scovillainmega: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
tadbulb: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -5400,11 +5474,27 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
doublesTier: "DUU",
|
||||
natDexTier: "Uber",
|
||||
},
|
||||
baxcaliburmega: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
tatsugiri: {
|
||||
tier: "PU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
tatsugiricurlymega: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
tatsugiridroopymega: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
tatsugiristretchymega: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
cyclizar: {
|
||||
tier: "RU",
|
||||
doublesTier: "(DUU)",
|
||||
|
|
@ -5466,13 +5556,17 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
glimmora: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
natDexTier: "UU",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
glimmoramega: {
|
||||
isNonstandard: "Future",
|
||||
tier: "Illegal",
|
||||
},
|
||||
shroodle: {
|
||||
tier: "LC",
|
||||
},
|
||||
grafaiai: {
|
||||
tier: "ZU",
|
||||
tier: "NU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -5517,7 +5611,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
natDexTier: "OU",
|
||||
},
|
||||
brutebonnet: {
|
||||
tier: "PU",
|
||||
tier: "ZU",
|
||||
doublesTier: "DUU",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -5554,7 +5648,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
ironmoth: {
|
||||
tier: "OU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "UU",
|
||||
natDexTier: "UUBL",
|
||||
},
|
||||
ironhands: {
|
||||
tier: "UUBL",
|
||||
|
|
|
|||
270
data/items.ts
270
data/items.ts
|
|
@ -47,6 +47,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
|
|||
gen: 6,
|
||||
isNonstandard: "Past",
|
||||
},
|
||||
absolitez: {
|
||||
name: "Absolite Z",
|
||||
spritenum: 576,
|
||||
megaStone: "Absol-Mega-Z",
|
||||
megaEvolves: "Absol",
|
||||
itemUser: ["Absol"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
num: 2588,
|
||||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
absorbbulb: {
|
||||
name: "Absorb Bulb",
|
||||
spritenum: 2,
|
||||
|
|
@ -408,6 +422,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
|
|||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
baxcalibrite: {
|
||||
name: "Baxcalibrite",
|
||||
spritenum: 0,
|
||||
megaStone: "Baxcalibur-Mega",
|
||||
megaEvolves: "Baxcalibur",
|
||||
itemUser: ["Baxcalibur"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
num: 2601,
|
||||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
beastball: {
|
||||
name: "Beast Ball",
|
||||
spritenum: 661,
|
||||
|
|
@ -938,6 +966,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
|
|||
gen: 5,
|
||||
isNonstandard: "Past",
|
||||
},
|
||||
chimechite: {
|
||||
name: "Chimechite",
|
||||
spritenum: 0,
|
||||
megaStone: "Chimecho-Mega",
|
||||
megaEvolves: "Chimecho",
|
||||
itemUser: ["Chimecho"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
num: 2587,
|
||||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
chippedpot: {
|
||||
name: "Chipped Pot",
|
||||
spritenum: 720,
|
||||
|
|
@ -1204,6 +1246,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
|
|||
num: 1885,
|
||||
gen: 9,
|
||||
},
|
||||
crabominite: {
|
||||
name: "Crabominite",
|
||||
spritenum: 0,
|
||||
megaStone: "Crabominable-Mega",
|
||||
megaEvolves: "Crabominable",
|
||||
itemUser: ["Crabominable"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
num: 2595,
|
||||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
crackedpot: {
|
||||
name: "Cracked Pot",
|
||||
spritenum: 719,
|
||||
|
|
@ -1289,6 +1345,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
|
|||
gen: 7,
|
||||
isNonstandard: "Past",
|
||||
},
|
||||
darkranite: {
|
||||
name: "Darkranite",
|
||||
spritenum: 0,
|
||||
megaStone: "Darkrai-Mega",
|
||||
megaEvolves: "Darkrai",
|
||||
itemUser: ["Darkrai"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
num: 2593,
|
||||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
dawnstone: {
|
||||
name: "Dawn Stone",
|
||||
spritenum: 92,
|
||||
|
|
@ -2406,6 +2476,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
|
|||
gen: 6,
|
||||
isNonstandard: "Past",
|
||||
},
|
||||
garchompitez: {
|
||||
name: "Garchompite Z",
|
||||
spritenum: 573,
|
||||
megaStone: "Garchomp-Mega-Z",
|
||||
megaEvolves: "Garchomp",
|
||||
itemUser: ["Garchomp"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
num: 2590,
|
||||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
gardevoirite: {
|
||||
name: "Gardevoirite",
|
||||
spritenum: 587,
|
||||
|
|
@ -2490,6 +2574,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
|
|||
gen: 6,
|
||||
isNonstandard: "Past",
|
||||
},
|
||||
glimmoranite: {
|
||||
name: "Glimmoranite",
|
||||
spritenum: 0,
|
||||
megaStone: "Glimmora-Mega",
|
||||
megaEvolves: "Glimmora",
|
||||
itemUser: ["Glimmora"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
num: 2600,
|
||||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
goldbottlecap: {
|
||||
name: "Gold Bottle Cap",
|
||||
spritenum: 697,
|
||||
|
|
@ -2499,6 +2597,34 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
|
|||
num: 796,
|
||||
gen: 7,
|
||||
},
|
||||
golisopite: {
|
||||
name: "Golisopite",
|
||||
spritenum: 0,
|
||||
megaStone: "Golisopod-Mega",
|
||||
megaEvolves: "Golisopod",
|
||||
itemUser: ["Golisopod"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
num: 2596,
|
||||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
golurkite: {
|
||||
name: "Golurkite",
|
||||
spritenum: 0,
|
||||
megaStone: "Golurk-Mega",
|
||||
megaEvolves: "Golurk",
|
||||
itemUser: ["Golurk"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
num: 2594,
|
||||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
grassgem: {
|
||||
name: "Grass Gem",
|
||||
spritenum: 172,
|
||||
|
|
@ -2781,6 +2907,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
|
|||
num: 2408,
|
||||
gen: 9,
|
||||
},
|
||||
heatranite: {
|
||||
name: "Heatranite",
|
||||
spritenum: 0,
|
||||
megaStone: "Heatran-Mega",
|
||||
megaEvolves: "Heatran",
|
||||
itemUser: ["Heatran"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
num: 2592,
|
||||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
heatrock: {
|
||||
name: "Heat Rock",
|
||||
spritenum: 193,
|
||||
|
|
@ -3463,6 +3603,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
|
|||
gen: 6,
|
||||
isNonstandard: "Past",
|
||||
},
|
||||
lucarionitez: {
|
||||
name: "Lucarionite Z",
|
||||
spritenum: 594,
|
||||
megaStone: "Lucario-Mega-Z",
|
||||
megaEvolves: "Lucario",
|
||||
itemUser: ["Lucario"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
num: 2591,
|
||||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
luckypunch: {
|
||||
name: "Lucky Punch",
|
||||
spritenum: 261,
|
||||
|
|
@ -3606,6 +3760,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
|
|||
gen: 3,
|
||||
isNonstandard: "Past",
|
||||
},
|
||||
magearnite: {
|
||||
name: "Magearnite",
|
||||
spritenum: 0,
|
||||
megaStone: ["Magearna-Mega", "Magearna-Original-Mega"],
|
||||
megaEvolves: ["Magearna", "Magearna-Original"],
|
||||
itemUser: ["Magearna", "Magearna-Original"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves!.includes(source.baseSpecies.baseSpecies)) return false;
|
||||
return true;
|
||||
},
|
||||
num: 2597,
|
||||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
magmarizer: {
|
||||
name: "Magmarizer",
|
||||
spritenum: 272,
|
||||
|
|
@ -3863,6 +4031,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
|
|||
num: 219,
|
||||
gen: 3,
|
||||
},
|
||||
meowsticite: {
|
||||
name: "Meowsticite",
|
||||
spritenum: 0,
|
||||
megaStone: ["Meowstic-M-Mega", "Meowstic-F-Mega"],
|
||||
megaEvolves: ["Meowstic", "Meowstic-F"],
|
||||
itemUser: ["Meowstic", "Meowstic-F"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves!.includes(source.baseSpecies.baseSpecies)) return false;
|
||||
return true;
|
||||
},
|
||||
num: 2594,
|
||||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
metagrossite: {
|
||||
name: "Metagrossite",
|
||||
spritenum: 618,
|
||||
|
|
@ -4967,6 +5149,36 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
|
|||
gen: 3,
|
||||
isNonstandard: "Past",
|
||||
},
|
||||
raichunitex: {
|
||||
name: "Raichunite X",
|
||||
spritenum: 0,
|
||||
megaStone: "Raichu-Mega-X",
|
||||
megaEvolves: "Raichu",
|
||||
itemUser: ["Raichu"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.name ||
|
||||
item.megaStone === source.baseSpecies.name) return false;
|
||||
return true;
|
||||
},
|
||||
num: 2585,
|
||||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
raichunitey: {
|
||||
name: "Raichunite Y",
|
||||
spritenum: 0,
|
||||
megaStone: "Raichu-Mega-Y",
|
||||
megaEvolves: "Raichu",
|
||||
itemUser: ["Raichu"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.name ||
|
||||
item.megaStone === source.baseSpecies.name) return false;
|
||||
return true;
|
||||
},
|
||||
num: 2586,
|
||||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
rarebone: {
|
||||
name: "Rare Bone",
|
||||
spritenum: 379,
|
||||
|
|
@ -5484,6 +5696,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
|
|||
num: 232,
|
||||
gen: 2,
|
||||
},
|
||||
scovillainite: {
|
||||
name: "Scovillainite",
|
||||
spritenum: 0,
|
||||
megaStone: "Scovillain-Mega",
|
||||
megaEvolves: "Scovillain",
|
||||
itemUser: ["Scovillain"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
num: 2599,
|
||||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
scraftinite: {
|
||||
name: "Scraftinite",
|
||||
spritenum: 555,
|
||||
|
|
@ -5891,6 +6117,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
|
|||
gen: 2,
|
||||
isPokeball: true,
|
||||
},
|
||||
staraptite: {
|
||||
name: "Staraptite",
|
||||
spritenum: 0,
|
||||
megaStone: "Staraptor-Mega",
|
||||
megaEvolves: "Staraptor",
|
||||
itemUser: ["Staraptor"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
num: 2589,
|
||||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
starfberry: {
|
||||
name: "Starf Berry",
|
||||
spritenum: 472,
|
||||
|
|
@ -6174,6 +6414,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
|
|||
num: 1117,
|
||||
gen: 8,
|
||||
},
|
||||
tatsugirinite: {
|
||||
name: "Tatsugirinite",
|
||||
spritenum: 0,
|
||||
megaStone: ["Tatsugiri-Curly-Mega", "Tatsugiri-Droopy-Mega", "Tatsugiri-Stretchy-Mega"],
|
||||
megaEvolves: ["Tatsugiri", "Tatsugiri-Droopy", "Tatsugiri-Stretchy"],
|
||||
itemUser: ["Tatsugiri", "Tatsugiri-Droopy", "Tatsugiri-Stretchy"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves!.includes(source.baseSpecies.baseSpecies)) return false;
|
||||
return true;
|
||||
},
|
||||
num: 2601,
|
||||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
terrainextender: {
|
||||
name: "Terrain Extender",
|
||||
spritenum: 662,
|
||||
|
|
@ -7710,6 +7964,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
|
|||
num: 300,
|
||||
gen: 4,
|
||||
},
|
||||
zeraorite: {
|
||||
name: "Zeraorite",
|
||||
spritenum: 0,
|
||||
megaStone: "Zeraora-Mega",
|
||||
megaEvolves: "Zeraora",
|
||||
itemUser: ["Zeraora"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
num: 2598,
|
||||
gen: 9,
|
||||
isNonstandard: "Future",
|
||||
},
|
||||
zoomlens: {
|
||||
name: "Zoom Lens",
|
||||
spritenum: 574,
|
||||
|
|
@ -7733,7 +8001,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
|
|||
megaEvolves: "Zygarde-Complete",
|
||||
itemUser: ["Zygarde-Complete"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
if (source.baseSpecies.baseSpecies === 'Zygarde') return false;
|
||||
return true;
|
||||
},
|
||||
num: 2584,
|
||||
|
|
|
|||
|
|
@ -23086,6 +23086,7 @@ export const Learnsets: import('../sim/dex-species').LearnsetDataTable = {
|
|||
{generation: 8, level: 70, shiny: 1, moves: ["psychic", "disable", "recover", "blizzard"]},
|
||||
{generation: 8, level: 70, shiny: 1, isHidden: true, moves: ['mist', 'guardswap', 'powerswap', 'psychic'], source: "gen8bdsp"},
|
||||
{generation: 9, level: 100, nature: "Modest", perfectIVs: 6, isHidden: true, moves: ["psystrike", "aurasphere", "icebeam", "calmmind"]},
|
||||
{generation: 9, level: 70, moves: ["psychic", "aurasphere", "psychocut", "amnesia"], source: "gen9legends"},
|
||||
],
|
||||
encounters: [
|
||||
{generation: 1, level: 70},
|
||||
|
|
@ -23497,7 +23498,7 @@ export const Learnsets: import('../sim/dex-species').LearnsetDataTable = {
|
|||
{generation: 7, level: 5, perfectIVs: 5, moves: ["pound"], pokeball: "pokeball"},
|
||||
{generation: 7, level: 50, moves: ["psychic", "barrier", "metronome", "transform"], pokeball: "cherishball"},
|
||||
{generation: 8, level: 1, moves: ["pound"], pokeball: "pokeball"},
|
||||
{generation: 8, level: 1, moves: ['pound', 'reflecttype'], source: "gen8bdsp"},
|
||||
{generation: 8, level: 1, moves: ['pound', 'reflecttype'], pokeball: "pokeball", source: "gen8bdsp"},
|
||||
{generation: 9, level: 5, moves: ["pollenpuff", "darkpulse", "dragonpulse", "thunderbolt", "dazzlinggleam", "aurasphere", "flamethrower", "airslash", "shadowball", "energyball", "earthpower", "icebeam", "hypervoice", "sludgebomb", "psyshock", "powergem", "flashcannon", "surf", "swift", "lightscreen", "lifedew"], pokeball: "pokeball"},
|
||||
],
|
||||
eventOnly: true,
|
||||
|
|
@ -46634,7 +46635,7 @@ export const Learnsets: import('../sim/dex-species').LearnsetDataTable = {
|
|||
{generation: 6, level: 100, moves: ["wish", "confusion", "rest"], pokeball: "cherishball"},
|
||||
{generation: 7, level: 15, moves: ["swift", "wish", "healingwish", "rest"], pokeball: "cherishball"},
|
||||
{generation: 8, level: 70, nature: "Timid", moves: ["meteormash", "psychic", "rest", "wish"], pokeball: "cherishball"},
|
||||
{generation: 8, level: 5, moves: ['confusion', 'wish'], source: "gen8bdsp"},
|
||||
{generation: 8, level: 5, moves: ['confusion', 'wish'], pokeball: "pokeball", source: "gen8bdsp"},
|
||||
],
|
||||
eventOnly: true,
|
||||
},
|
||||
|
|
@ -69513,7 +69514,7 @@ export const Learnsets: import('../sim/dex-species').LearnsetDataTable = {
|
|||
worryseed: ["7T"],
|
||||
},
|
||||
eventData: [
|
||||
{generation: 9, level: 72, nature: "Modest", moves: ["lightofruin", "energyball", "gigadrain", "synthesis"], source: "gen9legends"},
|
||||
{generation: 9, level: 72, nature: "Modest", moves: ["lightofruin", "energyball", "gigadrain", "synthesis"], pokeball: "pokeball", source: "gen9legends"},
|
||||
],
|
||||
eventOnly: true,
|
||||
},
|
||||
|
|
@ -99529,7 +99530,6 @@ export const Learnsets: import('../sim/dex-species').LearnsetDataTable = {
|
|||
dazzlinggleam: ["9M"],
|
||||
doubleedge: ["9M", "9L60"],
|
||||
earthquake: ["9M"],
|
||||
encore: ["9M"],
|
||||
endure: ["9M"],
|
||||
facade: ["9M"],
|
||||
gigaimpact: ["9M"],
|
||||
|
|
|
|||
206
data/mods/biomechmons/abilities.ts
Normal file
206
data/mods/biomechmons/abilities.ts
Normal file
|
|
@ -0,0 +1,206 @@
|
|||
export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
|
||||
magician: {
|
||||
inherit: true,
|
||||
onAfterMoveSecondarySelf(source, target, move) {
|
||||
if (!move || source.switchFlag === true || !move.hitTargets || source.item || source.volatiles['gem'] ||
|
||||
move.id === 'fling' || move.category === 'Status') return;
|
||||
const hitTargets = move.hitTargets;
|
||||
this.speedSort(hitTargets);
|
||||
for (const pokemon of hitTargets) {
|
||||
if (pokemon !== source) {
|
||||
const yourItem = pokemon.takeItem(source);
|
||||
if (!yourItem) continue;
|
||||
if (!source.setItem(yourItem)) {
|
||||
if (!this.dex.items.get(yourItem.id).exists) {
|
||||
pokemon.setItem(yourItem.id);
|
||||
continue;
|
||||
}
|
||||
pokemon.item = yourItem.id; // bypass setItem so we don't break choicelock or anything
|
||||
continue;
|
||||
}
|
||||
this.add('-item', source, yourItem, '[from] ability: Magician', `[of] ${pokemon}`);
|
||||
return;
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
neutralizinggas: {
|
||||
inherit: true,
|
||||
onSwitchIn(pokemon) {
|
||||
this.add('-ability', pokemon, 'Neutralizing Gas');
|
||||
pokemon.abilityState.ending = false;
|
||||
const strongWeathers = ['desolateland', 'primordialsea', 'deltastream'];
|
||||
for (const target of this.getAllActive()) {
|
||||
if (target.hasItem('Ability Shield')) {
|
||||
this.add('-block', target, 'item: Ability Shield');
|
||||
continue;
|
||||
}
|
||||
// Can't suppress a Tatsugiri inside of Dondozo already
|
||||
if (target.volatiles['commanding']) {
|
||||
continue;
|
||||
}
|
||||
if (target.illusion) {
|
||||
this.singleEvent('End', this.dex.abilities.get('Illusion'), target.abilityState, target, pokemon, 'neutralizinggas');
|
||||
}
|
||||
if (target.volatiles['slowstart']) {
|
||||
delete target.volatiles['slowstart'];
|
||||
this.add('-end', target, 'Slow Start', '[silent]');
|
||||
}
|
||||
if (strongWeathers.includes(target.getAbility().id)) {
|
||||
this.singleEvent('End', this.dex.abilities.get(target.getAbility().id), target.abilityState, target, pokemon, 'neutralizinggas');
|
||||
}
|
||||
if (!this.dex.abilities.get(target.ability).exists) {
|
||||
const isItem = (target.m.scrambled.items as { inSlot: string }[]).findIndex(e => e.inSlot === 'Ability');
|
||||
if (isItem >= 0) {
|
||||
target.removeVolatile('item:' + this.toID(target.m.scrambled.items[isItem].thing));
|
||||
} else if ((target.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Ability') >= 0) {
|
||||
const isMove = (target.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Ability');
|
||||
const indexOfMove = target.moveSlots.findIndex(m => this.toID(target.m.scrambled.moves[isMove].thing) === m.id);
|
||||
if (indexOfMove >= 0) target.moveSlots.splice(indexOfMove, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
onEnd(source) {
|
||||
if (source.transformed) return;
|
||||
for (const pokemon of this.getAllActive()) {
|
||||
if (pokemon !== source && pokemon.hasAbility('Neutralizing Gas')) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.add('-end', source, 'ability: Neutralizing Gas');
|
||||
|
||||
// FIXME this happens before the pokemon switches out, should be the opposite order.
|
||||
// Not an easy fix since we cant use a supported event. Would need some kind of special event that
|
||||
// gathers events to run after the switch and then runs them when the ability is no longer accessible.
|
||||
// (If you're tackling this, do note extreme weathers have the same issue)
|
||||
|
||||
// Mark this pokemon's ability as ending so Pokemon#ignoringAbility skips it
|
||||
if (source.abilityState.ending) return;
|
||||
source.abilityState.ending = true;
|
||||
const sortedActive = this.getAllActive();
|
||||
this.speedSort(sortedActive);
|
||||
for (const pokemon of sortedActive) {
|
||||
if (pokemon !== source) {
|
||||
if (pokemon.getAbility().flags['cantsuppress']) continue; // does not interact with e.g Ice Face, Zen Mode
|
||||
if (pokemon.hasItem('abilityshield')) continue; // don't restart abilities that weren't suppressed
|
||||
|
||||
// Will be suppressed by Pokemon#ignoringAbility if needed
|
||||
this.singleEvent('Start', pokemon.getAbility(), pokemon.abilityState, pokemon);
|
||||
if (pokemon.ability === "gluttony") {
|
||||
pokemon.abilityState.gluttony = false;
|
||||
}
|
||||
}
|
||||
if (!this.dex.abilities.get(pokemon.ability).exists) {
|
||||
const isItem = (pokemon.m.scrambled.items as { inSlot: string }[]).findIndex(e => e.inSlot === 'Ability');
|
||||
if (isItem >= 0) {
|
||||
pokemon.addVolatile('item:' + this.toID(pokemon.m.scrambled.items[isItem].thing));
|
||||
} else if ((pokemon.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Ability') >= 0) {
|
||||
const findMove = (pokemon.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Ability');
|
||||
const findSlot = pokemon.baseMoveSlots.find(e => e.id === this.toID(pokemon.m.scrambled.moves[findMove].thing));
|
||||
pokemon.moveSlots.push(this.dex.deepClone(findSlot));
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
pickpocket: {
|
||||
inherit: true,
|
||||
onAfterMoveSecondary(target, source, move) {
|
||||
if (source && source !== target && move?.flags['contact']) {
|
||||
if (target.item || target.switchFlag || target.forceSwitchFlag || source.switchFlag === true) {
|
||||
return;
|
||||
}
|
||||
const yourItem = source.takeItem(target);
|
||||
if (!yourItem) {
|
||||
return;
|
||||
}
|
||||
if (!target.setItem(yourItem)) {
|
||||
if (!this.dex.items.get(yourItem.id).exists) {
|
||||
target.setItem(yourItem.id);
|
||||
return;
|
||||
}
|
||||
source.item = yourItem.id;
|
||||
return;
|
||||
}
|
||||
this.add('-enditem', source, yourItem, '[silent]', '[from] ability: Pickpocket', `[of] ${source}`);
|
||||
this.add('-item', target, yourItem, '[from] ability: Pickpocket', `[of] ${source}`);
|
||||
}
|
||||
},
|
||||
},
|
||||
trace: {
|
||||
inherit: true,
|
||||
onStart(pokemon) {
|
||||
this.effectState.seek = true;
|
||||
// n.b. only affects Hackmons
|
||||
// interaction with No Ability is complicated: https://www.smogon.com/forums/threads/pokemon-sun-moon-battle-mechanics-research.3586701/page-76#post-7790209
|
||||
if (pokemon.adjacentFoes().some(foeActive => foeActive.ability === 'noability')) {
|
||||
this.effectState.seek = false;
|
||||
}
|
||||
// interaction with Ability Shield is similar to No Ability
|
||||
if (pokemon.hasItem('Ability Shield') && this.toID(pokemon.ability) === 'trace') {
|
||||
this.add('-block', pokemon, 'item: Ability Shield');
|
||||
this.effectState.seek = false;
|
||||
}
|
||||
if (this.effectState.seek) {
|
||||
this.singleEvent('Update', this.effect, this.effectState, pokemon);
|
||||
}
|
||||
},
|
||||
onUpdate(pokemon) {
|
||||
if (!this.effectState.seek) return;
|
||||
|
||||
const possibleTargets = pokemon.adjacentFoes().filter(
|
||||
target => !target.getAbility().flags['notrace'] && target.ability !== 'noability'
|
||||
);
|
||||
if (!possibleTargets.length) return;
|
||||
|
||||
const target = this.sample(possibleTargets);
|
||||
const ability = target.getAbility();
|
||||
if (this.toID(pokemon.item) === 'trace') {
|
||||
this.add('-ability', pokemon, ability.name, 'Trace');
|
||||
pokemon.setItem(ability.name);
|
||||
return;
|
||||
} else if (pokemon.volatiles['ability:trace']?.inSlot === 'Move') {
|
||||
if (this.dex.abilities.get(ability.name).exists) {
|
||||
pokemon.removeVolatile('ability:trace');
|
||||
pokemon.m.scrambled.abilities.splice(
|
||||
(pokemon.m.scrambled.abilities as { thing: string, inSlot: string }[]).findIndex(e =>
|
||||
this.toID(e.thing) === 'trace' && e.inSlot === 'Move'), 1);
|
||||
this.add('-ability', pokemon, ability.name, 'Trace');
|
||||
pokemon.addVolatile(`ability:${ability.id}`);
|
||||
pokemon.m.scrambled.abilities.push({ thing: ability.name, inSlot: 'Move' });
|
||||
} else if (this.dex.items.get(ability.name).exists) {
|
||||
pokemon.removeVolatile('ability:trace');
|
||||
pokemon.m.scrambled.abilities.splice(
|
||||
(pokemon.m.scrambled.abilities as { thing: string, inSlot: string }[]).findIndex(e =>
|
||||
this.toID(e.thing) === 'trace' && e.inSlot === 'Move'), 1);
|
||||
this.add('-ability', pokemon, ability.name, 'Trace');
|
||||
pokemon.addVolatile(`item:${ability.id}`);
|
||||
pokemon.m.scrambled.items.push({ thing: this.dex.items.get(ability.name).name, inSlot: 'Move' });
|
||||
} else {
|
||||
const move = this.dex.moves.get(ability.name);
|
||||
if (move.exists) {
|
||||
pokemon.removeVolatile('ability:trace');
|
||||
pokemon.m.scrambled.abilities.splice(
|
||||
(pokemon.m.scrambled.abilities as { thing: string, inSlot: string }[]).findIndex(e =>
|
||||
this.toID(e.thing) === 'trace' && e.inSlot === 'Move'), 1);
|
||||
this.add('-ability', pokemon, move.name, 'Trace');
|
||||
const newMove = {
|
||||
move: move.name,
|
||||
id: move.id,
|
||||
pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
|
||||
maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
|
||||
target: move.target,
|
||||
disabled: false,
|
||||
used: false,
|
||||
};
|
||||
pokemon.baseMoveSlots.push(newMove);
|
||||
pokemon.moveSlots.push(newMove);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
pokemon.setAbility(ability, target);
|
||||
},
|
||||
},
|
||||
};
|
||||
44
data/mods/biomechmons/conditions.ts
Normal file
44
data/mods/biomechmons/conditions.ts
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = {
|
||||
choicelock: {
|
||||
inherit: true,
|
||||
onBeforeMove(pokemon, target, move) {
|
||||
const choiceItem = pokemon.getItem().isChoice ||
|
||||
Object.keys(pokemon.volatiles).some(v => (
|
||||
v.startsWith('item:') && this.dex.items.get(v.split(':')[1]).isChoice
|
||||
));
|
||||
if (!choiceItem) {
|
||||
pokemon.removeVolatile('choicelock');
|
||||
return;
|
||||
}
|
||||
if (
|
||||
!pokemon.ignoringItem() && !pokemon.volatiles['dynamax'] &&
|
||||
move.id !== this.effectState.move && move.id !== 'struggle'
|
||||
) {
|
||||
// Fails unless the Choice item is being ignored, and no PP is lost
|
||||
this.addMove('move', pokemon, move.name);
|
||||
this.attrLastMove('[still]');
|
||||
this.debug("Disabled by Choice item lock");
|
||||
this.add('-fail', pokemon);
|
||||
return false;
|
||||
}
|
||||
},
|
||||
onDisableMove(pokemon) {
|
||||
const choiceItem = pokemon.getItem().isChoice ||
|
||||
Object.keys(pokemon.volatiles).some(v => (
|
||||
v.startsWith('item:') && this.dex.items.get(v.split(':')[1]).isChoice
|
||||
));
|
||||
if (!choiceItem || !pokemon.hasMove(this.effectState.move)) {
|
||||
pokemon.removeVolatile('choicelock');
|
||||
return;
|
||||
}
|
||||
if (pokemon.ignoringItem() || pokemon.volatiles['dynamax']) {
|
||||
return;
|
||||
}
|
||||
for (const moveSlot of pokemon.moveSlots) {
|
||||
if (moveSlot.id !== this.effectState.move) {
|
||||
pokemon.disableMove(moveSlot.id, false, this.effectState.sourceEffect);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
41
data/mods/biomechmons/items.ts
Normal file
41
data/mods/biomechmons/items.ts
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
|
||||
airballoon: {
|
||||
inherit: true,
|
||||
// airborneness implemented in sim/pokemon.js:Pokemon#isGrounded
|
||||
onDamagingHit(damage, target, source, move) {
|
||||
this.add('-enditem', target, 'Air Balloon');
|
||||
if (target.item === 'airballoon') {
|
||||
target.item = '';
|
||||
this.clearEffectState(target.itemState);
|
||||
} else {
|
||||
const isBMM = target.volatiles['item:airballoon']?.inSlot;
|
||||
if (isBMM) {
|
||||
target.removeVolatile('item:airballoon');
|
||||
target.m.scrambled.items.splice((target.m.scrambled.items as { thing: string, inSlot: string }[]).findIndex(e =>
|
||||
this.toID(e.thing) === 'airballoon' && e.inSlot === isBMM), 1);
|
||||
if (isBMM === 'Ability') target.setAbility('No Ability');
|
||||
}
|
||||
}
|
||||
this.runEvent('AfterUseItem', target, null, null, this.dex.items.get('airballoon'));
|
||||
},
|
||||
onAfterSubDamage(damage, target, source, effect) {
|
||||
this.debug('effect: ' + effect.id);
|
||||
if (effect.effectType === 'Move') {
|
||||
this.add('-enditem', target, 'Air Balloon');
|
||||
if (target.item === 'airballoon') {
|
||||
target.item = '';
|
||||
this.clearEffectState(target.itemState);
|
||||
} else {
|
||||
const isBMM = target.volatiles['item:airballoon']?.inSlot;
|
||||
if (isBMM) {
|
||||
target.removeVolatile('item:airballoon');
|
||||
target.m.scrambled.items.splice((target.m.scrambled.items as { thing: string, inSlot: string }[]).findIndex(e =>
|
||||
this.toID(e.thing) === 'airballoon' && e.inSlot === isBMM), 1);
|
||||
if (isBMM === 'Ability') target.setAbility('No Ability');
|
||||
}
|
||||
}
|
||||
this.runEvent('AfterUseItem', target, null, null, this.dex.items.get('airballoon'));
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
401
data/mods/biomechmons/moves.ts
Normal file
401
data/mods/biomechmons/moves.ts
Normal file
|
|
@ -0,0 +1,401 @@
|
|||
export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
|
||||
// Remember, everything deals with SLOTS not with properties as they are!
|
||||
covet: {
|
||||
inherit: true,
|
||||
onAfterHit(target, source, move) {
|
||||
if (source.item || source.volatiles['gem']) {
|
||||
return;
|
||||
}
|
||||
const yourItem = target.takeItem(source);
|
||||
if (!yourItem) {
|
||||
return;
|
||||
}
|
||||
if (
|
||||
!this.singleEvent('TakeItem', yourItem, target.itemState, source, target, move, yourItem) ||
|
||||
!source.setItem(yourItem)
|
||||
) {
|
||||
if (!this.dex.items.get(yourItem.id).exists) {
|
||||
target.setItem(yourItem.id);
|
||||
return;
|
||||
}
|
||||
target.item = yourItem.id; // bypass setItem so we don't break choicelock or anything
|
||||
return;
|
||||
}
|
||||
this.add('-item', source, yourItem, '[from] move: Covet', `[of] ${target}`);
|
||||
},
|
||||
},
|
||||
embargo: {
|
||||
inherit: true,
|
||||
condition: {
|
||||
duration: 5,
|
||||
onStart(pokemon) {
|
||||
this.add('-start', pokemon, 'Embargo');
|
||||
this.singleEvent('End', pokemon.getItem(), pokemon.itemState, pokemon);
|
||||
if (!this.dex.items.get(pokemon.item).exists) {
|
||||
const isAbil = (pokemon.m.scrambled.abilities as { inSlot: string }[]).findIndex(e => e.inSlot === 'Item');
|
||||
if (isAbil >= 0) {
|
||||
pokemon.removeVolatile('ability:' + this.toID(pokemon.m.scrambled.abilities[isAbil].thing));
|
||||
} else if ((pokemon.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Item') >= 0) {
|
||||
const isMove = (pokemon.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Item');
|
||||
const slotNo = pokemon.moveSlots.findIndex(m => this.toID(pokemon.m.scrambled.moves[isMove].thing) === m.id);
|
||||
if (slotNo >= 0) pokemon.moveSlots.splice(slotNo, 1);
|
||||
}
|
||||
}
|
||||
},
|
||||
// Item suppression implemented in Pokemon.ignoringItem() within sim/pokemon.js
|
||||
onResidualOrder: 21,
|
||||
onEnd(pokemon) {
|
||||
this.add('-end', pokemon, 'Embargo');
|
||||
if (!this.dex.items.get(pokemon.item).exists) {
|
||||
const isAbil = (pokemon.m.scrambled.abilities as { inSlot: string }[]).findIndex(e => e.inSlot === 'Item');
|
||||
if (isAbil >= 0) {
|
||||
pokemon.addVolatile('ability:' + this.toID(pokemon.m.scrambled.abilities[isAbil].thing));
|
||||
} else if ((pokemon.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Item') >= 0) {
|
||||
const findMove = (pokemon.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Item');
|
||||
const findSlot = pokemon.baseMoveSlots.find(e => e.id === this.toID(pokemon.m.scrambled.moves[findMove].thing));
|
||||
pokemon.moveSlots.push(this.dex.deepClone(findSlot));
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
magicroom: {
|
||||
inherit: true,
|
||||
condition: {
|
||||
duration: 5,
|
||||
durationCallback(source, effect) {
|
||||
if (source?.hasAbility('persistent')) {
|
||||
this.add('-activate', source, 'ability: Persistent', '[move] Magic Room');
|
||||
return 7;
|
||||
}
|
||||
return 5;
|
||||
},
|
||||
onFieldStart(target, source) {
|
||||
if (source?.hasAbility('persistent')) {
|
||||
this.add('-fieldstart', 'move: Magic Room', `[of] ${source}`, '[persistent]');
|
||||
} else {
|
||||
this.add('-fieldstart', 'move: Magic Room', `[of] ${source}`);
|
||||
}
|
||||
for (const mon of this.getAllActive()) {
|
||||
this.singleEvent('End', mon.getItem(), mon.itemState, mon);
|
||||
if (!this.dex.items.get(mon.item).exists) {
|
||||
const isAbil = (mon.m.scrambled.abilities as { inSlot: string }[]).findIndex(e => e.inSlot === 'Item');
|
||||
if (isAbil >= 0) {
|
||||
mon.removeVolatile('ability:' + this.toID(mon.m.scrambled.abilities[isAbil].thing));
|
||||
} else if ((mon.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Item') >= 0) {
|
||||
const isMove = (mon.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Item');
|
||||
const slotNo = mon.moveSlots.findIndex(m => this.toID(mon.m.scrambled.moves[isMove].thing) === m.id);
|
||||
if (slotNo >= 0) mon.moveSlots.splice(slotNo, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
onFieldRestart(target, source) {
|
||||
this.field.removePseudoWeather('magicroom');
|
||||
},
|
||||
// Item suppression implemented in Pokemon.ignoringItem() within sim/pokemon.js
|
||||
onFieldResidualOrder: 27,
|
||||
onFieldResidualSubOrder: 6,
|
||||
onFieldEnd() {
|
||||
this.add('-fieldend', 'move: Magic Room', '[of] ' + this.effectState.source);
|
||||
for (const pokemon of this.getAllActive()) {
|
||||
if (!this.dex.items.get(pokemon.item).exists) {
|
||||
const isAbil = (pokemon.m.scrambled.abilities as { inSlot: string }[]).findIndex(e => e.inSlot === 'Item');
|
||||
if (isAbil >= 0) {
|
||||
pokemon.addVolatile('ability:' + this.toID(pokemon.m.scrambled.abilities[isAbil].thing));
|
||||
} else if ((pokemon.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Item') >= 0) {
|
||||
const findMove = (pokemon.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Item');
|
||||
const findSlot = pokemon.baseMoveSlots.find(e => e.id === this.toID(pokemon.m.scrambled.moves[findMove].thing));
|
||||
pokemon.moveSlots.push(this.dex.deepClone(findSlot));
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
gastroacid: {
|
||||
inherit: true,
|
||||
condition: {
|
||||
// Ability suppression implemented in Pokemon.ignoringAbility() within sim/pokemon.js
|
||||
onStart(pokemon) {
|
||||
this.add('-endability', pokemon);
|
||||
this.singleEvent('End', pokemon.getAbility(), pokemon.abilityState, pokemon, pokemon, 'gastroacid');
|
||||
if (!this.dex.abilities.get(pokemon.ability).exists) {
|
||||
const isItem = (pokemon.m.scrambled.items as { inSlot: string }[]).findIndex(e => e.inSlot === 'Ability');
|
||||
if (isItem >= 0) {
|
||||
pokemon.removeVolatile('item:' + this.toID(pokemon.m.scrambled.items[isItem].thing));
|
||||
} else if ((pokemon.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Ability') >= 0) {
|
||||
const isMove = (pokemon.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Ability');
|
||||
const slotNo = pokemon.moveSlots.findIndex(m => this.toID(pokemon.m.scrambled.moves[isMove].thing) === m.id);
|
||||
if (slotNo >= 0) pokemon.moveSlots.splice(slotNo, 1);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
trick: {
|
||||
inherit: true,
|
||||
onHit(target, source, move) {
|
||||
const yourItem = target.takeItem(source);
|
||||
const myItem = source.takeItem();
|
||||
if (target.item || source.item || (!yourItem && !myItem)) {
|
||||
if (yourItem) {
|
||||
if (!this.dex.items.get(yourItem.id).exists) {
|
||||
target.setItem(yourItem.id);
|
||||
} else {
|
||||
target.item = yourItem.id;
|
||||
}
|
||||
}
|
||||
if (myItem) {
|
||||
if (!this.dex.items.get(myItem.id).exists) {
|
||||
source.setItem(myItem.id);
|
||||
} else {
|
||||
source.item = myItem.id;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (
|
||||
(myItem && !this.singleEvent('TakeItem', myItem, source.itemState, target, source, move, myItem)) ||
|
||||
(yourItem && !this.singleEvent('TakeItem', yourItem, target.itemState, source, target, move, yourItem))
|
||||
) {
|
||||
if (yourItem) {
|
||||
if (!this.dex.items.get(yourItem.id).exists) {
|
||||
target.setItem(yourItem.id);
|
||||
} else {
|
||||
target.item = yourItem.id;
|
||||
}
|
||||
}
|
||||
if (myItem) {
|
||||
if (!this.dex.items.get(myItem.id).exists) {
|
||||
source.setItem(myItem.id);
|
||||
} else {
|
||||
source.item = myItem.id;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
this.add('-activate', source, 'move: Trick', `[of] ${target}`);
|
||||
if (myItem) {
|
||||
target.setItem(myItem);
|
||||
this.add('-item', target, myItem, '[from] move: Trick');
|
||||
} else {
|
||||
this.add('-enditem', target, yourItem, '[silent]', '[from] move: Trick');
|
||||
}
|
||||
if (yourItem) {
|
||||
source.setItem(yourItem);
|
||||
this.add('-item', source, yourItem, '[from] move: Trick');
|
||||
} else {
|
||||
this.add('-enditem', source, myItem, '[silent]', '[from] move: Trick');
|
||||
}
|
||||
},
|
||||
},
|
||||
sketch: {
|
||||
inherit: true,
|
||||
onHit(target, source) {
|
||||
const move = target.lastMove;
|
||||
if (source.transformed || !move || source.moves.includes(move.id)) return false;
|
||||
if (move.flags['nosketch'] || move.isZ || move.isMax) return false;
|
||||
const sketchIndex = source.moves.indexOf('sketch');
|
||||
if (sketchIndex < 0) return false;
|
||||
if (this.toID(source.item) === 'sketch') {
|
||||
source.setItem(move.name);
|
||||
this.add('-activate', source, 'move: Sketch', move.name);
|
||||
return;
|
||||
} else if (this.toID(source.ability) === 'sketch') {
|
||||
source.setAbility(move.name);
|
||||
this.add('-activate', source, 'move: Sketch', move.name);
|
||||
return;
|
||||
}
|
||||
const sketchedMove = {
|
||||
move: move.name,
|
||||
id: move.id,
|
||||
pp: move.pp,
|
||||
maxpp: move.pp,
|
||||
target: move.target,
|
||||
disabled: false,
|
||||
used: false,
|
||||
};
|
||||
source.moveSlots[sketchIndex] = sketchedMove;
|
||||
source.baseMoveSlots[sketchIndex] = sketchedMove;
|
||||
this.add('-activate', source, 'move: Sketch', move.name);
|
||||
},
|
||||
},
|
||||
skillswap: {
|
||||
inherit: true,
|
||||
onHit(target, source, move) {
|
||||
const targetAbility = target.getAbility();
|
||||
const sourceAbility = source.getAbility();
|
||||
const sourceIsBMM = !this.dex.abilities.get(sourceAbility).exists;
|
||||
const targetIsBMM = !this.dex.abilities.get(targetAbility).exists;
|
||||
if (target.isAlly(source)) {
|
||||
this.add('-activate', source, 'move: Skill Swap', '', '', `[of] ${target}`);
|
||||
} else {
|
||||
this.add('-activate', source, 'move: Skill Swap', targetAbility, sourceAbility, `[of] ${target}`);
|
||||
}
|
||||
this.singleEvent('End', sourceAbility, source.abilityState, source);
|
||||
if (sourceIsBMM) {
|
||||
const isItem = (source.m.scrambled.items as { inSlot: string }[]).findIndex(e => e.inSlot === 'Ability');
|
||||
if (isItem >= 0) {
|
||||
source.removeVolatile('item:' + this.toID(source.m.scrambled.items[isItem].thing));
|
||||
source.m.scrambled.items.splice(isItem, 1);
|
||||
} else if ((source.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Ability') >= 0) {
|
||||
const isMove = (source.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Ability');
|
||||
source.baseMoveSlots.splice(
|
||||
source.baseMoveSlots.findIndex(m => this.toID(source.m.scrambled.moves[isMove].thing) === m.id), 1);
|
||||
source.moveSlots.splice(source.moveSlots.findIndex(m => this.toID(source.m.scrambled.moves[isMove].thing) === m.id), 1);
|
||||
source.m.scrambled.moves.splice(isMove, 1);
|
||||
}
|
||||
}
|
||||
this.singleEvent('End', targetAbility, target.abilityState, target);
|
||||
if (targetIsBMM) {
|
||||
const isItem = (target.m.scrambled.items as { inSlot: string }[]).findIndex(e => e.inSlot === 'Ability');
|
||||
if (isItem >= 0) {
|
||||
target.removeVolatile('item:' + this.toID(target.m.scrambled.items[isItem].thing));
|
||||
target.m.scrambled.items.splice(isItem, 1);
|
||||
} else if ((target.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Ability') >= 0) {
|
||||
const isMove = (target.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Ability');
|
||||
target.baseMoveSlots.splice(
|
||||
target.baseMoveSlots.findIndex(m => this.toID(target.m.scrambled.moves[isMove].thing) === m.id), 1);
|
||||
target.moveSlots.splice(target.moveSlots.findIndex(m => this.toID(target.m.scrambled.moves[isMove].thing) === m.id), 1);
|
||||
target.m.scrambled.moves.splice(isMove, 1);
|
||||
}
|
||||
}
|
||||
|
||||
source.ability = source.baseAbility = targetAbility.id;
|
||||
target.ability = target.baseAbility = sourceAbility.id;
|
||||
source.abilityState = this.initEffectState({ id: this.toID(source.ability), target: source });
|
||||
target.abilityState = this.initEffectState({ id: this.toID(target.ability), target });
|
||||
|
||||
source.volatileStaleness = undefined;
|
||||
if (!target.isAlly(source)) target.volatileStaleness = 'external';
|
||||
|
||||
this.singleEvent('Start', targetAbility, source.abilityState, source);
|
||||
if (targetIsBMM) {
|
||||
if (this.dex.items.get(targetAbility.id).exists) {
|
||||
source.m.scrambled.items.push({ thing: targetAbility.id, inSlot: 'Ability' });
|
||||
const effect = 'item:' + this.toID(targetAbility.id);
|
||||
source.addVolatile(effect);
|
||||
source.volatiles[effect].inSlot = 'Ability';
|
||||
} else {
|
||||
source.m.scrambled.moves.push({ thing: targetAbility.id, inSlot: 'Ability' });
|
||||
const bmmMove = Dex.moves.get(targetAbility.id);
|
||||
const newMove = {
|
||||
move: bmmMove.name,
|
||||
id: bmmMove.id,
|
||||
pp: bmmMove.noPPBoosts ? bmmMove.pp : bmmMove.pp * 8 / 5,
|
||||
maxpp: bmmMove.noPPBoosts ? bmmMove.pp : bmmMove.pp * 8 / 5,
|
||||
target: bmmMove.target,
|
||||
disabled: false,
|
||||
used: false,
|
||||
};
|
||||
source.baseMoveSlots.push(newMove);
|
||||
source.moveSlots.push(newMove);
|
||||
}
|
||||
}
|
||||
this.singleEvent('Start', sourceAbility, target.abilityState, target);
|
||||
if (sourceIsBMM) {
|
||||
if (this.dex.items.get(sourceAbility.id).exists) {
|
||||
target.m.scrambled.items.push({ thing: sourceAbility.id, inSlot: 'Ability' });
|
||||
const effect = 'item:' + this.toID(sourceAbility.id);
|
||||
target.addVolatile(effect);
|
||||
target.volatiles[effect].inSlot = 'Ability';
|
||||
} else {
|
||||
target.m.scrambled.moves.push({ thing: sourceAbility.id, inSlot: 'Ability' });
|
||||
const bmmMove = Dex.moves.get(sourceAbility.id);
|
||||
const newMove = {
|
||||
move: bmmMove.name,
|
||||
id: bmmMove.id,
|
||||
pp: bmmMove.noPPBoosts ? bmmMove.pp : bmmMove.pp * 8 / 5,
|
||||
maxpp: bmmMove.noPPBoosts ? bmmMove.pp : bmmMove.pp * 8 / 5,
|
||||
target: bmmMove.target,
|
||||
disabled: false,
|
||||
used: false,
|
||||
};
|
||||
target.baseMoveSlots.push(newMove);
|
||||
target.moveSlots.push(newMove);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
switcheroo: {
|
||||
inherit: true,
|
||||
onHit(target, source, move) {
|
||||
const yourItem = target.takeItem(source);
|
||||
const myItem = source.takeItem();
|
||||
if (target.item || source.item || (!yourItem && !myItem)) {
|
||||
if (yourItem) {
|
||||
if (!this.dex.items.get(yourItem.id).exists) {
|
||||
target.setItem(yourItem.id);
|
||||
} else {
|
||||
target.item = yourItem.id;
|
||||
}
|
||||
}
|
||||
if (myItem) {
|
||||
if (!this.dex.items.get(myItem.id).exists) {
|
||||
source.setItem(myItem.id);
|
||||
} else {
|
||||
source.item = myItem.id;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (
|
||||
(myItem && !this.singleEvent('TakeItem', myItem, source.itemState, target, source, move, myItem)) ||
|
||||
(yourItem && !this.singleEvent('TakeItem', yourItem, target.itemState, source, target, move, yourItem))
|
||||
) {
|
||||
if (yourItem) {
|
||||
if (!this.dex.items.get(yourItem.id).exists) {
|
||||
target.setItem(yourItem.id);
|
||||
} else {
|
||||
target.item = yourItem.id;
|
||||
}
|
||||
}
|
||||
if (myItem) {
|
||||
if (!this.dex.items.get(myItem.id).exists) {
|
||||
source.setItem(myItem.id);
|
||||
} else {
|
||||
source.item = myItem.id;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
this.add('-activate', source, 'move: Trick', `[of] ${target}`);
|
||||
if (myItem) {
|
||||
target.setItem(myItem);
|
||||
this.add('-item', target, myItem, '[from] move: Switcheroo');
|
||||
} else {
|
||||
this.add('-enditem', target, yourItem, '[silent]', '[from] move: Switcheroo');
|
||||
}
|
||||
if (yourItem) {
|
||||
source.setItem(yourItem);
|
||||
this.add('-item', source, yourItem, '[from] move: Switcheroo');
|
||||
} else {
|
||||
this.add('-enditem', source, myItem, '[silent]', '[from] move: Switcheroo');
|
||||
}
|
||||
},
|
||||
},
|
||||
thief: {
|
||||
inherit: true,
|
||||
onAfterHit(target, source, move) {
|
||||
if (source.item || source.volatiles['gem']) {
|
||||
return;
|
||||
}
|
||||
const yourItem = target.takeItem(source);
|
||||
if (!yourItem) {
|
||||
return;
|
||||
}
|
||||
if (!this.singleEvent('TakeItem', yourItem, target.itemState, source, target, move, yourItem) ||
|
||||
!source.setItem(yourItem)) {
|
||||
if (!this.dex.items.get(yourItem.id).exists) {
|
||||
target.setItem(yourItem.id);
|
||||
return;
|
||||
}
|
||||
target.item = yourItem.id; // bypass setItem so we don't break choicelock or anything
|
||||
return;
|
||||
}
|
||||
this.add('-enditem', target, yourItem, '[silent]', '[from] move: Thief', `[of] ${source}`);
|
||||
this.add('-item', source, yourItem, '[from] move: Thief', `[of] ${target}`);
|
||||
},
|
||||
},
|
||||
};
|
||||
546
data/mods/biomechmons/scripts.ts
Normal file
546
data/mods/biomechmons/scripts.ts
Normal file
|
|
@ -0,0 +1,546 @@
|
|||
import { RESTORATIVE_BERRIES } from "../../../sim/pokemon";
|
||||
|
||||
export const Scripts: ModdedBattleScriptsData = {
|
||||
pokemon: {
|
||||
isGrounded(negateImmunity) {
|
||||
if ('gravity' in this.battle.field.pseudoWeather) return true;
|
||||
if ('ingrain' in this.volatiles && this.battle.gen >= 4) return true;
|
||||
if ('smackdown' in this.volatiles) return true;
|
||||
const item = (this.ignoringItem() ? '' : this.item);
|
||||
if (item === 'ironball' || (this.volatiles['item:ironball'] && !this.ignoringItem())) return true;
|
||||
// If a Fire/Flying type uses Burn Up and Roost, it becomes ???/Flying-type, but it's still grounded.
|
||||
if (!negateImmunity && this.hasType('Flying') && !(this.hasType('???') && 'roost' in this.volatiles)) return false;
|
||||
if (this.hasAbility('levitate') && !this.battle.suppressingAbility(this)) return null;
|
||||
if ('magnetrise' in this.volatiles) return false;
|
||||
if ('telekinesis' in this.volatiles) return false;
|
||||
if (item === 'airballoon' || (this.volatiles['item:airballoon'] && !this.ignoringItem())) return false;
|
||||
return true;
|
||||
},
|
||||
getAbility() {
|
||||
const ability = this.battle.dex.abilities.getByID(this.ability);
|
||||
if (ability.exists) return ability;
|
||||
let abil = this.battle.dex.items.getByID(this.ability) as Item | Move;
|
||||
if (!abil.exists) abil = this.battle.dex.moves.getByID(this.ability);
|
||||
return {
|
||||
id: this.ability,
|
||||
name: abil.name || this.ability,
|
||||
flags: {},
|
||||
effectType: "Ability",
|
||||
toString() {
|
||||
return abil.name || this.id;
|
||||
},
|
||||
} as Ability;
|
||||
},
|
||||
hasAbility(ability) {
|
||||
if (this.ignoringAbility()) return false;
|
||||
if (Array.isArray(ability)) return ability.some(abil => this.hasAbility(abil));
|
||||
const abilityid = this.battle.toID(ability);
|
||||
return this.ability === abilityid || !!this.volatiles['ability:' + abilityid];
|
||||
},
|
||||
ignoringAbility() {
|
||||
// Check if any active pokemon have the ability Neutralizing Gas
|
||||
let neutralizinggas = false;
|
||||
for (const pokemon of this.battle.getAllActive()) {
|
||||
// can't use hasAbility because it would lead to infinite recursion
|
||||
if (
|
||||
(pokemon.ability === ('neutralizinggas' as ID) ||
|
||||
(pokemon.m.scrambled.abilities as { thing: string }[]).some(
|
||||
abils => this.battle.toID(abils.thing) === 'neutralizinggas')) &&
|
||||
!pokemon.volatiles['gastroacid'] && !pokemon.abilityState.ending
|
||||
) {
|
||||
neutralizinggas = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return !!(
|
||||
(this.battle.gen >= 5 && !this.isActive) ||
|
||||
((this.volatiles['gastroacid'] ||
|
||||
(neutralizinggas && (this.ability !== ('neutralizinggas' as ID) ||
|
||||
(this.m.scrambled.abilities as { thing: string }[]).some(abils => this.battle.toID(abils.thing) === 'neutralizinggas'))
|
||||
)) && !this.getAbility().flags['cantsuppress']
|
||||
)
|
||||
);
|
||||
},
|
||||
setAbility(ability, source, sourceEffect, isFromFormeChange = false, isTransform = false) {
|
||||
let isBMMAbil = false;
|
||||
let isOldBMMAbil = false;
|
||||
if (!this.hp) return false;
|
||||
if (!this.battle.dex.abilities.get(ability).exists) isBMMAbil = true;
|
||||
if (typeof ability === 'string') {
|
||||
if (this.battle.dex.abilities.get(ability).exists) {
|
||||
ability = this.battle.dex.abilities.get(ability);
|
||||
} else {
|
||||
const abilString = ability;
|
||||
let abil = this.battle.dex.items.get(abilString) as Item | Move;
|
||||
if (!abil.exists) abil = this.battle.dex.moves.get(abilString);
|
||||
ability = {
|
||||
id: abil.id || abilString,
|
||||
name: abil.name || abilString,
|
||||
flags: {},
|
||||
effectType: "Ability",
|
||||
toString() {
|
||||
return abil.name || abilString;
|
||||
},
|
||||
} as Ability;
|
||||
}
|
||||
}
|
||||
if (!sourceEffect && this.battle.effect) sourceEffect = this.battle.effect;
|
||||
let oldAbility;
|
||||
if (this.battle.dex.abilities.get(this.ability).exists) {
|
||||
oldAbility = this.battle.dex.abilities.get(this.ability);
|
||||
} else {
|
||||
let abil = this.battle.dex.items.getByID(this.ability) as Item | Move;
|
||||
if (!abil.exists) abil = this.battle.dex.moves.getByID(this.ability);
|
||||
oldAbility = {
|
||||
id: this.ability,
|
||||
name: abil.name || this.ability,
|
||||
flags: {},
|
||||
effectType: "Ability",
|
||||
toString() {
|
||||
return abil.name || this.id;
|
||||
},
|
||||
} as Ability;
|
||||
isOldBMMAbil = true;
|
||||
}
|
||||
if (!isFromFormeChange) {
|
||||
if (ability.flags['cantsuppress'] || this.getAbility().flags['cantsuppress']) return false;
|
||||
}
|
||||
if (!isFromFormeChange && !isTransform) {
|
||||
const setAbilityEvent: boolean | null = this.battle.runEvent('SetAbility', this, source, sourceEffect, ability);
|
||||
if (!setAbilityEvent) return setAbilityEvent;
|
||||
}
|
||||
this.battle.singleEvent('End', oldAbility, this.abilityState, this, source);
|
||||
if (isOldBMMAbil) {
|
||||
const isItem = (this.m.scrambled.items as { inSlot: string }[]).findIndex(e => e.inSlot === 'Ability');
|
||||
if (isItem >= 0) {
|
||||
this.removeVolatile('item:' + this.battle.toID(this.m.scrambled.items[isItem].thing));
|
||||
this.m.scrambled.items.splice(isItem, 1);
|
||||
} else if ((this.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Ability') >= 0) {
|
||||
const isMove = (this.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Ability');
|
||||
if (!isTransform) {
|
||||
let indexOfMove = this.baseMoveSlots.findIndex(m => this.battle.toID(this.m.scrambled.moves[isMove].thing) === m.id);
|
||||
if (indexOfMove >= 0) this.baseMoveSlots.splice(indexOfMove, 1);
|
||||
if (oldAbility.id !== 'mimic') {
|
||||
indexOfMove = this.moveSlots.findIndex(m => this.battle.toID(this.m.scrambled.moves[isMove].thing) === m.id);
|
||||
}
|
||||
if (indexOfMove >= 0) this.moveSlots.splice(indexOfMove, 1);
|
||||
}
|
||||
this.m.scrambled.moves.splice(isMove, 1);
|
||||
}
|
||||
}
|
||||
this.ability = ability.id;
|
||||
// ability changes are permanent in BioMechMons
|
||||
if (!isTransform && !this.transformed) this.baseAbility = ability.id;
|
||||
this.abilityState = this.battle.initEffectState({ id: ability.id, target: this });
|
||||
if (sourceEffect && !isFromFormeChange && !isTransform) {
|
||||
if (source) {
|
||||
this.battle.add('-ability', this, ability.name, oldAbility.name, `[from] ${sourceEffect.fullname}`, `[of] ${source}`);
|
||||
} else {
|
||||
this.battle.add('-ability', this, ability.name, oldAbility.name, `[from] ${sourceEffect.fullname}`);
|
||||
}
|
||||
}
|
||||
if (ability.id && this.battle.gen > 3 &&
|
||||
(!isTransform || oldAbility.id !== ability.id || this.battle.gen <= 4)) {
|
||||
this.battle.singleEvent('Start', ability, this.abilityState, this, source);
|
||||
}
|
||||
if (isBMMAbil) {
|
||||
if (this.battle.dex.items.get(ability.id).exists) {
|
||||
this.m.scrambled.items.push({ thing: ability.id, inSlot: 'Ability' });
|
||||
const effect = 'item:' + this.battle.toID(ability.id);
|
||||
this.addVolatile(effect);
|
||||
this.volatiles[effect].inSlot = 'Ability';
|
||||
} else {
|
||||
this.m.scrambled.moves.push({ thing: ability.id, inSlot: 'Ability' });
|
||||
const move = Dex.moves.get(ability.id);
|
||||
const newMove = {
|
||||
move: move.name,
|
||||
id: move.id,
|
||||
pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
|
||||
maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
|
||||
target: move.target,
|
||||
disabled: false,
|
||||
used: false,
|
||||
};
|
||||
if (!isTransform) {
|
||||
this.baseMoveSlots.push(newMove);
|
||||
this.moveSlots.push(newMove);
|
||||
}
|
||||
}
|
||||
}
|
||||
return oldAbility.id;
|
||||
},
|
||||
getItem() {
|
||||
const item = this.battle.dex.items.getByID(this.item);
|
||||
if (item.exists) return item;
|
||||
let bmmItem = this.battle.dex.abilities.getByID(this.item) as Ability | Move;
|
||||
if (!bmmItem.exists) bmmItem = this.battle.dex.moves.getByID(this.item);
|
||||
return {
|
||||
id: this.item,
|
||||
name: bmmItem.name || this.name,
|
||||
effectType: "Item",
|
||||
toString() {
|
||||
return bmmItem.name || this.id;
|
||||
},
|
||||
} as Item;
|
||||
},
|
||||
hasItem(item) {
|
||||
if (this.ignoringItem()) return false;
|
||||
if (Array.isArray(item)) return item.some(i => this.hasItem(i));
|
||||
const itemId = this.battle.toID(item);
|
||||
return this.item === itemId || !!this.volatiles['item:' + itemId];
|
||||
},
|
||||
takeItem(source) {
|
||||
if (!this.item) return false;
|
||||
if (!source) source = this;
|
||||
if (this.battle.gen <= 4) {
|
||||
if (source.itemKnockedOff) return false;
|
||||
if (this.battle.toID(this.ability) === 'multitype') return false;
|
||||
if (this.battle.toID(source.ability) === 'multitype') return false;
|
||||
}
|
||||
const item = this.getItem();
|
||||
if (this.battle.runEvent('TakeItem', this, source, null, item)) {
|
||||
this.item = '';
|
||||
let wrongSlot = (this.m.scrambled.abilities as { inSlot: string }[]).findIndex(e => e.inSlot === 'Item');
|
||||
if (wrongSlot >= 0) {
|
||||
this.removeVolatile('ability:' + this.battle.toID(this.m.scrambled.abilities[wrongSlot].thing));
|
||||
this.m.scrambled.abilities.splice(wrongSlot, 1);
|
||||
} else if ((this.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Item') >= 0) {
|
||||
wrongSlot = (this.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Item');
|
||||
let indexOfMove = this.baseMoveSlots.findIndex(m => this.battle.toID(this.m.scrambled.moves[wrongSlot].thing) === m.id);
|
||||
if (indexOfMove >= 0) this.baseMoveSlots.splice(indexOfMove, 1);
|
||||
if (item.id !== 'mimic') {
|
||||
indexOfMove = this.moveSlots.findIndex(m => this.battle.toID(this.m.scrambled.moves[wrongSlot].thing) === m.id);
|
||||
}
|
||||
if (indexOfMove >= 0) this.moveSlots.splice(indexOfMove, 1);
|
||||
this.m.scrambled.moves.splice(wrongSlot, 1);
|
||||
}
|
||||
const oldItemState = this.itemState;
|
||||
this.battle.clearEffectState(this.itemState);
|
||||
this.pendingStaleness = undefined;
|
||||
this.battle.singleEvent('End', item, oldItemState, this);
|
||||
this.battle.runEvent('AfterTakeItem', this, null, null, item);
|
||||
return item;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
setItem(item, source, effect) {
|
||||
let isBMMItem = false;
|
||||
let isOldBMMItem = false;
|
||||
if (!this.hp || !this.isActive) return false;
|
||||
if (!this.battle.dex.items.get(item).exists) isBMMItem = true;
|
||||
if (typeof item === 'string') {
|
||||
if (this.battle.dex.items.get(item).exists) {
|
||||
item = this.battle.dex.items.get(item);
|
||||
} else {
|
||||
const itemString = item;
|
||||
let newData = this.battle.dex.abilities.get(itemString) as Ability | Move;
|
||||
if (!newData.exists) newData = this.battle.dex.moves.get(itemString);
|
||||
item = {
|
||||
id: newData.id || itemString,
|
||||
name: newData.name || itemString,
|
||||
effectType: "Item",
|
||||
toString() {
|
||||
return newData.name || itemString;
|
||||
},
|
||||
} as Item;
|
||||
}
|
||||
}
|
||||
const effectid = this.battle.effect ? this.battle.effect.id : '';
|
||||
if (RESTORATIVE_BERRIES.has('leppaberry' as ID)) {
|
||||
const inflicted = ['trick', 'switcheroo'].includes(effectid);
|
||||
const external = inflicted && source && !source.isAlly(this);
|
||||
this.pendingStaleness = external ? 'external' : 'internal';
|
||||
} else {
|
||||
this.pendingStaleness = undefined;
|
||||
}
|
||||
const oldItem = this.getItem();
|
||||
if (!this.battle.dex.items.get(oldItem).exists) isOldBMMItem = true;
|
||||
const oldItemState = this.itemState;
|
||||
this.item = item.id;
|
||||
this.itemState = this.battle.initEffectState({ id: item.id, target: this });
|
||||
if (oldItem.exists) this.battle.singleEvent('End', oldItem, oldItemState, this);
|
||||
if (isOldBMMItem) {
|
||||
const isAbil = (this.m.scrambled.abilities as { inSlot: string }[]).findIndex(e => e.inSlot === 'Item');
|
||||
if (isAbil >= 0) {
|
||||
this.removeVolatile('ability:' + this.battle.toID(this.m.scrambled.items[isAbil].thing));
|
||||
this.m.scrambled.abilities.splice(isAbil, 1);
|
||||
} else if ((this.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Item') >= 0) {
|
||||
const isMove = (this.m.scrambled.moves as { inSlot: string }[]).findIndex(e => e.inSlot === 'Item');
|
||||
let indexOfMove = this.baseMoveSlots.findIndex(m => this.battle.toID(this.m.scrambled.moves[isMove].thing) === m.id);
|
||||
if (indexOfMove >= 0) this.baseMoveSlots.splice(indexOfMove, 1);
|
||||
if (oldItem.id !== 'mimic') {
|
||||
indexOfMove = this.moveSlots.findIndex(m => this.battle.toID(this.m.scrambled.moves[isMove].thing) === m.id);
|
||||
}
|
||||
if (indexOfMove >= 0) this.moveSlots.splice(indexOfMove, 1);
|
||||
this.m.scrambled.moves.splice(isMove, 1);
|
||||
}
|
||||
}
|
||||
if (item.id) {
|
||||
this.battle.singleEvent('Start', item, this.itemState, this, source, effect);
|
||||
}
|
||||
if (isBMMItem) {
|
||||
if (this.battle.dex.abilities.get(item.id).exists) {
|
||||
this.m.scrambled.abilities.push({ thing: item.id, inSlot: 'Item' });
|
||||
const abileffect = 'ability:' + this.battle.toID(item.id);
|
||||
this.addVolatile(abileffect);
|
||||
this.volatiles[abileffect].inSlot = 'Item';
|
||||
} else {
|
||||
this.m.scrambled.moves.push({ thing: item.id, inSlot: 'Item' });
|
||||
const move = Dex.moves.get(item.id);
|
||||
const newMove = {
|
||||
move: move.name,
|
||||
id: move.id,
|
||||
pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
|
||||
maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
|
||||
target: move.target,
|
||||
disabled: false,
|
||||
used: false,
|
||||
};
|
||||
this.baseMoveSlots.push(newMove);
|
||||
this.moveSlots.push(newMove);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
eatItem(force, source, sourceEffect) {
|
||||
const item = sourceEffect?.effectType === 'Item' ? sourceEffect :
|
||||
this.battle.effect.effectType === 'Item' ? this.battle.effect : this.getItem();
|
||||
if (!item) return false;
|
||||
if ((!this.hp && this.battle.toID(item.name) !== 'jabocaberry' && this.battle.toID(item.name) !== 'rowapberry') ||
|
||||
!this.isActive) return false;
|
||||
|
||||
if (!sourceEffect && this.battle.effect) sourceEffect = this.battle.effect;
|
||||
if (!source && this.battle.event?.target) source = this.battle.event.target;
|
||||
// if (sourceEffect?.effectType === 'Item' && this.item !== sourceEffect.id && source === this) {
|
||||
// // if an item is telling us to eat it but we aren't holding it, we probably shouldn't eat what we are holding
|
||||
// return false;
|
||||
// }
|
||||
if (
|
||||
this.battle.runEvent('UseItem', this, null, null, Dex.items.get(item.name)) &&
|
||||
(force || this.battle.runEvent('TryEatItem', this, null, null, Dex.items.get(item.name)))
|
||||
) {
|
||||
this.battle.add('-enditem', this, Dex.items.get(item.name), '[eat]');
|
||||
|
||||
this.battle.singleEvent('Eat', Dex.items.get(item.name), this.itemState, this, source, sourceEffect);
|
||||
this.battle.runEvent('EatItem', this, source, sourceEffect, Dex.items.get(item.name));
|
||||
|
||||
if (RESTORATIVE_BERRIES.has(item.id)) {
|
||||
switch (this.pendingStaleness) {
|
||||
case 'internal':
|
||||
if (this.staleness !== 'external') this.staleness = 'internal';
|
||||
break;
|
||||
case 'external':
|
||||
this.staleness = 'external';
|
||||
break;
|
||||
}
|
||||
this.pendingStaleness = undefined;
|
||||
}
|
||||
|
||||
const isBMM = this.volatiles[item.id]?.inSlot;
|
||||
if (isBMM) {
|
||||
this.removeVolatile(item.id);
|
||||
this.m.scrambled.items.splice((this.m.scrambled.items as { thing: string, inSlot: string }[]).findIndex(e =>
|
||||
e.thing === this.battle.toID(item.name) && e.inSlot === isBMM), 1);
|
||||
if (isBMM === 'Ability') this.setAbility('No Ability');
|
||||
} else {
|
||||
this.lastItem = this.item;
|
||||
this.item = '';
|
||||
}
|
||||
this.battle.clearEffectState(this.itemState);
|
||||
this.usedItemThisTurn = true;
|
||||
this.ateBerry = true;
|
||||
this.battle.runEvent('AfterUseItem', this, null, null, Dex.items.get(item.name));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
|
||||
useItem(source, sourceEffect) {
|
||||
const item = sourceEffect?.effectType === 'Item' ? sourceEffect :
|
||||
this.battle.effect.effectType === 'Item' ? this.battle.effect : this.getItem();
|
||||
if ((!this.hp && !item.isGem) || !this.isActive) return false;
|
||||
if (!item) return false;
|
||||
|
||||
if (!sourceEffect && this.battle.effect) sourceEffect = this.battle.effect;
|
||||
if (!source && this.battle.event?.target) source = this.battle.event.target;
|
||||
// const item = this.getItem();
|
||||
// if (sourceEffect?.effectType === 'Item' && this.item !== sourceEffect.id && source === this) {
|
||||
// // if an item is telling us to eat it but we aren't holding it, we probably shouldn't eat what we are holding
|
||||
// return false;
|
||||
// }
|
||||
if (this.battle.runEvent('UseItem', this, null, null, Dex.items.get(item.name))) {
|
||||
switch (item.id) {
|
||||
case 'redcard':
|
||||
this.battle.add('-enditem', this, Dex.items.get(item.name), `[of] ${source}`);
|
||||
break;
|
||||
default:
|
||||
if (item.isGem) {
|
||||
this.battle.add('-enditem', this, Dex.items.get(item.name), '[from] gem');
|
||||
} else {
|
||||
this.battle.add('-enditem', this, Dex.items.get(item.name));
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (item.boosts) {
|
||||
this.battle.boost(item.boosts, this, source, Dex.items.get(item.name));
|
||||
}
|
||||
|
||||
this.battle.singleEvent('Use', Dex.items.get(item.name), this.itemState, this, source, sourceEffect);
|
||||
|
||||
const isBMM = this.volatiles[item.id]?.inSlot;
|
||||
if (isBMM) {
|
||||
this.removeVolatile(item.id);
|
||||
this.m.scrambled.items.splice((this.m.scrambled.items as { thing: string, inSlot: string }[]).findIndex(e =>
|
||||
e.thing === this.battle.toID(item.name) && e.inSlot === isBMM), 1);
|
||||
if (isBMM === 'Ability') this.setAbility('No Ability');
|
||||
} else {
|
||||
this.lastItem = this.item;
|
||||
this.item = '';
|
||||
}
|
||||
this.battle.clearEffectState(this.itemState);
|
||||
this.usedItemThisTurn = true;
|
||||
this.battle.runEvent('AfterUseItem', this, null, null, item);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
transformInto(pokemon, effect) {
|
||||
const species = pokemon.species;
|
||||
if (
|
||||
pokemon.fainted || this.illusion || pokemon.illusion || (pokemon.volatiles['substitute'] && this.battle.gen >= 5) ||
|
||||
(pokemon.transformed && this.battle.gen >= 2) || (this.transformed && this.battle.gen >= 5) ||
|
||||
species.name === 'Eternatus-Eternamax' ||
|
||||
(['Ogerpon', 'Terapagos'].includes(species.baseSpecies) && (this.terastallized || pokemon.terastallized)) ||
|
||||
this.terastallized === 'Stellar'
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (this.battle.dex.currentMod === 'gen1stadium' && (
|
||||
species.name === 'Ditto' ||
|
||||
(this.species.name === 'Ditto' && pokemon.moves.includes('transform'))
|
||||
)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!this.setSpecies(species, effect, true)) return false;
|
||||
|
||||
this.transformed = true;
|
||||
this.weighthg = pokemon.weighthg;
|
||||
|
||||
const types = pokemon.getTypes(true, true);
|
||||
this.setType(pokemon.volatiles['roost'] ? pokemon.volatiles['roost'].typeWas : types, true);
|
||||
this.addedType = pokemon.addedType;
|
||||
this.knownType = this.isAlly(pokemon) && pokemon.knownType;
|
||||
this.apparentType = pokemon.apparentType;
|
||||
|
||||
let statName: StatIDExceptHP;
|
||||
for (statName in this.storedStats) {
|
||||
this.storedStats[statName] = pokemon.storedStats[statName];
|
||||
if (this.modifiedStats) this.modifiedStats[statName] = pokemon.modifiedStats![statName]; // Gen 1: Copy modified stats.
|
||||
}
|
||||
this.moveSlots = [];
|
||||
this.hpType = (this.battle.gen >= 5 ? this.hpType : pokemon.hpType);
|
||||
this.hpPower = (this.battle.gen >= 5 ? this.hpPower : pokemon.hpPower);
|
||||
this.timesAttacked = pokemon.timesAttacked;
|
||||
for (const moveSlot of pokemon.moveSlots) {
|
||||
let moveName = moveSlot.move;
|
||||
if (moveSlot.id === 'hiddenpower') {
|
||||
moveName = 'Hidden Power ' + this.hpType;
|
||||
}
|
||||
this.moveSlots.push({
|
||||
move: moveName,
|
||||
id: moveSlot.id,
|
||||
pp: moveSlot.maxpp === 1 ? 1 : 5,
|
||||
maxpp: this.battle.gen >= 5 ? (moveSlot.maxpp === 1 ? 1 : 5) : moveSlot.maxpp,
|
||||
target: moveSlot.target,
|
||||
disabled: false,
|
||||
used: false,
|
||||
virtual: true,
|
||||
});
|
||||
}
|
||||
let boostName: BoostID;
|
||||
for (boostName in pokemon.boosts) {
|
||||
this.boosts[boostName] = pokemon.boosts[boostName];
|
||||
}
|
||||
if (this.battle.gen >= 6) {
|
||||
// we need to remove all of the overlapping crit volatiles before adding any of them
|
||||
const volatilesToCopy = ['dragoncheer', 'focusenergy', 'gmaxchistrike', 'laserfocus'];
|
||||
for (const volatile of volatilesToCopy) this.removeVolatile(volatile);
|
||||
for (const volatile of volatilesToCopy) {
|
||||
if (pokemon.volatiles[volatile]) {
|
||||
this.addVolatile(volatile);
|
||||
if (volatile === 'gmaxchistrike') this.volatiles[volatile].layers = pokemon.volatiles[volatile].layers;
|
||||
if (volatile === 'dragoncheer') this.volatiles[volatile].hasDragonType = pokemon.volatiles[volatile].hasDragonType;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (effect) {
|
||||
this.battle.add('-transform', this, pokemon, '[from] ' + effect.fullname);
|
||||
} else {
|
||||
this.battle.add('-transform', this, pokemon);
|
||||
}
|
||||
if (this.terastallized) {
|
||||
this.knownType = true;
|
||||
this.apparentType = this.terastallized;
|
||||
}
|
||||
if (this.battle.gen > 2) this.setAbility(pokemon.ability, this, null, true, true);
|
||||
|
||||
// Change formes based on held items (for Transform)
|
||||
// Only ever relevant in Generation 4 since Generation 3 didn't have item-based forme changes
|
||||
if (this.battle.gen === 4) {
|
||||
if (this.species.num === 487) {
|
||||
// Giratina formes
|
||||
if (this.species.name === 'Giratina' && this.item === 'griseousorb') {
|
||||
this.formeChange('Giratina-Origin');
|
||||
} else if (this.species.name === 'Giratina-Origin' && this.item !== 'griseousorb') {
|
||||
this.formeChange('Giratina');
|
||||
}
|
||||
}
|
||||
if (this.species.num === 493) {
|
||||
// Arceus formes
|
||||
const item = this.getItem();
|
||||
const targetForme = (item?.onPlate ? 'Arceus-' + item.onPlate : 'Arceus');
|
||||
if (this.species.name !== targetForme) {
|
||||
this.formeChange(targetForme);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Pokemon transformed into Ogerpon cannot Terastallize
|
||||
// restoring their ability to tera after they untransform is handled ELSEWHERE
|
||||
if (['Ogerpon', 'Terapagos'].includes(this.species.baseSpecies) && this.canTerastallize) this.canTerastallize = false;
|
||||
|
||||
for (const volatile in this.volatiles) {
|
||||
if (this.volatiles[volatile].inSlot && this.volatiles[volatile].inSlot === 'Move') {
|
||||
this.removeVolatile(volatile);
|
||||
}
|
||||
}
|
||||
|
||||
for (const volatile in pokemon.volatiles) {
|
||||
if (pokemon.volatiles[volatile].inSlot && pokemon.volatiles[volatile].inSlot === 'Move') {
|
||||
this.addVolatile(volatile);
|
||||
this.volatiles[volatile].inSlot = 'Move';
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
},
|
||||
},
|
||||
field: {
|
||||
suppressingWeather() {
|
||||
for (const pokemon of this.battle.getAllActive()) {
|
||||
const innates = Object.keys(pokemon.volatiles).filter(x => x.startsWith('ability:'));
|
||||
if (pokemon && !pokemon.ignoringAbility() &&
|
||||
(pokemon.getAbility().suppressWeather || innates.some(x => (
|
||||
this.battle.dex.abilities.get(x.replace('ability:', '')).suppressWeather
|
||||
)))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
@ -1,310 +0,0 @@
|
|||
export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = {
|
||||
piss: {
|
||||
tier: "UU",
|
||||
},
|
||||
snabterra: {
|
||||
tier: "UU",
|
||||
},
|
||||
drakkannon: {
|
||||
tier: "UU",
|
||||
},
|
||||
arsenstorm: {
|
||||
tier: "UU",
|
||||
},
|
||||
badjur: {
|
||||
tier: "UU",
|
||||
},
|
||||
vipult: {
|
||||
tier: "UU",
|
||||
},
|
||||
fettogre: {
|
||||
tier: "UU",
|
||||
},
|
||||
crystuit: {
|
||||
tier: "UU",
|
||||
},
|
||||
monmothra: {
|
||||
tier: "UU",
|
||||
},
|
||||
wizhazard: {
|
||||
tier: "UU",
|
||||
},
|
||||
jackoswarm: {
|
||||
tier: "UU",
|
||||
},
|
||||
kadraoke: {
|
||||
tier: "UU",
|
||||
},
|
||||
karmalice: {
|
||||
tier: "UU",
|
||||
},
|
||||
goblantern: {
|
||||
tier: "UU",
|
||||
},
|
||||
hippaint: {
|
||||
tier: "UU",
|
||||
},
|
||||
pinaturbo: {
|
||||
tier: "UU",
|
||||
},
|
||||
eolikopter: {
|
||||
tier: "UU",
|
||||
},
|
||||
mohawtter: {
|
||||
tier: "UU",
|
||||
},
|
||||
arachnode: {
|
||||
tier: "UU",
|
||||
},
|
||||
blobbiam: {
|
||||
tier: "UU",
|
||||
},
|
||||
florustitia: {
|
||||
tier: "UU",
|
||||
},
|
||||
primordialith: {
|
||||
tier: "UU",
|
||||
},
|
||||
faeruin: {
|
||||
tier: "UU",
|
||||
},
|
||||
versalyre: {
|
||||
tier: "UU",
|
||||
},
|
||||
capricorrie: {
|
||||
tier: "UU",
|
||||
},
|
||||
reversadusa: {
|
||||
tier: "UU",
|
||||
},
|
||||
llanfairwyrm: {
|
||||
tier: "UU",
|
||||
},
|
||||
frostengu: {
|
||||
tier: "UU",
|
||||
},
|
||||
bulionage: {
|
||||
tier: "UU",
|
||||
},
|
||||
yamateraph: {
|
||||
tier: "UU",
|
||||
},
|
||||
bugswarm: {
|
||||
tier: "UU",
|
||||
},
|
||||
freightmare: {
|
||||
tier: "UU",
|
||||
},
|
||||
brasspecter: {
|
||||
tier: "UU",
|
||||
},
|
||||
copperhead: {
|
||||
tier: "UU",
|
||||
},
|
||||
thaumaton: {
|
||||
tier: "UU",
|
||||
},
|
||||
sculptera: {
|
||||
tier: "UU",
|
||||
},
|
||||
lavalisk: {
|
||||
tier: "UU",
|
||||
},
|
||||
martorse: {
|
||||
tier: "UU",
|
||||
},
|
||||
parasike: {
|
||||
tier: "UU",
|
||||
},
|
||||
massassin: {
|
||||
tier: "UU",
|
||||
},
|
||||
searytch: {
|
||||
tier: "UU",
|
||||
},
|
||||
jokerpent: {
|
||||
tier: "UU",
|
||||
},
|
||||
socknbuskn: {
|
||||
tier: "UU",
|
||||
},
|
||||
sleetshell: {
|
||||
tier: "UU",
|
||||
},
|
||||
craggon: {
|
||||
tier: "UU",
|
||||
},
|
||||
// Meta B
|
||||
flarenheit: {
|
||||
tier: "OU",
|
||||
},
|
||||
groundead: {
|
||||
tier: "OU",
|
||||
},
|
||||
actaniathan: {
|
||||
tier: "OU",
|
||||
},
|
||||
deadward: {
|
||||
tier: "OU",
|
||||
},
|
||||
obaki: {
|
||||
tier: "OU",
|
||||
},
|
||||
sylravage: {
|
||||
tier: "OU",
|
||||
},
|
||||
twinkaton: {
|
||||
tier: "OU",
|
||||
},
|
||||
fausteil: {
|
||||
tier: "OU",
|
||||
},
|
||||
geoporka: {
|
||||
tier: "OU",
|
||||
},
|
||||
seaode: {
|
||||
tier: "OU",
|
||||
},
|
||||
plasmage: {
|
||||
tier: "OU",
|
||||
},
|
||||
porcupyre: {
|
||||
tier: "OU",
|
||||
},
|
||||
bellolysk: {
|
||||
tier: "OU",
|
||||
},
|
||||
tryonite: {
|
||||
tier: "OU",
|
||||
},
|
||||
scarachnid: {
|
||||
tier: "OU",
|
||||
},
|
||||
geigeramp: {
|
||||
tier: "OU",
|
||||
},
|
||||
maldractice: {
|
||||
tier: "OU",
|
||||
},
|
||||
serpvoltidae: {
|
||||
tier: "OU",
|
||||
},
|
||||
sheepquake: {
|
||||
tier: "OU",
|
||||
},
|
||||
bufferfly: {
|
||||
tier: "OU",
|
||||
},
|
||||
dastard: {
|
||||
tier: "OU",
|
||||
},
|
||||
cottentration: {
|
||||
tier: "OU",
|
||||
},
|
||||
sorrowcean: {
|
||||
tier: "OU",
|
||||
},
|
||||
psyllapse: {
|
||||
tier: "OU",
|
||||
},
|
||||
haarstorm: {
|
||||
tier: "OU",
|
||||
},
|
||||
borealis: {
|
||||
tier: "OU",
|
||||
},
|
||||
bazhigangquan: {
|
||||
tier: "OU",
|
||||
},
|
||||
leechmonner: {
|
||||
tier: "OU",
|
||||
},
|
||||
ironcrest: {
|
||||
tier: "OU",
|
||||
},
|
||||
odonata: {
|
||||
tier: "OU",
|
||||
},
|
||||
hebicikuga: {
|
||||
tier: "OU",
|
||||
},
|
||||
devestial: {
|
||||
tier: "OU",
|
||||
},
|
||||
lundicare: {
|
||||
tier: "OU",
|
||||
},
|
||||
// Meta C
|
||||
lyvamp: {
|
||||
tier: "RU",
|
||||
},
|
||||
treatmint: {
|
||||
tier: "RU",
|
||||
},
|
||||
turvarpega: {
|
||||
tier: "RU",
|
||||
},
|
||||
goodjur: {
|
||||
tier: "RU",
|
||||
},
|
||||
liftaton: {
|
||||
tier: "RU",
|
||||
},
|
||||
triceracotta: {
|
||||
tier: "RU",
|
||||
},
|
||||
woolverine: {
|
||||
tier: "RU",
|
||||
},
|
||||
combustoad: {
|
||||
tier: "RU",
|
||||
},
|
||||
hearthind: {
|
||||
tier: "RU",
|
||||
},
|
||||
koiryu: {
|
||||
tier: "RU",
|
||||
},
|
||||
pestiligy: {
|
||||
tier: "RU",
|
||||
},
|
||||
saxum: {
|
||||
tier: "RU",
|
||||
},
|
||||
sascratch: {
|
||||
tier: "RU",
|
||||
},
|
||||
guttergar: {
|
||||
tier: "RU",
|
||||
},
|
||||
rakasa: {
|
||||
tier: "RU",
|
||||
},
|
||||
thermostatic: {
|
||||
tier: "RU",
|
||||
},
|
||||
formaldehydra: {
|
||||
tier: "RU",
|
||||
},
|
||||
strumorthio: {
|
||||
tier: "RU",
|
||||
},
|
||||
ironmike: {
|
||||
tier: "RU",
|
||||
},
|
||||
whalestro: {
|
||||
tier: "RU",
|
||||
},
|
||||
urslag: {
|
||||
tier: "RU",
|
||||
},
|
||||
centaghoul: {
|
||||
tier: "RU",
|
||||
},
|
||||
noirwark: {
|
||||
tier: "RU",
|
||||
},
|
||||
metarachne: {
|
||||
tier: "RU",
|
||||
},
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,26 +0,0 @@
|
|||
export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
|
||||
meditate: {
|
||||
inherit: true,
|
||||
isNonstandard: null,
|
||||
},
|
||||
dragonrage: {
|
||||
inherit: true,
|
||||
isNonstandard: null,
|
||||
},
|
||||
boneclub: {
|
||||
inherit: true,
|
||||
isNonstandard: null,
|
||||
},
|
||||
powershift: {
|
||||
inherit: true,
|
||||
isNonstandard: null,
|
||||
},
|
||||
blazingtorque: {
|
||||
inherit: true,
|
||||
isNonstandard: null,
|
||||
},
|
||||
camouflage: {
|
||||
inherit: true,
|
||||
isNonstandard: null,
|
||||
},
|
||||
};
|
||||
|
|
@ -1,926 +0,0 @@
|
|||
export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = {
|
||||
piss: {
|
||||
num: 9001,
|
||||
name: "Piss",
|
||||
types: ["Normal"],
|
||||
baseStats: { hp: 70, atk: 95, def: 60, spa: 50, spd: 60, spe: 95 },
|
||||
abilities: { 0: "Magic Guard" },
|
||||
weightkg: 382,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
snabterra: {
|
||||
num: 9002,
|
||||
name: "Snabterra",
|
||||
types: ["Bug", "Ground"],
|
||||
baseStats: { hp: 85, atk: 110, def: 85, spa: 40, spd: 80, spe: 85 },
|
||||
abilities: { 0: "Compound Eyes" },
|
||||
weightkg: 600,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
drakkannon: {
|
||||
num: 9003,
|
||||
name: "Drakkannon",
|
||||
types: ["Fighting", "Dragon"],
|
||||
baseStats: { hp: 80, atk: 50, def: 95, spa: 100, spd: 105, spe: 73 },
|
||||
abilities: { 0: "Mega Launcher" },
|
||||
weightkg: 59,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
arsenstorm: {
|
||||
num: 9004,
|
||||
name: "Arsenstorm",
|
||||
types: ["Poison", "Ground"],
|
||||
baseStats: { hp: 110, atk: 50, def: 65, spa: 80, spd: 90, spe: 55 },
|
||||
abilities: { 0: "Neutralizing Gas", H: "Levitate" },
|
||||
weightkg: 15,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
badjur: {
|
||||
num: 9005,
|
||||
name: "Badjur",
|
||||
types: ["Normal"],
|
||||
baseStats: { hp: 85, atk: 100, def: 75, spa: 60, spd: 75, spe: 80 },
|
||||
abilities: { 0: "Poison Heal" },
|
||||
weightkg: 16,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
vipult: {
|
||||
num: 9006,
|
||||
name: "Vipult",
|
||||
types: ["Poison", "Dark"],
|
||||
baseStats: { hp: 100, atk: 65, def: 70, spa: 100, spd: 100, spe: 70 },
|
||||
abilities: { 0: "Intimidate" },
|
||||
weightkg: 23,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
fettogre: {
|
||||
num: 9007,
|
||||
name: "Fettogre",
|
||||
types: ["Ghost", "Fighting"],
|
||||
baseStats: { hp: 70, atk: 45, def: 140, spa: 45, spd: 80, spe: 55 },
|
||||
abilities: { 0: "Immunity", H: "Oblivious" },
|
||||
weightkg: 200,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
crystuit: {
|
||||
num: 9008,
|
||||
name: "Crystuit",
|
||||
types: ["Rock", "Electric"],
|
||||
baseStats: { hp: 70, atk: 50, def: 80, spa: 105, spd: 70, spe: 110 },
|
||||
abilities: { 0: "Sturdy", H: "Levitate" },
|
||||
weightkg: 420.6,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
monmothra: {
|
||||
num: 9009,
|
||||
name: "Mon Mothra",
|
||||
types: ["Fairy", "Bug"],
|
||||
baseStats: { hp: 80, atk: 50, def: 70, spa: 100, spd: 70, spe: 90 },
|
||||
abilities: { 0: "Fluffy", H: "Tinted Lens" },
|
||||
weightkg: 50,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
wizhazard: {
|
||||
num: 9010,
|
||||
name: "Wizhazard",
|
||||
types: ["Psychic", "Steel"],
|
||||
baseStats: { hp: 95, atk: 40, def: 90, spa: 100, spd: 70, spe: 60 },
|
||||
abilities: { 0: "Magic Bounce", H: "Battle Armor" },
|
||||
weightkg: 69,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
jackoswarm: {
|
||||
num: 9011,
|
||||
name: "Jack-o-swarm",
|
||||
types: ["Steel", "Flying"],
|
||||
baseStats: { hp: 90, atk: 50, def: 95, spa: 70, spd: 90, spe: 70 },
|
||||
abilities: { 0: "Pickpocket", H: "Rough Skin" },
|
||||
weightkg: 74.8,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
kadraoke: {
|
||||
num: 9012,
|
||||
name: "Kadraoke",
|
||||
types: ["Psychic", "Dragon"],
|
||||
baseStats: { hp: 90, atk: 30, def: 80, spa: 85, spd: 100, spe: 85 },
|
||||
abilities: { 0: "Punk Rock" },
|
||||
weightkg: 19.7,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
karmalice: {
|
||||
num: 9013,
|
||||
name: "Karmalice",
|
||||
types: ["Ice", "Electric"],
|
||||
baseStats: { hp: 70, atk: 55, def: 40, spa: 105, spd: 55, spe: 111 },
|
||||
abilities: { 0: "Refrigerate" },
|
||||
weightkg: 690,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
goblantern: {
|
||||
num: 9014,
|
||||
name: "Goblantern",
|
||||
types: ["Fire", "Grass"],
|
||||
baseStats: { hp: 90, atk: 40, def: 80, spa: 100, spd: 80, spe: 77 },
|
||||
abilities: { 0: "Prankster" },
|
||||
weightkg: 3,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
hippaint: {
|
||||
num: 9015,
|
||||
name: "Hippaint",
|
||||
types: ["Water", "Ground"],
|
||||
baseStats: { hp: 70, atk: 40, def: 70, spa: 110, spd: 85, spe: 80 },
|
||||
abilities: { 0: "Pastel Veil" },
|
||||
weightkg: 90,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
pinaturbo: {
|
||||
num: 9016,
|
||||
name: "Pinaturbo",
|
||||
types: ["Fire"],
|
||||
baseStats: { hp: 70, atk: 70, def: 60, spa: 100, spd: 95, spe: 115 },
|
||||
abilities: { 0: "Mold Breaker", H: "Regenerator" },
|
||||
weightkg: 126,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
eolikopter: {
|
||||
num: 9017,
|
||||
name: "Eolikopter",
|
||||
types: ["Flying", "Electric"],
|
||||
baseStats: { hp: 90, atk: 50, def: 80, spa: 100, spd: 70, spe: 110 },
|
||||
abilities: { 0: "Cloud Nine", H: "Static" },
|
||||
weightkg: 400,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
mohawtter: {
|
||||
num: 9018,
|
||||
name: "Mohawtter",
|
||||
types: ["Water", "Grass"],
|
||||
baseStats: { hp: 85, atk: 50, def: 70, spa: 70, spd: 110, spe: 55 },
|
||||
abilities: { 0: "Tablets of Ruin", H: "Hydration" },
|
||||
weightkg: 32,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
arachnode: {
|
||||
num: 9019,
|
||||
name: "Arachnode",
|
||||
types: ["Electric"],
|
||||
baseStats: { hp: 105, atk: 30, def: 75, spa: 85, spd: 100, spe: 60 },
|
||||
abilities: { 0: "Clear Body", H: "Thick Fat" },
|
||||
weightkg: 61.5,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
blobbiam: {
|
||||
num: 9020,
|
||||
name: "Blobbiam",
|
||||
types: ["Water", "Fairy"],
|
||||
baseStats: { hp: 95, atk: 100, def: 110, spa: 20, spd: 80, spe: 75 },
|
||||
abilities: { 0: "Volt Absorb" },
|
||||
weightkg: 12,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
florustitia: {
|
||||
num: 9021,
|
||||
name: "Florustitia",
|
||||
types: ["Grass", "Fighting"],
|
||||
baseStats: { hp: 70, atk: 85, def: 60, spa: 40, spd: 95, spe: 100 },
|
||||
abilities: { 0: "Sharpness", H: "Grassy Surge" },
|
||||
weightkg: 110,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
primordialith: {
|
||||
num: 9022,
|
||||
name: "Primordialith",
|
||||
types: ["Rock"],
|
||||
baseStats: { hp: 100, atk: 100, def: 100, spa: 35, spd: 90, spe: 30 },
|
||||
abilities: { 0: "Sand Stream", H: "Vital Spirit" },
|
||||
weightkg: 90,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
faeruin: {
|
||||
num: 9023,
|
||||
name: "Faeruin",
|
||||
types: ["Ghost", "Fairy"],
|
||||
baseStats: { hp: 90, atk: 96, def: 70, spa: 40, spd: 80, spe: 93 },
|
||||
abilities: { 0: "Prankster", H: "Wandering Spirit" },
|
||||
weightkg: 33,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
versalyre: {
|
||||
num: 9024,
|
||||
name: "Versalyre",
|
||||
types: ["Flying"],
|
||||
baseStats: { hp: 70, atk: 110, def: 65, spa: 30, spd: 70, spe: 90 },
|
||||
abilities: { 0: "Protean" },
|
||||
weightkg: 2,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
capricorrie: {
|
||||
num: 9025,
|
||||
name: "Capricorrie",
|
||||
types: ["Ice", "Ground"],
|
||||
baseStats: { hp: 100, atk: 110, def: 80, spa: 50, spd: 70, spe: 90 },
|
||||
abilities: { 0: "Snow Warning", H: "Vital Spirit" },
|
||||
weightkg: 146,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
reversadusa: {
|
||||
num: 9026,
|
||||
name: "Reversadusa",
|
||||
types: ["Psychic", "Dark"],
|
||||
baseStats: { hp: 90, atk: 90, def: 80, spa: 70, spd: 70, spe: 95 },
|
||||
abilities: { 0: "Contrary" },
|
||||
weightkg: 55.2,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
llanfairwyrm: {
|
||||
num: 9027,
|
||||
name: "Llanfairwyrm",
|
||||
types: ["Dragon"],
|
||||
baseStats: { hp: 85, atk: 120, def: 100, spa: 55, spd: 90, spe: 70 },
|
||||
abilities: { 0: "Rough Skin" },
|
||||
weightkg: 600,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
frostengu: {
|
||||
num: 9028,
|
||||
name: "Frostengu",
|
||||
types: ["Fighting", "Ice"],
|
||||
baseStats: { hp: 50, atk: 110, def: 50, spa: 110, spd: 50, spe: 87 },
|
||||
abilities: { 0: "No Guard" },
|
||||
weightkg: 68,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
bulionage: {
|
||||
num: 9029,
|
||||
name: "Bulionage",
|
||||
types: ["Dark", "Water"],
|
||||
baseStats: { hp: 95, atk: 90, def: 85, spa: 40, spd: 120, spe: 50 },
|
||||
abilities: { 0: "Strong Jaw", 1: "Thermal Exchange", H: "White Smoke" },
|
||||
weightkg: 300,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
yamateraph: {
|
||||
num: 9030,
|
||||
name: "Yamateraph",
|
||||
types: ["Normal", "Fairy"],
|
||||
baseStats: { hp: 90, atk: 110, def: 80, spa: 15, spd: 80, spe: 105 },
|
||||
abilities: { 0: "Psychic Surge", H: "Vital Spirit" },
|
||||
weightkg: 255,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
bugswarm: {
|
||||
num: 9031,
|
||||
name: "Bugswarm",
|
||||
types: ["Fire", "Bug"],
|
||||
baseStats: { hp: 100, atk: 90, def: 70, spa: 70, spd: 70, spe: 60 },
|
||||
abilities: { 0: "Triage" },
|
||||
weightkg: 420,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
freightmare: {
|
||||
num: 9032,
|
||||
name: "Freightmare",
|
||||
types: ["Ghost", "Steel"],
|
||||
baseStats: { hp: 100, atk: 40, def: 80, spa: 105, spd: 85, spe: 74 },
|
||||
abilities: { 0: "Sand Rush", H: "Steam Engine" },
|
||||
weightkg: 720,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
brasspecter: {
|
||||
num: 9033,
|
||||
name: "Brasspecter",
|
||||
types: ["Steel", "Ghost"],
|
||||
baseStats: { hp: 110, atk: 95, def: 100, spa: 40, spd: 95, spe: 35 },
|
||||
abilities: { 0: "Tough Claws" },
|
||||
weightkg: 40,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
copperhead: {
|
||||
num: 9034,
|
||||
name: "Copperhead",
|
||||
types: ["Ground", "Steel"],
|
||||
baseStats: { hp: 85, atk: 80, def: 100, spa: 50, spd: 90, spe: 50 },
|
||||
abilities: { 0: "Water Absorb" },
|
||||
weightkg: 101.9,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
thaumaton: {
|
||||
num: 9035,
|
||||
name: "Thaumaton",
|
||||
types: ["Poison", "Steel"],
|
||||
baseStats: { hp: 95, atk: 70, def: 70, spa: 100, spd: 100, spe: 75 },
|
||||
abilities: { 0: "Unburden", H: "Flash Fire" },
|
||||
weightkg: 666,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
sculptera: {
|
||||
num: 9036,
|
||||
name: "Sculptera",
|
||||
types: ["Rock", "Dragon"],
|
||||
baseStats: { hp: 100, atk: 105, def: 70, spa: 40, spd: 85, spe: 85 },
|
||||
abilities: { 0: "Skill Link", H: "Defiant" },
|
||||
weightkg: 729,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
lavalisk: {
|
||||
num: 9037,
|
||||
name: "Lavalisk",
|
||||
types: ["Poison", "Fire"],
|
||||
baseStats: { hp: 100, atk: 105, def: 80, spa: 40, spd: 80, spe: 76 },
|
||||
abilities: { 0: "Mold Breaker" },
|
||||
weightkg: 150,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
martorse: {
|
||||
num: 9038,
|
||||
name: "Martorse",
|
||||
types: ["Ground", "Fire"],
|
||||
baseStats: { hp: 75, atk: 90, def: 70, spa: 35, spd: 90, spe: 105 },
|
||||
abilities: { 0: "Trace", H: "Prankster" },
|
||||
weightkg: 173,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
parasike: {
|
||||
num: 9039,
|
||||
name: "Parasike",
|
||||
types: ["Psychic", "Bug"],
|
||||
baseStats: { hp: 50, atk: 90, def: 75, spa: 50, spd: 55, spe: 109 },
|
||||
abilities: { 0: "Strong Jaw", H: "Tinted Lens" },
|
||||
weightkg: 0.8,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
massassin: {
|
||||
num: 9040,
|
||||
name: "Massassin",
|
||||
types: ["Fighting", "Dark"],
|
||||
baseStats: { hp: 110, atk: 110, def: 80, spa: 50, spd: 80, spe: 30 },
|
||||
abilities: { 0: "Quark Drive" },
|
||||
weightkg: 888,
|
||||
eggGroups: ["Undiscovered"],
|
||||
tags: ["Paradox"],
|
||||
},
|
||||
searytch: {
|
||||
num: 9041,
|
||||
name: "Searytch",
|
||||
types: ["Fairy", "Fire"],
|
||||
baseStats: { hp: 85, atk: 30, def: 75, spa: 105, spd: 100, spe: 60 },
|
||||
abilities: { 0: "Stamina" },
|
||||
weightkg: 42,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
jokerpent: {
|
||||
num: 9042,
|
||||
name: "Jokerpent",
|
||||
types: ["Dragon", "Poison"],
|
||||
baseStats: { hp: 100, atk: 70, def: 100, spa: 30, spd: 75, spe: 20 },
|
||||
abilities: { 0: "Unaware" },
|
||||
weightkg: 67,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
socknbuskn: {
|
||||
num: 9043,
|
||||
name: "Socknbusk\u2019n",
|
||||
types: ["Normal", "Fighting"],
|
||||
baseStats: { hp: 95, atk: 95, def: 75, spa: 40, spd: 70, spe: 110 },
|
||||
abilities: { 0: "Scrappy" },
|
||||
weightkg: 65,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
sleetshell: {
|
||||
num: 8045,
|
||||
name: "Sleet Shell",
|
||||
types: ["Ice", "Steel"],
|
||||
baseStats: { hp: 83, atk: 95, def: 107, spa: 47, spd: 71, spe: 103 },
|
||||
abilities: { 0: "Protosynthesis" },
|
||||
weightkg: 674.5,
|
||||
eggGroups: ["Undiscovered"],
|
||||
tags: ["Paradox"],
|
||||
},
|
||||
craggon: {
|
||||
num: 9044,
|
||||
name: "Craggon",
|
||||
types: ["Dragon", "Ground"],
|
||||
baseStats: { hp: 120, atk: 81, def: 81, spa: 82, spd: 81, spe: 100 },
|
||||
abilities: { 0: "Natural Cure", H: "Emergency Exit" },
|
||||
weightkg: 404,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
// Meta B
|
||||
flarenheit: {
|
||||
num: 9045,
|
||||
name: "Flarenheit",
|
||||
types: ["Ice", "Fire"],
|
||||
baseStats: { hp: 55, atk: 110, def: 50, spa: 70, spd: 40, spe: 130 },
|
||||
abilities: { 0: "Motor Drive", H: "Surge Surfer" },
|
||||
weightkg: 45.1,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
groundead: {
|
||||
num: 9046,
|
||||
name: "Groundead",
|
||||
types: ["Ground", "Ghost"],
|
||||
baseStats: { hp: 80, atk: 115, def: 110, spa: 50, spd: 80, spe: 50 },
|
||||
abilities: { 0: "Misty Surge", 1: "Solid Rock", H: "Earth Eater" },
|
||||
weightkg: 0.2,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
actaniathan: {
|
||||
num: 9047,
|
||||
name: "Actaniathan",
|
||||
types: ["Water", "Steel"],
|
||||
baseStats: { hp: 100, atk: 40, def: 80, spa: 105, spd: 105, spe: 50 },
|
||||
abilities: { 0: "Torrent", H: "Lightning Rod" },
|
||||
weightkg: 800,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
deadward: {
|
||||
num: 9048,
|
||||
name: "Deadward",
|
||||
types: ["Dark", "Flying"],
|
||||
baseStats: { hp: 90, atk: 100, def: 85, spa: 40, spd: 90, spe: 110 },
|
||||
abilities: { 0: "Filter", H: "Intimidate" },
|
||||
weightkg: 66.6,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
obaki: {
|
||||
num: 9049,
|
||||
name: "Obaki",
|
||||
types: ["Fighting", "Ghost"],
|
||||
baseStats: { hp: 85, atk: 75, def: 65, spa: 125, spd: 105, spe: 55 },
|
||||
abilities: { 0: "Purifying Salt" },
|
||||
weightkg: 40,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
sylravage: {
|
||||
num: 9050,
|
||||
name: "Sylravage",
|
||||
types: ["Grass", "Fighting"],
|
||||
baseStats: { hp: 103, atk: 110, def: 86, spa: 41, spd: 80, spe: 80 },
|
||||
abilities: { 0: "Defiant", H: "Grassy Surge" },
|
||||
weightkg: 72,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
twinkaton: {
|
||||
num: 9051,
|
||||
name: "Twinkaton",
|
||||
types: ["Fairy", "Steel"],
|
||||
baseStats: { hp: 90, atk: 75, def: 75, spa: 75, spd: 120, spe: 45 },
|
||||
abilities: { 0: "Mold Breaker", H: "Filter" },
|
||||
weightkg: 90,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
fausteil: {
|
||||
num: 9052,
|
||||
name: "Fausteil",
|
||||
types: ["Fire", "Flying"],
|
||||
baseStats: { hp: 110, atk: 90, def: 80, spa: 35, spd: 110, spe: 50 },
|
||||
abilities: { 0: "Flame Body" },
|
||||
weightkg: 26,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
geoporka: {
|
||||
num: 9053,
|
||||
name: "Geoporka",
|
||||
types: ["Grass", "Poison"],
|
||||
baseStats: { hp: 100, atk: 85, def: 80, spa: 70, spd: 95, spe: 45 },
|
||||
abilities: { 0: "Thick Fat" },
|
||||
weightkg: 38,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
seaode: {
|
||||
num: 9054,
|
||||
name: "Seaode",
|
||||
types: ["Rock", "Water"],
|
||||
baseStats: { hp: 70, atk: 110, def: 100, spa: 40, spd: 70, spe: 95 },
|
||||
abilities: { 0: "Rock Head" },
|
||||
weightkg: 121,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
plasmage: {
|
||||
num: 9055,
|
||||
name: "Plasmage",
|
||||
types: ["Psychic", "Electric"],
|
||||
baseStats: { hp: 100, atk: 55, def: 70, spa: 105, spd: 75, spe: 115 },
|
||||
abilities: { 0: "Magician" },
|
||||
weightkg: 85,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
porcupyre: {
|
||||
num: 9056,
|
||||
name: "Porcupyre",
|
||||
types: ["Dark", "Fire"],
|
||||
baseStats: { hp: 90, atk: 90, def: 125, spa: 40, spd: 80, spe: 70 },
|
||||
abilities: { 0: "Bulletproof", H: "Rough Skin" },
|
||||
weightkg: 66.6,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
bellolysk: {
|
||||
num: 9057,
|
||||
name: "Bellolysk",
|
||||
types: ["Dragon", "Steel"],
|
||||
baseStats: { hp: 100, atk: 90, def: 85, spa: 105, spd: 75, spe: 70 },
|
||||
abilities: { 0: "Magic Guard", H: "Multiscale" },
|
||||
weightkg: 999,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
tryonite: {
|
||||
num: 9058,
|
||||
name: "Tryonite",
|
||||
types: ["Bug", "Ground"],
|
||||
baseStats: { hp: 75, atk: 75, def: 90, spa: 100, spd: 105, spe: 90 },
|
||||
abilities: { 0: "Drought", H: "Sturdy" },
|
||||
weightkg: 7,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
scarachnid: {
|
||||
num: 9059,
|
||||
name: "Scarachnid",
|
||||
types: ["Ghost", "Bug"],
|
||||
baseStats: { hp: 81, atk: 112, def: 70, spa: 31, spd: 70, spe: 121 },
|
||||
abilities: { 0: "Regenerator", H: "Perish Body" },
|
||||
weightkg: 14,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
geigeramp: {
|
||||
num: 9060,
|
||||
name: "Geigeramp",
|
||||
types: ["Poison", "Electric"],
|
||||
baseStats: { hp: 100, atk: 50, def: 100, spa: 100, spd: 100, spe: 75 },
|
||||
abilities: { 0: "Levitate" },
|
||||
weightkg: 20,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
maldractice: {
|
||||
num: 9061,
|
||||
name: "Maldractice",
|
||||
types: ["Dragon", "Poison"],
|
||||
baseStats: { hp: 110, atk: 100, def: 60, spa: 20, spd: 115, spe: 40 },
|
||||
abilities: { 0: "Own Tempo", H: "Corrosion" },
|
||||
weightkg: 67,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
serpvoltidae: {
|
||||
num: 9062,
|
||||
name: "Serpvoltidae",
|
||||
types: ["Electric", "Ground"],
|
||||
baseStats: { hp: 110, atk: 45, def: 90, spa: 115, spd: 90, spe: 45 },
|
||||
abilities: { 0: "Teravolt", 1: "Shed Skin", H: "Natural Cure" },
|
||||
weightkg: 69,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
sheepquake: {
|
||||
num: 9063,
|
||||
name: "Sheepquake",
|
||||
types: ["Normal", "Ground"],
|
||||
baseStats: { hp: 110, atk: 30, def: 95, spa: 85, spd: 95, spe: 95 },
|
||||
abilities: { 0: "Sheer Force" },
|
||||
weightkg: 126,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
bufferfly: {
|
||||
num: 9064,
|
||||
name: "Bufferfly",
|
||||
types: ["Fighting", "Bug"],
|
||||
baseStats: { hp: 105, atk: 110, def: 70, spa: 20, spd: 90, spe: 65 },
|
||||
abilities: { 0: "Magic Bounce" },
|
||||
weightkg: 121,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
dastard: {
|
||||
num: 9065,
|
||||
name: "Dastard",
|
||||
types: ["Fairy", "Poison"],
|
||||
baseStats: { hp: 80, atk: 90, def: 110, spa: 100, spd: 80, spe: 100 },
|
||||
abilities: { 0: "Competitive" },
|
||||
weightkg: 55,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
cottentration: {
|
||||
num: 9066,
|
||||
name: "Cottentration",
|
||||
types: ["Grass", "Fighting"],
|
||||
baseStats: { hp: 50, atk: 50, def: 50, spa: 110, spd: 110, spe: 110 },
|
||||
abilities: { 0: "Chlorophyll" },
|
||||
weightkg: 0.8,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
sorrowcean: {
|
||||
num: 9067,
|
||||
name: "Sorrowcean",
|
||||
types: ["Water", "Ghost"],
|
||||
baseStats: { hp: 85, atk: 30, def: 85, spa: 100, spd: 70, spe: 108 },
|
||||
abilities: { 0: "Flare Boost", H: "Illusion" },
|
||||
weightkg: 15,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
psyllapse: {
|
||||
num: 9068,
|
||||
name: "Psyllapse",
|
||||
types: ["Psychic", "Normal"],
|
||||
baseStats: { hp: 100, atk: 95, def: 85, spa: 95, spd: 85, spe: 60 },
|
||||
abilities: { 0: "Prankster" },
|
||||
weightkg: 70,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
haarstorm: {
|
||||
num: 9069,
|
||||
name: "Haarstorm",
|
||||
types: ["Ghost", "Electric"],
|
||||
baseStats: { hp: 80, atk: 90, def: 75, spa: 30, spd: 115, spe: 105 },
|
||||
abilities: { 0: "Neutralizing Gas", H: "Natural Cure" },
|
||||
weightkg: 9,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
borealis: {
|
||||
num: 9070,
|
||||
name: "Borealis",
|
||||
types: ["Ice", "Flying"],
|
||||
baseStats: { hp: 95, atk: 75, def: 90, spa: 95, spd: 90, spe: 131 },
|
||||
abilities: { 0: "Supreme Overlord" },
|
||||
weightkg: 63,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
bazhigangquan: {
|
||||
num: 9071,
|
||||
name: "Bazhigangquan",
|
||||
types: ["Fighting", "Steel"],
|
||||
baseStats: { hp: 101, atk: 104, def: 100, spa: 35, spd: 61, spe: 68 },
|
||||
abilities: { 0: "Technician" },
|
||||
weightkg: 219,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
leechmonner: {
|
||||
num: 9072,
|
||||
name: "Leechmonner",
|
||||
types: ["Water", "Bug"],
|
||||
baseStats: { hp: 105, atk: 115, def: 70, spa: 40, spd: 110, spe: 65 },
|
||||
abilities: { 0: "Drizzle", H: "Water Veil" },
|
||||
weightkg: 922,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
ironcrest: {
|
||||
num: 9073,
|
||||
name: "Iron Crest",
|
||||
types: ["Flying", "Fighting"],
|
||||
baseStats: { hp: 72, atk: 96, def: 78, spa: 114, spd: 72, spe: 98 },
|
||||
abilities: { 0: "Quark Drive" },
|
||||
weightkg: 1.9,
|
||||
eggGroups: ["Undiscovered"],
|
||||
tags: ["Paradox"],
|
||||
},
|
||||
odonata: {
|
||||
num: 9074,
|
||||
name: "Odonata",
|
||||
types: ["Flying", "Dragon"],
|
||||
baseStats: { hp: 125, atk: 100, def: 80, spa: 60, spd: 80, spe: 75 },
|
||||
abilities: { 0: "Shield Dust", 1: "Aerilate", H: "Tough Claws" },
|
||||
weightkg: 45,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
hebicikuga: {
|
||||
num: 9075,
|
||||
name: "Hebicikuga",
|
||||
types: ["Bug", "Dragon"],
|
||||
baseStats: { hp: 85, atk: 115, def: 75, spa: 80, spd: 95, spe: 115 },
|
||||
abilities: { 0: "Soul-Heart", H: "Technician" },
|
||||
weightkg: 382.5,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
devestial: {
|
||||
num: 9076,
|
||||
name: "Devestial",
|
||||
types: ["Fairy", "Ground"],
|
||||
baseStats: { hp: 110, atk: 105, def: 100, spa: 115, spd: 90, spe: 80 },
|
||||
abilities: { 0: "Cud Chew" },
|
||||
weightkg: 340,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
lundicare: {
|
||||
num: 9077,
|
||||
name: "Lundicare",
|
||||
types: ["Normal", "Fairy"],
|
||||
baseStats: { hp: 101, atk: 81, def: 103, spa: 101, spd: 109, spe: 111 },
|
||||
abilities: { 0: "Prism Armor", H: "Trace" },
|
||||
weightkg: 606,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
// Meta C
|
||||
lyvamp: {
|
||||
num: 9078,
|
||||
name: "Lyvamp",
|
||||
types: ["Electric", "Flying"],
|
||||
baseStats: { hp: 96, atk: 100, def: 70, spa: 41, spd: 70, spe: 91 },
|
||||
abilities: { 0: "Regenerator", H: "Insomnia" },
|
||||
weightkg: 189,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
treatmint: {
|
||||
num: 9079,
|
||||
name: "Treatmint",
|
||||
types: ["Grass", "Poison"],
|
||||
baseStats: { hp: 100, atk: 25, def: 90, spa: 100, spd: 70, spe: 45 },
|
||||
abilities: { 0: "Filter", H: "Natural Cure" },
|
||||
weightkg: 8.4,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
turvarpega: {
|
||||
num: 9080,
|
||||
name: "Turvarpega",
|
||||
types: ["Ground", "Flying"],
|
||||
baseStats: { hp: 100, atk: 100, def: 85, spa: 30, spd: 70, spe: 55 },
|
||||
abilities: { 0: "Rock Head", H: "Big Pecks" },
|
||||
weightkg: 680,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
goodjur: {
|
||||
num: 9081,
|
||||
name: "Goodjur",
|
||||
types: ["Psychic", "Fighting"],
|
||||
baseStats: { hp: 70, atk: 25, def: 60, spa: 120, spd: 70, spe: 90 },
|
||||
abilities: { 0: "Natural Cure" },
|
||||
weightkg: 42.5,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
liftaton: {
|
||||
num: 9082,
|
||||
name: "Liftaton",
|
||||
types: ["Steel"],
|
||||
baseStats: { hp: 110, atk: 90, def: 80, spa: 80, spd: 85, spe: 20 },
|
||||
abilities: { 0: "Mold Breaker" },
|
||||
weightkg: 180,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
triceracotta: {
|
||||
num: 9083,
|
||||
name: "Triceracotta",
|
||||
types: ["Ground", "Ghost"],
|
||||
baseStats: { hp: 84, atk: 111, def: 95, spa: 35, spd: 75, spe: 84 },
|
||||
abilities: { 0: "Flash Fire", H: "Technician" },
|
||||
weightkg: 100,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
woolverine: {
|
||||
num: 9084,
|
||||
name: "Woolverine",
|
||||
types: ["Dark", "Fairy"],
|
||||
baseStats: { hp: 70, atk: 120, def: 70, spa: 40, spd: 70, spe: 70 },
|
||||
abilities: { 0: "Lingering Aroma", H: "Fluffy" },
|
||||
weightkg: 40,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
combustoad: {
|
||||
num: 9085,
|
||||
name: "Combustoad",
|
||||
types: ["Fire", "Ground"],
|
||||
baseStats: { hp: 70, atk: 95, def: 70, spa: 63, spd: 70, spe: 108 },
|
||||
abilities: { 0: "Neutralizing Gas" },
|
||||
weightkg: 2,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
hearthind: {
|
||||
num: 9086,
|
||||
name: "Hearthind",
|
||||
types: ["Fire", "Fighting"],
|
||||
baseStats: { hp: 71, atk: 93, def: 68, spa: 20, spd: 66, spe: 122 },
|
||||
abilities: { 0: "Grassy Surge" },
|
||||
weightkg: 11.3,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
koiryu: {
|
||||
num: 9087,
|
||||
name: "Koiryu",
|
||||
types: ["Water", "Dragon"],
|
||||
baseStats: { hp: 90, atk: 25, def: 60, spa: 100, spd: 90, spe: 60 },
|
||||
abilities: { 0: "Multiscale", 1: "Water Veil", H: "Torrent" },
|
||||
weightkg: 829.7,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
pestiligy: {
|
||||
num: 9088,
|
||||
name: "Pestiligy",
|
||||
types: ["Poison", "Ghost"],
|
||||
baseStats: { hp: 105, atk: 15, def: 107, spa: 77, spd: 96, spe: 61 },
|
||||
abilities: { 0: "Liquid Ooze", H: "Sheer Force" },
|
||||
weightkg: 11.3,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
saxum: {
|
||||
num: 9089,
|
||||
name: "Saxum",
|
||||
types: ["Rock", "Ground"],
|
||||
baseStats: { hp: 70, atk: 100, def: 70, spa: 100, spd: 70, spe: 65 },
|
||||
abilities: { 0: "Levitate" },
|
||||
weightkg: 430,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
sascratch: {
|
||||
num: 9090,
|
||||
name: "Sascratch",
|
||||
types: ["Ice", "Rock"],
|
||||
baseStats: { hp: 70, atk: 100, def: 95, spa: 50, spd: 60, spe: 110 },
|
||||
abilities: { 0: "Tough Claws", 1: "Unnerve", H: "Perish Body" },
|
||||
weightkg: 20,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
guttergar: {
|
||||
num: 9091,
|
||||
name: "Guttergar",
|
||||
types: ["Water"],
|
||||
baseStats: { hp: 116, atk: 108, def: 55, spa: 30, spd: 104, spe: 63 },
|
||||
abilities: { 0: "Mold Breaker", H: "Water Veil" },
|
||||
weightkg: 106,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
rakasa: {
|
||||
num: 9092,
|
||||
name: "Rakasa",
|
||||
types: ["Psychic", "Fairy"],
|
||||
baseStats: { hp: 101, atk: 31, def: 79, spa: 105, spd: 81, spe: 23 },
|
||||
abilities: { 0: "Prankster" },
|
||||
weightkg: 19,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
thermostatic: {
|
||||
num: 9093,
|
||||
name: "Thermostatic",
|
||||
types: ["Electric"],
|
||||
baseStats: { hp: 90, atk: 50, def: 105, spa: 90, spd: 85, spe: 35 },
|
||||
abilities: { 0: "Electromorphosis", H: "Wind Power" },
|
||||
weightkg: 60,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
formaldehydra: {
|
||||
num: 9094,
|
||||
name: "Formaldehydra",
|
||||
types: ["Poison", "Dragon"],
|
||||
baseStats: { hp: 95, atk: 100, def: 110, spa: 60, spd: 85, spe: 60 },
|
||||
abilities: { 0: "Rough Skin", H: "Stench" },
|
||||
weightkg: 165.5,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
strumorthio: {
|
||||
num: 9095,
|
||||
name: "Strumorthio",
|
||||
types: ["Normal", "Ghost"],
|
||||
baseStats: { hp: 90, atk: 20, def: 87, spa: 95, spd: 95, spe: 20 },
|
||||
abilities: { 0: "Early Bird", H: "Levitate" },
|
||||
weightkg: 110,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
ironmike: {
|
||||
num: 9096,
|
||||
name: "Iron Mike",
|
||||
types: ["Fairy", "Normal"],
|
||||
baseStats: { hp: 88, atk: 30, def: 68, spa: 106, spd: 76, spe: 106 },
|
||||
abilities: { 0: "Quark Drive" },
|
||||
weightkg: 51.8,
|
||||
eggGroups: ["Undiscovered"],
|
||||
tags: ["Paradox"],
|
||||
},
|
||||
whalestro: {
|
||||
num: 9097,
|
||||
name: "Whalestro",
|
||||
types: ["Steel", "Water"],
|
||||
baseStats: { hp: 90, atk: 40, def: 100, spa: 90, spd: 70, spe: 40 },
|
||||
abilities: { 0: "Punk Rock" },
|
||||
weightkg: 999,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
urslag: {
|
||||
num: 9098,
|
||||
name: "Urslag",
|
||||
types: ["Ground", "Steel"],
|
||||
baseStats: { hp: 90, atk: 30, def: 105, spa: 109, spd: 85, spe: 74 },
|
||||
abilities: { 0: "Flash Fire", H: "Iron Barbs" },
|
||||
weightkg: 723,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
centaghoul: {
|
||||
num: 9099,
|
||||
name: "Centaghoul",
|
||||
types: ["Ghost", "Steel"],
|
||||
baseStats: { hp: 87, atk: 108, def: 94, spa: 30, spd: 115, spe: 31 },
|
||||
abilities: { 0: "Bulletproof", H: "Pickpocket" },
|
||||
weightkg: 105,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
noirwark: {
|
||||
num: 9100,
|
||||
name: "Noirwark",
|
||||
types: ["Dark", "Fighting"],
|
||||
baseStats: { hp: 85, atk: 30, def: 95, spa: 80, spd: 85, spe: 95 },
|
||||
abilities: { 0: "Shadow Shield" },
|
||||
weightkg: 75,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
metarachne: {
|
||||
num: 9101,
|
||||
name: "Metarachne",
|
||||
types: ["Bug", "Steel"],
|
||||
baseStats: { hp: 105, atk: 105, def: 70, spa: 45, spd: 70, spe: 30 },
|
||||
abilities: { 0: "Analytic", 1: "Bulletproof", H: "Swarm" },
|
||||
weightkg: 985.9,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
};
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
|
||||
spriteviewer: {
|
||||
effectType: 'ValidatorRule',
|
||||
name: 'Sprite Viewer',
|
||||
desc: "Displays a fakemon's sprite in chat when it is switched in for the first time",
|
||||
onBegin() {
|
||||
this.add('rule', 'Sprite Viewer: Displays sprites in chat');
|
||||
},
|
||||
onSwitchIn(pokemon) {
|
||||
if (!this.effectState[pokemon.species.id]) {
|
||||
this.add('-message', `${pokemon.species.name}'s Sprite:`);
|
||||
this.add(`raw|<img src="https://raw.githubusercontent.com/scoopapa/DH2/refs/heads/main/data/mods/blankcanvas/sprites/front/${pokemon.species.id}.png" height="96" width="96">`);
|
||||
this.effectState[pokemon.species.id] = true;
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
@ -604,7 +604,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
|
|||
shortDesc: "Moves ignore charge/recharge turns.",
|
||||
},
|
||||
biogenesis: {
|
||||
onSwitchInPriority: 1,
|
||||
onSwitchInPriority: -1,
|
||||
onBeforeSwitchIn(pokemon) {
|
||||
if (pokemon.m.didRandomMoves) return;
|
||||
const moves = this.dex.moves.all();
|
||||
|
|
@ -810,4 +810,147 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
|
|||
num: -117,
|
||||
shortDesc: "Sets terrain depending on HP value.",
|
||||
},
|
||||
dragonsjaw: {
|
||||
onBasePower(basePower, attacker, defender, move) {
|
||||
if (defender.hasType('Dragon') && defender.hasType('Steel')) {
|
||||
return this.chainModify(1.5);
|
||||
} else if (defender.hasType('Dragon')) {
|
||||
return this.chainModify(2.25);
|
||||
} else if (defender.hasType('Steel')) {
|
||||
return;
|
||||
} else return this.chainModify(1.5);
|
||||
},
|
||||
onTryHit(target, source, move) {
|
||||
if (target.hasType('Fairy')) {
|
||||
return null;
|
||||
}
|
||||
},
|
||||
onModifyMovePriority: -2,
|
||||
onModifyMove(move) {
|
||||
if (move.secondaries) {
|
||||
this.debug('doubling secondary chance');
|
||||
for (const secondary of move.secondaries) {
|
||||
if (secondary.chance) secondary.chance *= 2;
|
||||
}
|
||||
}
|
||||
if (move.self?.chance) move.self.chance *= 2;
|
||||
},
|
||||
flags: {},
|
||||
name: "Dragon's Jaw",
|
||||
rating: 5,
|
||||
num: -118,
|
||||
shortDesc: "Serene Grace + Bite attacks are Dragon type.",
|
||||
},
|
||||
corrosivesoul: {
|
||||
onStart(source) {
|
||||
this.field.setTerrain('corrosivesoul');
|
||||
},
|
||||
condition: {
|
||||
effectType: 'Terrain',
|
||||
duration: 5,
|
||||
durationCallback(source, effect) {
|
||||
if (source?.hasItem('terrainextender')) {
|
||||
return 8;
|
||||
}
|
||||
return 5;
|
||||
},
|
||||
onFieldStart(field, source, effect) {
|
||||
if (effect?.effectType === 'Ability') {
|
||||
this.add('-fieldstart', 'move: Corrosive Soul', '[from] ability: ' + effect.name, `[of] ${source}`);
|
||||
} else {
|
||||
this.add('-fieldstart', 'move: Corrosive Soul');
|
||||
}
|
||||
},
|
||||
onResidualOrder: 5,
|
||||
onResidualSubOrder: 2,
|
||||
onResidual(pokemon) {
|
||||
const move = this.dex.getActiveMove('smog');
|
||||
move.accuracy = 100;
|
||||
const target = pokemon.foes()[0];
|
||||
if (target && !target.fainted) {
|
||||
this.actions.useMove(move, pokemon, { target });
|
||||
}
|
||||
},
|
||||
onFieldResidualOrder: 27,
|
||||
onFieldResidualSubOrder: 7,
|
||||
onFieldEnd() {
|
||||
this.add('-fieldend', 'move: Corrosive Soul');
|
||||
},
|
||||
},
|
||||
flags: {},
|
||||
name: "Corrosive Soul",
|
||||
rating: 5,
|
||||
num: -119,
|
||||
shortDesc: "Sets Corrosive Terrian: active Pokemon hit each other with Smog.",
|
||||
},
|
||||
oceanicblessing: {
|
||||
onSwitchInPriority: -2,
|
||||
onStart(pokemon) {
|
||||
this.singleEvent('WeatherChange', this.effect, this.effectState, pokemon);
|
||||
},
|
||||
onWeatherChange(pokemon) {
|
||||
if (!pokemon.isActive || pokemon.baseSpecies.baseSpecies !== 'Kyogre' || pokemon.transformed) return;
|
||||
if (!pokemon.hp) return;
|
||||
if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) {
|
||||
if (pokemon.species.id !== 'kyogreprimal') {
|
||||
pokemon.formeChange('Kyogre-Primal', this.effect, false);
|
||||
}
|
||||
} else {
|
||||
if (pokemon.species.id === 'kyogreprimal') {
|
||||
pokemon.formeChange('kyogre', this.effect, false);
|
||||
}
|
||||
}
|
||||
},
|
||||
onAllyModifyAtkPriority: 3,
|
||||
onAllyModifyAtk(atk, pokemon) {
|
||||
if (this.effectState.target.baseSpecies.baseSpecies !== 'Kyogre') return;
|
||||
if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) {
|
||||
return this.chainModify(1.5);
|
||||
}
|
||||
},
|
||||
onAllyModifySpDPriority: 4,
|
||||
onAllyModifySpD(spd, pokemon) {
|
||||
if (this.effectState.target.baseSpecies.baseSpecies !== 'Kyogre') return;
|
||||
if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) {
|
||||
return this.chainModify(1.5);
|
||||
}
|
||||
},
|
||||
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, breakable: 1 },
|
||||
name: "Oceanic Blessing",
|
||||
rating: 5,
|
||||
num: -120,
|
||||
shortDesc: "Flower Gift but Kyogre",
|
||||
},
|
||||
autospin: {
|
||||
onResidual(pokemon, s, effect) {
|
||||
const move = this.dex.getActiveMove('metronome');
|
||||
const target = pokemon.foes()[0];
|
||||
if (target && !target.fainted && (pokemon.hp >= pokemon.maxhp / 2)) {
|
||||
this.actions.useMove(move, pokemon, { target, sourceEffect: effect });
|
||||
} else if (target && !target.fainted && (pokemon.hp <= pokemon.maxhp / 10)) {
|
||||
this.actions.useMove(move, pokemon, { target, sourceEffect: effect });
|
||||
this.actions.useMove(move, pokemon, { target, sourceEffect: effect });
|
||||
this.actions.useMove(move, pokemon, { target, sourceEffect: effect });
|
||||
} else if (target && !target.fainted) {
|
||||
this.actions.useMove(move, pokemon, { target, sourceEffect: effect });
|
||||
this.actions.useMove(move, pokemon, { target, sourceEffect: effect });
|
||||
}
|
||||
},
|
||||
flags: {},
|
||||
name: "Auto Spin",
|
||||
rating: 5,
|
||||
num: -121,
|
||||
shortDesc: "Use Metronome at end of turn.",
|
||||
},
|
||||
corrosion: {
|
||||
inherit: true,
|
||||
onModifyMovePriority: -5,
|
||||
onModifyMove(move) {
|
||||
if (!move.ignoreImmunity) move.ignoreImmunity = {};
|
||||
if (move.ignoreImmunity !== true) {
|
||||
move.ignoreImmunity['Poison'] = true;
|
||||
}
|
||||
},
|
||||
shortDesc: "This Pokemon can poison a Pokemon regardless of its typing and hit them with Poison moves.",
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -119,4 +119,22 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
|
|||
gen: 2,
|
||||
desc: "Doubles Attack.",
|
||||
},
|
||||
focusband: {
|
||||
name: "Focus Band",
|
||||
spritenum: 150,
|
||||
fling: {
|
||||
basePower: 10,
|
||||
},
|
||||
onDamagePriority: -40,
|
||||
onDamage(damage, target, source, effect) {
|
||||
const chance = Math.max(Math.floor(target.hp / target.maxhp), 10);
|
||||
if (this.randomChance(chance, 100) && damage >= target.hp && effect && effect.effectType === 'Move') {
|
||||
this.add("-activate", target, "item: Focus Band");
|
||||
return target.hp - 1;
|
||||
}
|
||||
},
|
||||
num: 230,
|
||||
gen: 2,
|
||||
desc: "Chance to survive attack equal to percentage of remaining HP, minimum 10%.",
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -284,7 +284,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
|
|||
secondary: null,
|
||||
target: "normal",
|
||||
type: "Water",
|
||||
zMove: { boost: { atk: 1 } },
|
||||
zMove: { boost: { spe: 1 } },
|
||||
contestType: "Beautiful",
|
||||
desc: "Encore + Rain Dance",
|
||||
shortDesc: "Encore + Rain Dance",
|
||||
|
|
@ -531,7 +531,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
|
|||
} else {
|
||||
this.boost({ spe: 3 }, pokemon);
|
||||
}
|
||||
// adds volatile ordered, which prevents the order up effect from occuring again until Dondozo switches out
|
||||
// adds volatile ordered, which prevents the order up effect from occurring again until Dondozo switches out
|
||||
pokemon.addVolatile('ordered');
|
||||
// removes the side condition
|
||||
pokemon.side.removeSideCondition('orderup');
|
||||
|
|
@ -1603,4 +1603,118 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
|
|||
shortDesc: "5 turns. Can't status,-Dragon power vs grounded, +Fairy power.",
|
||||
desc: "5 turns. Can't status,-Dragon power vs grounded, +Fairy power.",
|
||||
},
|
||||
lootbox: {
|
||||
num: -1015,
|
||||
accuracy: 100,
|
||||
basePower: 0,
|
||||
category: "Physical",
|
||||
name: "Loot Box",
|
||||
pp: 15,
|
||||
priority: 0,
|
||||
flags: { protect: 1, mirror: 1, metronome: 1 },
|
||||
onModifyMove(move, pokemon, target) {
|
||||
const rand = this.random(8);
|
||||
if (rand < 2) {
|
||||
move.basePower = 0;
|
||||
} else if (rand < 4) {
|
||||
move.basePower = 60;
|
||||
} else if (rand < 6) {
|
||||
move.basePower = 120;
|
||||
} else {
|
||||
move.basePower = 150;
|
||||
}
|
||||
},
|
||||
onTryMove() {
|
||||
this.attrLastMove('[still]');
|
||||
},
|
||||
onPrepareHit(target, source) {
|
||||
this.add('-anim', source, 'Explosion', target);
|
||||
this.add('-anim', source, 'Mind Blown', target);
|
||||
},
|
||||
secondary: null,
|
||||
target: "normal",
|
||||
type: "Normal",
|
||||
contestType: "Cute",
|
||||
},
|
||||
sinisterarrows: {
|
||||
num: -1016,
|
||||
accuracy: 100,
|
||||
basePower: 50,
|
||||
category: "Physical",
|
||||
name: "Sinister Arrows",
|
||||
pp: 10,
|
||||
priority: 0,
|
||||
flags: { allyanim: 1, metronome: 1, futuremove: 1 },
|
||||
ignoreImmunity: true,
|
||||
onTry(source, target) {
|
||||
if (!target.side.addSlotCondition(target, 'sinisterarrows')) return false;
|
||||
Object.assign(target.side.slotConditions[target.position]['sinisterarrows'], {
|
||||
move: 'sinisterarrows',
|
||||
source,
|
||||
moveData: {
|
||||
id: 'sinisterarrows',
|
||||
name: "Sinister Arrows",
|
||||
accuracy: 100,
|
||||
basePower: 50,
|
||||
category: "Physical",
|
||||
priority: 0,
|
||||
flags: { allyanim: 1, metronome: 1, futuremove: 1 },
|
||||
ignoreImmunity: false,
|
||||
effectType: 'Move',
|
||||
type: 'Ghost',
|
||||
},
|
||||
});
|
||||
this.add('-start', source, 'move: Sinister Arrows');
|
||||
return this.NOT_FAIL;
|
||||
},
|
||||
onTryMove(target, source, move) {
|
||||
this.add('-anim', source, 'Curse', target);
|
||||
this.add('-anim', source, 'Spite', target);
|
||||
},
|
||||
condition: {
|
||||
onStart(target) {
|
||||
this.effectState.targetSlot = target.getSlot();
|
||||
this.effectState.endingTurn = (this.turn - 1) + 3;
|
||||
},
|
||||
onResidualOrder: 5,
|
||||
onResidualSubOrder: 2,
|
||||
onResidual(target) {
|
||||
const data = this.effectState;
|
||||
// time's up; time to hit! :D
|
||||
const move = this.dex.moves.get(data.move);
|
||||
if (target.fainted || target === data.source) {
|
||||
this.hint(`${move.name} did not hit because the target is ${(target.fainted ? 'fainted' : 'the user')}.`);
|
||||
return;
|
||||
}
|
||||
if (!this.getOverflowedTurnCount()) return;
|
||||
target.removeVolatile('Protect');
|
||||
target.removeVolatile('Endure');
|
||||
if (data.source.hasAbility('infiltrator') && this.gen >= 6) {
|
||||
data.moveData.infiltrates = true;
|
||||
}
|
||||
if (data.source.hasAbility('normalize') && this.gen >= 6) {
|
||||
data.moveData.type = 'Normal';
|
||||
}
|
||||
const hitMove = new this.dex.Move(data.moveData) as ActiveMove;
|
||||
this.actions.trySpreadMoveHit([target], data.source, hitMove, true);
|
||||
this.hint(`${move.name} hits.`);
|
||||
if (data.source.isActive && data.source.hasItem('lifeorb') && this.gen >= 5) {
|
||||
this.singleEvent('AfterMoveSecondarySelf', data.source.getItem(), data.source.itemState, data.source, target, data.source.getItem());
|
||||
}
|
||||
this.activeMove = null;
|
||||
this.checkWin();
|
||||
if (this.getOverflowedTurnCount() >= this.effectState.endingTurn) {
|
||||
target.side.removeSlotCondition(this.getAtSlot(this.effectState.targetSlot), 'sinisterarrows');
|
||||
}
|
||||
},
|
||||
},
|
||||
secondary: null,
|
||||
target: "normal",
|
||||
type: "Ghost",
|
||||
contestType: "Clever",
|
||||
},
|
||||
mortalspin: {
|
||||
inherit: true,
|
||||
category: "Special",
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -443,4 +443,49 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
|
|||
abilities: { 0: "Weak Armor" },
|
||||
types: ["Dark", "Ground"],
|
||||
},
|
||||
feraligatr: {
|
||||
inherit: true,
|
||||
},
|
||||
feraligatrmega: {
|
||||
num: -988,
|
||||
name: "Feraligatr-Mega",
|
||||
baseSpecies: "Feraligatr",
|
||||
forme: "Mega",
|
||||
types: ["Dragon"],
|
||||
genderRatio: { M: 0.875, F: 0.125 },
|
||||
baseStats: { hp: 85, atk: 145, def: 120, spa: 99, spd: 103, spe: 78 },
|
||||
abilities: { 0: "Dragon's Jaw" },
|
||||
heightm: 2.3,
|
||||
weightkg: 108.8,
|
||||
color: "Blue",
|
||||
eggGroups: ["Monster", "Water 1"],
|
||||
requiredItem: "Feraligite",
|
||||
gen: 9,
|
||||
},
|
||||
salazzle: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Corrosive Soul" },
|
||||
},
|
||||
kyogre: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Oceanic Blessing" },
|
||||
},
|
||||
azelf: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Auto Spin" },
|
||||
types: ["Psychic", "Normal"],
|
||||
},
|
||||
decidueye: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Overgrow", 1: "Sniper" },
|
||||
},
|
||||
ogerponcornerstone: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Solid Rock" },
|
||||
types: ["Psychic", "Normal"],
|
||||
},
|
||||
glimmora: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Corrosion" },
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -270,5 +270,29 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
this.modData('Learnsets', 'mandibuzz').learnset.fling = ['9L1'];
|
||||
this.modData('Learnsets', 'mandibuzz').learnset.scavenge = ['9L1'];
|
||||
this.modData('Learnsets', 'mandibuzz').learnset.bonemerang = ['9L1'];
|
||||
|
||||
this.modData('Learnsets', 'feraligatr').learnset.firefang = ['9L1'];
|
||||
this.modData('Learnsets', 'feraligatr').learnset.thunderfang = ['9L1'];
|
||||
this.modData('Learnsets', 'feraligatr').learnset.poisonfang = ['9L1'];
|
||||
|
||||
this.modData('Learnsets', 'salazzle').learnset.magmastorm = ['9L1'];
|
||||
this.modData('Learnsets', 'salazzle').learnset.malignantchain = ['9L1'];
|
||||
this.modData('Learnsets', 'salazzle').learnset.psychicnoise = ['9L1'];
|
||||
this.modData('Learnsets', 'salazzle').learnset.banefulbunker = ['9L1'];
|
||||
|
||||
this.modData('Learnsets', 'kyogre').learnset.hurricane = ['9L1'];
|
||||
this.modData('Learnsets', 'kyogre').learnset.tidalsurge = ['9L1'];
|
||||
|
||||
this.modData('Learnsets', 'azelf').learnset.rapidspin = ['9L1'];
|
||||
this.modData('Learnsets', 'azelf').learnset.lootbox = ['9L1'];
|
||||
this.modData('Learnsets', 'azelf').learnset.acupressure = ['9L1'];
|
||||
|
||||
this.modData('Learnsets', 'decidueye').learnset.sinisterarrows = ['9L1'];
|
||||
|
||||
this.modData('Learnsets', 'ogerpon').learnset.sappyseed = ['9L1'];
|
||||
this.modData('Learnsets', 'ogerpon').learnset.thousandwaves = ['9L1'];
|
||||
|
||||
this.modData('Learnsets', 'glimmora').learnset.icebeam = ['9L1'];
|
||||
this.modData('Learnsets', 'glimmora').learnset.malignantchain = ['9L1'];
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "NFE",
|
||||
},
|
||||
pidgeot: {
|
||||
tier: "ZU",
|
||||
tier: "PU",
|
||||
},
|
||||
rattata: {
|
||||
tier: "LC",
|
||||
|
|
@ -90,7 +90,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "NFE",
|
||||
},
|
||||
nidoqueen: {
|
||||
tier: "PU",
|
||||
tier: "ZU",
|
||||
},
|
||||
nidoranm: {
|
||||
tier: "LC",
|
||||
|
|
@ -117,7 +117,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "LC",
|
||||
},
|
||||
wigglytuff: {
|
||||
tier: "PU",
|
||||
tier: "ZU",
|
||||
},
|
||||
zubat: {
|
||||
tier: "LC",
|
||||
|
|
@ -132,7 +132,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "NFE",
|
||||
},
|
||||
vileplume: {
|
||||
tier: "PU",
|
||||
tier: "ZU",
|
||||
},
|
||||
paras: {
|
||||
tier: "LC",
|
||||
|
|
@ -168,7 +168,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "LC",
|
||||
},
|
||||
primeape: {
|
||||
tier: "ZU",
|
||||
tier: "PU",
|
||||
},
|
||||
growlithe: {
|
||||
tier: "LC",
|
||||
|
|
@ -189,7 +189,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "PU",
|
||||
},
|
||||
kadabra: {
|
||||
tier: "UU",
|
||||
tier: "NU",
|
||||
},
|
||||
alakazam: {
|
||||
tier: "OU",
|
||||
|
|
@ -201,7 +201,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "NFE",
|
||||
},
|
||||
machamp: {
|
||||
tier: "PU",
|
||||
tier: "ZU",
|
||||
},
|
||||
bellsprout: {
|
||||
tier: "LC",
|
||||
|
|
@ -216,7 +216,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "ZU",
|
||||
},
|
||||
tentacruel: {
|
||||
tier: "UU",
|
||||
tier: "NU",
|
||||
},
|
||||
geodude: {
|
||||
tier: "LC",
|
||||
|
|
@ -225,13 +225,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "PU",
|
||||
},
|
||||
golem: {
|
||||
tier: "UU",
|
||||
tier: "NU",
|
||||
},
|
||||
ponyta: {
|
||||
tier: "LC",
|
||||
},
|
||||
rapidash: {
|
||||
tier: "PUBL",
|
||||
tier: "UU",
|
||||
},
|
||||
slowpoke: {
|
||||
tier: "ZU",
|
||||
|
|
@ -258,7 +258,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "LC",
|
||||
},
|
||||
dewgong: {
|
||||
tier: "UU",
|
||||
tier: "NU",
|
||||
},
|
||||
grimer: {
|
||||
tier: "LC",
|
||||
|
|
@ -294,13 +294,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "LC",
|
||||
},
|
||||
kingler: {
|
||||
tier: "PU",
|
||||
tier: "ZU",
|
||||
},
|
||||
voltorb: {
|
||||
tier: "LC",
|
||||
},
|
||||
electrode: {
|
||||
tier: "UU",
|
||||
tier: "NU",
|
||||
},
|
||||
exeggcute: {
|
||||
tier: "PU",
|
||||
|
|
@ -339,7 +339,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "OU",
|
||||
},
|
||||
tangela: {
|
||||
tier: "UU",
|
||||
tier: "NU",
|
||||
},
|
||||
kangaskhan: {
|
||||
tier: "UU",
|
||||
|
|
@ -366,7 +366,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "NU",
|
||||
},
|
||||
scyther: {
|
||||
tier: "ZU",
|
||||
tier: "PU",
|
||||
},
|
||||
jynx: {
|
||||
tier: "OU",
|
||||
|
|
@ -375,10 +375,10 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "UU",
|
||||
},
|
||||
magmar: {
|
||||
tier: "ZU",
|
||||
tier: "PU",
|
||||
},
|
||||
pinsir: {
|
||||
tier: "PU",
|
||||
tier: "ZU",
|
||||
},
|
||||
tauros: {
|
||||
tier: "OU",
|
||||
|
|
@ -399,7 +399,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "LC",
|
||||
},
|
||||
vaporeon: {
|
||||
tier: "UU",
|
||||
tier: "NU",
|
||||
},
|
||||
jolteon: {
|
||||
tier: "OU",
|
||||
|
|
@ -414,7 +414,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "ZU",
|
||||
},
|
||||
omastar: {
|
||||
tier: "UU",
|
||||
tier: "NU",
|
||||
},
|
||||
kabuto: {
|
||||
tier: "LC",
|
||||
|
|
@ -435,7 +435,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "OU",
|
||||
},
|
||||
moltres: {
|
||||
tier: "NU",
|
||||
tier: "UU",
|
||||
},
|
||||
dratini: {
|
||||
tier: "LC",
|
||||
|
|
|
|||
|
|
@ -554,7 +554,7 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
didSomething = true;
|
||||
// Check the status of the Pokémon whose turn is not.
|
||||
// When a move that affects stat levels is used, if the Pokémon whose turn it is not right now is paralyzed or
|
||||
// burned, the correspoding stat penalties will be applied again to that Pokémon.
|
||||
// burned, the corresponding stat penalties will be applied again to that Pokémon.
|
||||
if (pokemon.side.foe.active[0].status) {
|
||||
// If it's paralysed, quarter its speed.
|
||||
if (pokemon.side.foe.active[0].status === 'par') {
|
||||
|
|
|
|||
|
|
@ -138,8 +138,8 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
|
|||
inherit: true,
|
||||
onModifyMove(move) {
|
||||
const affectedByKingsRock = [
|
||||
'aerialace', 'aeroblast', 'aircutter', 'armthrust', 'barrage', 'beatup', 'bide', 'bind', 'blastburn', 'bonerush', 'bonemerang', 'bounce', 'brickbreak', 'bulletseed', 'clamp', 'cometpunch', 'crabhammer', 'crosschop', 'cut', 'dig', 'dive', 'doublekick', 'doubleslap', 'doubleedge', 'dragonbreath', 'dragonclaw', 'dragonrage', 'drillpeck', 'earthquake', 'eggbomb', 'endeavor', 'eruption', 'explosion', 'extremespeed', 'falseswipe', 'feintattack', 'firespin', 'flail', 'fly', 'frenzyplant', 'frustration', 'furyattack', 'furycutter', 'furyswipes', 'gust', 'hiddenpower', 'highjumpkick', 'hornattack', 'hydrocannon', 'hydropump', 'hyperbeam', 'iceball', 'iciclespear', 'jumpkick', 'karatechop', 'leafblade', 'lowkick', 'machpunch', 'magicalleaf', 'magnitude', 'megakick', 'megapunch', 'megahorn', 'meteormash', 'mudshot', 'muddywater', 'nightshade', 'outrage', 'overheat', 'payday', 'peck', 'petaldance', 'pinmissile', 'poisontail', 'pound', 'psychoboost', 'psywave', 'quickattack', 'rage', 'rapidspin', 'razorleaf', 'razorwind', 'return', 'revenge', 'reversal', 'rockblast', 'rockthrow', 'rollingkick', 'rollout', 'sandtomb', 'scratch', 'seismictoss', 'selfdestruct', 'shadowpunch', 'shockwave', 'signalbeam', 'silverwind', 'skullbash', 'skyattack', 'skyuppercut', 'slam', 'slash', 'snore', 'solarbeam', 'sonicboom', 'spikecannon', 'spitup', 'steelwing', 'strength', 'struggle', 'submission', 'surf', 'swift', 'tackle', 'takedown', 'thrash', 'tickle', 'triplekick', 'twister', 'uproar', 'visegrip', 'vinewhip', 'vitalthrow', 'volttackle', 'watergun', 'waterpulse', 'waterfall', 'weatherball', 'whirlpool', 'wingattack', 'wrap',
|
||||
];
|
||||
'aerialace', 'aeroblast', 'aircutter', 'armthrust', 'barrage', 'beatup', 'bide', 'bind', 'blastburn', 'bonerush', 'bonemerang', 'bounce', 'brickbreak', 'bulletseed', 'clamp', 'cometpunch', 'crabhammer', 'crosschop', 'cut', 'dig', 'dive', 'doublekick', 'doubleslap', 'doubleedge', 'dragonbreath', 'dragonclaw', 'dragonrage', 'drillpeck', 'earthquake', 'eggbomb', 'endeavor', 'eruption', 'explosion', 'extremespeed', 'falseswipe', 'feintattack', 'firespin', 'flail', 'fly', 'frenzyplant', 'frustration', 'furyattack', 'furycutter', 'furyswipes', 'gust', 'hiddenpower', 'highjumpkick', 'hornattack', 'hydrocannon', 'hydropump', 'hyperbeam', 'iceball', 'iciclespear', 'jumpkick', 'karatechop', 'leafblade', 'lowkick', 'machpunch', 'magicalleaf', 'magnitude', 'megakick', 'megapunch', 'megahorn', 'meteormash', 'mudshot', 'muddywater', 'nightshade', 'outrage', 'overheat', 'payday', 'peck', 'petaldance', 'pinmissile', 'poisontail', 'pound', 'psychoboost', 'psywave', 'quickattack', 'rage', 'rapidspin', 'razorleaf', 'razorwind', 'return', 'revenge', 'reversal', 'rockblast', 'rockthrow', 'rollingkick', 'rollout', 'sandtomb', 'scratch', 'seismictoss', 'selfdestruct', 'shadowpunch', 'shockwave', 'signalbeam', 'silverwind', 'skullbash', 'skyattack', 'skyuppercut', 'slam', 'slash', 'snore', 'solarbeam', 'sonicboom', 'spikecannon', 'spitup', 'steelwing', 'strength', 'struggle', 'submission', 'surf', 'swift', 'tackle', 'takedown', 'thrash', 'triplekick', 'twister', 'uproar', 'visegrip', 'vinewhip', 'vitalthrow', 'volttackle', 'watergun', 'waterpulse', 'waterfall', 'weatherball', 'whirlpool', 'wingattack', 'wrap',
|
||||
]; // Tickle also has the move flag, but can never flinch because King's Rock requires damage to trigger
|
||||
if (affectedByKingsRock.includes(move.id)) {
|
||||
if (!move.secondaries) move.secondaries = [];
|
||||
move.secondaries.push({
|
||||
|
|
|
|||
|
|
@ -169,7 +169,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
|
|||
}
|
||||
|
||||
// In SwSh, Fly's animation leaks the initial target through a camera focus
|
||||
// The animation leak target itself isn't "accurate"; the target it reveals is as if Fly weren't a charge movee
|
||||
// The animation leak target itself isn't "accurate"; the target it reveals is as if Fly weren't a charge move
|
||||
// (Fly, like all other charge moves, will actually target slots on its charging turn, relevant for things like Follow Me)
|
||||
// We use a generic single-target move to represent this
|
||||
if (this.sides.length > 2) {
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
|
|||
if (set.item && this.dex.items.get(set.item).megaStone) {
|
||||
const item = this.dex.items.get(set.item);
|
||||
if (item.megaEvolves === species.baseSpecies) {
|
||||
species = this.dex.species.get(item.megaStone);
|
||||
species = this.dex.species.get(Array.isArray(item.megaStone) ? item.megaStone[0] : item.megaStone);
|
||||
}
|
||||
}
|
||||
if (
|
||||
|
|
@ -123,7 +123,9 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
|
|||
}
|
||||
if (set.item) {
|
||||
const item = this.dex.items.get(set.item);
|
||||
if (item.megaEvolves === set.species) godSpecies = this.dex.species.get(item.megaStone);
|
||||
if (item.megaEvolves === set.species) {
|
||||
godSpecies = this.dex.species.get(Array.isArray(item.megaStone) ? item.megaStone[0] : item.megaStone);
|
||||
}
|
||||
if (["Zacian", "Zamazenta"].includes(godSpecies.baseSpecies) && item.id.startsWith('rusted')) {
|
||||
godSpecies = this.dex.species.get(set.species + "-Crowned");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1380,7 +1380,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
doublesTier: "DUU",
|
||||
},
|
||||
absol: {
|
||||
tier: "RU",
|
||||
tier: "RUBL",
|
||||
doublesTier: "DUU",
|
||||
},
|
||||
snorunt: {
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -3,10 +3,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
|
|||
inherit: true,
|
||||
baseStats: { hp: 60, atk: 140, def: 105, spa: 130, spd: 105, spe: 120 },
|
||||
},
|
||||
scyther: {
|
||||
inherit: true,
|
||||
evos: ["Scizor"],
|
||||
},
|
||||
mawilemega: {
|
||||
inherit: true,
|
||||
baseStats: { hp: 50, atk: 147, def: 125, spa: 55, spd: 95, spe: 50 },
|
||||
|
|
|
|||
|
|
@ -1,140 +0,0 @@
|
|||
export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
|
||||
ange: {
|
||||
gen: 9,
|
||||
desc: "Gain 1/12 of max HP at the end of every turn. Opposing Megas lose 1/10 max HP every turn.",
|
||||
shortDesc: "Gain 1/12 of max HP at the end of every turn. Opposing Megas lose 1/10 max HP every turn.",
|
||||
onResidualOrder: 5,
|
||||
onResidualSubOrder: 4,
|
||||
onResidual(pokemon) {
|
||||
if (!pokemon.hp) return;
|
||||
const megaFoes = [];
|
||||
for (const target of pokemon.foes()) {
|
||||
if (target.baseSpecies.isMega) megaFoes.push(target);
|
||||
}
|
||||
if (megaFoes.length) {
|
||||
for (const target of megaFoes) {
|
||||
this.damage(target.baseMaxhp / 10, target, pokemon);
|
||||
this.heal(target.baseMaxhp / 10);
|
||||
}
|
||||
} else {
|
||||
this.heal(pokemon.baseMaxhp / 12);
|
||||
}
|
||||
},
|
||||
name: "Ange",
|
||||
},
|
||||
brassbond: {
|
||||
onPrepareHit(source, target, move) {
|
||||
if (move.category === 'Status' || move.multihit || move.flags['noparentalbond'] || move.flags['charge'] ||
|
||||
move.flags['futuremove'] || move.spreadHit || move.isZ || move.isMax) return;
|
||||
move.multihit = 3;
|
||||
move.multihitType = 'brassbond' as 'parentalbond';
|
||||
},
|
||||
onTryBoost(boost, target, source, effect) {
|
||||
if (effect.effectType === 'Move' && effect.multihitType && effect.hit > 1 &&
|
||||
source && target === source) {
|
||||
let i: keyof BoostsTable;
|
||||
for (i in boost) {
|
||||
delete boost[i];
|
||||
}
|
||||
}
|
||||
},
|
||||
// Damage modifier implemented in BattleActions#modifyDamage()
|
||||
onSourceModifySecondaries(secondaries, target, source, move) {
|
||||
if (move.multihitType && move.hit > 1) {
|
||||
return [];
|
||||
}
|
||||
},
|
||||
flags: {},
|
||||
name: "Brass Bond",
|
||||
gen: 9,
|
||||
desc: "This Pokemon's damaging moves hit 3x. Successive hits do 15% damage without added effects.",
|
||||
shortDesc: "This Pokemon's damaging moves hit 3x. Successive hits do 15% damage without added effects.",
|
||||
},
|
||||
contrarian: {
|
||||
onChangeBoost(boost, target, source, effect) {
|
||||
if (effect && effect.id === 'zpower') return;
|
||||
let i: BoostID;
|
||||
for (i in boost) {
|
||||
boost[i]! *= -2;
|
||||
}
|
||||
},
|
||||
name: "Contrarian",
|
||||
desc: "This Pokemon has its stat changes inverted and doubled.",
|
||||
shortDesc: "This Pokemon has its stat changes inverted and doubled.",
|
||||
gen: 9,
|
||||
},
|
||||
corrosion: {
|
||||
inherit: true,
|
||||
onModifyMovePriority: -5,
|
||||
onModifyMove(move) {
|
||||
if (!move.ignoreImmunity) move.ignoreImmunity = {};
|
||||
if (move.ignoreImmunity !== true) {
|
||||
move.ignoreImmunity['Poison'] = true;
|
||||
}
|
||||
},
|
||||
shortDesc: "This Pokemon can poison a Pokemon regardless of its typing and hit them with Poison moves.",
|
||||
},
|
||||
ionbattery: {
|
||||
onModifySpAPriority: 5,
|
||||
onModifySpA(spa, pokemon) {
|
||||
return this.chainModify(1.5);
|
||||
},
|
||||
flags: { breakable: 1 },
|
||||
name: "Ion Battery",
|
||||
desc: "This Pokemon floats and has 1.5x Sp. Atk.",
|
||||
shortDesc: "This Pokemon floats and has 1.5x Sp. Atk.",
|
||||
},
|
||||
luchadorspride: {
|
||||
onSourceAfterFaint(length, target, source, effect) {
|
||||
if (effect && effect.effectType === 'Move') {
|
||||
this.boost({ spe: length }, source);
|
||||
}
|
||||
},
|
||||
flags: {},
|
||||
name: "Luchador's Pride",
|
||||
desc: "This Pokemon's Speed is raised by 1 stage if it attacks and knocks out another Pokemon.",
|
||||
shortDesc: "This Pokemon's Speed is raised by 1 stage if it attacks and KOes another Pokemon.",
|
||||
gen: 9,
|
||||
},
|
||||
protectivethorns: {
|
||||
gen: 9,
|
||||
name: "Protective Thorns",
|
||||
desc: "Bulletproof + Iron Barbs.",
|
||||
shortDesc: "Bulletproof + Iron Barbs.",
|
||||
onTryHit(pokemon, target, move) {
|
||||
if (move.flags['bullet']) {
|
||||
this.add('-immune', pokemon, '[from] ability: Protective Thorns');
|
||||
return null;
|
||||
}
|
||||
},
|
||||
onDamagingHitOrder: 1,
|
||||
onDamagingHit(damage, target, source, move) {
|
||||
if (this.checkMoveMakesContact(move, source, target, true)) {
|
||||
this.damage(source.baseMaxhp / 8, source, target);
|
||||
}
|
||||
},
|
||||
flags: { breakable: 1 },
|
||||
},
|
||||
minus: {
|
||||
inherit: true,
|
||||
onModifySpAPriority: 5,
|
||||
onModifySpA(spa, pokemon) {
|
||||
for (const allyActive of pokemon.allies()) {
|
||||
if (allyActive.hasAbility(['minus', 'plus', 'ionbattery'])) {
|
||||
return this.chainModify(1.5);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
plus: {
|
||||
inherit: true,
|
||||
onModifySpAPriority: 5,
|
||||
onModifySpA(spa, pokemon) {
|
||||
for (const allyActive of pokemon.allies()) {
|
||||
if (allyActive.hasAbility(['minus', 'plus', 'ionbattery'])) {
|
||||
return this.chainModify(1.5);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
@ -77,6 +77,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
raichualola: {
|
||||
tier: "UU",
|
||||
},
|
||||
raichumegax: {
|
||||
tier: "UU",
|
||||
},
|
||||
raichumegay: {
|
||||
tier: "UU",
|
||||
},
|
||||
clefairy: {
|
||||
tier: "NFE",
|
||||
},
|
||||
|
|
@ -86,6 +92,51 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
clefablemega: {
|
||||
tier: "(OU)",
|
||||
},
|
||||
igglybuff: {
|
||||
tier: "LC",
|
||||
},
|
||||
jigglypuff: {
|
||||
tier: "NFE",
|
||||
},
|
||||
wigglytuff: {
|
||||
tier: "UU",
|
||||
},
|
||||
zubat: {
|
||||
tier: "LC",
|
||||
},
|
||||
golbat: {
|
||||
tier: "NFE",
|
||||
},
|
||||
crobat: {
|
||||
tier: "UU",
|
||||
},
|
||||
meowth: {
|
||||
tier: "LC",
|
||||
},
|
||||
meowthalola: {
|
||||
tier: "LC",
|
||||
},
|
||||
meowthgalar: {
|
||||
tier: "LC",
|
||||
},
|
||||
persian: {
|
||||
tier: "UU",
|
||||
},
|
||||
persianalola: {
|
||||
tier: "UU",
|
||||
},
|
||||
perrserker: {
|
||||
tier: "UU",
|
||||
},
|
||||
mankey: {
|
||||
tier: "LC",
|
||||
},
|
||||
primeape: {
|
||||
tier: "NFE",
|
||||
},
|
||||
annihilape: {
|
||||
tier: "Uber",
|
||||
},
|
||||
abra: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -93,7 +144,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "NFE",
|
||||
},
|
||||
alakazam: {
|
||||
tier: "OU",
|
||||
tier: "UU",
|
||||
},
|
||||
alakazammega: {
|
||||
tier: "Uber",
|
||||
|
|
@ -134,6 +185,15 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
slowbrogalar: {
|
||||
tier: "UU",
|
||||
},
|
||||
farfetchd: {
|
||||
tier: "UU",
|
||||
},
|
||||
farfetchdgalar: {
|
||||
tier: "LC",
|
||||
},
|
||||
sirfetchd: {
|
||||
tier: "UU",
|
||||
},
|
||||
gastly: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -141,7 +201,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "NFE",
|
||||
},
|
||||
gengar: {
|
||||
tier: "OU",
|
||||
tier: "UU",
|
||||
},
|
||||
gengarmega: {
|
||||
tier: "Uber",
|
||||
|
|
@ -149,6 +209,15 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
onix: {
|
||||
tier: "LC",
|
||||
},
|
||||
cubone: {
|
||||
tier: "LC",
|
||||
},
|
||||
marowak: {
|
||||
tier: "UU",
|
||||
},
|
||||
marowakalola: {
|
||||
tier: "UU",
|
||||
},
|
||||
kangaskhan: {
|
||||
tier: "UU",
|
||||
},
|
||||
|
|
@ -159,11 +228,23 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "LC",
|
||||
},
|
||||
starmie: {
|
||||
tier: "OU",
|
||||
tier: "UU",
|
||||
},
|
||||
starmiemega: {
|
||||
tier: "OU",
|
||||
},
|
||||
mimejr: {
|
||||
tier: "LC",
|
||||
},
|
||||
mrmime: {
|
||||
tier: "UU",
|
||||
},
|
||||
mrmimegalar: {
|
||||
tier: "NFE",
|
||||
},
|
||||
mrrime: {
|
||||
tier: "UU",
|
||||
},
|
||||
scyther: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -173,6 +254,15 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
pinsirmega: {
|
||||
tier: "UU",
|
||||
},
|
||||
porygon: {
|
||||
tier: "LC",
|
||||
},
|
||||
porygon2: {
|
||||
tier: "NFE",
|
||||
},
|
||||
porygonz: {
|
||||
tier: "UU",
|
||||
},
|
||||
magikarp: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -186,7 +276,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "LC",
|
||||
},
|
||||
vaporeon: {
|
||||
tier: "OU",
|
||||
tier: "UU",
|
||||
},
|
||||
jolteon: {
|
||||
tier: "UU",
|
||||
|
|
@ -210,7 +300,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "OU",
|
||||
},
|
||||
dragonitemega: {
|
||||
tier: "OU",
|
||||
tier: "(OU)",
|
||||
},
|
||||
mewtwo: {
|
||||
tier: "Uber",
|
||||
|
|
@ -273,10 +363,10 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "UU",
|
||||
},
|
||||
umbreon: {
|
||||
tier: "OU",
|
||||
tier: "UU",
|
||||
},
|
||||
slowking: {
|
||||
tier: "OU",
|
||||
tier: "UU",
|
||||
},
|
||||
slowkinggalar: {
|
||||
tier: "OU",
|
||||
|
|
@ -287,6 +377,15 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
steelixmega: {
|
||||
tier: "UU",
|
||||
},
|
||||
qwilfish: {
|
||||
tier: "UU",
|
||||
},
|
||||
qwilfishhisui: {
|
||||
tier: "LC",
|
||||
},
|
||||
overqwil: {
|
||||
tier: "UU",
|
||||
},
|
||||
scizor: {
|
||||
tier: "OU",
|
||||
},
|
||||
|
|
@ -306,7 +405,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "OU",
|
||||
},
|
||||
skarmorymega: {
|
||||
tier: "OU",
|
||||
tier: "(OU)",
|
||||
},
|
||||
houndour: {
|
||||
tier: "LC",
|
||||
|
|
@ -329,6 +428,42 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tyranitarmega: {
|
||||
tier: "(OU)",
|
||||
},
|
||||
treecko: {
|
||||
tier: "LC",
|
||||
},
|
||||
grovyle: {
|
||||
tier: "NFE",
|
||||
},
|
||||
sceptile: {
|
||||
tier: "UU",
|
||||
},
|
||||
sceptilemega: {
|
||||
tier: "UU",
|
||||
},
|
||||
torchic: {
|
||||
tier: "LC",
|
||||
},
|
||||
combusken: {
|
||||
tier: "NFE",
|
||||
},
|
||||
blaziken: {
|
||||
tier: "OU",
|
||||
},
|
||||
blazikenmega: {
|
||||
tier: "Uber",
|
||||
},
|
||||
mudkip: {
|
||||
tier: "LC",
|
||||
},
|
||||
marshtomp: {
|
||||
tier: "NFE",
|
||||
},
|
||||
swampert: {
|
||||
tier: "UU",
|
||||
},
|
||||
swampertmega: {
|
||||
tier: "UU",
|
||||
},
|
||||
ralts: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -386,6 +521,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
roselia: {
|
||||
tier: "NFE",
|
||||
},
|
||||
gulpin: {
|
||||
tier: "LC",
|
||||
},
|
||||
swalot: {
|
||||
tier: "UU",
|
||||
},
|
||||
carvanha: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -404,6 +545,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
cameruptmega: {
|
||||
tier: "UU",
|
||||
},
|
||||
spoink: {
|
||||
tier: "LC",
|
||||
},
|
||||
grumpig: {
|
||||
tier: "UU",
|
||||
},
|
||||
swablu: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -413,6 +560,21 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
altariamega: {
|
||||
tier: "UU",
|
||||
},
|
||||
zangoose: {
|
||||
tier: "UU",
|
||||
},
|
||||
seviper: {
|
||||
tier: "UU",
|
||||
},
|
||||
feebas: {
|
||||
tier: "LC",
|
||||
},
|
||||
milotic: {
|
||||
tier: "UU",
|
||||
},
|
||||
kecleon: {
|
||||
tier: "UU",
|
||||
},
|
||||
shuppet: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -422,12 +584,24 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
banettemega: {
|
||||
tier: "UU",
|
||||
},
|
||||
chingling: {
|
||||
tier: "LC",
|
||||
},
|
||||
chimecho: {
|
||||
tier: "UU",
|
||||
},
|
||||
chimechomega: {
|
||||
tier: "UU",
|
||||
},
|
||||
absol: {
|
||||
tier: "UU",
|
||||
},
|
||||
absolmega: {
|
||||
tier: "UU",
|
||||
},
|
||||
absolmegaz: {
|
||||
tier: "OU",
|
||||
},
|
||||
snorunt: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -461,6 +635,48 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
metagrossmega: {
|
||||
tier: "Uber",
|
||||
},
|
||||
latias: {
|
||||
tier: "UU",
|
||||
},
|
||||
latiasmega: {
|
||||
tier: "UU",
|
||||
},
|
||||
latios: {
|
||||
tier: "OU",
|
||||
},
|
||||
latiosmega: {
|
||||
tier: "(OU)",
|
||||
},
|
||||
kyogre: {
|
||||
tier: "Uber",
|
||||
},
|
||||
kyogreprimal: {
|
||||
tier: "Uber",
|
||||
},
|
||||
groudon: {
|
||||
tier: "Uber",
|
||||
},
|
||||
groudonprimal: {
|
||||
tier: "Uber",
|
||||
},
|
||||
rayquaza: {
|
||||
tier: "Uber",
|
||||
},
|
||||
rayquazamega: {
|
||||
tier: "Uber",
|
||||
},
|
||||
starly: {
|
||||
tier: "LC",
|
||||
},
|
||||
staravia: {
|
||||
tier: "NFE",
|
||||
},
|
||||
staraptor: {
|
||||
tier: "UU",
|
||||
},
|
||||
staraptormega: {
|
||||
tier: "UU",
|
||||
},
|
||||
budew: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -488,6 +704,9 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
garchompmega: {
|
||||
tier: "(OU)",
|
||||
},
|
||||
garchompmegaz: {
|
||||
tier: "OU",
|
||||
},
|
||||
riolu: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -497,6 +716,9 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
lucariomega: {
|
||||
tier: "Uber",
|
||||
},
|
||||
lucariomegaz: {
|
||||
tier: "OU",
|
||||
},
|
||||
hippopotas: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -530,6 +752,36 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
froslassmega: {
|
||||
tier: "UU",
|
||||
},
|
||||
rotom: {
|
||||
tier: "UU",
|
||||
},
|
||||
rotomheat: {
|
||||
tier: "UU",
|
||||
},
|
||||
rotomwash: {
|
||||
tier: "OU",
|
||||
},
|
||||
rotomfrost: {
|
||||
tier: "UU",
|
||||
},
|
||||
rotomfan: {
|
||||
tier: "UU",
|
||||
},
|
||||
rotommow: {
|
||||
tier: "UU",
|
||||
},
|
||||
heatran: {
|
||||
tier: "OU",
|
||||
},
|
||||
heatranmega: {
|
||||
tier: "OU",
|
||||
},
|
||||
darkrai: {
|
||||
tier: "OU",
|
||||
},
|
||||
darkraimega: {
|
||||
tier: "(OU)",
|
||||
},
|
||||
tepig: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -548,6 +800,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
watchog: {
|
||||
tier: "UU",
|
||||
},
|
||||
purrloin: {
|
||||
tier: "LC",
|
||||
},
|
||||
liepard: {
|
||||
tier: "UU",
|
||||
},
|
||||
pansage: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -566,6 +824,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
simipour: {
|
||||
tier: "UU",
|
||||
},
|
||||
munna: {
|
||||
tier: "LC",
|
||||
},
|
||||
musharna: {
|
||||
tier: "UU",
|
||||
},
|
||||
drilbur: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -581,6 +845,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
audinomega: {
|
||||
tier: "UU",
|
||||
},
|
||||
throh: {
|
||||
tier: "UU",
|
||||
},
|
||||
sawk: {
|
||||
tier: "UU",
|
||||
},
|
||||
venipede: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -611,6 +881,18 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
scraftymega: {
|
||||
tier: "UU",
|
||||
},
|
||||
yamask: {
|
||||
tier: "LC",
|
||||
},
|
||||
yamaskgalar: {
|
||||
tier: "LC",
|
||||
},
|
||||
cofagrigus: {
|
||||
tier: "UU",
|
||||
},
|
||||
runerigus: {
|
||||
tier: "UU",
|
||||
},
|
||||
trubbish: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -629,6 +911,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
emolga: {
|
||||
tier: "UU",
|
||||
},
|
||||
foongus: {
|
||||
tier: "LC",
|
||||
},
|
||||
amoonguss: {
|
||||
tier: "UU",
|
||||
},
|
||||
tynamo: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -653,12 +941,54 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
chandeluremega: {
|
||||
tier: "UU",
|
||||
},
|
||||
cryogonal: {
|
||||
tier: "UU",
|
||||
},
|
||||
stunfisk: {
|
||||
tier: "UU",
|
||||
},
|
||||
stunfiskgalar: {
|
||||
tier: "UU",
|
||||
},
|
||||
golett: {
|
||||
tier: "LC",
|
||||
},
|
||||
golurk: {
|
||||
tier: "UU",
|
||||
},
|
||||
golurkmega: {
|
||||
tier: "UU",
|
||||
},
|
||||
cobalion: {
|
||||
tier: "UU",
|
||||
},
|
||||
terrakion: {
|
||||
tier: "UU",
|
||||
},
|
||||
virizion: {
|
||||
tier: "UU",
|
||||
},
|
||||
keldeo: {
|
||||
tier: "OU",
|
||||
},
|
||||
keldeoresolute: {
|
||||
},
|
||||
meloetta: {
|
||||
tier: "UU",
|
||||
},
|
||||
meloettapirouette: {
|
||||
},
|
||||
genesect: {
|
||||
tier: "Uber",
|
||||
},
|
||||
genesectdouse: {
|
||||
},
|
||||
genesectshock: {
|
||||
},
|
||||
genesectburn: {
|
||||
},
|
||||
genesectchill: {
|
||||
},
|
||||
chespin: {
|
||||
tier: "LC",
|
||||
},
|
||||
|
|
@ -666,10 +996,10 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "NFE",
|
||||
},
|
||||
chesnaught: {
|
||||
tier: "OU",
|
||||
tier: "UU",
|
||||
},
|
||||
chesnaughtmega: {
|
||||
tier: "(OU)",
|
||||
tier: "UU",
|
||||
},
|
||||
fennekin: {
|
||||
tier: "LC",
|
||||
|
|
@ -681,7 +1011,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "UU",
|
||||
},
|
||||
delphoxmega: {
|
||||
tier: "OU",
|
||||
tier: "UU",
|
||||
},
|
||||
froakie: {
|
||||
tier: "LC",
|
||||
|
|
@ -696,7 +1026,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "OU",
|
||||
},
|
||||
greninjamega: {
|
||||
tier: "OU",
|
||||
tier: "(OU)",
|
||||
},
|
||||
bunnelby: {
|
||||
tier: "LC",
|
||||
|
|
@ -747,7 +1077,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "UU",
|
||||
},
|
||||
floettemega: {
|
||||
tier: "OU",
|
||||
tier: "UU",
|
||||
},
|
||||
florges: {
|
||||
tier: "UU",
|
||||
|
|
@ -774,6 +1104,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "OU",
|
||||
},
|
||||
meowsticf: {
|
||||
tier: "OU",
|
||||
},
|
||||
meowsticmmega: {
|
||||
tier: "(OU)",
|
||||
},
|
||||
meowsticfmega: {
|
||||
tier: "(OU)",
|
||||
},
|
||||
honedge: {
|
||||
|
|
@ -783,7 +1119,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "NFE",
|
||||
},
|
||||
aegislash: {
|
||||
tier: "OU",
|
||||
tier: "UU",
|
||||
},
|
||||
aegislashblade: {
|
||||
},
|
||||
|
|
@ -878,7 +1214,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "UU",
|
||||
},
|
||||
goodrahisui: {
|
||||
tier: "OU",
|
||||
tier: "UU",
|
||||
},
|
||||
klefki: {
|
||||
tier: "UU",
|
||||
|
|
@ -911,7 +1247,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "UU",
|
||||
},
|
||||
gourgeistsuper: {
|
||||
tier: "OU",
|
||||
tier: "UU",
|
||||
},
|
||||
bergmite: {
|
||||
tier: "LC",
|
||||
|
|
@ -938,7 +1274,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "Uber",
|
||||
},
|
||||
zygarde10: {
|
||||
tier: "OU",
|
||||
tier: "UU",
|
||||
},
|
||||
zygardecomplete: {
|
||||
tier: "Uber",
|
||||
|
|
@ -961,16 +1297,239 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
volcanion: {
|
||||
tier: "OU",
|
||||
},
|
||||
crabrawler: {
|
||||
tier: "LC",
|
||||
},
|
||||
crabominable: {
|
||||
tier: "UU",
|
||||
},
|
||||
crabominablemega: {
|
||||
tier: "UU",
|
||||
},
|
||||
wimpod: {
|
||||
tier: "LC",
|
||||
},
|
||||
golisopod: {
|
||||
tier: "UU",
|
||||
},
|
||||
golisopodmega: {
|
||||
tier: "OU",
|
||||
},
|
||||
sandygast: {
|
||||
tier: "LC",
|
||||
},
|
||||
palossand: {
|
||||
tier: "UU",
|
||||
},
|
||||
drampa: {
|
||||
tier: "UU",
|
||||
},
|
||||
drampamega: {
|
||||
tier: "UU",
|
||||
},
|
||||
mimikyu: {
|
||||
tier: "UU",
|
||||
},
|
||||
magearna: {
|
||||
tier: "OU",
|
||||
},
|
||||
magearnaoriginal: {
|
||||
tier: "OU",
|
||||
},
|
||||
magearnamega: {
|
||||
tier: "Uber",
|
||||
},
|
||||
magearnaoriginalmega: {
|
||||
tier: "Uber",
|
||||
},
|
||||
marshadow: {
|
||||
tier: "Uber",
|
||||
},
|
||||
zeraora: {
|
||||
tier: "OU",
|
||||
},
|
||||
zeraoramega: {
|
||||
tier: "OU",
|
||||
},
|
||||
meltan: {
|
||||
tier: "UU",
|
||||
},
|
||||
melmetal: {
|
||||
tier: "OU",
|
||||
},
|
||||
rookidee: {
|
||||
tier: "LC",
|
||||
},
|
||||
corvisquire: {
|
||||
tier: "NFE",
|
||||
},
|
||||
corviknight: {
|
||||
tier: "OU",
|
||||
},
|
||||
nickit: {
|
||||
tier: "LC",
|
||||
},
|
||||
thievul: {
|
||||
tier: "UU",
|
||||
},
|
||||
toxel: {
|
||||
tier: "LC",
|
||||
},
|
||||
toxtricity: {
|
||||
tier: "UU",
|
||||
},
|
||||
toxtricitylowkey: {
|
||||
},
|
||||
clobbopus: {
|
||||
tier: "LC",
|
||||
},
|
||||
grapploct: {
|
||||
tier: "UU",
|
||||
},
|
||||
falinks: {
|
||||
tier: "UU",
|
||||
},
|
||||
falinksmega: {
|
||||
tier: "UU",
|
||||
},
|
||||
indeedee: {
|
||||
tier: "UU",
|
||||
},
|
||||
indeedeef: {
|
||||
tier: "UU",
|
||||
},
|
||||
morpeko: {
|
||||
tier: "UU",
|
||||
},
|
||||
morpekohangry: {
|
||||
},
|
||||
kleavor: {
|
||||
tier: "UU",
|
||||
},
|
||||
fidough: {
|
||||
tier: "LC",
|
||||
},
|
||||
dachsbun: {
|
||||
tier: "UU",
|
||||
},
|
||||
squawkabilly: {
|
||||
tier: "UU",
|
||||
},
|
||||
squawkabillyblue: {
|
||||
},
|
||||
squawkabillywhite: {
|
||||
},
|
||||
squawkabillyyellow: {
|
||||
},
|
||||
nacli: {
|
||||
tier: "LC",
|
||||
},
|
||||
naclstack: {
|
||||
tier: "NFE",
|
||||
},
|
||||
garganacl: {
|
||||
tier: "UU",
|
||||
},
|
||||
charcadet: {
|
||||
tier: "LC",
|
||||
},
|
||||
armarouge: {
|
||||
tier: "UU",
|
||||
},
|
||||
ceruledge: {
|
||||
tier: "OU",
|
||||
},
|
||||
maschiff: {
|
||||
tier: "LC",
|
||||
},
|
||||
mabosstiff: {
|
||||
tier: "UU",
|
||||
},
|
||||
shroodle: {
|
||||
tier: "LC",
|
||||
},
|
||||
grafaiai: {
|
||||
tier: "UU",
|
||||
},
|
||||
capsakid: {
|
||||
tier: "LC",
|
||||
},
|
||||
scovillain: {
|
||||
tier: "UU",
|
||||
},
|
||||
scovillainmega: {
|
||||
tier: "UU",
|
||||
},
|
||||
tinkatink: {
|
||||
tier: "LC",
|
||||
},
|
||||
tinkatuff: {
|
||||
tier: "NFE",
|
||||
},
|
||||
tinkaton: {
|
||||
tier: "UU",
|
||||
},
|
||||
cyclizar: {
|
||||
tier: "UU",
|
||||
},
|
||||
glimmet: {
|
||||
tier: "LC",
|
||||
},
|
||||
glimmora: {
|
||||
tier: "OU",
|
||||
},
|
||||
glimmoramega: {
|
||||
tier: "(OU)",
|
||||
},
|
||||
greavard: {
|
||||
tier: "LC",
|
||||
},
|
||||
houndstone: {
|
||||
tier: "UU",
|
||||
},
|
||||
flamigo: {
|
||||
tier: "UU",
|
||||
},
|
||||
dondozo: {
|
||||
tier: "UU",
|
||||
},
|
||||
tatsugiri: {
|
||||
tier: "UU",
|
||||
},
|
||||
tatsugiridroopy: {
|
||||
tier: "UU",
|
||||
},
|
||||
tatsugiristretchy: {
|
||||
tier: "UU",
|
||||
},
|
||||
tatsugiricurlymega: {
|
||||
tier: "UU",
|
||||
},
|
||||
tatsugiridroopymega: {
|
||||
tier: "UU",
|
||||
},
|
||||
tatsugiristretchymega: {
|
||||
tier: "UU",
|
||||
},
|
||||
frigibax: {
|
||||
tier: "LC",
|
||||
},
|
||||
arctibax: {
|
||||
tier: "NFE",
|
||||
},
|
||||
baxcalibur: {
|
||||
tier: "OU",
|
||||
},
|
||||
baxcaliburmega: {
|
||||
tier: "(OU)",
|
||||
},
|
||||
gimmighoul: {
|
||||
tier: "LC",
|
||||
},
|
||||
gimmighoulroaming: {
|
||||
tier: "LC",
|
||||
},
|
||||
gholdengo: {
|
||||
tier: "OU",
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -13,26 +13,6 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
|
|||
return true;
|
||||
},
|
||||
},
|
||||
chesnaughtite: {
|
||||
inherit: true,
|
||||
isNonstandard: "Unobtainable",
|
||||
},
|
||||
delphoxite: {
|
||||
inherit: true,
|
||||
isNonstandard: "Unobtainable",
|
||||
},
|
||||
mewtwonitex: {
|
||||
inherit: true,
|
||||
isNonstandard: "Unobtainable",
|
||||
},
|
||||
mewtwonitey: {
|
||||
inherit: true,
|
||||
isNonstandard: "Unobtainable",
|
||||
},
|
||||
diancite: {
|
||||
inherit: true,
|
||||
isNonstandard: "Unobtainable",
|
||||
},
|
||||
zygardite: {
|
||||
inherit: true,
|
||||
onTakeItem(item, source) {
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,67 +1,10 @@
|
|||
export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
|
||||
gearup: {
|
||||
volttackle: {
|
||||
inherit: true,
|
||||
onHitSide(side, source, move) {
|
||||
const targets = side.allies().filter(target => (
|
||||
target.hasAbility(['plus', 'minus', 'magneticflux']) &&
|
||||
(!target.volatiles['maxguard'] || this.runEvent('TryHit', target, source, move))
|
||||
));
|
||||
if (!targets.length) return false;
|
||||
let didSomething = false;
|
||||
for (const target of targets) {
|
||||
didSomething = this.boost({ atk: 1, spa: 1 }, target, source, move, false, true) || didSomething;
|
||||
onModifyMove(move, pokemon, target) {
|
||||
if (pokemon.baseSpecies.name === "Raichu-Mega-X") {
|
||||
move.self = { boosts: { atk: 1 } };
|
||||
}
|
||||
return didSomething;
|
||||
},
|
||||
},
|
||||
magneticflux: {
|
||||
inherit: true,
|
||||
onHitSide(side, source, move) {
|
||||
const targets = side.allies().filter(target => (
|
||||
target.hasAbility(['plus', 'minus', 'magneticflux']) &&
|
||||
(!target.volatiles['maxguard'] || this.runEvent('TryHit', target, source, move))
|
||||
));
|
||||
if (!targets.length) return false;
|
||||
let didSomething = false;
|
||||
for (const target of targets) {
|
||||
didSomething = this.boost({ def: 1, spd: 1 }, target, source, move, false, true) || didSomething;
|
||||
}
|
||||
return didSomething;
|
||||
},
|
||||
},
|
||||
smackdown: {
|
||||
inherit: true,
|
||||
condition: {
|
||||
noCopy: true,
|
||||
onStart(pokemon) {
|
||||
let applies = false;
|
||||
if (pokemon.hasType('Flying') || pokemon.hasAbility(['levitate', 'ionbattery'])) applies = true;
|
||||
if (pokemon.hasItem('ironball') || pokemon.volatiles['ingrain'] ||
|
||||
this.field.getPseudoWeather('gravity')) applies = false;
|
||||
if (pokemon.removeVolatile('fly') || pokemon.removeVolatile('bounce')) {
|
||||
applies = true;
|
||||
this.queue.cancelMove(pokemon);
|
||||
pokemon.removeVolatile('twoturnmove');
|
||||
}
|
||||
if (pokemon.volatiles['magnetrise']) {
|
||||
applies = true;
|
||||
delete pokemon.volatiles['magnetrise'];
|
||||
}
|
||||
if (pokemon.volatiles['telekinesis']) {
|
||||
applies = true;
|
||||
delete pokemon.volatiles['telekinesis'];
|
||||
}
|
||||
if (!applies) return false;
|
||||
this.add('-start', pokemon, 'Smack Down');
|
||||
},
|
||||
onRestart(pokemon) {
|
||||
if (pokemon.removeVolatile('fly') || pokemon.removeVolatile('bounce')) {
|
||||
this.queue.cancelMove(pokemon);
|
||||
pokemon.removeVolatile('twoturnmove');
|
||||
this.add('-start', pokemon, 'Smack Down');
|
||||
}
|
||||
},
|
||||
// groundedness implemented in battle.engine.js:BattlePokemon#isGrounded
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,11 +1,19 @@
|
|||
export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = {
|
||||
clefablemega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Serene Grace" },
|
||||
abilities: { 0: "Prankster" },
|
||||
},
|
||||
victreebelmega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Corrosion" },
|
||||
abilities: { 0: "Triage" },
|
||||
},
|
||||
raichumegax: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Levitate" },
|
||||
},
|
||||
raichumegay: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Transistor" },
|
||||
},
|
||||
starmiemega: {
|
||||
inherit: true,
|
||||
|
|
@ -14,7 +22,7 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
|
|||
},
|
||||
dragonitemega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Soul-Heart" },
|
||||
abilities: { 0: "Sheer Force" },
|
||||
},
|
||||
meganiummega: {
|
||||
inherit: true,
|
||||
|
|
@ -28,6 +36,14 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
|
|||
inherit: true,
|
||||
abilities: { 0: "Fluffy" },
|
||||
},
|
||||
absolmegaz: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Technician" },
|
||||
},
|
||||
chimechomega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Levitate" },
|
||||
},
|
||||
skarmorymega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Tough Claws" },
|
||||
|
|
@ -40,6 +56,10 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
|
|||
inherit: true,
|
||||
baseStats: { hp: 60, atk: 100, def: 85, spa: 80, spd: 85, spe: 100 },
|
||||
},
|
||||
staraptormega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Tough Claws" },
|
||||
},
|
||||
gallademega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Sharpness" },
|
||||
|
|
@ -48,13 +68,33 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
|
|||
inherit: true,
|
||||
abilities: { 0: "Snow Warning" },
|
||||
},
|
||||
garchompmegaz: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Rough Skin" },
|
||||
},
|
||||
lucariomegaz: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Mind's Eye" },
|
||||
},
|
||||
heatranmega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Filter" },
|
||||
},
|
||||
darkraimega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Dark Aura" },
|
||||
},
|
||||
emboarmega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Supreme Overlord" },
|
||||
},
|
||||
excadrillmega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Mold Breaker" },
|
||||
abilities: { 0: "Sand Rush" },
|
||||
},
|
||||
golurkmega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Adaptability" },
|
||||
},
|
||||
audinomega: {
|
||||
inherit: true,
|
||||
|
|
@ -70,7 +110,7 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
|
|||
},
|
||||
eelektrossmega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Ion Battery" },
|
||||
abilities: { 0: "Hadron Engine" },
|
||||
},
|
||||
chandeluremega: {
|
||||
inherit: true,
|
||||
|
|
@ -78,7 +118,7 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
|
|||
},
|
||||
chesnaughtmega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Protective Thorns" },
|
||||
abilities: { 0: "Grassy Surge" },
|
||||
},
|
||||
delphoxmega: {
|
||||
inherit: true,
|
||||
|
|
@ -88,6 +128,14 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
|
|||
inherit: true,
|
||||
abilities: { 0: "Protean" },
|
||||
},
|
||||
meowsticmmega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Psychic Surge" },
|
||||
},
|
||||
meowsticfmega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Psychic Surge" },
|
||||
},
|
||||
pyroarmega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Drought" },
|
||||
|
|
@ -98,11 +146,11 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
|
|||
},
|
||||
floettemega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Ange" },
|
||||
abilities: { 0: "Regenerator" },
|
||||
},
|
||||
malamarmega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Contrarian" },
|
||||
abilities: { 0: "Contrary" },
|
||||
},
|
||||
barbaraclemega: {
|
||||
inherit: true,
|
||||
|
|
@ -110,18 +158,62 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
|
|||
},
|
||||
hawluchamega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Luchador's Pride" },
|
||||
abilities: { 0: "Stamina" },
|
||||
},
|
||||
zygardemega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Aura Break" },
|
||||
},
|
||||
crabominablemega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Ice Scales" },
|
||||
},
|
||||
golisopodmega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Heatproof" },
|
||||
},
|
||||
drampamega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Drizzle" },
|
||||
abilities: { 0: "Adaptability" },
|
||||
},
|
||||
magearnamega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Soul-Heart" },
|
||||
},
|
||||
magearnaoriginalmega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Soul-Heart" },
|
||||
},
|
||||
zeraoramega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Volt Absorb" },
|
||||
},
|
||||
falinksmega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Brass Bond" },
|
||||
abilities: { 0: "Dauntless Shield" },
|
||||
},
|
||||
scovillainmega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Contrary" },
|
||||
},
|
||||
glimmoramega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Levitate" },
|
||||
},
|
||||
tatsugiricurlymega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Drizzle" },
|
||||
},
|
||||
tatsugiridroopymega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Drizzle" },
|
||||
},
|
||||
tatsugiristretchymega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Drizzle" },
|
||||
},
|
||||
baxcaliburmega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Thermal Exchange" },
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -9,7 +9,9 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
'powerlens', 'powerweight', 'quickclaw', 'rockyhelmet', 'scopelens', 'sharpbeak', 'shellbell', 'silkscarf', 'silverpowder',
|
||||
'softsand', 'spelltag', 'twistedspoon', 'weaknesspolicy', 'whiteherb', 'wiseglasses', 'bottlecap', 'goldbottlecap', 'dawnstone',
|
||||
'duskstone', 'firestone', 'galaricacuff', 'galaricawreath', 'icestone', 'leafstone', 'moonstone', 'sachet', 'shinystone',
|
||||
'sunstone', 'thunderstone', 'waterstone', 'whippeddream', 'bignugget',
|
||||
'sunstone', 'thunderstone', 'waterstone', 'whippeddream', 'bignugget', 'redorb', 'blueorb', 'leek', 'thickclub', 'upgrade',
|
||||
'dubiousdisc', 'prismscale', 'maliciousarmor', 'auspiciousarmor', 'poweranklet', 'powerband', 'powerbelt', 'powerbracer',
|
||||
'powerlens', 'powerweight', 'bignugget', 'bottlecap', 'goldbottlecap', 'prismscale', 'sachet', 'whippeddream',
|
||||
];
|
||||
const legalBerries = [
|
||||
'aspearberry', 'babiriberry', 'chartiberry', 'cheriberry', 'chestoberry', 'chilanberry', 'chopleberry', 'cobaberry', 'colburberry',
|
||||
|
|
@ -18,12 +20,21 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
'sitrusberry', 'tamatoberry', 'tangaberry', 'wacanberry', 'yacheberry',
|
||||
];
|
||||
const votedLegalitems = [
|
||||
'heavydutyboots', 'choiceband', 'choicescarf', 'choicespecs',
|
||||
'heavydutyboots', 'choiceband', 'choicescarf', 'choicespecs', 'airballoon', 'loadeddice', 'mentalherb', 'powerherb', 'mirrorherb',
|
||||
'aguavberry', 'apicotberry', 'custapberry', 'enigmaberry', 'figyberry', 'ganlonberry', 'iapapaberry', 'jabocaberry', 'keeberry',
|
||||
'lansatberry', 'leppaberry', 'liechiberry', 'magoberry', 'marangaberry', 'micleberry', 'petayaberry', 'rowapberry', 'salacberry',
|
||||
'starfberry', 'wikiberry', 'abilityshield', 'blunderpolicy', 'blacksludge', 'lightclay', 'brightpowder', 'adrenalineorb', 'absorbbulb',
|
||||
'clearamulet', 'covertcloak', 'damprock', 'heatrock', 'icyrock', 'smoothrock', 'electricseed', 'mistyseed', 'psychicseed', 'grassyseed',
|
||||
'flameorb', 'toxicorb', 'gripclaw', 'laggingtail', 'metronome', 'protectivepads', 'punchingglove', 'razorclaw', 'razorfang', 'roomservice',
|
||||
'safetygoggles', 'shellbell', 'shedshell', 'stickybarb', 'terrainextender', 'throatspray', 'utilityumbrella', 'zoomlens', 'bindingband',
|
||||
'destinyknot', 'floatstone', 'ironball', 'machobrace', 'ringtarget', 'redcard', 'ejectpack', 'ejectbutton', 'souldew', 'cellbattery',
|
||||
'luminousmoss', 'oddincense', 'roseincense', 'seaincense', 'waveincense', 'snowball',
|
||||
];
|
||||
for (const i in this.data.Items) {
|
||||
if (this.data.Items[i].isNonstandard === 'CAP' || this.data.Items[i].isNonstandard === 'Custom') continue;
|
||||
if ([...legalItems, ...votedLegalitems, ...legalBerries].includes(i) || this.data.Items[i].megaStone) {
|
||||
if (['blazikenite', 'swampertite', 'sceptilite'].includes(i)) continue;
|
||||
if ([...legalItems, ...votedLegalitems, ...legalBerries].includes(i) ||
|
||||
this.data.Items[i].megaStone || this.data.Items[i].onDrive ||
|
||||
(this.data.Items[i].onPlate && !this.data.Items[i].zMove)) {
|
||||
this.modData('Items', i).isNonstandard = null;
|
||||
} else {
|
||||
this.modData('Items', i).isNonstandard = 'Past';
|
||||
|
|
@ -34,21 +45,6 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
this.modData('Moves', i).isNonstandard = null;
|
||||
}
|
||||
},
|
||||
pokemon: {
|
||||
isGrounded(negateImmunity = false) {
|
||||
if ('gravity' in this.battle.field.pseudoWeather) return true;
|
||||
if ('ingrain' in this.volatiles && this.battle.gen >= 4) return true;
|
||||
if ('smackdown' in this.volatiles) return true;
|
||||
const item = (this.ignoringItem() ? '' : this.item);
|
||||
if (item === 'ironball') return true;
|
||||
// If a Fire/Flying type uses Burn Up and Roost, it becomes ???/Flying-type, but it's still grounded.
|
||||
if (!negateImmunity && this.hasType('Flying') && !(this.hasType('???') && 'roost' in this.volatiles)) return false;
|
||||
if (this.hasAbility(['levitate', 'ionbattery']) && !this.battle.suppressingAbility(this)) return null;
|
||||
if ('magnetrise' in this.volatiles) return false;
|
||||
if ('telekinesis' in this.volatiles) return false;
|
||||
return item !== 'airballoon';
|
||||
},
|
||||
},
|
||||
actions: {
|
||||
canMegaEvo(pokemon) {
|
||||
const species = pokemon.baseSpecies;
|
||||
|
|
@ -61,8 +57,21 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
pokemon.baseMoves.includes(this.battle.toID(altForme.requiredMove)) && !item.zMove) {
|
||||
return altForme.name;
|
||||
}
|
||||
if (item.megaEvolves === species.name) {
|
||||
return item.megaStone;
|
||||
if (Array.isArray(item.megaEvolves)) {
|
||||
if (!Array.isArray(item.megaStone)) {
|
||||
throw new Error(`${item.name}#megaEvolves and ${item.name}#megaStone type mismatch`);
|
||||
}
|
||||
if (item.megaEvolves.length !== item.megaStone.length) {
|
||||
throw new Error(`${item.name}#megaEvolves and ${item.name}#megaStone length mismatch`);
|
||||
}
|
||||
const index = item.megaEvolves.indexOf(species.name);
|
||||
if (index < 0) return null;
|
||||
return item.megaStone[index];
|
||||
} else {
|
||||
if (item.megaEvolves === species.name) {
|
||||
if (Array.isArray(item.megaStone)) throw new Error(`${item.name}#megaEvolves and ${item.name}#megaStone type mismatch`);
|
||||
return item.megaStone;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
|
@ -101,123 +110,5 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
this.battle.runEvent('AfterMega', pokemon);
|
||||
return true;
|
||||
},
|
||||
modifyDamage(baseDamage, pokemon, target, move, suppressMessages = false) {
|
||||
const tr = this.battle.trunc;
|
||||
if (!move.type) move.type = '???';
|
||||
const type = move.type;
|
||||
|
||||
baseDamage += 2;
|
||||
|
||||
if (move.spreadHit) {
|
||||
// multi-target modifier (doubles only)
|
||||
const spreadModifier = this.battle.gameType === 'freeforall' ? 0.5 : 0.75;
|
||||
this.battle.debug(`Spread modifier: ${spreadModifier}`);
|
||||
baseDamage = this.battle.modify(baseDamage, spreadModifier);
|
||||
} else if (move.multihitType === 'parentalbond' && move.hit > 1) {
|
||||
// Parental Bond modifier
|
||||
const bondModifier = this.battle.gen > 6 ? 0.25 : 0.5;
|
||||
this.battle.debug(`Parental Bond modifier: ${bondModifier}`);
|
||||
baseDamage = this.battle.modify(baseDamage, bondModifier);
|
||||
} else if (move.multihitType === 'brassbond' as 'parentalbond' && move.hit > 1) {
|
||||
// Brass Bond modifier
|
||||
const bondModifier = 0.15;
|
||||
this.battle.debug(`Brass Bond modifier: ${bondModifier}`);
|
||||
baseDamage = this.battle.modify(baseDamage, bondModifier);
|
||||
}
|
||||
|
||||
// weather modifier
|
||||
baseDamage = this.battle.runEvent('WeatherModifyDamage', pokemon, target, move, baseDamage);
|
||||
|
||||
// crit - not a modifier
|
||||
const isCrit = target.getMoveHitData(move).crit;
|
||||
if (isCrit) {
|
||||
baseDamage = tr(baseDamage * (move.critModifier || (this.battle.gen >= 6 ? 1.5 : 2)));
|
||||
}
|
||||
|
||||
// random factor - also not a modifier
|
||||
baseDamage = this.battle.randomizer(baseDamage);
|
||||
|
||||
// STAB
|
||||
// The "???" type never gets STAB
|
||||
// Not even if you Roost in Gen 4 and somehow manage to use
|
||||
// Struggle in the same turn.
|
||||
// (On second thought, it might be easier to get a MissingNo.)
|
||||
if (type !== '???') {
|
||||
let stab: number | [number, number] = 1;
|
||||
|
||||
const isSTAB = move.forceSTAB || pokemon.hasType(type) || pokemon.getTypes(false, true).includes(type);
|
||||
if (isSTAB) {
|
||||
stab = 1.5;
|
||||
}
|
||||
|
||||
// The Stellar tera type makes this incredibly confusing
|
||||
// If the move's type does not match one of the user's base types,
|
||||
// the Stellar tera type applies a one-time 1.2x damage boost for that type.
|
||||
//
|
||||
// If the move's type does match one of the user's base types,
|
||||
// then the Stellar tera type applies a one-time 2x STAB boost for that type,
|
||||
// and then goes back to using the regular 1.5x STAB boost for those types.
|
||||
if (pokemon.terastallized === 'Stellar') {
|
||||
if (!pokemon.stellarBoostedTypes.includes(type) || move.stellarBoosted) {
|
||||
stab = isSTAB ? 2 : [4915, 4096];
|
||||
move.stellarBoosted = true;
|
||||
if (pokemon.species.name !== 'Terapagos-Stellar') {
|
||||
pokemon.stellarBoostedTypes.push(type);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (pokemon.terastallized === type && pokemon.getTypes(false, true).includes(type)) {
|
||||
stab = 2;
|
||||
}
|
||||
stab = this.battle.runEvent('ModifySTAB', pokemon, target, move, stab);
|
||||
}
|
||||
|
||||
baseDamage = this.battle.modify(baseDamage, stab);
|
||||
}
|
||||
|
||||
// types
|
||||
let typeMod = target.runEffectiveness(move);
|
||||
typeMod = this.battle.clampIntRange(typeMod, -6, 6);
|
||||
target.getMoveHitData(move).typeMod = typeMod;
|
||||
if (typeMod > 0) {
|
||||
if (!suppressMessages) this.battle.add('-supereffective', target);
|
||||
|
||||
for (let i = 0; i < typeMod; i++) {
|
||||
baseDamage *= 2;
|
||||
}
|
||||
}
|
||||
if (typeMod < 0) {
|
||||
if (!suppressMessages) this.battle.add('-resisted', target);
|
||||
|
||||
for (let i = 0; i > typeMod; i--) {
|
||||
baseDamage = tr(baseDamage / 2);
|
||||
}
|
||||
}
|
||||
|
||||
if (isCrit && !suppressMessages) this.battle.add('-crit', target);
|
||||
|
||||
if (pokemon.status === 'brn' && move.category === 'Physical' && !pokemon.hasAbility('guts')) {
|
||||
if (this.battle.gen < 6 || move.id !== 'facade') {
|
||||
baseDamage = this.battle.modify(baseDamage, 0.5);
|
||||
}
|
||||
}
|
||||
|
||||
// Generation 5, but nothing later, sets damage to 1 before the final damage modifiers
|
||||
if (this.battle.gen === 5 && !baseDamage) baseDamage = 1;
|
||||
|
||||
// Final modifier. Modifiers that modify damage after min damage check, such as Life Orb.
|
||||
baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
|
||||
|
||||
if (move.isZOrMaxPowered && target.getMoveHitData(move).zBrokeProtect) {
|
||||
baseDamage = this.battle.modify(baseDamage, 0.25);
|
||||
this.battle.add('-zbroken', target);
|
||||
}
|
||||
|
||||
// Generation 6-7 moves the check for minimum 1 damage after the final modifier...
|
||||
if (this.battle.gen !== 5 && !baseDamage) return 1;
|
||||
|
||||
// ...but 16-bit truncation happens even later, and can truncate to 0
|
||||
return tr(baseDamage, 16);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -3084,7 +3084,7 @@ export const Conditions: { [id: IDEntry]: ModdedConditionData & { innateName?: s
|
|||
},
|
||||
},
|
||||
|
||||
// Effects needed to be overriden for things to happen
|
||||
// Effects needed to be overridden for things to happen
|
||||
attract: {
|
||||
onStart(pokemon, source, effect) {
|
||||
if (!(pokemon.gender === 'M' && source.gender === 'F') && !(pokemon.gender === 'F' && source.gender === 'M')) {
|
||||
|
|
|
|||
|
|
@ -27,9 +27,9 @@ export const ssbSets: SSBSets = {
|
|||
signatureMove: 'Move Name',
|
||||
evs: {stat: number}, ivs: {stat: number}, nature: 'Nature', teraType: 'Type',
|
||||
},
|
||||
// Species, ability, and item need to be captialized properly ex: Ludicolo, Swift Swim, Life Orb
|
||||
// Species, ability, and item need to be capitalized properly ex: Ludicolo, Swift Swim, Life Orb
|
||||
// Gender can be M, F, N, or left as an empty string
|
||||
// each slot in moves needs to be a string (the move name, captialized properly ex: Hydro Pump), or an array of strings (also move names)
|
||||
// each slot in moves needs to be a string (the move name, capitalized properly ex: Hydro Pump), or an array of strings (also move names)
|
||||
// signatureMove also needs to be capitalized properly ex: Scripting
|
||||
// You can skip Evs (defaults to 84 all) and/or Ivs (defaults to 31 all), or just skip part of the Evs (skipped evs are 0) and/or Ivs (skipped Ivs are 31)
|
||||
// You can also skip shiny, defaults to false. Level can be skipped (defaults to 100).
|
||||
|
|
|
|||
|
|
@ -964,8 +964,23 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
return altForme.name;
|
||||
}
|
||||
// a hacked-in Megazard X can mega evolve into Megazard Y, but not into Megazard X
|
||||
if (item.megaEvolves === species.baseSpecies && item.megaStone !== species.name) {
|
||||
return item.megaStone;
|
||||
if (Array.isArray(item.megaEvolves)) {
|
||||
if (!Array.isArray(item.megaStone)) {
|
||||
throw new Error(`${item.name}#megaEvolves and ${item.name}#megaStone type mismatch`);
|
||||
}
|
||||
if (item.megaEvolves.length !== item.megaStone.length) {
|
||||
throw new Error(`${item.name}#megaEvolves and ${item.name}#megaStone length mismatch`);
|
||||
}
|
||||
// FIXME: Change to species.name when champions comes
|
||||
const index = item.megaEvolves.indexOf(species.baseSpecies);
|
||||
if (index < 0) return null;
|
||||
return item.megaStone[index];
|
||||
// FIXME: Change to species.name when champions comes
|
||||
} else {
|
||||
if (item.megaEvolves === species.baseSpecies) {
|
||||
if (Array.isArray(item.megaStone)) throw new Error(`${item.name}#megaEvolves and ${item.name}#megaStone type mismatch`);
|
||||
return item.megaStone;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
|
|
|||
|
|
@ -5,10 +5,10 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
const item = this.data.Items[i];
|
||||
if (!item.megaStone && !item.onDrive && !(item.onPlate && !item.zMove) && !item.onMemory) continue;
|
||||
this.modData('Items', i).onTakeItem = false;
|
||||
if (item.isNonstandard === "Past") this.modData('Items', i).isNonstandard = null;
|
||||
if (item.megaStone) {
|
||||
if (item.isNonstandard === "Past" || item.isNonstandard === "Future") this.modData('Items', i).isNonstandard = null;
|
||||
/* if (item.megaStone) {
|
||||
this.modData('FormatsData', this.toID(item.megaStone)).isNonstandard = null;
|
||||
}
|
||||
} */
|
||||
}
|
||||
},
|
||||
start() {
|
||||
|
|
@ -386,8 +386,8 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
|
||||
const item = pokemon.getItem();
|
||||
if (item.megaStone) {
|
||||
if (item.megaStone === pokemon.baseSpecies.name) return null;
|
||||
return item.megaStone;
|
||||
if (item.megaStone.includes(pokemon.baseSpecies.name)) return null;
|
||||
return Array.isArray(item.megaStone) ? item.megaStone[0] : item.megaStone;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
|
@ -405,7 +405,7 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
const oMegaSpecies = this.dex.species.get((species as any).originalSpecies);
|
||||
pokemon.formeChange(species, pokemon.getItem(), true);
|
||||
this.battle.add('-start', pokemon, oMegaSpecies.requiredItem, '[silent]');
|
||||
if (oSpecies.types.length !== pokemon.species.types.length || oSpecies.types[1] !== pokemon.species.types[1]) {
|
||||
if (oSpecies.types.join('/') !== pokemon.species.types.join('/')) {
|
||||
this.battle.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
|
||||
}
|
||||
// }
|
||||
|
|
@ -466,7 +466,12 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
return species;
|
||||
},
|
||||
getFormeChangeDeltas(formeChangeSpecies, pokemon) {
|
||||
const baseSpecies = this.dex.species.get(formeChangeSpecies.baseSpecies);
|
||||
// Should be fine as long as Necrozma-U doesn't get added or Game Freak makes me sad with some convoluted forme change
|
||||
let baseSpecies = this.dex.species.get(formeChangeSpecies.isMega ?
|
||||
formeChangeSpecies.battleOnly as string : formeChangeSpecies.baseSpecies);
|
||||
if (formeChangeSpecies.name === 'Zygarde-Mega') {
|
||||
baseSpecies = this.dex.species.get('Zygarde-Complete');
|
||||
}
|
||||
const deltas: {
|
||||
ability: string,
|
||||
baseStats: SparseStatsTable,
|
||||
|
|
@ -476,6 +481,7 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
requiredItem: string | undefined,
|
||||
type?: string,
|
||||
formeType?: string,
|
||||
isMega?: boolean,
|
||||
} = {
|
||||
ability: formeChangeSpecies.abilities['0'],
|
||||
baseStats: {},
|
||||
|
|
@ -491,15 +497,19 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
let formeType: string | null = null;
|
||||
if (['Arceus', 'Silvally'].includes(baseSpecies.name)) {
|
||||
deltas.type = formeChangeSpecies.types[0];
|
||||
formeType = 'Arceus';
|
||||
formeType = 'Primary';
|
||||
} else if (formeChangeSpecies.types.length > baseSpecies.types.length) {
|
||||
deltas.type = formeChangeSpecies.types[1];
|
||||
} else if (formeChangeSpecies.types.length < baseSpecies.types.length) {
|
||||
deltas.type = this.battle.ruleTable.has('mixandmegaoldaggronite') ? 'mono' : baseSpecies.types[0];
|
||||
} else if (formeChangeSpecies.types[1] !== baseSpecies.types[1]) {
|
||||
deltas.type = formeChangeSpecies.types[1];
|
||||
} else if (formeChangeSpecies.types[0] !== baseSpecies.types[0]) {
|
||||
deltas.type = formeChangeSpecies.types[0];
|
||||
formeType = 'Primary';
|
||||
deltas.isMega = true;
|
||||
}
|
||||
if (formeChangeSpecies.isMega) formeType = 'Mega';
|
||||
if (formeChangeSpecies.isMega && !formeType) formeType = 'Mega';
|
||||
if (formeChangeSpecies.isPrimal) formeType = 'Primal';
|
||||
if (formeChangeSpecies.name.endsWith('Crowned')) formeType = 'Crowned';
|
||||
if (formeType) deltas.formeType = formeType;
|
||||
|
|
@ -513,7 +523,7 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
if (!deltas) throw new TypeError("Must specify deltas!");
|
||||
const species = this.dex.deepClone(this.dex.species.get(speciesOrForme));
|
||||
species.abilities = { '0': deltas.ability };
|
||||
if (deltas.formeType === 'Arceus') {
|
||||
if (deltas.formeType === 'Primary') {
|
||||
const secondType = species.types[1];
|
||||
species.types = [deltas.type];
|
||||
if (secondType && secondType !== deltas.type) species.types.push(secondType);
|
||||
|
|
@ -532,7 +542,7 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
species.heightm = Math.max(0.1, ((species.heightm * 10) + (deltas.heightm * 10)) / 10);
|
||||
species.originalSpecies = deltas.originalSpecies;
|
||||
species.requiredItem = deltas.requiredItem;
|
||||
if (deltas.formeType === 'Mega') species.isMega = true;
|
||||
if (deltas.formeType === 'Mega' || deltas.isMega) species.isMega = true;
|
||||
if (deltas.formeType === 'Primal') species.isPrimal = true;
|
||||
return species;
|
||||
},
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
this.add('rated', typeof this.rated === 'string' ? this.rated : '');
|
||||
}
|
||||
|
||||
format.onBegin?.call(this);
|
||||
this.format.onBegin?.call(this);
|
||||
for (const rule of this.ruleTable.keys()) {
|
||||
if ('+*-!'.includes(rule.charAt(0))) continue;
|
||||
const subFormat = this.dex.formats.get(rule);
|
||||
|
|
|
|||
135
data/mods/scootopiav2/abilities.ts
Normal file
135
data/mods/scootopiav2/abilities.ts
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
|
||||
mythicalpresence: {
|
||||
name: "Mythical Presence",
|
||||
shortDesc: "Lowers opposing Pokemon Special Attack by 1 stage when switching in.",
|
||||
onStart(pokemon) {
|
||||
let activated = false;
|
||||
for (const target of pokemon.adjacentFoes()) {
|
||||
if (!activated) {
|
||||
this.add('-ability', pokemon, 'Mythical Presence', 'boost');
|
||||
activated = true;
|
||||
}
|
||||
if (target.volatiles['substitute']) {
|
||||
this.add('-immune', target);
|
||||
} else {
|
||||
this.boost({ spa: -1 }, target, pokemon, null, true);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
powerconstruct: {
|
||||
onResidualOrder: 27,
|
||||
onResidual(pokemon) {
|
||||
if (pokemon.baseSpecies.baseSpecies !== 'Flocura' || pokemon.transformed || !pokemon.hp) return;
|
||||
if (pokemon.species.id === 'flocuranexus' || pokemon.hp > pokemon.maxhp / 2) return;
|
||||
this.add('-activate', pokemon, 'ability: Power Construct');
|
||||
pokemon.formeChange('Flocura-Nexus', this.effect, true);
|
||||
pokemon.baseMaxhp = Math.floor(Math.floor(
|
||||
2 * pokemon.species.baseStats['hp'] + pokemon.set.ivs['hp'] + Math.floor(pokemon.set.evs['hp'] / 4) + 100
|
||||
) * pokemon.level / 100 + 10);
|
||||
const newMaxHP = pokemon.volatiles['dynamax'] ? (2 * pokemon.baseMaxhp) : pokemon.baseMaxhp;
|
||||
pokemon.hp = newMaxHP - (pokemon.maxhp - pokemon.hp);
|
||||
pokemon.maxhp = newMaxHP;
|
||||
this.add('-heal', pokemon, pokemon.getHealth, '[silent]');
|
||||
},
|
||||
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 },
|
||||
name: "Power Construct",
|
||||
rating: 5,
|
||||
num: 211,
|
||||
},
|
||||
battlebond: {
|
||||
shortDesc: "Change to a stronger forme after getting a KO.",
|
||||
onSourceAfterFaint(length, target, source, effect) {
|
||||
if (effect?.effectType !== 'Move') {
|
||||
return;
|
||||
}
|
||||
if (source.species.id === 'soleron' && source.hp && !source.transformed && source.side.foe.pokemonLeft) {
|
||||
this.add('-activate', source, 'ability: Battle Bond');
|
||||
source.formeChange('Soleron-Awakened', this.effect, true);
|
||||
}
|
||||
},
|
||||
onModifyMovePriority: -1,
|
||||
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 },
|
||||
name: "Battle Bond",
|
||||
rating: 4,
|
||||
num: 210,
|
||||
},
|
||||
crystalheart: {
|
||||
shortDesc: "User becomes Crystal type. While Crystal type, 33% boost to Def and SpD",
|
||||
onStart(pokemon) {
|
||||
if (pokemon.hasType('Crystal')) return false;
|
||||
if (!pokemon.addType('Crystal')) return false;
|
||||
pokemon.setType(["Crystal"]);
|
||||
this.add('-start', pokemon, 'typechange', 'Crystal', '[from] ability: Crystal Heart');
|
||||
},
|
||||
onModifyDefPriority: 6,
|
||||
onModifyDef(def, pokemon) {
|
||||
if (pokemon.hasType('Crystal')) return this.chainModify(1 + (1 / 3));
|
||||
},
|
||||
onModifySpDPriority: 6,
|
||||
onModifySpD(spd, pokemon) {
|
||||
if (pokemon.hasType('Crystal')) return this.chainModify(1 + (1 / 3));
|
||||
},
|
||||
name: "Crystal Heart",
|
||||
},
|
||||
wildheart: {
|
||||
onStart(pokemon) {
|
||||
if (pokemon.hasType('Feral')) return false;
|
||||
if (!pokemon.addType('Feral')) return false;
|
||||
pokemon.setType(["Feral"]);
|
||||
this.add('-start', pokemon, 'typechange', "Feral", '[from] ability: Wild Heart');
|
||||
},
|
||||
onModifyAtkPriority: 6,
|
||||
onModifyAtk(atk, pokemon) {
|
||||
if (pokemon.hasType('Feral')) return this.chainModify(1 + (1 / 3));
|
||||
},
|
||||
onModifySpAPriority: 6,
|
||||
onModifySpA(spa, pokemon) {
|
||||
if (pokemon.hasType('Feral')) return this.chainModify(1 + (1 / 3));
|
||||
},
|
||||
name: "Wild Heart",
|
||||
shortDesc: "User becomes Feral type. While Feral type, 33% boost to Atk and SpA",
|
||||
},
|
||||
schooling: {
|
||||
onStart(pokemon) {
|
||||
if (pokemon.baseSpecies.baseSpecies !== 'Jaegorm' || pokemon.transformed) return;
|
||||
if (pokemon.hp > pokemon.maxhp / 4) {
|
||||
if (pokemon.species.id === 'jaegorm') {
|
||||
pokemon.formeChange('Jaegorm-Collective');
|
||||
}
|
||||
} else {
|
||||
if (pokemon.species.id === 'jaegormcollective') {
|
||||
pokemon.formeChange('Jaegorm');
|
||||
}
|
||||
}
|
||||
},
|
||||
onResidualOrder: 27,
|
||||
onResidual(pokemon) {
|
||||
if (
|
||||
pokemon.baseSpecies.baseSpecies !== 'Jaegorm' || pokemon.transformed || !pokemon.hp
|
||||
) return;
|
||||
if (pokemon.hp > pokemon.maxhp / 4) {
|
||||
if (pokemon.species.id === 'jaegorm') {
|
||||
pokemon.formeChange('Jaegorm-Collective');
|
||||
}
|
||||
} else {
|
||||
if (pokemon.species.id === 'jaegormcollective') {
|
||||
pokemon.formeChange('Jaegorm');
|
||||
}
|
||||
}
|
||||
},
|
||||
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 },
|
||||
name: "Schooling",
|
||||
shortDesc: "If user is Jaegorm, changes to Collective Form if it has > 1/4 max HP, else Solo Form.",
|
||||
rating: 3,
|
||||
num: 208,
|
||||
},
|
||||
shellbunker: {
|
||||
onDamage(damage, target, source, effect) {
|
||||
if (effect.effectType !== 'Move' || !target.hurtThisTurn) return damage;
|
||||
return damage / 2;
|
||||
},
|
||||
name: "Shell Bunker",
|
||||
shortDesc: "After taking damage, Def and SpD are doubled for the rest of the turn.",
|
||||
},
|
||||
};
|
||||
67
data/mods/scootopiav2/conditions.ts
Normal file
67
data/mods/scootopiav2/conditions.ts
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = {
|
||||
frz: {
|
||||
name: 'frz',
|
||||
/*
|
||||
start: " [Pokemon] was chilled!",
|
||||
alreadyStarted: " [POKEMON] is already chilled!",
|
||||
end: " [POKEMON] warmed up!",
|
||||
endFromItem: " [POKEMON]'s [ITEM] warmed it up!",
|
||||
endFromMove: " [POKEMON]'s [MOVE] warmed it up!",
|
||||
cant: "[POKEMON] is chilled!",
|
||||
*/
|
||||
effectType: 'Status',
|
||||
onStart(target, source, sourceEffect) {
|
||||
if (sourceEffect && sourceEffect.effectType === 'Ability') {
|
||||
this.add('-status', target, 'frz', '[from] ability: ' + sourceEffect.name, `[of] ${source}`);
|
||||
} else {
|
||||
this.add('-status', target, 'frz');
|
||||
}
|
||||
},
|
||||
onResidualOrder: 9,
|
||||
onResidual(pokemon) {
|
||||
this.damage(pokemon.baseMaxhp / 16);
|
||||
},
|
||||
onModifySpA(spa, pokemon) {
|
||||
return this.chainModify(0.5);
|
||||
},
|
||||
},
|
||||
slp: {
|
||||
name: 'slp',
|
||||
effectType: 'Status',
|
||||
onStart(target, source, sourceEffect) {
|
||||
if (sourceEffect && sourceEffect.effectType === 'Ability') {
|
||||
this.add('-status', target, 'slp', '[from] ability: ' + sourceEffect.name, `[of] ${source}`);
|
||||
} else if (sourceEffect && sourceEffect.effectType === 'Move') {
|
||||
this.add('-status', target, 'slp', '[from] move: ' + sourceEffect.name);
|
||||
} else {
|
||||
this.add('-status', target, 'slp');
|
||||
}
|
||||
// 1-3 turns
|
||||
this.effectState.startTime = 3;
|
||||
const sleepMoves = ["sleeppowder", "spore", "grasswhistle", "darkvoid", "hypnosis"];
|
||||
if (sourceEffect && sourceEffect.effectType === 'Move') {
|
||||
if (sleepMoves.includes(sourceEffect.id)) this.effectState.startTime = 2;
|
||||
}
|
||||
this.effectState.time = this.effectState.startTime;
|
||||
},
|
||||
onBeforeMovePriority: 10,
|
||||
onBeforeMove(pokemon, target, move) {
|
||||
if (pokemon.hasAbility('earlybird')) {
|
||||
pokemon.statusState.time--;
|
||||
}
|
||||
pokemon.statusState.time--;
|
||||
if (pokemon.statusState.time <= 0) {
|
||||
pokemon.cureStatus();
|
||||
return;
|
||||
}
|
||||
this.add('cant', pokemon, 'slp');
|
||||
if (move.sleepUsable) {
|
||||
return;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
onModifySpe(spe, pokemon) {
|
||||
return this.chainModify(0.5);
|
||||
},
|
||||
},
|
||||
};
|
||||
218
data/mods/scootopiav2/formats-data.ts
Normal file
218
data/mods/scootopiav2/formats-data.ts
Normal file
|
|
@ -0,0 +1,218 @@
|
|||
export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = {
|
||||
arbrella: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
krachiten: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
scalaron: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
rantler: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
woolora: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
albatrygon: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
orchile: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
embuck: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
cindoe: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
cobracotta: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
minillow: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
crossont: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
torgeist: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
platypad: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
lumoth: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
aurorowl: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
carapex: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
dojodo: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
nunopod: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
zeploom: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
sturgard: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
brawnkey: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
salamalix: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
cinnastar: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
muabboa: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
harzodia: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
cyllindrake: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
kodokai: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
electangle: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
dolphena: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
soleron: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
jaegorm: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
elemadillo: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
axolacred: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
roscenti: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
blunderbusk: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
barracoth: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
jamborai: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
dracoil: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
celespirit: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
noxtrice: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
avastar: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
faerenheit: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
cellsius: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
kelven: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
salaos: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
morndos: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
pythos: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
corundell: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
quadringo: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
saphor: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
fenreil: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
efflor: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
flocura: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
};
|
||||
88
data/mods/scootopiav2/items.ts
Normal file
88
data/mods/scootopiav2/items.ts
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
|
||||
crystalorb: {
|
||||
name: "Crystal Orb",
|
||||
num: 1001,
|
||||
desc: "The holder's secondary type is replaced with Crystal. 20% boost to Crystal attacks.",
|
||||
onBeforeSwitchIn(pokemon) {
|
||||
if (this.effectState.usedSuperType && this.effectState.superTypeUser !== pokemon.fullname) return false;
|
||||
if (pokemon.hasType('Crystal')) return false;
|
||||
if (!pokemon.addType('Crystal')) return false;
|
||||
pokemon.setType([pokemon.types[0], "Crystal"]);
|
||||
this.effectState.usedSuperType = true;
|
||||
this.effectState.superTypeUser = "first_switch";
|
||||
},
|
||||
onStart(pokemon) {
|
||||
if (this.effectState.usedSuperType && this.effectState.superTypeUser === "first_switch") {
|
||||
this.add('-message', pokemon.name + " is a Crystal type!");
|
||||
this.effectState.superTypeUser = pokemon.fullname;
|
||||
}
|
||||
if (this.effectState.usedSuperType && this.effectState.superTypeUser === pokemon.fullname) {
|
||||
this.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]');
|
||||
}
|
||||
},
|
||||
onUpdate(pokemon) {
|
||||
if (
|
||||
this.effectState.usedSuperType && this.effectState.superTypeUser === pokemon.fullname && !pokemon.hasType('Crystal')
|
||||
) {
|
||||
pokemon.setType([pokemon.types[0], "Crystal"]);
|
||||
this.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]');
|
||||
}
|
||||
},
|
||||
onTakeItem(item, pokemon, source) {
|
||||
if (source?.hasType("Crystal")) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
onBasePowerPriority: 15,
|
||||
onBasePower(basePower, user, target, move) {
|
||||
if (move && move.type === 'Crystal') {
|
||||
return this.chainModify([0x1333, 0x1000]);
|
||||
}
|
||||
},
|
||||
gen: 9,
|
||||
},
|
||||
feralorb: {
|
||||
name: "Feral Orb",
|
||||
num: 1002,
|
||||
desc: "The holder's secondary type is replaced with Feral. 20% boost to Feral attacks.",
|
||||
onBeforeSwitchIn(pokemon) {
|
||||
if (this.effectState.usedSuperType && this.effectState.superTypeUser !== pokemon.fullname) return false;
|
||||
if (pokemon.hasType('Feral')) return false;
|
||||
if (!pokemon.addType('Feral')) return false;
|
||||
pokemon.setType([pokemon.types[0], "Feral"]);
|
||||
this.effectState.usedSuperType = true;
|
||||
this.effectState.superTypeUser = "first_switch";
|
||||
},
|
||||
onStart(pokemon) {
|
||||
if (this.effectState.usedSuperType && this.effectState.superTypeUser === "first_switch") {
|
||||
this.add('-message', pokemon.name + " is a Feral type!");
|
||||
this.effectState.superTypeUser = pokemon.fullname;
|
||||
}
|
||||
if (this.effectState.usedSuperType && this.effectState.superTypeUser === pokemon.fullname) {
|
||||
this.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]');
|
||||
}
|
||||
},
|
||||
onUpdate(pokemon) {
|
||||
if (
|
||||
this.effectState.usedSuperType && this.effectState.superTypeUser === pokemon.fullname && !pokemon.hasType('Feral')
|
||||
) {
|
||||
pokemon.setType([pokemon.types[0], "Feral"]);
|
||||
this.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]');
|
||||
}
|
||||
},
|
||||
onTakeItem(item, pokemon, source) {
|
||||
if (source?.hasType("Feral")) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
onBasePowerPriority: 15,
|
||||
onBasePower(basePower, user, target, move) {
|
||||
if (move && move.type === 'Feral') {
|
||||
return this.chainModify([0x1333, 0x1000]);
|
||||
}
|
||||
},
|
||||
gen: 9,
|
||||
},
|
||||
};
|
||||
4473
data/mods/scootopiav2/learnsets.ts
Normal file
4473
data/mods/scootopiav2/learnsets.ts
Normal file
File diff suppressed because it is too large
Load Diff
1284
data/mods/scootopiav2/moves.ts
Normal file
1284
data/mods/scootopiav2/moves.ts
Normal file
File diff suppressed because it is too large
Load Diff
551
data/mods/scootopiav2/pokedex.ts
Normal file
551
data/mods/scootopiav2/pokedex.ts
Normal file
|
|
@ -0,0 +1,551 @@
|
|||
export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = {
|
||||
arbrella: {
|
||||
num: 2001,
|
||||
name: "Arbrella",
|
||||
types: ["Grass", "Ground"],
|
||||
baseStats: { hp: 80, atk: 115, def: 100, spa: 80, spd: 80, spe: 75 },
|
||||
abilities: { 0: "Overgrow", H: "Tough Claws" },
|
||||
weightkg: 211,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
krachiten: {
|
||||
num: 2002,
|
||||
name: "Krachiten",
|
||||
types: ["Water", "Bug"],
|
||||
baseStats: { hp: 90, atk: 120, def: 70, spa: 78, spd: 60, spe: 112 },
|
||||
abilities: { 0: "Torrent", H: "Sniper" },
|
||||
weightkg: 59,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
scalaron: {
|
||||
num: 2003,
|
||||
name: "Scalaron",
|
||||
types: ["Fire", "Flying"],
|
||||
baseStats: { hp: 90, atk: 70, def: 90, spa: 100, spd: 105, spe: 75 },
|
||||
abilities: { 0: "Blaze", H: "Filter" },
|
||||
weightkg: 70,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
rantler: {
|
||||
num: 2004,
|
||||
name: "Rantler",
|
||||
types: ["Normal", "Ice"],
|
||||
baseStats: { hp: 68, atk: 118, def: 94, spa: 43, spd: 79, spe: 73 },
|
||||
abilities: { 0: "Intimidate", 1: "Slush Rush", H: "Tough Claws" },
|
||||
weightkg: 67,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
woolora: {
|
||||
num: 2005,
|
||||
name: "Woolora",
|
||||
types: ["Fairy"],
|
||||
baseStats: { hp: 70, atk: 75, def: 70, spa: 95, spd: 115, spe: 70 },
|
||||
abilities: { 0: "Fluffy", 1: "Rattled", H: "Pastel Veil" },
|
||||
weightkg: 50.3,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
albatrygon: {
|
||||
num: 2006,
|
||||
name: "Albatrygon",
|
||||
types: ["Flying"],
|
||||
baseStats: { hp: 80, atk: 105, def: 70, spa: 65, spd: 60, spe: 95 },
|
||||
abilities: { 0: "Prankster", 1: "Klutz", H: "Unburden" },
|
||||
weightkg: 10.1,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
orchile: {
|
||||
num: 2007,
|
||||
name: "Orchile",
|
||||
types: ["Grass", "Fairy"],
|
||||
baseStats: { hp: 65, atk: 60, def: 75, spa: 110, spd: 121, spe: 64 },
|
||||
abilities: { 0: "Sweet Veil", 1: "Aroma Veil", H: "Flower Veil" },
|
||||
weightkg: 45,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
embuck: {
|
||||
num: 2008,
|
||||
name: "Embuck",
|
||||
types: ["Fire", "Fighting"],
|
||||
baseStats: { hp: 90, atk: 125, def: 80, spa: 83, spd: 65, spe: 82 },
|
||||
abilities: { 0: "Intimidate", H: "Flash Fire" },
|
||||
weightkg: 113,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
cindoe: {
|
||||
num: 2009,
|
||||
name: "Cindoe",
|
||||
types: ["Fire", "Dark"],
|
||||
baseStats: { hp: 80, atk: 74, def: 55, spa: 110, spd: 100, spe: 106 },
|
||||
abilities: { 0: "Natural Cure", H: "Flash Fire" },
|
||||
weightkg: 67,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
cobracotta: {
|
||||
num: 2010,
|
||||
name: "Cobracotta",
|
||||
types: ["Grass", "Poison"],
|
||||
baseStats: { hp: 80, atk: 90, def: 95, spa: 80, spd: 115, spe: 35 },
|
||||
abilities: { 0: "Mold Breaker", 1: "Weak Armor", H: "Heatproof" },
|
||||
weightkg: 68,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
minillow: {
|
||||
num: 2011,
|
||||
name: "Minillow",
|
||||
types: ["Water", "Fairy"],
|
||||
baseStats: { hp: 70, atk: 64, def: 75, spa: 90, spd: 95, spe: 81 },
|
||||
abilities: { 0: "Swift Swim", 1: "Dazzling", H: "Adaptability" },
|
||||
weightkg: 22,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
crossont: {
|
||||
num: 2012,
|
||||
name: "Crossont",
|
||||
types: ["Bug", "Fighting"],
|
||||
baseStats: { hp: 80, atk: 125, def: 100, spa: 60, spd: 80, spe: 80 },
|
||||
abilities: { 0: "Sniper", 1: "Long Reach", H: "Gooey" },
|
||||
weightkg: 121,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
torgeist: {
|
||||
num: 2013,
|
||||
name: "Torgeist",
|
||||
types: ["Ghost", "Flying"],
|
||||
baseStats: { hp: 55, atk: 65, def: 95, spa: 115, spd: 100, spe: 105 },
|
||||
abilities: { 0: "Cursed Body", 1: "Clear Body", H: "Merciless" },
|
||||
weightkg: 9.7,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
platypad: {
|
||||
num: 2014,
|
||||
name: "Platypad",
|
||||
types: ["Grass", "Water"],
|
||||
baseStats: { hp: 120, atk: 100, def: 80, spa: 100, spd: 80, spe: 40 },
|
||||
abilities: { 0: "Thick Fat", 1: "Triage", H: "Flower Veil" },
|
||||
weightkg: 89,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
lumoth: {
|
||||
num: 2015,
|
||||
name: "Lumoth",
|
||||
types: ["Bug", "Ghost"],
|
||||
baseStats: { hp: 60, atk: 55, def: 91, spa: 110, spd: 85, spe: 94 },
|
||||
abilities: { 0: "Levitate" },
|
||||
weightkg: 0.5,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
aurorowl: {
|
||||
num: 2016,
|
||||
name: "Aurorowl",
|
||||
types: ["Ice", "Flying"],
|
||||
baseStats: { hp: 70, atk: 70, def: 65, spa: 95, spd: 95, spe: 115 },
|
||||
abilities: { 0: "Snow Cloak", H: "Technician" },
|
||||
weightkg: 15,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
carapex: {
|
||||
num: 2017,
|
||||
name: "Carapex",
|
||||
types: ["Bug", "Flying"],
|
||||
baseStats: { hp: 75, atk: 105, def: 155, spa: 55, spd: 90, spe: 60 },
|
||||
abilities: { 0: "Wind Rider", 1: "Mold Breaker", H: "Sturdy" },
|
||||
weightkg: 135,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
dojodo: {
|
||||
num: 2018,
|
||||
name: "Dojodo",
|
||||
types: ["Fighting"],
|
||||
baseStats: { hp: 90, atk: 115, def: 80, spa: 65, spd: 100, spe: 80 },
|
||||
abilities: { 0: "Iron Fist", 1: "Stamina", H: "Supreme Overlord" },
|
||||
weightkg: 53,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
nunopod: {
|
||||
num: 2019,
|
||||
name: "Nunopod",
|
||||
types: ["Ground", "Bug"],
|
||||
baseStats: { hp: 80, atk: 110, def: 125, spa: 68, spd: 75, spe: 67 },
|
||||
abilities: { 0: "Earth Eater", H: "Opportunist" },
|
||||
weightkg: 68,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
zeploom: {
|
||||
num: 2020,
|
||||
name: "Zeploom",
|
||||
types: ["Grass", "Ground"],
|
||||
baseStats: { hp: 55, atk: 55, def: 145, spa: 65, spd: 150, spe: 45 },
|
||||
abilities: { 0: "Wind Rider", H: "Levitate" },
|
||||
weightkg: 5,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
brawnkey: {
|
||||
num: 2021,
|
||||
name: "Brawnkey",
|
||||
types: ["Steel", "Fighting"],
|
||||
baseStats: { hp: 95, atk: 105, def: 105, spa: 85, spd: 80, spe: 50 },
|
||||
abilities: { 0: "Levitate" },
|
||||
weightkg: 85,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
salamalix: {
|
||||
num: 2022,
|
||||
name: "Salamalix",
|
||||
types: ["Rock", "Steel"],
|
||||
baseStats: { hp: 70, atk: 120, def: 120, spa: 45, spd: 65, spe: 90 },
|
||||
abilities: { 0: "No Guard", 1: "Mold Breaker", H: "Intimidate" },
|
||||
weightkg: 85,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
cinnastar: {
|
||||
num: 2023,
|
||||
name: "Cinnastar",
|
||||
types: ["Rock", "Poison"],
|
||||
baseStats: { hp: 110, atk: 95, def: 80, spa: 95, spd: 80, spe: 80 },
|
||||
abilities: { 0: "Liquid Ooze", H: "Regenerator" },
|
||||
weightkg: 56,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
muabboa: {
|
||||
num: 2024,
|
||||
name: "MuabBoa",
|
||||
types: ["Ground", "Fighting"],
|
||||
baseStats: { hp: 65, atk: 100, def: 75, spa: 55, spd: 65, spe: 120 },
|
||||
abilities: { 0: "Anticipation", 1: "Sand Rush", H: "Inner Focus" },
|
||||
weightkg: 25,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
volvolpa: {
|
||||
num: 2025,
|
||||
name: "Volvolpa",
|
||||
types: ["Electric", "Ice"],
|
||||
baseStats: { hp: 76, atk: 97, def: 64, spa: 70, spd: 102, spe: 121 },
|
||||
abilities: { 0: "Slush Rush", 1: "Volt Absorb", H: "Strong Jaw" },
|
||||
weightkg: 27,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
harzodia: {
|
||||
num: 2026,
|
||||
name: "Harzodia",
|
||||
types: ["Psychic"],
|
||||
baseStats: { hp: 65, atk: 55, def: 75, spa: 125, spd: 75, spe: 95 },
|
||||
abilities: { 0: "Prankster", 1: "Unburden", H: "Solar Power" },
|
||||
weightkg: 35,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
cyllindrake: {
|
||||
num: 2027,
|
||||
name: "Cyllindrake",
|
||||
types: ["Steel", "Dragon"],
|
||||
baseStats: { hp: 70, atk: 85, def: 115, spa: 95, spd: 70, spe: 110 },
|
||||
abilities: { 0: "Heavy Metal", 1: "Punk Rock", H: "Scrappy" },
|
||||
weightkg: 180,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
kodokai: {
|
||||
num: 2028,
|
||||
name: "Kodokai",
|
||||
types: ["Ghost", "Fire"],
|
||||
baseStats: { hp: 110, atk: 65, def: 100, spa: 110, spd: 90, spe: 30 },
|
||||
abilities: { 0: "White Smoke", H: "Aroma Veil" },
|
||||
weightkg: 50,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
electangle: {
|
||||
num: 2029,
|
||||
name: "Electangle",
|
||||
types: ["Steel", "Electric"],
|
||||
baseStats: { hp: 120, atk: 90, def: 110, spa: 90, spd: 90, spe: 25 },
|
||||
abilities: { 0: "Filter" },
|
||||
weightkg: 190,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
dolphena: {
|
||||
num: 2030,
|
||||
name: "Dolphena",
|
||||
types: ["Water", "Dragon"],
|
||||
baseStats: { hp: 95, atk: 125, def: 80, spa: 84, spd: 75, spe: 81 },
|
||||
abilities: { 0: "Anger Point", H: "Mythical Presence" },
|
||||
weightkg: 271,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
elemadillo: {
|
||||
num: 2035,
|
||||
name: "Elemadillo",
|
||||
types: ["Steel", "Electric"],
|
||||
baseStats: { hp: 67, atk: 94, def: 73, spa: 103, spd: 64, spe: 129 },
|
||||
abilities: { 0: "Weak Armor", 1: "Motor Drive", H: "Stalwart" },
|
||||
weightkg: 58,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
axolacred: {
|
||||
num: 2036,
|
||||
name: "Axolacred",
|
||||
types: ["Dragon"],
|
||||
baseStats: { hp: 85, atk: 90, def: 85, spa: 95, spd: 95, spe: 65 },
|
||||
abilities: { 0: "Magic Guard", H: "Purifying Salt" },
|
||||
weightkg: 33,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
roscenti: {
|
||||
num: 2037,
|
||||
name: "Roscenti",
|
||||
types: ["Bug", "Grass"],
|
||||
baseStats: { hp: 80, atk: 115, def: 100, spa: 75, spd: 80, spe: 100 },
|
||||
abilities: { 0: "Sheer Force", 1: "Chlorophyll", H: "Skill Link" },
|
||||
eggGroups: ["Undiscovered"],
|
||||
weightkg: 37,
|
||||
},
|
||||
blunderbusk: {
|
||||
num: 2038,
|
||||
name: "Blunderbusk",
|
||||
types: ["Water"],
|
||||
baseStats: { hp: 73, atk: 67, def: 124, spa: 128, spd: 89, spe: 24 },
|
||||
abilities: { 0: "Mega Launcher", H: "Shell Bunker" },
|
||||
weightkg: 86,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
barracoth: {
|
||||
num: 2039,
|
||||
name: "Barracoth",
|
||||
types: ["Ice", "Water"],
|
||||
baseStats: { hp: 140, atk: 115, def: 110, spa: 55, spd: 65, spe: 35 },
|
||||
abilities: { 0: "Filter", 1: "Thick Fat", H: "Multiscale" },
|
||||
weightkg: 356,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
jamborai: {
|
||||
num: 2040,
|
||||
name: "Jamborai",
|
||||
types: ["Poison", "Psychic"],
|
||||
baseStats: { hp: 75, atk: 55, def: 125, spa: 120, spd: 85, spe: 65 },
|
||||
abilities: { 0: "Clear Body", 1: "Gooey", H: "Water Absorb" },
|
||||
weightkg: 84,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
dracoil: {
|
||||
num: 2041,
|
||||
name: "Dracoil",
|
||||
types: ["Dragon", "Flying"],
|
||||
baseStats: { hp: 105, atk: 106, def: 85, spa: 96, spd: 60, spe: 78 },
|
||||
abilities: { 0: "Mythical Presence", 1: "Gluttony", H: "Marvel Scale" },
|
||||
weightkg: 428,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
celespirit: {
|
||||
num: 2042,
|
||||
name: "Celespirit",
|
||||
types: ["Ghost"],
|
||||
baseStats: { hp: 75, atk: 61, def: 73, spa: 117, spd: 135, spe: 69 },
|
||||
abilities: { 0: "Levitate", H: "Power Spot" },
|
||||
weightkg: 25.8,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
noxtrice: {
|
||||
num: 2043,
|
||||
name: "Noxtrice",
|
||||
types: ["Poison", "Fire"],
|
||||
baseStats: { hp: 65, atk: 118, def: 75, spa: 63, spd: 80, spe: 114 },
|
||||
abilities: { 0: "Poison Touch", H: "Flash Fire" },
|
||||
weightkg: 73.7,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
sturgard: {
|
||||
num: 2055,
|
||||
name: "Sturgard",
|
||||
types: ["Water", "Ground"],
|
||||
baseStats: { hp: 105, atk: 110, def: 105, spa: 65, spd: 70, spe: 70 },
|
||||
abilities: { 0: "Rock Head", 1: "Battle Armor", H: "Mold Breaker" },
|
||||
weightkg: 143,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
avastar: {
|
||||
num: 2034,
|
||||
name: "Avastar",
|
||||
types: ["Psychic", "Steel"],
|
||||
baseStats: { hp: 75, atk: 85, def: 110, spa: 115, spd: 100, spe: 60 },
|
||||
abilities: { 0: "Stalwart", 1: "Heavy Metal", H: "Shell Bunker" },
|
||||
weightkg: 999.9,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
faerenheit: {
|
||||
num: 2044,
|
||||
name: "Faerenheit",
|
||||
types: ["Fire", "Fairy"],
|
||||
baseStats: { hp: 71, atk: 83, def: 127, spa: 97, spd: 109, spe: 83 },
|
||||
abilities: { 0: "Beast Boost" },
|
||||
weightkg: 2.1,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
cellsius: {
|
||||
num: 2045,
|
||||
name: "Cellsius",
|
||||
types: ["Water", "Fairy"],
|
||||
baseStats: { hp: 71, atk: 83, def: 83, spa: 109, spd: 127, spe: 97 },
|
||||
abilities: { 0: "Beast Boost" },
|
||||
weightkg: 2.4,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
kelven: {
|
||||
num: 2046,
|
||||
name: "Kelven",
|
||||
types: ["Ice", "Fairy"],
|
||||
baseStats: { hp: 71, atk: 127, def: 109, spa: 83, spd: 83, spe: 97 },
|
||||
abilities: { 0: "Beast Boost" },
|
||||
weightkg: 2.8,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
salaos: {
|
||||
num: 2047,
|
||||
name: "Salaos",
|
||||
types: ["Dark"],
|
||||
baseStats: { hp: 75, atk: 85, def: 90, spa: 110, spd: 130, spe: 90 },
|
||||
abilities: { 0: "Good as Gold" },
|
||||
weightkg: 74,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
morndos: {
|
||||
num: 2048,
|
||||
name: "Morndos",
|
||||
types: ["Dark", "Flying"],
|
||||
baseStats: { hp: 110, atk: 90, def: 75, spa: 90, spd: 85, spe: 130 },
|
||||
abilities: { 0: "Synchronize" },
|
||||
weightkg: 56,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
pythos: {
|
||||
num: 2049,
|
||||
name: "Pythos",
|
||||
types: ["Dark"],
|
||||
baseStats: { hp: 90, atk: 110, def: 130, spa: 85, spd: 90, spe: 75 },
|
||||
abilities: { 0: "Guts" },
|
||||
weightkg: 178,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
corundell: {
|
||||
num: 2050,
|
||||
name: "Corundell",
|
||||
types: ["Rock", "Electric"],
|
||||
baseStats: { hp: 75, atk: 100, def: 130, spa: 105, spd: 80, spe: 110 },
|
||||
abilities: { 0: "Lightning Rod", H: "Protosynthesis" },
|
||||
weightkg: 137,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
quadringo: {
|
||||
num: 2051,
|
||||
name: "Quadringo",
|
||||
types: ["Fairy", "Dragon"],
|
||||
baseStats: { hp: 80, atk: 120, def: 95, spa: 100, spd: 120, spe: 85 },
|
||||
abilities: { 0: "Hydration", 1: "Pastel Veil", H: "Inner Focus" },
|
||||
weightkg: 156,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
saphor: {
|
||||
num: 2052,
|
||||
name: "Saphor",
|
||||
types: ["Ground", "Normal"],
|
||||
baseStats: { hp: 95, atk: 100, def: 105, spa: 100, spd: 105, spe: 95 },
|
||||
abilities: { 0: "Thick Fat", 1: "Crystal Heart" },
|
||||
weightkg: 638,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
fenreil: {
|
||||
num: 2053,
|
||||
name: "Fenreil",
|
||||
types: ["Dark", "Normal"],
|
||||
baseStats: { hp: 80, atk: 105, def: 97, spa: 105, spd: 97, spe: 116 },
|
||||
abilities: { 0: "Natural Cure", 1: "Wild Heart" },
|
||||
weightkg: 232,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
soleron: {
|
||||
num: 2031,
|
||||
name: "Soleron",
|
||||
types: ["Electric", "Flying"],
|
||||
baseStats: { hp: 70, atk: 75, def: 65, spa: 115, spd: 75, spe: 115 },
|
||||
abilities: { 0: "Battle Bond" },
|
||||
otherFormes: ["Soleron-Awakened"],
|
||||
formeOrder: ["Soleron", "Soleron-Awakened"],
|
||||
weightkg: 12,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
soleronawakened: {
|
||||
num: 2031,
|
||||
name: "Soleron-Awakened",
|
||||
baseSpecies: "Soleron",
|
||||
forme: "Awakened",
|
||||
types: ["Electric", "Flying"],
|
||||
baseStats: { hp: 70, atk: 105, def: 85, spa: 135, spd: 95, spe: 125 },
|
||||
abilities: { 0: "Battle Bond" },
|
||||
requiredAbility: "Battle Bond",
|
||||
battleOnly: "Soleron",
|
||||
weightkg: 24,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
efflor: {
|
||||
num: 2032,
|
||||
name: "Efflor",
|
||||
types: ["Rock", "Grass"],
|
||||
baseStats: { hp: 80, atk: 85, def: 110, spa: 105, spd: 110, spe: 25 },
|
||||
abilities: { 0: "Solid Rock", 1: "Unaware", H: "Seed Sower" },
|
||||
weightkg: 113,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
pictagon: {
|
||||
num: 2055,
|
||||
name: "Pictagon",
|
||||
types: ["Dragon", "Ghost"],
|
||||
baseStats: { hp: 105, atk: 105, def: 60, spa: 80, spd: 85, spe: 95 },
|
||||
abilities: { 0: "Clear Body", 1: "Infiltrator", H: "No Guard" },
|
||||
weightkg: 113,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
jaegorm: {
|
||||
num: 2033,
|
||||
name: "Jaegorm",
|
||||
types: ["Bug", "Psychic"],
|
||||
baseStats: { hp: 60, atk: 65, def: 40, spa: 130, spd: 40, spe: 130 },
|
||||
abilities: { 0: "Schooling" },
|
||||
otherFormes: ["Jaegorm-Collective"],
|
||||
formeOrder: ["Jaegorm", "Jaegorm-Collective"],
|
||||
weightkg: 10,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
jaegormcollective: {
|
||||
num: 2033,
|
||||
name: "Jaegorm-Collective",
|
||||
baseSpecies: "Jaegorm",
|
||||
forme: "Collective",
|
||||
types: ["Bug", "Psychic"],
|
||||
baseStats: { hp: 60, atk: 145, def: 130, spa: 100, spd: 130, spe: 80 },
|
||||
abilities: { 0: "Schooling" },
|
||||
requiredAbility: "Schooling",
|
||||
battleOnly: "Jaegorm",
|
||||
weightkg: 122,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
flocura: {
|
||||
num: 2054,
|
||||
name: "Flocura",
|
||||
types: ["Grass", "Psychic"],
|
||||
baseStats: { hp: 55, atk: 85, def: 55, spa: 107, spd: 180, spe: 118 },
|
||||
abilities: { 0: "Levitate", H: "Power Construct" },
|
||||
otherFormes: ["Flocura-Nexus"],
|
||||
formeOrder: ["Flocura", "Flocura-Nexus"],
|
||||
weightkg: 7.1,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
flocuranexus: {
|
||||
num: 2054,
|
||||
name: "Flocura-Nexus",
|
||||
baseSpecies: "Flocura",
|
||||
forme: "Nexus",
|
||||
types: ["Grass", "Psychic"],
|
||||
baseStats: { hp: 105, atk: 125, def: 105, spa: 137, spd: 180, spe: 48 },
|
||||
abilities: { 0: "Levitate", H: "Power Construct" },
|
||||
requiredAbility: "Power Construct",
|
||||
battleOnly: "Flocura",
|
||||
weightkg: 999,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
};
|
||||
38
data/mods/scootopiav2/rulesets.ts
Normal file
38
data/mods/scootopiav2/rulesets.ts
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
|
||||
supertypemovesrule: {
|
||||
effectType: 'Rule',
|
||||
name: 'Super Type Moves Rule',
|
||||
desc: 'Prevents pokemon from using Crystal or Feral moves unless they have a matching type.',
|
||||
onBeforeMove(pokemon, target, move) {
|
||||
move = {
|
||||
...this.dex.moves.get(move),
|
||||
hit: move.hit,
|
||||
};
|
||||
if (move.type === "Crystal" && !pokemon.hasType("Crystal")) return false;
|
||||
if (move.type === "Feral" && !pokemon.hasType("Feral")) return false;
|
||||
},
|
||||
onDisableMove(pokemon) {
|
||||
for (const moveSlot of pokemon.moveSlots) {
|
||||
const move = this.dex.moves.get(moveSlot.id);
|
||||
if ((move.type === "Crystal" && !pokemon.hasType("Crystal")) || (move.type === "Feral" && !pokemon.hasType("Feral"))) {
|
||||
pokemon.disableMove(moveSlot.id, false);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
spriteviewer: {
|
||||
effectType: 'ValidatorRule',
|
||||
name: 'Sprite Viewer',
|
||||
desc: "Displays a fakemon's sprite in chat when it is switched in for the first time",
|
||||
onBegin() {
|
||||
this.add('rule', 'Sprite Viewer: Displays sprites in chat');
|
||||
},
|
||||
onSwitchIn(pokemon) {
|
||||
if (!this.effectState[pokemon.species.id]) {
|
||||
this.add('-message', `${pokemon.species.name}'s Sprite:`);
|
||||
this.add(`raw|<img src="https://raw.githubusercontent.com/scoopapa/DH2/refs/heads/main/data/mods/scootopia/sprites/front/${pokemon.species.id}.png" height="96" width="96">`);
|
||||
this.effectState[pokemon.species.id] = true;
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
530
data/mods/scootopiav2/typechart.ts
Normal file
530
data/mods/scootopiav2/typechart.ts
Normal file
|
|
@ -0,0 +1,530 @@
|
|||
export const TypeChart: import('../../../sim/dex-data').ModdedTypeDataTable = {
|
||||
bug: {
|
||||
damageTaken: {
|
||||
Bug: 0,
|
||||
Dark: 0,
|
||||
Dragon: 0,
|
||||
Electric: 0,
|
||||
Fairy: 0,
|
||||
Fighting: 2,
|
||||
Fire: 1,
|
||||
Flying: 1,
|
||||
Ghost: 0,
|
||||
Grass: 2,
|
||||
Ground: 2,
|
||||
Ice: 0,
|
||||
Normal: 0,
|
||||
Poison: 0,
|
||||
Psychic: 0,
|
||||
Rock: 1,
|
||||
Steel: 0,
|
||||
Water: 0,
|
||||
Crystal: 0,
|
||||
Feral: 0,
|
||||
},
|
||||
HPivs: { atk: 30, def: 30, spd: 30 },
|
||||
HPdvs: { atk: 13, def: 13 },
|
||||
},
|
||||
dark: {
|
||||
damageTaken: {
|
||||
prankster: 3,
|
||||
Bug: 1,
|
||||
Dark: 2,
|
||||
Dragon: 0,
|
||||
Electric: 0,
|
||||
Fairy: 1,
|
||||
Fighting: 1,
|
||||
Fire: 0,
|
||||
Flying: 0,
|
||||
Ghost: 2,
|
||||
Grass: 0,
|
||||
Ground: 0,
|
||||
Ice: 0,
|
||||
Normal: 0,
|
||||
Poison: 0,
|
||||
Psychic: 3,
|
||||
Rock: 0,
|
||||
Steel: 0,
|
||||
Water: 0,
|
||||
Crystal: 1,
|
||||
Feral: 0,
|
||||
},
|
||||
HPivs: {},
|
||||
},
|
||||
dragon: {
|
||||
damageTaken: {
|
||||
Bug: 0,
|
||||
Dark: 0,
|
||||
Dragon: 1,
|
||||
Electric: 2,
|
||||
Fairy: 1,
|
||||
Fighting: 0,
|
||||
Fire: 2,
|
||||
Flying: 0,
|
||||
Ghost: 0,
|
||||
Grass: 2,
|
||||
Ground: 0,
|
||||
Ice: 1,
|
||||
Normal: 0,
|
||||
Poison: 0,
|
||||
Psychic: 0,
|
||||
Rock: 0,
|
||||
Steel: 0,
|
||||
Water: 2,
|
||||
Crystal: 0,
|
||||
Feral: 2,
|
||||
},
|
||||
HPivs: { atk: 30 },
|
||||
HPdvs: { def: 14 },
|
||||
},
|
||||
electric: {
|
||||
damageTaken: {
|
||||
par: 3,
|
||||
Bug: 0,
|
||||
Dark: 0,
|
||||
Dragon: 0,
|
||||
Electric: 2,
|
||||
Fairy: 0,
|
||||
Fighting: 0,
|
||||
Fire: 0,
|
||||
Flying: 2,
|
||||
Ghost: 0,
|
||||
Grass: 0,
|
||||
Ground: 1,
|
||||
Ice: 0,
|
||||
Normal: 0,
|
||||
Poison: 0,
|
||||
Psychic: 0,
|
||||
Rock: 0,
|
||||
Steel: 2,
|
||||
Water: 0,
|
||||
Crystal: 2,
|
||||
Feral: 0,
|
||||
},
|
||||
HPivs: { spa: 30 },
|
||||
HPdvs: { atk: 14 },
|
||||
},
|
||||
fairy: {
|
||||
damageTaken: {
|
||||
Bug: 2,
|
||||
Dark: 2,
|
||||
Dragon: 3,
|
||||
Electric: 0,
|
||||
Fairy: 0,
|
||||
Fighting: 2,
|
||||
Fire: 0,
|
||||
Flying: 0,
|
||||
Ghost: 0,
|
||||
Grass: 0,
|
||||
Ground: 0,
|
||||
Ice: 0,
|
||||
Normal: 0,
|
||||
Poison: 1,
|
||||
Psychic: 0,
|
||||
Rock: 0,
|
||||
Steel: 1,
|
||||
Water: 0,
|
||||
Crystal: 0,
|
||||
Feral: 1,
|
||||
},
|
||||
},
|
||||
fighting: {
|
||||
damageTaken: {
|
||||
Bug: 2,
|
||||
Dark: 2,
|
||||
Dragon: 0,
|
||||
Electric: 0,
|
||||
Fairy: 1,
|
||||
Fighting: 0,
|
||||
Fire: 0,
|
||||
Flying: 1,
|
||||
Ghost: 0,
|
||||
Grass: 0,
|
||||
Ground: 0,
|
||||
Ice: 0,
|
||||
Normal: 0,
|
||||
Poison: 0,
|
||||
Psychic: 1,
|
||||
Rock: 2,
|
||||
Steel: 0,
|
||||
Water: 0,
|
||||
Crystal: 2,
|
||||
Feral: 0,
|
||||
},
|
||||
HPivs: { def: 30, spa: 30, spd: 30, spe: 30 },
|
||||
HPdvs: { atk: 12, def: 12 },
|
||||
},
|
||||
fire: {
|
||||
damageTaken: {
|
||||
brn: 3,
|
||||
Bug: 2,
|
||||
Dark: 0,
|
||||
Dragon: 0,
|
||||
Electric: 0,
|
||||
Fairy: 2,
|
||||
Fighting: 0,
|
||||
Fire: 2,
|
||||
Flying: 0,
|
||||
Ghost: 0,
|
||||
Grass: 2,
|
||||
Ground: 1,
|
||||
Ice: 2,
|
||||
Normal: 0,
|
||||
Poison: 0,
|
||||
Psychic: 0,
|
||||
Rock: 1,
|
||||
Steel: 2,
|
||||
Water: 1,
|
||||
Crystal: 1,
|
||||
Feral: 2,
|
||||
},
|
||||
HPivs: { atk: 30, spa: 30, spe: 30 },
|
||||
HPdvs: { atk: 14, def: 12 },
|
||||
},
|
||||
flying: {
|
||||
damageTaken: {
|
||||
Bug: 2,
|
||||
Dark: 0,
|
||||
Dragon: 0,
|
||||
Electric: 1,
|
||||
Fairy: 0,
|
||||
Fighting: 2,
|
||||
Fire: 0,
|
||||
Flying: 0,
|
||||
Ghost: 0,
|
||||
Grass: 2,
|
||||
Ground: 3,
|
||||
Ice: 1,
|
||||
Normal: 0,
|
||||
Poison: 0,
|
||||
Psychic: 0,
|
||||
Rock: 1,
|
||||
Steel: 0,
|
||||
Water: 0,
|
||||
Crystal: 0,
|
||||
Feral: 1,
|
||||
},
|
||||
HPivs: { hp: 30, atk: 30, def: 30, spa: 30, spd: 30 },
|
||||
HPdvs: { atk: 12, def: 13 },
|
||||
},
|
||||
ghost: {
|
||||
damageTaken: {
|
||||
trapped: 3,
|
||||
Bug: 2,
|
||||
Dark: 1,
|
||||
Dragon: 0,
|
||||
Electric: 0,
|
||||
Fairy: 0,
|
||||
Fighting: 3,
|
||||
Fire: 0,
|
||||
Flying: 0,
|
||||
Ghost: 1,
|
||||
Grass: 0,
|
||||
Ground: 0,
|
||||
Ice: 0,
|
||||
Normal: 3,
|
||||
Poison: 2,
|
||||
Psychic: 0,
|
||||
Rock: 0,
|
||||
Steel: 0,
|
||||
Water: 0,
|
||||
Crystal: 1,
|
||||
Feral: 2,
|
||||
},
|
||||
HPivs: { def: 30, spd: 30 },
|
||||
HPdvs: { atk: 13, def: 14 },
|
||||
},
|
||||
grass: {
|
||||
damageTaken: {
|
||||
powder: 3,
|
||||
Bug: 1,
|
||||
Dark: 0,
|
||||
Dragon: 0,
|
||||
Electric: 2,
|
||||
Fairy: 0,
|
||||
Fighting: 0,
|
||||
Fire: 1,
|
||||
Flying: 1,
|
||||
Ghost: 0,
|
||||
Grass: 2,
|
||||
Ground: 2,
|
||||
Ice: 1,
|
||||
Normal: 0,
|
||||
Poison: 1,
|
||||
Psychic: 0,
|
||||
Rock: 0,
|
||||
Steel: 0,
|
||||
Water: 2,
|
||||
Crystal: 0,
|
||||
Feral: 1,
|
||||
},
|
||||
HPivs: { atk: 30, spa: 30 },
|
||||
HPdvs: { atk: 14, def: 14 },
|
||||
},
|
||||
ground: {
|
||||
damageTaken: {
|
||||
sandstorm: 3,
|
||||
Bug: 0,
|
||||
Dark: 0,
|
||||
Dragon: 0,
|
||||
Electric: 3,
|
||||
Fairy: 0,
|
||||
Fighting: 0,
|
||||
Fire: 0,
|
||||
Flying: 0,
|
||||
Ghost: 0,
|
||||
Grass: 1,
|
||||
Ground: 0,
|
||||
Ice: 1,
|
||||
Normal: 0,
|
||||
Poison: 2,
|
||||
Psychic: 0,
|
||||
Rock: 2,
|
||||
Steel: 0,
|
||||
Water: 1,
|
||||
Crystal: 0,
|
||||
Feral: 0,
|
||||
},
|
||||
HPivs: { spa: 30, spd: 30 },
|
||||
HPdvs: { atk: 12 },
|
||||
},
|
||||
ice: {
|
||||
damageTaken: {
|
||||
hail: 3,
|
||||
frz: 3,
|
||||
Bug: 0,
|
||||
Dark: 0,
|
||||
Dragon: 0,
|
||||
Electric: 0,
|
||||
Fairy: 0,
|
||||
Fighting: 1,
|
||||
Fire: 1,
|
||||
Flying: 0,
|
||||
Ghost: 0,
|
||||
Grass: 0,
|
||||
Ground: 0,
|
||||
Ice: 2,
|
||||
Normal: 0,
|
||||
Poison: 0,
|
||||
Psychic: 0,
|
||||
Rock: 1,
|
||||
Steel: 1,
|
||||
Water: 0,
|
||||
Crystal: 0,
|
||||
Feral: 0,
|
||||
},
|
||||
HPivs: { atk: 30, def: 30 },
|
||||
HPdvs: { def: 13 },
|
||||
},
|
||||
normal: {
|
||||
damageTaken: {
|
||||
Bug: 0,
|
||||
Dark: 0,
|
||||
Dragon: 0,
|
||||
Electric: 0,
|
||||
Fairy: 0,
|
||||
Fighting: 1,
|
||||
Fire: 0,
|
||||
Flying: 0,
|
||||
Ghost: 3,
|
||||
Grass: 0,
|
||||
Ground: 0,
|
||||
Ice: 0,
|
||||
Normal: 0,
|
||||
Poison: 0,
|
||||
Psychic: 0,
|
||||
Rock: 0,
|
||||
Steel: 0,
|
||||
Water: 0,
|
||||
Crystal: 0,
|
||||
Feral: 1,
|
||||
},
|
||||
},
|
||||
poison: {
|
||||
damageTaken: {
|
||||
psn: 3,
|
||||
tox: 3,
|
||||
Bug: 2,
|
||||
Dark: 0,
|
||||
Dragon: 0,
|
||||
Electric: 0,
|
||||
Fairy: 2,
|
||||
Fighting: 2,
|
||||
Fire: 0,
|
||||
Flying: 0,
|
||||
Ghost: 0,
|
||||
Grass: 2,
|
||||
Ground: 1,
|
||||
Ice: 0,
|
||||
Normal: 0,
|
||||
Poison: 2,
|
||||
Psychic: 1,
|
||||
Rock: 0,
|
||||
Steel: 0,
|
||||
Water: 0,
|
||||
Crystal: 0,
|
||||
Feral: 2,
|
||||
},
|
||||
HPivs: { def: 30, spa: 30, spd: 30 },
|
||||
HPdvs: { atk: 12, def: 14 },
|
||||
},
|
||||
psychic: {
|
||||
damageTaken: {
|
||||
Bug: 1,
|
||||
Dark: 1,
|
||||
Dragon: 0,
|
||||
Electric: 0,
|
||||
Fairy: 0,
|
||||
Fighting: 2,
|
||||
Fire: 0,
|
||||
Flying: 0,
|
||||
Ghost: 1,
|
||||
Grass: 0,
|
||||
Ground: 0,
|
||||
Ice: 0,
|
||||
Normal: 0,
|
||||
Poison: 0,
|
||||
Psychic: 2,
|
||||
Rock: 0,
|
||||
Steel: 0,
|
||||
Water: 0,
|
||||
Crystal: 0,
|
||||
Feral: 0,
|
||||
},
|
||||
HPivs: { atk: 30, spe: 30 },
|
||||
HPdvs: { def: 12 },
|
||||
},
|
||||
rock: {
|
||||
damageTaken: {
|
||||
sandstorm: 3,
|
||||
Bug: 0,
|
||||
Dark: 0,
|
||||
Dragon: 0,
|
||||
Electric: 0,
|
||||
Fairy: 0,
|
||||
Fighting: 1,
|
||||
Fire: 2,
|
||||
Flying: 2,
|
||||
Ghost: 0,
|
||||
Grass: 1,
|
||||
Ground: 1,
|
||||
Ice: 0,
|
||||
Normal: 2,
|
||||
Poison: 2,
|
||||
Psychic: 0,
|
||||
Rock: 0,
|
||||
Steel: 1,
|
||||
Water: 1,
|
||||
Crystal: 0,
|
||||
Feral: 0,
|
||||
},
|
||||
HPivs: { def: 30, spd: 30, spe: 30 },
|
||||
HPdvs: { atk: 13, def: 12 },
|
||||
},
|
||||
steel: {
|
||||
damageTaken: {
|
||||
psn: 3,
|
||||
tox: 3,
|
||||
sandstorm: 3,
|
||||
Bug: 2,
|
||||
Dark: 0,
|
||||
Dragon: 2,
|
||||
Electric: 0,
|
||||
Fairy: 2,
|
||||
Fighting: 1,
|
||||
Fire: 1,
|
||||
Flying: 2,
|
||||
Ghost: 0,
|
||||
Grass: 2,
|
||||
Ground: 1,
|
||||
Ice: 2,
|
||||
Normal: 2,
|
||||
Poison: 3,
|
||||
Psychic: 2,
|
||||
Rock: 2,
|
||||
Steel: 2,
|
||||
Water: 0,
|
||||
Crystal: 2,
|
||||
Feral: 0,
|
||||
},
|
||||
HPivs: { spd: 30 },
|
||||
HPdvs: { atk: 13 },
|
||||
},
|
||||
water: {
|
||||
damageTaken: {
|
||||
Bug: 0,
|
||||
Dark: 0,
|
||||
Dragon: 0,
|
||||
Electric: 1,
|
||||
Fairy: 0,
|
||||
Fighting: 0,
|
||||
Fire: 2,
|
||||
Flying: 0,
|
||||
Ghost: 0,
|
||||
Grass: 1,
|
||||
Ground: 0,
|
||||
Ice: 2,
|
||||
Normal: 0,
|
||||
Poison: 0,
|
||||
Psychic: 0,
|
||||
Rock: 0,
|
||||
Steel: 2,
|
||||
Water: 2,
|
||||
Crystal: 0,
|
||||
Feral: 1,
|
||||
},
|
||||
HPivs: { atk: 30, def: 30, spa: 30 },
|
||||
HPdvs: { atk: 14, def: 13 },
|
||||
},
|
||||
crystal: {
|
||||
damageTaken: {
|
||||
brn: 3,
|
||||
sandstorm: 3,
|
||||
Bug: 0,
|
||||
Dark: 2,
|
||||
Dragon: 0,
|
||||
Electric: 1,
|
||||
Fairy: 0,
|
||||
Fighting: 1,
|
||||
Fire: 2,
|
||||
Flying: 0,
|
||||
Ghost: 0,
|
||||
Grass: 0,
|
||||
Ground: 2,
|
||||
Ice: 0,
|
||||
Normal: 2,
|
||||
Poison: 0,
|
||||
Psychic: 0,
|
||||
Rock: 2,
|
||||
Steel: 1,
|
||||
Water: 2,
|
||||
Crystal: 2,
|
||||
Feral: 2,
|
||||
},
|
||||
},
|
||||
feral: {
|
||||
damageTaken: {
|
||||
slp: 3,
|
||||
Bug: 0,
|
||||
Dark: 0,
|
||||
Dragon: 1,
|
||||
Electric: 0,
|
||||
Fairy: 2,
|
||||
Fighting: 0,
|
||||
Fire: 1,
|
||||
Flying: 0,
|
||||
Ghost: 2,
|
||||
Grass: 0,
|
||||
Ground: 0,
|
||||
Ice: 2,
|
||||
Normal: 0,
|
||||
Poison: 1,
|
||||
Psychic: 0,
|
||||
Rock: 0,
|
||||
Steel: 0,
|
||||
Water: 0,
|
||||
Crystal: 0,
|
||||
Feral: 0,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
@ -1,414 +0,0 @@
|
|||
export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
|
||||
abyssallight: {
|
||||
onSourceModifyAtkPriority: 6,
|
||||
onSourceModifyAtk(atk, attacker, defender, move) {
|
||||
if (move.type === 'Dark' || move.type === 'Ghost') {
|
||||
this.debug('Abyssal Light weaken');
|
||||
return this.chainModify(0.5);
|
||||
}
|
||||
},
|
||||
onSourceModifySpAPriority: 5,
|
||||
onSourceModifySpA(atk, attacker, defender, move) {
|
||||
if (move.type === 'Dark' || move.type === 'Ghost') {
|
||||
this.debug('Abyssal Light weaken');
|
||||
return this.chainModify(0.5);
|
||||
}
|
||||
},
|
||||
flags: { breakable: 1 },
|
||||
name: "Abyssal Light",
|
||||
shortDesc: "This Pokemon takes halved damage from Dark and Ghost-type moves.",
|
||||
},
|
||||
ahexual: {
|
||||
onTryHit(target, source, move) {
|
||||
const tricks = [
|
||||
'bombinomicon', 'wordsdance', 'hex', 'trickortreat', 'confuseray',
|
||||
'flowertrick', 'powertrick', 'trick', 'trickroom',
|
||||
];
|
||||
if (tricks.includes(move.id)) {
|
||||
if (!this.heal(target.baseMaxhp / 4)) {
|
||||
this.add('-immune', target, '[from] ability: Ahexual');
|
||||
}
|
||||
return null;
|
||||
}
|
||||
},
|
||||
flags: { breakable: 1 },
|
||||
name: "Ahexual",
|
||||
shortDesc: "This Pokemon heals 1/2 max HP when hit by a trick move; immune to tricks.",
|
||||
},
|
||||
cursedbody: {
|
||||
onSourceModifyDamage(damage, source, target, move) {
|
||||
if (this.effectState.cursed) return;
|
||||
return this.chainModify(0.75);
|
||||
},
|
||||
onDamagingHit(damage, target, source, move) {
|
||||
if (this.effectState.cursed || source.volatiles['disable']) return;
|
||||
if (!move.isMax && !move.flags['futuremove'] && move.id !== 'struggle') {
|
||||
this.effectState.cursed = true;
|
||||
source.addVolatile('disable', this.effectState.target);
|
||||
}
|
||||
},
|
||||
onSwitchIn(pokemon) {
|
||||
delete this.effectState.cursed;
|
||||
},
|
||||
name: "Cursed Body",
|
||||
shortDesc: "When attacked, takes 75% damage and disables the move. Once per switch in.",
|
||||
},
|
||||
dummy: {
|
||||
onStart(pokemon) {
|
||||
this.actions.useMove("substitute", pokemon);
|
||||
},
|
||||
name: "Dummy",
|
||||
shortDesc: "On switchin, this Pokemon uses Substitute.",
|
||||
},
|
||||
jankster: {
|
||||
onDamagingHit(damage, target, source, move) {
|
||||
this.add('-ability', target, 'Jankster');
|
||||
if (move.category === 'Physical') {
|
||||
const newatk = target.storedStats.atk;
|
||||
target.storedStats.atk = source.storedStats.atk;
|
||||
source.storedStats.atk = newatk;
|
||||
this.add('-message', `${target.name}'s and ${target.name}'s Attack were swapped!`);
|
||||
} else {
|
||||
const newspa = target.storedStats.spa;
|
||||
target.storedStats.spa = newspa;
|
||||
source.storedStats.spa = newspa;
|
||||
this.add('-message', `${target.name}'s and ${target.name}'s Special Attack were swapped!`);
|
||||
}
|
||||
},
|
||||
flags: { breakable: 1 },
|
||||
name: "Jankster",
|
||||
shortDesc: "When this Pokemon is hit, it swaps its corresponding attack stat with the attacker.",
|
||||
},
|
||||
jumpscare: {
|
||||
onStart(pokemon) {
|
||||
if (!this.effectState.scare) {
|
||||
this.effectState.scare = true;
|
||||
this.add('-ability', pokemon, 'Jumpscare');
|
||||
for (const target of pokemon.adjacentFoes()) {
|
||||
if (target.volatiles['substitute']) {
|
||||
this.add('-immune', target);
|
||||
} else {
|
||||
target.addVolatile('jumpscare');
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
name: "Jumpscare",
|
||||
shortDesc: "On switchin, opposing Pokemon flinch. Once per battle.",
|
||||
},
|
||||
magician: {
|
||||
name: "Magician",
|
||||
shortDesc: "This Pokemon heals 1/16 max HP while behind a Substitute.",
|
||||
onStart(pokemon) {
|
||||
const switchin = [
|
||||
'I am here!',
|
||||
'I have come!',
|
||||
'Merasmus has risen!',
|
||||
'Cower fools! Merasmus is here!',
|
||||
'Run fools! Run from Merasmus!',
|
||||
'Merasmus the Wizard has come for your souls!',
|
||||
'(evil laughter)',
|
||||
'(wicked laughter)',
|
||||
'(diabolical laughter)',
|
||||
'Soldier! Never anger a magician!',
|
||||
'Welcome. To your doom!',
|
||||
'DOOM! All of you are doomed!',
|
||||
'Enjoy Halloween mortals, for it will be your last!',
|
||||
'Merasmus arrives on a tide of blood! *sotto voce* Oh hello, Soldier.',
|
||||
];
|
||||
this.add('-message', `${this.sample(switchin)}`);
|
||||
},
|
||||
onResidual(pokemon) {
|
||||
if (pokemon.volatiles['substitute']) {
|
||||
const sub = [
|
||||
'Must hide and heal.',
|
||||
'Must hide and heal.',
|
||||
'Must hide. Get stronger.',
|
||||
'Must hide. Must heal.',
|
||||
'Must hide. Must heal.',
|
||||
'Merasmus must hide.',
|
||||
'Merasmus must hide.',
|
||||
'No strength. Must hide.',
|
||||
'No! This cannot be the end! Must hide.',
|
||||
'Fools! I will come back stronger!',
|
||||
'Fools! Do you not know you deal with the master of hiding!',
|
||||
'Fools! Feel the terror of my hiding!',
|
||||
'You cannot kill me fools! For I am great at hiding!',
|
||||
'The hide-ening! It is here! Okay, need to find a hiding-spot.',
|
||||
'Time to play hide-and-seek...your doom!',
|
||||
'Must hide. Get stronger.',
|
||||
'You have bested my magic! But can you withstand the dark power...of HIDING!',
|
||||
];
|
||||
this.add('-message', `${this.sample(sub)}`);
|
||||
this.heal(pokemon.baseMaxhp / 16, pokemon, pokemon);
|
||||
}
|
||||
},
|
||||
onSwitchOut(pokemon) {
|
||||
const switchout = [
|
||||
'Goodbye... Forever!',
|
||||
'Alright, I\'m leaving now.',
|
||||
'Alright, I\'m leaving now.',
|
||||
'Goodbye, everyone!',
|
||||
'Well, that was fun. Off I go!',
|
||||
'Alright, goodbye everyone!',
|
||||
'Enough! I leave.',
|
||||
'A-ha! Too slow! I leave!',
|
||||
'*Evil laugh* Goodbye, forever!',
|
||||
'*Evil laugh* Goodbye, forever! *sotto voce* I\'ll see you at home, Soldier.',
|
||||
'You have amused Merasmus, but now I must attend to other eldritch business. Farewell!',
|
||||
'*Evil laugh* I bid you, farewell!',
|
||||
'Farewell! Happy Halloween, everyone!',
|
||||
'I leave you... to your doom!',
|
||||
];
|
||||
this.add('-message', `${this.sample(switchout)}`);
|
||||
},
|
||||
onFaint(pokemon) {
|
||||
const faint = [
|
||||
'Ach, no!',
|
||||
'You win. No, wait, it\'s a tie! Argh...',
|
||||
'Aaah!',
|
||||
'Aaah!',
|
||||
'Oooh!',
|
||||
'Nyyaaagh! I hate you so much, Soldier!',
|
||||
'You haven\'t heard the last of Merasmus the Magician!',
|
||||
'I die, I diieeee... bye Soldier.', 'I die! Soldier, you were the wooorst roommate!',
|
||||
'I die! I curse this land, for a hundred years!- No! A thousand! Thousand year-oh, I die!',
|
||||
'Noooo!',
|
||||
'Noooo!',
|
||||
];
|
||||
this.add('-message', `${this.sample(faint)}`);
|
||||
},
|
||||
},
|
||||
mutualexclusion: {
|
||||
onStart(target) {
|
||||
this.add('-activate', target, 'ability: Mutual Exclusion');
|
||||
target.addVolatile('imprison');
|
||||
},
|
||||
name: "Mutual Exclusion",
|
||||
shortDesc: "On switchin, this Pokemon gains Imprison.",
|
||||
},
|
||||
onderguard: {
|
||||
onDamagingHit(damage, target, source, effect) {
|
||||
if (this.randomChance(1, 2)) this.boost({ def: 1, spd: -1 });
|
||||
else this.boost({ def: -1, spd: 1 });
|
||||
},
|
||||
name: "Onder Guard",
|
||||
shortDesc: "When his Pokemon is hit, Def +1/SpD -1 or vice versa.",
|
||||
},
|
||||
perishbody: {
|
||||
onDamagingHit(damage, target, source, move) {
|
||||
if (source.volatiles['perishsong']) return;
|
||||
this.add('-ability', target, 'Perish Body');
|
||||
source.addVolatile('perishsong');
|
||||
},
|
||||
flags: { },
|
||||
name: "Perish Body",
|
||||
shortDesc: "When this Pokemon is damaged by an attack, the attacker gains Perish Song.",
|
||||
},
|
||||
pinfiltrator: {
|
||||
onModifyMove(move) {
|
||||
move.infiltrates = true;
|
||||
},
|
||||
onSourceDamagingHit(damage, target, source, move) {
|
||||
this.damage(target.baseMaxhp / 8, target, source);
|
||||
},
|
||||
name: "PInfiltrator",
|
||||
shortDesc: "This Pokemon's moves ignore Substitute/screens and deal an extra 1/8 max HP.",
|
||||
},
|
||||
powerofalchemy: {
|
||||
name: "Power of Alchemy",
|
||||
shortDesc: "On switch-in, swaps ability with the opponent.",
|
||||
onSwitchIn(pokemon) {
|
||||
this.effectState.switchingIn = true;
|
||||
},
|
||||
onStart(pokemon) {
|
||||
if (!pokemon.isStarted || !this.effectState.switchingIn) return;
|
||||
const additionalBannedAbilities = [
|
||||
// Zen Mode included here for compatability with Gen 5-6
|
||||
'noability', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'wanderingspirit',
|
||||
'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'zenmode',
|
||||
];
|
||||
const possibleTargets = pokemon.foes().filter(foeActive => foeActive && !foeActive.getAbility().flags['cantsuppress'] &&
|
||||
!additionalBannedAbilities.includes(foeActive.ability) && foeActive.isAdjacent(pokemon));
|
||||
if (possibleTargets.length) {
|
||||
let rand = 0;
|
||||
if (possibleTargets.length > 1) rand = this.random(possibleTargets.length);
|
||||
const target = possibleTargets[rand];
|
||||
const ability = target.getAbility();
|
||||
if (pokemon.setAbility(ability) && target.setAbility('powerofalchemy')) {
|
||||
this.add('-ability', target, 'Power of Alchemy');
|
||||
this.add('-ability', pokemon, ability.name);
|
||||
} else {
|
||||
pokemon.setAbility('powerofalchemy');
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
ppressure: {
|
||||
onStart(pokemon) {
|
||||
this.add('-ability', pokemon, 'PPressure');
|
||||
},
|
||||
onDeductPP(target, source) {
|
||||
if (target.isAlly(source)) return;
|
||||
return 2;
|
||||
},
|
||||
onModifyAtkPriority: 5,
|
||||
name: "PPressure",
|
||||
shortDesc: "When a move targets this Pokemon, that move loses 2 additional PP.",
|
||||
},
|
||||
pulpup: {
|
||||
onDamagingHit(damage, target, source, effect) {
|
||||
target.addVolatile('stockpile');
|
||||
},
|
||||
onModifyTypePriority: -1,
|
||||
onModifyType(move, pokemon) {
|
||||
const noModifyType = [
|
||||
'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball',
|
||||
];
|
||||
if (move.type === 'Normal' && !noModifyType.includes(move.id) &&
|
||||
!(move.isZ && move.category !== 'Status') && move.name !== 'Explosion' &&
|
||||
!(move.name === 'Tera Blast' && pokemon.terastallized)) {
|
||||
move.type = 'Fire';
|
||||
move.typeChangerBoosted = this.effect;
|
||||
}
|
||||
},
|
||||
name: "Pulp Up",
|
||||
shortDesc: "This Pokemon gains 1 Stockpile upon damage. Normal-type moves become Fire-type.",
|
||||
},
|
||||
wandrush: {
|
||||
onStart(source) {
|
||||
this.field.setWeather('sandstorm');
|
||||
},
|
||||
onModifySpe(spe, pokemon) {
|
||||
if (this.field.isWeather('sandstorm')) {
|
||||
return this.chainModify(1.5);
|
||||
}
|
||||
},
|
||||
onModifySpAPriority: 5,
|
||||
onModifySpA(spa, pokemon) {
|
||||
if (this.field.isWeather('sandstorm')) {
|
||||
return this.chainModify(1.5);
|
||||
}
|
||||
},
|
||||
onImmunity(type, pokemon) {
|
||||
if (type === 'sandstorm') return false;
|
||||
},
|
||||
name: "Wand Rush",
|
||||
shortDesc: "On switchin, sets Sandstorm. Sandstorm: SpA/Spe 1.5x; immunity to sand.",
|
||||
},
|
||||
revive: {
|
||||
// see scripts.ts
|
||||
name: "Revive",
|
||||
shortDesc: "Non-functional placeholder",
|
||||
/* shortDesc: "When this Pokemon has 0 HP, it switches out and is revived to 1/2 max HP. Once per battle.",
|
||||
onBeforeSwitchIn(pokemon) {
|
||||
if (this.effectState.zombie) {
|
||||
this.effectState.zombie = false;
|
||||
this.effectState.switchedIn = undefined;
|
||||
}
|
||||
},
|
||||
onFaint(pokemon) {
|
||||
if (pokemon.name === 'Trevenant' && !this.effectState.zombie && this.canSwitch(pokemon.side)) {
|
||||
if (pokemon.formeChange('Trevenant-Revenant', this.effect, true)) {
|
||||
this.add('-ability', pokemon, 'Revive');
|
||||
this.effectState.zombie = true;
|
||||
pokemon.hp = Math.floor(pokemon.maxhp / 2);
|
||||
pokemon.setAbility('reckless');
|
||||
}
|
||||
}
|
||||
}, */
|
||||
},
|
||||
shapeshift: {
|
||||
name: "Shapeshift",
|
||||
shortDesc: "If this Pokemon is a Rotom, certain moves cause it to change forme.",
|
||||
onBeforeMove(source, target, move) {
|
||||
switch (move.type) {
|
||||
case "Fire":
|
||||
if (source.species.id !== "rotomheat") {
|
||||
this.add('-activate', source, 'ability: Shapeshift');
|
||||
source.formeChange("Rotom-Heat");
|
||||
}
|
||||
break;
|
||||
case "Water":
|
||||
if (source.species.id !== "rotomwash") {
|
||||
this.add('-activate', source, 'ability: Shapeshift');
|
||||
source.formeChange("Rotom-Wash");
|
||||
}
|
||||
break;
|
||||
case "Grass":
|
||||
if (source.species.id !== "rotommow") {
|
||||
this.add('-activate', source, 'ability: Shapeshift');
|
||||
source.formeChange("Rotom-Mow");
|
||||
}
|
||||
break;
|
||||
case "Ice":
|
||||
if (source.species.id !== "rotomfrost") {
|
||||
this.add('-activate', source, 'ability: Shapeshift');
|
||||
source.formeChange("Rotom-Frost");
|
||||
}
|
||||
break;
|
||||
case "Flying":
|
||||
if (source.species.id !== "rotomfan") {
|
||||
this.add('-activate', source, 'ability: Shapeshift');
|
||||
source.formeChange("Rotom-Fan");
|
||||
}
|
||||
break;
|
||||
case "Ghost":
|
||||
if (source.species.id !== "rotom") {
|
||||
this.add('-activate', source, 'ability: Shapeshift');
|
||||
source.formeChange("Rotom");
|
||||
}
|
||||
break;
|
||||
}
|
||||
},
|
||||
},
|
||||
spoky: {
|
||||
name: "Spoky",
|
||||
shortDesc: "This Pokemon's type effectiveness is reversed when attacking or getting attacked.",
|
||||
onStart(target) {
|
||||
this.add('-ability', target, 'Spoky');
|
||||
},
|
||||
onEffectiveness(typeMod) {
|
||||
return typeMod * -1;
|
||||
},
|
||||
onFoeEffectiveness(typeMod) {
|
||||
return typeMod * -1;
|
||||
},
|
||||
},
|
||||
undead: {
|
||||
onModifyMovePriority: -5,
|
||||
onModifyMove(move) {
|
||||
if (!move.ignoreImmunity) move.ignoreImmunity = {};
|
||||
if (move.ignoreImmunity !== true) {
|
||||
move.ignoreImmunity['Ghost'] = true;
|
||||
}
|
||||
},
|
||||
name: "Undead",
|
||||
shortDesc: "This Pokemon can hit Normal-types with Ghost attacks.",
|
||||
},
|
||||
vamp: {
|
||||
onModifyMove(move) {
|
||||
if (!move.drain) move.drain = [1, 3];
|
||||
},
|
||||
name: "Vamp",
|
||||
shortDesc: "This Pokemon's attacks heal for 33% of the damage dealt.",
|
||||
},
|
||||
wonderguard: {
|
||||
onTryHit(target, source, move) {
|
||||
if (target === source || move.category === 'Status' || move.type === '???' || move.id === 'struggle') return;
|
||||
if (move.id === 'skydrop' && !source.volatiles['skydrop']) return;
|
||||
this.debug('Wonder Guard immunity: ' + move.id);
|
||||
if (target.runEffectiveness(move) !== 0) {
|
||||
if (move.smartTarget) {
|
||||
move.smartTarget = false;
|
||||
} else {
|
||||
this.add('-immune', target, '[from] ability: Wonder Guard');
|
||||
}
|
||||
return null;
|
||||
}
|
||||
},
|
||||
flags: { breakable: 1 },
|
||||
name: "Wonder Guard",
|
||||
shortDesc: "This Pokemon can only be hit by neutral attacks.",
|
||||
},
|
||||
};
|
||||
|
|
@ -1,225 +0,0 @@
|
|||
export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = {
|
||||
brn: {
|
||||
inherit: true,
|
||||
duration: 10,
|
||||
onResidual(pokemon) {
|
||||
this.damage(pokemon.baseMaxhp / 12);
|
||||
},
|
||||
onModifyMove(move, pokemon) {
|
||||
if (move.type === "Water") {
|
||||
this.add('-curestatus', pokemon, 'brn', `[from] move: ${move}`);
|
||||
pokemon.clearStatus();
|
||||
}
|
||||
},
|
||||
onDamagingHit(damage, target, source, move) {
|
||||
if (move.type === 'Water' && move.category !== 'Status') {
|
||||
this.add('-curestatus', target, 'brn', `[from] move: ${move}`);
|
||||
target.cureStatus();
|
||||
}
|
||||
},
|
||||
onEnd(target) {
|
||||
this.add('-end', target, 'brn');
|
||||
target.clearStatus();
|
||||
},
|
||||
},
|
||||
psn: {
|
||||
inherit: true,
|
||||
duration: 5,
|
||||
onResidual(pokemon) {
|
||||
this.damage(pokemon.baseMaxhp / 12);
|
||||
},
|
||||
onEnd(target) {
|
||||
this.add('-end', target, 'psn');
|
||||
target.clearStatus();
|
||||
},
|
||||
},
|
||||
superjump: {
|
||||
name: 'Super Jump',
|
||||
effectType: 'Weather',
|
||||
duration: 5,
|
||||
onWeatherModifyDamage(damage, attacker, defender, move) {
|
||||
if ([
|
||||
'highjumpkick', 'jumpkick', 'axe kick', 'doublekick', 'thunderouskick', 'lowkick', 'megakick', 'triplekick',
|
||||
'tropkick', 'skyuppercut', 'stomp', 'stompingtantrum', 'bounce', 'fly', 'skyattack', 'blastjump',
|
||||
].includes(move.id)) {
|
||||
this.debug('Jump boost');
|
||||
return this.chainModify(1.5);
|
||||
}
|
||||
},
|
||||
onFieldStart(battle, source, effect) {
|
||||
if (effect?.effectType === 'Ability') {
|
||||
if (this.gen <= 5) this.effectState.duration = 0;
|
||||
this.add('-weather', 'Super Jump', '[from] ability: ' + effect.name, `[of] ${source}`);
|
||||
} else {
|
||||
this.add('-weather', 'Super Jump', '-silent');
|
||||
}
|
||||
},
|
||||
onTryMovePriority: 1,
|
||||
onTryMove(attacker, defender, move) {
|
||||
if (move.type === 'Ground' && move.category !== 'Status') {
|
||||
this.debug('Super Jump suppress');
|
||||
this.add('-fail', attacker, move, '[from] Super Jump');
|
||||
this.attrLastMove('[still]');
|
||||
return null;
|
||||
}
|
||||
},
|
||||
onFieldResidualOrder: 1,
|
||||
onFieldResidual() {
|
||||
this.add('-weather', 'Super Jump', '[upkeep]');
|
||||
this.eachEvent('Weather');
|
||||
},
|
||||
onFieldEnd() {
|
||||
this.add('-weather', 'none');
|
||||
},
|
||||
},
|
||||
ubercharge: {
|
||||
name: 'ubercharge',
|
||||
duration: 1,
|
||||
// this is a volatile status
|
||||
onStart(target, source, sourceEffect) {
|
||||
this.add('-start', target, 'ubercharge', "[silent]");
|
||||
this.add('-message', `${target.name} was ubercharged!`);
|
||||
},
|
||||
onEnd(target) {
|
||||
this.add('-end', target, 'ubercharge', "[silent]");
|
||||
this.add('-message', `${target.name}'s ubercharge wore off!`);
|
||||
},
|
||||
onInvulnerability(target, source, move) {
|
||||
return false;
|
||||
},
|
||||
},
|
||||
jarate: {
|
||||
name: 'Jarate',
|
||||
duration: 1,
|
||||
// this is a volatile status
|
||||
onStart(target, source, sourceEffect) {
|
||||
this.add('-start', target, 'jarate', '[silent]');
|
||||
this.add('-message', `${target.name} was covered in Jarate!`);
|
||||
},
|
||||
onEnd(target) {
|
||||
this.add('-end', target, 'jarate', "[silent]");
|
||||
this.add('-message', `${target.name}'s Jarate wore off!`);
|
||||
},
|
||||
onSourceModifyDamage(damage, source, target, move) {
|
||||
this.add("-crit", target);
|
||||
return this.chainModify(1.35);
|
||||
},
|
||||
},
|
||||
flinch: {
|
||||
inherit: true,
|
||||
// flinches: true,
|
||||
},
|
||||
jumpscare: {
|
||||
name: 'jumpscare',
|
||||
// flinches: true,
|
||||
duration: 1,
|
||||
onBeforeMovePriority: 8,
|
||||
onBeforeMove(pokemon) {
|
||||
const rand = this.random(6);
|
||||
switch (rand) {
|
||||
case 0:
|
||||
this.add(`raw|<img src="https://pbs.twimg.com/media/E5tJ3LOWEAEuOx5.jpg" height="400" width="400">`);
|
||||
this.add('-message', `BOO! Did I scare you? I'm a job application 😂😂`);
|
||||
break;
|
||||
case 1:
|
||||
this.add(`raw|<img src="https://i.kym-cdn.com/photos/images/list/002/166/933/8a3.gif" height="400" width="400">`);
|
||||
break;
|
||||
case 2:
|
||||
this.add(`raw|<img src="https://i.pinimg.com/originals/68/12/4c/68124cdddd5615b4c11df6dcdbe1ff7f.gif" height="400" width="400">`);
|
||||
break;
|
||||
case 3:
|
||||
this.add(`raw|<img src="https://www.videomeme.in/wp-content/uploads/2022/12/1669720009775.jpg" height="400" width="400">`);
|
||||
this.add('-message', `Ghost, From That Game With The Ghost Guy In It (I Don't Remember What It Was Called)`);
|
||||
break;
|
||||
case 4:
|
||||
this.add(`raw|<img src="https://static.wikia.nocookie.net/slenderfortress/images/4/46/Zepheniah_Ghost.png" height="400" width="400">`);
|
||||
this.add('-message', `BOO`);
|
||||
break;
|
||||
case 5:
|
||||
this.add(`raw|<img src="https://raw.githubusercontent.com/scoopapa/DH2/38ec8d41f26b57766acda4ab509659b7e134b4f8/data/mods/spookymod/sprites/front/talkinchu.png" height="4540" width="411">`);
|
||||
this.add('-message', `"Deez" ~ DuoM2`);
|
||||
break;
|
||||
default:
|
||||
this.add(`raw|<img src="https://steamuserimages-a.akamaihd.net/ugc/950713639436160734/A6DB24F241B8A496DED1033A4A345E05A8336DFA/?imw=637&imh=358&ima=fit&impolicy=Letterbox&imcolor=%23000000&letterbox=true" height="400" width="400">`);
|
||||
this.hint("Connection Lost: Auto-disconnect in 24.7 seconds");
|
||||
}
|
||||
this.add('cant', pokemon, 'flinch');
|
||||
this.runEvent('Flinch', pokemon);
|
||||
return false;
|
||||
},
|
||||
},
|
||||
fakedynamax: {
|
||||
inherit: true,
|
||||
duration: 1,
|
||||
onStart(pokemon) {
|
||||
this.add('-start', pokemon, 'Dynamax', '[silent]');
|
||||
if (pokemon.species.id === 'gourgeistgigantic') {
|
||||
this.add('-message', `${pokemon.name} grew so large it exploded!`);
|
||||
this.actions.useMove('Explosion', pokemon);
|
||||
}
|
||||
},
|
||||
onEnd(pokemon) {
|
||||
this.add('-end', pokemon, 'Dynamax', '[silent]');
|
||||
},
|
||||
},
|
||||
summon: {
|
||||
// this is a slot condition
|
||||
onResidualOrder: 3,
|
||||
onResidual(target) {
|
||||
this.effectState.target = this.effectState.side.active[this.effectState.position];
|
||||
const data = this.effectState;
|
||||
const move = this.dex.moves.get(data.move);
|
||||
if (data.target.fainted || data.target === data.source) {
|
||||
this.hint(`${move.name} did not hit because the target is ${(data.fainted ? 'fainted' : 'the user')}.`);
|
||||
return;
|
||||
}
|
||||
this.add('-message', `${(data.target.illusion ? data.target.illusion.name : data.target.name)} took the ${move.name} attack!`);
|
||||
data.moveData.accuracy = true;
|
||||
data.moveData.isFutureMove = true;
|
||||
delete data.moveData.flags['protect'];
|
||||
const hitMove = new this.dex.Move(data.moveData) as ActiveMove;
|
||||
if (data.source.isActive) {
|
||||
this.add('-anim', data.source, hitMove, data.target);
|
||||
}
|
||||
this.actions.trySpreadMoveHit([data.target], data.source, hitMove);
|
||||
},
|
||||
onEnd(target) {
|
||||
this.effectState.target = this.effectState.side.active[this.effectState.position];
|
||||
const data = this.effectState;
|
||||
const move = this.dex.moves.get(data.move);
|
||||
if (data.target.fainted || data.target === data.source) {
|
||||
this.hint(`${move.name} did not hit because the target is ${(data.fainted ? 'fainted' : 'the user')}.`);
|
||||
return;
|
||||
}
|
||||
this.add('-message', `${(data.target.illusion ? data.target.illusion.name : data.target.name)} took the ${move.name} attack!`);
|
||||
data.moveData.accuracy = true;
|
||||
data.moveData.isFutureMove = true;
|
||||
delete data.moveData.flags['protect'];
|
||||
|
||||
const hitMove = new this.dex.Move(data.moveData) as ActiveMove;
|
||||
if (data.source.isActive) {
|
||||
this.add('-anim', data.source, hitMove, data.target);
|
||||
}
|
||||
this.actions.trySpreadMoveHit([data.target], data.source, hitMove);
|
||||
},
|
||||
},
|
||||
shrunken: {
|
||||
name: 'Shrunken',
|
||||
duration: 1,
|
||||
// this is a volatile status
|
||||
onStart(target, source, sourceEffect) {
|
||||
this.add('-start', target, 'shrunken', '[silent]');
|
||||
this.add('-message', `${target.name} shrunk!`);
|
||||
target.formeChange(target.species.id + 'shrunken');
|
||||
if (target.species.id === 'gourgeisttinyshrunken') {
|
||||
this.add('-message', `${target.name} shrunk so small it disappeared from existence!`);
|
||||
target.faint();
|
||||
}
|
||||
},
|
||||
onEnd(target) {
|
||||
this.add('-end', target, 'shrunken', "[silent]");
|
||||
this.add('-message', `${target.name} returned to full size!`);
|
||||
target.formeChange(target.baseSpecies);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
@ -1,262 +0,0 @@
|
|||
export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = {
|
||||
aegislash: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
banettemega: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
ceruledge: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
dofagrigus: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
eddyazbear: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
fluttermane: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
fluttermane2: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
gourgeisttiny: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
gourgeist: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
gourgeistlarge: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
gourgeistgigantic: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
houndstone: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
indeedee: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
jableye: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
jobapplication: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
lanturnevil: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
merasmus: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
nursola: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
okestarspirit: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
ppiritomb: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
quagsiredead: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
rotom: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
shedinja: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
trevenant: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
ursalunabloodmoon: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
kilotic: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
vampharos: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
wunala: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
xorygonz: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
yveltal: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
zoroarkhisui: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
aegislashshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
banettemegashrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
ceruledgeshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
dofagrigusshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
eddyazbearshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
fluttermaneshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
fluttermane2shrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
gourgeisttinyshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
gourgeistshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
gourgeistlargeshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
gourgeistgiganticshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
houndstoneshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
indeedeeshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
jableyeshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
jobapplicationshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
lanturnevilshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
merasmusshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
nursolashrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
okestarspiritshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
ppiritombshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
quagsiredeadshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
rotomshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
shedinjashrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
trevenantshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
ursalunabloodmoonshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
kiloticshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
vampharosshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
wunalashrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
xorygonzshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
yveltalshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
zoroarkhisuishrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
gourgeistsmall: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
gourgeistsuper: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
trevenantrevenant: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
};
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
|
||||
spellbookmagazine: {
|
||||
name: "Spellbook Magazine",
|
||||
shortDesc: "Lets the user pick up and cast spells.",
|
||||
onTakeItem(item, pokemon, source, move) {
|
||||
return false;
|
||||
},
|
||||
onResidual(pokemon) {
|
||||
if (pokemon.volatiles['spellbookmagazine']) return;
|
||||
const rand = this.random(4);
|
||||
const spells = [
|
||||
"Shadow Leap", "Fire BaIl", "Blast Jump", "Overheal", "Bat Swarm", "Pumpkin MIRV", "Stealth",
|
||||
"MONOCULUS!", "Skeleton Horde", "Ball O' Lightning", "Meteor Shower", "Minify",
|
||||
].map(x => ({ move: x, id: this.toID(x), pp: 1, maxpp: 1, target: "normal", disabled: false, used: false }));
|
||||
if (rand === 0) {
|
||||
const randSpell = this.sample(spells);
|
||||
pokemon.moveSlots.push(randSpell);
|
||||
pokemon.addVolatile("spellbookmagazine");
|
||||
}
|
||||
},
|
||||
condition: {
|
||||
onResidual(pokemon) {
|
||||
if (!pokemon.lastMoveUsed) {
|
||||
return false;
|
||||
}
|
||||
const spells = [
|
||||
'Shadow Leap', 'FirebaIl', 'Blast Jump', 'Overheal', 'Bat Swarm', 'Pumpkin MIRV', 'Stealth',
|
||||
'MONOCULUS!', 'Skeleton Horde', 'Ball O\' Lightning', 'Meteor Shower', 'Minify',
|
||||
];
|
||||
if (!spells.includes(pokemon.lastMoveUsed.name) || pokemon.lastMoveUsed.pp !== 0) return;
|
||||
pokemon.moveSlots.pop();
|
||||
pokemon.removeVolatile("spellbookmagazine");
|
||||
},
|
||||
onEnd(pokemon) {
|
||||
this.add('-end', pokemon, 'Spell', '[silent]');
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -1,769 +0,0 @@
|
|||
export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = {
|
||||
aegislash: {
|
||||
inherit: true,
|
||||
num: 1,
|
||||
name: "Aegislash",
|
||||
types: ["Ghost", "Steel"],
|
||||
baseStats: { hp: 120, atk: 60, def: 100, spa: 60, spd: 100, spe: 60 },
|
||||
abilities: { 0: "Stance Change", H: "Bulletproof" },
|
||||
},
|
||||
aegislashblade: {
|
||||
inherit: true,
|
||||
num: 1,
|
||||
name: "Aegislash-Blade",
|
||||
types: ["Ghost", "Steel"],
|
||||
baseStats: { hp: 120, atk: 100, def: 60, spa: 100, spd: 60, spe: 60 },
|
||||
abilities: { 0: "Stance Change", H: "Bulletproof" },
|
||||
},
|
||||
banettemega: {
|
||||
inherit: true,
|
||||
num: 2,
|
||||
name: "Banette-Mega",
|
||||
baseSpecies: "",
|
||||
forme: "",
|
||||
types: ["Ghost"],
|
||||
baseStats: { hp: 64, atk: 165, def: 63, spa: 110, spd: 63, spe: 35 },
|
||||
abilities: { 0: "Tough Claws" },
|
||||
requiredItem: "",
|
||||
},
|
||||
ceruledge: {
|
||||
inherit: true,
|
||||
num: 3,
|
||||
name: "Ceruledge",
|
||||
types: ["Ghost", "Fire"],
|
||||
baseStats: { hp: 85, atk: 115, def: 80, spa: 60, spd: 110, spe: 75 },
|
||||
abilities: { 0: "Sharpness", H: "Triage" },
|
||||
},
|
||||
dofagrigus: {
|
||||
num: 4,
|
||||
name: "Dofagrigus",
|
||||
types: ["Ghost"],
|
||||
baseStats: { hp: 70, atk: 55, def: 145, spa: 95, spd: 105, spe: 30 },
|
||||
abilities: { 0: "Dummy" },
|
||||
weightkg: 76.5,
|
||||
eggGroups: ["Mineral", "Amorphous"],
|
||||
},
|
||||
eddyazbear: {
|
||||
num: 5,
|
||||
name: "Eddy Azbear",
|
||||
types: ["Ghost", "Fighting"],
|
||||
baseStats: { hp: 183, atk: 117, def: 40, spa: 100, spd: 40, spe: 90 },
|
||||
abilities: { 0: "Jumpscare", H: "Strong Jaw" },
|
||||
weightkg: 555,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
fluttermane: {
|
||||
inherit: true,
|
||||
num: 6,
|
||||
name: "Flutter Mane",
|
||||
types: ["Ghost", "Dark", "Fairy"],
|
||||
baseStats: { hp: 95, atk: 95, def: 95, spa: 95, spd: 95, spe: 95 },
|
||||
abilities: { 0: "Protosynthesis", H: "Levitate" },
|
||||
},
|
||||
fluttermane2: {
|
||||
num: 6,
|
||||
name: "Flutter Mane 2",
|
||||
types: ["Ghost", "Dark", "Fairy"],
|
||||
baseStats: { hp: 95, atk: 95, def: 95, spa: 95, spd: 95, spe: 95 },
|
||||
abilities: { 0: "Protosynthesis", H: "Levitate" },
|
||||
weightkg: 4.2,
|
||||
tags: ["Paradox"],
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
gourgeisttiny: {
|
||||
num: 8,
|
||||
name: "Gourgeist-Tiny",
|
||||
baseSpecies: "Gourgeist",
|
||||
forme: "Tiny",
|
||||
types: ["Ghost", "Grass", "Fire", "Fairy"],
|
||||
baseStats: { hp: 5, atk: 81, def: 129, spa: 81, spd: 75, spe: 169 },
|
||||
abilities: { 0: "Dazzling" },
|
||||
weightkg: 4.8,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
gourgeist: {
|
||||
inherit: true,
|
||||
num: 9,
|
||||
name: "Gourgeist",
|
||||
types: ["Ghost", "Grass", "Fire", "Fairy"],
|
||||
baseStats: { hp: 55, atk: 91, def: 109, spa: 91, spd: 75, spe: 119 },
|
||||
abilities: { 0: "Desolate Land" },
|
||||
},
|
||||
gourgeistlarge: {
|
||||
inherit: true,
|
||||
num: 10,
|
||||
name: "Gourgeist-Large",
|
||||
types: ["Ghost", "Grass", "Fire", "Fairy"],
|
||||
baseStats: { hp: 105, atk: 101, def: 89, spa: 101, spd: 75, spe: 69 },
|
||||
abilities: { 0: "Spoky" },
|
||||
},
|
||||
gourgeistgigantic: {
|
||||
num: 11,
|
||||
name: "Gourgeist-Gigantic",
|
||||
baseSpecies: "Gourgeist",
|
||||
forme: "Gigantic",
|
||||
types: ["Ghost", "Grass", "Fire", "Fairy"],
|
||||
baseStats: { hp: 155, atk: 111, def: 69, spa: 111, spd: 75, spe: 19 },
|
||||
abilities: { 0: "Pulp Up" },
|
||||
weightkg: 78,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
houndstone: {
|
||||
inherit: true,
|
||||
num: 12,
|
||||
name: "Houndstone",
|
||||
types: ["Ghost", "Fighting", "Normal"],
|
||||
baseStats: { hp: 82, atk: 91, def: 140, spa: 50, spd: 97, spe: 70 },
|
||||
abilities: { 0: "Jumpscare", 1: "Undead", H: "Fluffy" },
|
||||
},
|
||||
indeedee: {
|
||||
inherit: true,
|
||||
num: 13,
|
||||
name: "Indeedee",
|
||||
types: ["Ghost", "Normal", "Psychic"],
|
||||
baseStats: { hp: 70, atk: 85, def: 75, spa: 105, spd: 95, spe: 95 },
|
||||
abilities: { 0: "Inner Focus", 1: "Scrappy", H: "Psychic Surge" },
|
||||
},
|
||||
jableye: {
|
||||
num: 14,
|
||||
name: "Jableye",
|
||||
types: ["Ghost", "Dark", "Poison"],
|
||||
baseStats: { hp: 75, atk: 75, def: 100, spa: 75, spd: 100, spe: 50 },
|
||||
abilities: { 0: "Justified", H: "Jankster" },
|
||||
weightkg: 11,
|
||||
eggGroups: ["Human-Like"],
|
||||
},
|
||||
jobapplication: {
|
||||
num: 15,
|
||||
name: "JOB APPLICATION",
|
||||
types: ["Ghost", "Normal"],
|
||||
baseStats: { hp: 130, atk: 130, def: 70, spa: 50, spd: 70, spe: 80 },
|
||||
abilities: { 0: "Jumpscare" },
|
||||
weightkg: 4.3,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
kilotic: {
|
||||
num: -196,
|
||||
name: "Kilotic",
|
||||
types: ["Ghost", "Water"],
|
||||
baseStats: { hp: 81, atk: 60, def: 125, spa: 100, spd: 79, spe: 95 },
|
||||
abilities: { 0: "Flare Boost", 1: "Intimidate", H: "Cursed Body" },
|
||||
weightkg: 162,
|
||||
eggGroups: ["Water 1", "Dragon"],
|
||||
},
|
||||
lanturnevil: {
|
||||
num: 16,
|
||||
name: "Lanturn-Evil",
|
||||
baseSpecies: "Lanturn",
|
||||
forme: "Evil",
|
||||
types: ["Ghost", "Retaw", "Critcele"],
|
||||
baseStats: { hp: 67, atk: 96, def: 96, spa: 58, spd: 58, spe: 125 },
|
||||
abilities: { 0: "Abyssal Light" },
|
||||
weightkg: 22.5,
|
||||
eggGroups: ["Water 2"],
|
||||
},
|
||||
merasmus: {
|
||||
num: 17,
|
||||
name: "MERASMUS",
|
||||
types: ["Ghost", "Psychic", "Fairy", "Dark"],
|
||||
baseStats: { hp: 111, atk: 111, def: 111, spa: 111, spd: 111, spe: 111 },
|
||||
abilities: { 0: "Magician" },
|
||||
weightkg: 666,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
nursola: {
|
||||
num: -195,
|
||||
name: "Nursola",
|
||||
types: ["Ghost", "Grass", "Rock"],
|
||||
baseStats: { hp: 145, atk: 50, def: 60, spa: 95, spd: 130, spe: 30 },
|
||||
abilities: { 0: "Solid Rock", 1: "Purifying Salt", H: "Perish Body" },
|
||||
weightkg: 0.4,
|
||||
eggGroups: ["Water 1", "Water 3"],
|
||||
},
|
||||
okestarspirit: {
|
||||
num: 19,
|
||||
name: "Okestar Spirit",
|
||||
types: ["Ghost", "ark"],
|
||||
baseStats: { hp: 100, atk: 100, def: 100, spa: 100, spd: 100, spe: 100 },
|
||||
abilities: { 0: "Onder Guard" },
|
||||
weightkg: 61,
|
||||
eggGroups: ["Field"],
|
||||
},
|
||||
ppiritomb: {
|
||||
num: 20,
|
||||
name: "PPiritomb",
|
||||
types: ["Ghost", "PDark", "PRock"],
|
||||
baseStats: { hp: 50, atk: 92, def: 108, spa: 92, spd: 108, spe: 50 },
|
||||
abilities: { 0: "PPressure", H: "Pinfiltrator" },
|
||||
weightkg: 108,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
quagsiredead: {
|
||||
num: 21,
|
||||
name: "Quagsire-Dead",
|
||||
baseSpecies: "Quagsire",
|
||||
forme: "Dead",
|
||||
types: ["Ghost", "Water", "Ground"],
|
||||
baseStats: { hp: 115, atk: 95, def: 95, spa: 75, spd: 75, spe: 45 },
|
||||
abilities: { 0: "Cursed Body", H: "Unaware" },
|
||||
weightkg: 7.5,
|
||||
eggGroups: ["Water 1", "Field"],
|
||||
},
|
||||
rotom: {
|
||||
inherit: true,
|
||||
num: 22,
|
||||
name: "Rotom",
|
||||
types: ["Ghost", "Electric"],
|
||||
baseStats: { hp: 80, atk: 50, def: 97, spa: 115, spd: 97, spe: 91 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
},
|
||||
rotomheat: {
|
||||
inherit: true,
|
||||
num: 22,
|
||||
types: ["Ghost", "Electric", "Fire"],
|
||||
baseStats: { hp: 80, atk: 50, def: 97, spa: 115, spd: 97, spe: 91 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
},
|
||||
rotomwash: {
|
||||
inherit: true,
|
||||
num: 22,
|
||||
types: ["Ghost", "Electric", "Water"],
|
||||
baseStats: { hp: 80, atk: 50, def: 97, spa: 115, spd: 97, spe: 91 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
},
|
||||
rotomfrost: {
|
||||
inherit: true,
|
||||
num: 22,
|
||||
types: ["Ghost", "Electric", "Ice"],
|
||||
baseStats: { hp: 80, atk: 50, def: 97, spa: 115, spd: 97, spe: 91 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
},
|
||||
rotomfan: {
|
||||
inherit: true,
|
||||
num: 22,
|
||||
types: ["Ghost", "Electric", "Flying"],
|
||||
baseStats: { hp: 80, atk: 50, def: 97, spa: 115, spd: 97, spe: 91 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
},
|
||||
rotommow: {
|
||||
inherit: true,
|
||||
num: 22,
|
||||
types: ["Ghost", "Electric", "Grass"],
|
||||
baseStats: { hp: 80, atk: 50, def: 97, spa: 115, spd: 97, spe: 91 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
},
|
||||
shedinja: {
|
||||
inherit: true,
|
||||
num: 23,
|
||||
name: "Shedinja",
|
||||
types: ["Ghost", "Bug"],
|
||||
baseStats: { hp: 1, atk: 90, def: 1, spa: 90, spd: 1, spe: 42 },
|
||||
abilities: { 0: "Wonder Guard" },
|
||||
},
|
||||
trevenant: {
|
||||
inherit: true,
|
||||
num: 24,
|
||||
name: "Trevenant",
|
||||
types: ["Ghost", "Grass", "Fighting"],
|
||||
baseStats: { hp: 85, atk: 110, def: 106, spa: 65, spd: 102, spe: 57 },
|
||||
abilities: { 0: "Natural Cure", 1: "Triage", H: "Revive" },
|
||||
},
|
||||
trevenantrevenant: {
|
||||
num: 24,
|
||||
name: "Trevenant-Revenant",
|
||||
baseSpecies: "Trevenant",
|
||||
forme: "Revenant",
|
||||
types: ["Ghost", "Rock", "Fighting"],
|
||||
baseStats: { hp: 85, atk: 110, def: 76, spa: 65, spd: 72, spe: 117 },
|
||||
abilities: { 0: "Reckless" },
|
||||
weightkg: 71,
|
||||
eggGroups: ["Grass", "Amorphous"],
|
||||
},
|
||||
ursalunabloodmoon: {
|
||||
inherit: true,
|
||||
num: 25,
|
||||
types: ["Ghost", "Normal", "Ground"],
|
||||
baseStats: { hp: 113, atk: 100, def: 90, spa: 135, spd: 65, spe: 52 },
|
||||
abilities: { 0: "Mind's Eye", H: "Undead" },
|
||||
},
|
||||
vampharos: {
|
||||
num: -194,
|
||||
name: "Vampharos",
|
||||
types: ["Ghost", "Electric", "Dragon"],
|
||||
baseStats: { hp: 90, atk: 85, def: 95, spa: 140, spd: 100, spe: 50 },
|
||||
abilities: { 0: "Cotton Down", 1: "Mold Breaker", H: "Vamp" },
|
||||
weightkg: 61.5,
|
||||
eggGroups: ["Monster", "Field"],
|
||||
},
|
||||
wunala: {
|
||||
num: 28,
|
||||
name: "Wunala",
|
||||
types: ["Ghost", "Psychic", "Dark"],
|
||||
baseStats: { hp: 67, atk: 113, def: 109, spa: 67, spd: 107, spe: 67 },
|
||||
abilities: { 0: "Wandering Spirit", 1: "Wonder Skin", H: "Wand Rush" },
|
||||
weightkg: 120,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
xorygonz: {
|
||||
num: 29,
|
||||
name: "XORygon-Z",
|
||||
types: ["Ghost", "Steel", "Ice", "Poison"],
|
||||
baseStats: { hp: 85, atk: 90, def: 70, spa: 125, spd: 75, spe: 90 },
|
||||
abilities: { 0: "Mutual Exclusion", H: "Ahexual" },
|
||||
weightkg: 36.5,
|
||||
eggGroups: ["Mineral"],
|
||||
},
|
||||
yveltal: {
|
||||
inherit: true,
|
||||
num: 30,
|
||||
name: "Yveltal",
|
||||
types: ["Ghost", "Dragon", "Flying"],
|
||||
baseStats: { hp: 116, atk: 91, def: 95, spa: 91, spd: 98, spe: 79 },
|
||||
abilities: { 0: "Dark Aura", H: "Intimidate" },
|
||||
},
|
||||
zoroarkhisui: {
|
||||
inherit: true,
|
||||
num: 31,
|
||||
name: "Zoroark-Hisui",
|
||||
baseSpecies: "Zoroark",
|
||||
forme: "Hisui",
|
||||
types: ["Ghost", "Normal", "Ice"],
|
||||
baseStats: { hp: 65, atk: 110, def: 70, spa: 105, spd: 70, spe: 110 },
|
||||
abilities: { 0: "Cursed Body", 1: "Snow Warning", H: "Illusion" },
|
||||
},
|
||||
// shrunken
|
||||
aegislashshrunken: {
|
||||
num: 1,
|
||||
name: "Aegislash-Shrunken",
|
||||
baseSpecies: "Aegislash",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Steel"],
|
||||
baseStats: { hp: 120, atk: 30, def: 50, spa: 30, spd: 50, spe: 30 },
|
||||
abilities: { 0: "Stance Change", H: "Bulletproof" },
|
||||
battleOnly: "Aegislash",
|
||||
weightkg: 5.3,
|
||||
eggGroups: ["Mineral"],
|
||||
},
|
||||
banettemegashrunken: {
|
||||
num: 2,
|
||||
name: "Banette-Mega-Shrunken",
|
||||
baseSpecies: "Banette",
|
||||
forme: "Mega-Shrunken",
|
||||
types: ["Ghost"],
|
||||
baseStats: { hp: 64, atk: 82, def: 32, spa: 55, spd: 32, spe: 17 },
|
||||
abilities: { 0: "Tough Claws" },
|
||||
battleOnly: "Banette-Mega",
|
||||
weightkg: 1.3,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
ceruledgeshrunken: {
|
||||
num: 3,
|
||||
name: "Ceruledge-Shrunken",
|
||||
baseSpecies: "Ceruledge",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Fire"],
|
||||
baseStats: { hp: 85, atk: 57, def: 40, spa: 30, spd: 55, spe: 37 },
|
||||
abilities: { 0: "Sharpness", H: "Triage" },
|
||||
battleOnly: "Ceruledge",
|
||||
weightkg: 6.2,
|
||||
eggGroups: ["Human-Like"],
|
||||
},
|
||||
dofagrigusshrunken: {
|
||||
num: 4,
|
||||
name: "Dofagrigus-Shrunken",
|
||||
baseSpecies: "Dofagrigus",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost"],
|
||||
baseStats: { hp: 70, atk: 27, def: 73, spa: 47, spd: 53, spe: 15 },
|
||||
abilities: { 0: "Dummy", H: "Bulletproof" },
|
||||
battleOnly: "Dofagrigus",
|
||||
weightkg: 7.7,
|
||||
eggGroups: ["Mineral", "Amorphous"],
|
||||
},
|
||||
eddyazbearshrunken: {
|
||||
num: 5,
|
||||
name: "Eddy Azbear-Shrunken",
|
||||
baseSpecies: "Eddy Azbear",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Fighting"],
|
||||
baseStats: { hp: 183, atk: 58, def: 20, spa: 50, spd: 20, spe: 45 },
|
||||
abilities: { 0: "Jumpscare", H: "Strong Jaw" },
|
||||
battleOnly: "Eddy Azbear",
|
||||
weightkg: 55.5,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
fluttermaneshrunken: {
|
||||
num: 6,
|
||||
name: "Flutter Mane-Shrunken",
|
||||
baseSpecies: "Flutter Mane",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Dark", "Fairy"],
|
||||
baseStats: { hp: 95, atk: 47, def: 48, spa: 47, spd: 48, spe: 47 },
|
||||
abilities: { 0: "Protosynthesis", H: "Levitate" },
|
||||
battleOnly: "Flutter Mane",
|
||||
weightkg: 0.4,
|
||||
tags: ["Paradox"],
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
fluttermane2shrunken: {
|
||||
num: 7,
|
||||
name: "Flutter Mane 2-Shrunken",
|
||||
baseSpecies: "Flutter Mane 2",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Dark", "Fairy"],
|
||||
baseStats: { hp: 95, atk: 47, def: 48, spa: 47, spd: 48, spe: 47 },
|
||||
abilities: { 0: "Protosynthesis", H: "Levitate" },
|
||||
battleOnly: "Flutter Mane 2",
|
||||
weightkg: 0.4,
|
||||
tags: ["Paradox"],
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
gourgeisttinyshrunken: {
|
||||
num: 8,
|
||||
name: "Gourgeist-Tiny-Shrunken",
|
||||
baseSpecies: "Gourgeist",
|
||||
forme: "Tiny-Shrunken",
|
||||
types: ["Ghost", "Grass", "Fire", "Fairy"],
|
||||
baseStats: { hp: 5, atk: 40, def: 65, spa: 40, spd: 38, spe: 84 },
|
||||
abilities: { 0: "Grassy Surge" },
|
||||
battleOnly: "Gourgeist-Tiny",
|
||||
weightkg: 0.5,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
gourgeistshrunken: {
|
||||
num: 9,
|
||||
name: "Gourgeist-Shrunken",
|
||||
baseSpecies: "Gourgeist",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Grass", "Fire", "Fairy"],
|
||||
baseStats: { hp: 55, atk: 45, def: 55, spa: 45, spd: 38, spe: 59 },
|
||||
abilities: { 0: "Poison Heal" },
|
||||
battleOnly: "Gourgeist",
|
||||
weightkg: 1.3,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
gourgeistlargeshrunken: {
|
||||
num: 10,
|
||||
name: "Gourgeist-Large-Shrunken",
|
||||
baseSpecies: "Gourgeist",
|
||||
forme: "Large-Shrunken",
|
||||
types: ["Ghost", "Grass", "Fire", "Fairy"],
|
||||
baseStats: { hp: 105, atk: 50, def: 45, spa: 50, spd: 38, spe: 34 },
|
||||
abilities: { 0: "Spoky" },
|
||||
battleOnly: "Gourgeist-Large",
|
||||
weightkg: 1.4,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
gourgeistgiganticshrunken: {
|
||||
num: 11,
|
||||
name: "Gourgeist-Gigantic-Shrunken",
|
||||
baseSpecies: "Gourgeist",
|
||||
forme: "Gigantic-Shrunken",
|
||||
types: ["Ghost", "Grass", "Fire", "Fairy"],
|
||||
baseStats: { hp: 155, atk: 55, def: 35, spa: 55, spd: 38, spe: 9 },
|
||||
abilities: { 0: "Pulp Up" },
|
||||
battleOnly: "Gourgeist-Gigantic",
|
||||
weightkg: 7.8,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
houndstoneshrunken: {
|
||||
num: 12,
|
||||
name: "Houndstone-Shrunken",
|
||||
baseSpecies: "Houndstone",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Fighting"],
|
||||
baseStats: { hp: 82, atk: 46, def: 70, spa: 25, spd: 49, spe: 35 },
|
||||
abilities: { 0: "Jumpscare", 1: "Scrappy", H: "Fluffy" },
|
||||
battleOnly: "Houndstone",
|
||||
weightkg: 1.5,
|
||||
eggGroups: ["Field"],
|
||||
},
|
||||
indeedeeshrunken: {
|
||||
num: 13,
|
||||
name: "Indeedee-Shrunken",
|
||||
baseSpecies: "Indeedee",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Normal", "Psychic"],
|
||||
baseStats: { hp: 70, atk: 42, def: 38, spa: 52, spd: 48, spe: 47 },
|
||||
abilities: { 0: "Inner Focus", 1: "Scrappy", H: "Psychic Surge" },
|
||||
battleOnly: "Indeedee",
|
||||
weightkg: 2.8,
|
||||
eggGroups: ["Fairy"],
|
||||
},
|
||||
jableyeshrunken: {
|
||||
num: 14,
|
||||
name: "Jableye-Shrunken",
|
||||
baseSpecies: "Jableye",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Dark"],
|
||||
baseStats: { hp: 75, atk: 25, def: 38, spa: 25, spd: 38, spe: 25 },
|
||||
abilities: { 0: "Justified", H: "Jankster" },
|
||||
battleOnly: "Jableye",
|
||||
weightkg: 1.1,
|
||||
eggGroups: ["Human-Like"],
|
||||
},
|
||||
jobapplicationshrunken: {
|
||||
num: 15,
|
||||
name: "JOB APPLICATION-Shrunken",
|
||||
baseSpecies: "JOB APPLICATION",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Normal"],
|
||||
baseStats: { hp: 130, atk: 65, def: 35, spa: 25, spd: 35, spe: 40 },
|
||||
abilities: { 0: "Jumpscare" },
|
||||
battleOnly: "JOB APPLICATION",
|
||||
weightkg: 0.4,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
lanturnevilshrunken: {
|
||||
num: 16,
|
||||
name: "Lanturn-Evil-Shrunken",
|
||||
baseSpecies: "Lanturn",
|
||||
forme: "Evil-Shrunken",
|
||||
types: ["Ghost", "Retaw", "Critcele"],
|
||||
baseStats: { hp: 97, atk: 48, def: 48, spa: 29, spd: 29, spe: 62 },
|
||||
abilities: { 0: "Volt Absorb", 1: "Illuminate", H: "Abyssal Light" },
|
||||
battleOnly: "Lanturn-Evil",
|
||||
weightkg: 2.3,
|
||||
eggGroups: ["Water 2"],
|
||||
},
|
||||
merasmusshrunken: {
|
||||
num: 17,
|
||||
name: "MERASMUS-Shrunken",
|
||||
baseSpecies: "MERASMUS",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Psychic", "Fairy", "Dark"],
|
||||
baseStats: { hp: 111, atk: 55, def: 56, spa: 55, spd: 56, spe: 55 },
|
||||
abilities: { 0: "Magician" },
|
||||
battleOnly: "MERASMUS",
|
||||
weightkg: 66.6,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
nursolashrunken: {
|
||||
num: 18,
|
||||
name: "Nursola-Shrunken",
|
||||
baseSpecies: "Nursola",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Grass", "Rock"],
|
||||
baseStats: { hp: 145, atk: 25, def: 30, spa: 48, spd: 65, spe: 15 },
|
||||
abilities: { 0: "Solid Rock", 1: "Purifying Salt", H: "Perish Body" },
|
||||
battleOnly: "Nursola",
|
||||
weightkg: 0.1,
|
||||
eggGroups: ["Water 1", "Water 3"],
|
||||
},
|
||||
okestarspiritshrunken: {
|
||||
num: 19,
|
||||
name: "Okestar Spirit-Shrunken",
|
||||
baseSpecies: "Okestar Spirit",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "ark"],
|
||||
baseStats: { hp: 100, atk: 50, def: 50, spa: 50, spd: 50, spe: 50 },
|
||||
abilities: { 0: "Onder Guard" },
|
||||
battleOnly: "Okestar Spirit",
|
||||
weightkg: 6.1,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
ppiritombshrunken: {
|
||||
num: 20,
|
||||
name: "PPiritomb-Shrunken",
|
||||
baseSpecies: "PPiritomb",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "PDark", "PRock"],
|
||||
baseStats: { hp: 50, atk: 46, def: 54, spa: 46, spd: 54, spe: 25 },
|
||||
abilities: { 0: "PPressure", H: "Pinfiltrator" },
|
||||
battleOnly: "PPiritomb",
|
||||
weightkg: 10.8,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
quagsiredeadshrunken: {
|
||||
num: 21,
|
||||
name: "Quagsire-Dead-Shrunken",
|
||||
baseSpecies: "Quagsire",
|
||||
forme: "Dead-Shrunken",
|
||||
types: ["Ghost", "Water", "Ground"],
|
||||
baseStats: { hp: 115, atk: 47, def: 48, spa: 37, spd: 38, spe: 22 },
|
||||
abilities: { 0: "Cursed Body", H: "Unaware" },
|
||||
battleOnly: "Quagsire-Dead",
|
||||
weightkg: 0.8,
|
||||
eggGroups: ["Water 1", "Field"],
|
||||
},
|
||||
rotomshrunken: {
|
||||
num: 22,
|
||||
name: "Rotom-Shrunken",
|
||||
baseSpecies: "Rotom",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Electric"],
|
||||
baseStats: { hp: 80, atk: 25, def: 49, spa: 57, spd: 49, spe: 45 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
battleOnly: "Rotom",
|
||||
weightkg: 0.1,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
rotomheatshrunken: {
|
||||
num: 22,
|
||||
name: "Rotom-Heat-Shrunken",
|
||||
baseSpecies: "Rotom-Heat",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Electric", "Fire"],
|
||||
baseStats: { hp: 80, atk: 25, def: 49, spa: 57, spd: 49, spe: 45 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
battleOnly: "Rotom-Heat",
|
||||
weightkg: 0.1,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
rotomwashshrunken: {
|
||||
num: 22,
|
||||
name: "Rotom-Wash-Shrunken",
|
||||
baseSpecies: "Rotom-Wash",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Electric", "Water"],
|
||||
baseStats: { hp: 80, atk: 25, def: 49, spa: 57, spd: 49, spe: 45 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
battleOnly: "Rotom-Wash",
|
||||
weightkg: 0.1,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
rotommowshrunken: {
|
||||
num: 22,
|
||||
name: "Rotom-Mow-Shrunken",
|
||||
baseSpecies: "Rotom-Mow",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Electric", "Grass"],
|
||||
baseStats: { hp: 80, atk: 25, def: 49, spa: 57, spd: 49, spe: 45 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
battleOnly: "Rotom-Mow",
|
||||
weightkg: 0.1,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
rotomfrostshrunken: {
|
||||
num: 22,
|
||||
name: "Rotom-Frost-Shrunken",
|
||||
baseSpecies: "Rotom-Frost",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Electric", "Ice"],
|
||||
baseStats: { hp: 80, atk: 25, def: 49, spa: 57, spd: 49, spe: 45 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
battleOnly: "Rotom-Frost",
|
||||
weightkg: 0.1,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
rotomfanshrunken: {
|
||||
num: 22,
|
||||
name: "Rotom-Fan-Shrunken",
|
||||
baseSpecies: "Rotom-Fan",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Electric", "Flying"],
|
||||
baseStats: { hp: 80, atk: 25, def: 49, spa: 57, spd: 49, spe: 45 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
battleOnly: "Rotom-Fan",
|
||||
weightkg: 0.1,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
shedinjashrunken: {
|
||||
num: 23,
|
||||
name: "Shedinja-Shrunken",
|
||||
baseSpecies: "Shedinja",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Bug"],
|
||||
baseStats: { hp: 1, atk: 45, def: 1, spa: 45, spd: 1, spe: 21 },
|
||||
abilities: { 0: "Wonder Guard" },
|
||||
battleOnly: "Shedinja",
|
||||
weightkg: 0.6,
|
||||
eggGroups: ["Bug"],
|
||||
},
|
||||
trevenantshrunken: {
|
||||
num: 24,
|
||||
name: "Trevenant-Shrunken",
|
||||
baseSpecies: "Trevenant",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Grass", "Fighting"],
|
||||
baseStats: { hp: 85, atk: 55, def: 53, spa: 32, spd: 51, spe: 28 },
|
||||
abilities: { 0: "Natural Cure", 1: "Triage", H: "Revive" },
|
||||
battleOnly: "Trevenant",
|
||||
weightkg: 7.1,
|
||||
eggGroups: ["Grass", "Amorphous"],
|
||||
},
|
||||
ursalunabloodmoonshrunken: {
|
||||
num: 25,
|
||||
name: "Ursaluna-Bloodmoon-Shrunken",
|
||||
baseSpecies: "Ursaluna",
|
||||
forme: "Bloodmoon-Shrunken",
|
||||
types: ["Ghost", "Normal", "Ground"],
|
||||
baseStats: { hp: 113, atk: 50, def: 45, spa: 67, spd: 33, spe: 26 },
|
||||
abilities: { 0: "Mind's Eye", H: "Undead" },
|
||||
battleOnly: "Ursaluna-Bloodmoon",
|
||||
weightkg: 33.3,
|
||||
eggGroups: ["Field"],
|
||||
},
|
||||
kiloticshrunken: {
|
||||
num: 26,
|
||||
name: "Kilotic-Shrunken",
|
||||
baseSpecies: "Kilotic",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Water"],
|
||||
baseStats: { hp: 81, atk: 30, def: 63, spa: 50, spd: 40, spe: 48 },
|
||||
abilities: { 0: "Flare Boost", 1: "Intimidate", H: "Cursed Body" },
|
||||
battleOnly: "Kilotic",
|
||||
weightkg: 16.2,
|
||||
eggGroups: ["Water 1", "Dragon"],
|
||||
},
|
||||
vampharosshrunken: {
|
||||
num: 27,
|
||||
name: "Vampharos-Shrunken",
|
||||
baseSpecies: "Vampharos",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Electric", "Dragon"],
|
||||
baseStats: { hp: 90, atk: 43, def: 48, spa: 70, spd: 50, spe: 25 },
|
||||
abilities: { 0: "Cotton Down", 1: "Mold Breaker", H: "Vamp" },
|
||||
battleOnly: "Vampharos",
|
||||
weightkg: 6.2,
|
||||
eggGroups: ["Monster", "Field"],
|
||||
},
|
||||
wunalashrunken: {
|
||||
num: 28,
|
||||
name: "Wunala-Shrunken",
|
||||
baseSpecies: "Wunala",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Psychic", "Dark"],
|
||||
baseStats: { hp: 67, atk: 56, def: 55, spa: 33, spd: 54, spe: 33 },
|
||||
abilities: { 0: "Wandering Spirit", 1: "Wonder Skin", H: "Wand Rush" },
|
||||
battleOnly: "Wunala",
|
||||
weightkg: 12,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
xorygonzshrunken: {
|
||||
num: 29,
|
||||
name: "XORygon-Z-Shrunken",
|
||||
baseSpecies: "XORygon-Z",
|
||||
forme: "Z-Shrunken",
|
||||
types: ["Ghost", "Steel", "Ice", "Poison"],
|
||||
baseStats: { hp: 85, atk: 45, def: 35, spa: 62, spd: 38, spe: 45 },
|
||||
abilities: { 0: "Mutual Exclusion", H: "Ahexual" },
|
||||
battleOnly: "XORygon-Z",
|
||||
weightkg: 3.4,
|
||||
eggGroups: ["Mineral"],
|
||||
},
|
||||
yveltalshrunken: {
|
||||
num: 30,
|
||||
name: "Yveltal-Shrunken",
|
||||
baseSpecies: "Yveltal",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Dragon", "Flying"],
|
||||
baseStats: { hp: 116, atk: 46, def: 48, spa: 46, spd: 49, spe: 39 },
|
||||
abilities: { 0: "Dark Aura", H: "Intimidate" },
|
||||
battleOnly: "Yveltal",
|
||||
weightkg: 20.3,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
zoroarkhisuishrunken: {
|
||||
num: 31,
|
||||
name: "Zoroark-Hisui-Shrunken",
|
||||
baseSpecies: "Zoroark",
|
||||
forme: "Hisui-Shrunken",
|
||||
types: ["Ghost", "Normal", "Ice"],
|
||||
baseStats: { hp: 65, atk: 55, def: 35, spa: 52, spd: 35, spe: 55 },
|
||||
abilities: { 0: "Cursed Body", 1: "Snow Warning", H: "Illusion" },
|
||||
battleOnly: "Zoroark-Hisui",
|
||||
weightkg: 7.3,
|
||||
eggGroups: ["Field"],
|
||||
},
|
||||
};
|
||||
|
|
@ -1,255 +0,0 @@
|
|||
export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
|
||||
spokymod: {
|
||||
effectType: 'Rule',
|
||||
name: 'Spokymod',
|
||||
desc: 'spookymod jumpscare',
|
||||
onBegin() {
|
||||
const intro = [
|
||||
"Welcome mortals to my Magic Kingdom!...which is unaffiliated with any other Magic Kingdom that may or may not exist.",
|
||||
"Step right up and get your spells from me! For I am the Spell Master!...again, not a term Merasmus officially owns.",
|
||||
"Greetings mortals and こんにちは! Yes Merasmus is learning Japanese, in the likely event he will have to beg for his life!",
|
||||
"Why? Well, therein lies a tale of horror! Short version: Merasmus owes $12,000 to the Japanese Mafia!",
|
||||
"It is Halloween! The time of year when the doorways between our world and the next swing wide!",
|
||||
// "That...and President's Day. That's still only two times! So you've got to pick your battles if you're Merasmus!",
|
||||
"A harvest moon hangs pendulously in the sky, mortals!",
|
||||
/* "That's right, */ "The moon's giving us the green light for harvesting! Apropos of nothing,",
|
||||
"I hope you all brought your souls! (laughter) And money. Because Merasmus has sunk a lot into this metagame.",
|
||||
"It is I, mortals, Merasmus the wizard! Welcome to my dark carnival of the macabre! Admit One...to MADNESS!",
|
||||
"(laughter) Step right up and test your measly minds on my Metagame of the Danged!",
|
||||
];
|
||||
this.add('-message', `${this.sample(intro)}`);
|
||||
},
|
||||
|
||||
onResidual(pokemon) {
|
||||
// make sure it only rolls once
|
||||
let temp = false;
|
||||
for (const p of this.sides[0].pokemon) {
|
||||
if (p.isActive && p === pokemon) temp = true;
|
||||
}
|
||||
if (!temp) return;
|
||||
const spinSet = [
|
||||
"The wheel spins!",
|
||||
"The wheel spins!",
|
||||
"I spin the Wheel of Fate!",
|
||||
"The Wheel of Fate spins!",
|
||||
"You cannot escape the Wheel of Fate!",
|
||||
"Spin, wheel! Spin!",
|
||||
"Spin the wheel, and seal your fate!",
|
||||
"Yes, spin the wheel, you fools. See what horrors are in store for you.",
|
||||
"Prepare to feel the wrath of the Wheel of Fate!",
|
||||
"Yes, spin the Wheel of Fate!",
|
||||
"Your fate... is at hand!",
|
||||
"The Wheel of Fate is a fickle mistress.",
|
||||
"The wheel spins!",
|
||||
"(laughter) Your fate is at hand.",
|
||||
"The wheel will be your undoing.",
|
||||
"Yes... Yes! The wheel!",
|
||||
"Yes... Yes! Fate!",
|
||||
"The wheel! Come on wheel, Merasmus needs this.",
|
||||
"The wheel! Come on wheel, you owe me.",
|
||||
"The wheel! Come on... Set them all on fire.",
|
||||
"The wheel! Come on... Big. Head. Come on, big head.",
|
||||
];
|
||||
const bighead = [
|
||||
"Big heads!",
|
||||
"(laughter) Big head fate! Big head fate!",
|
||||
"I curse your heads... with bigness!",
|
||||
"You cannot escape the terror... of your own giant head!",
|
||||
"Super big heads!",
|
||||
"Plague of head-biggening!",
|
||||
"Big heads! The horror! The horror!",
|
||||
];
|
||||
const smallhead = [
|
||||
"Shrunken heads!",
|
||||
"Tiny heads!",
|
||||
"Teeny, tiny heads! As foretold in prophecy.",
|
||||
"Feel the tiny eldritch terror of an itty... bitty... head!",
|
||||
"Like your tiny heads? THANK MAGIC!",
|
||||
"Teeny, tiny heads!",
|
||||
];
|
||||
const superspeed = ["Super Speed!"];
|
||||
const dance = [
|
||||
"Dance fools!",
|
||||
"Darkness falls across the land! The dancing hour is close at hand!",
|
||||
"And though you fight to stay alive, your body starts to spasmus. For no mere mortal can resist the magic of Merasmus!",
|
||||
"Dance. Dance! DANCE!",
|
||||
"Plague of dancing!",
|
||||
];
|
||||
const bleed = [
|
||||
"The bloodening!",
|
||||
"Blood-letting!",
|
||||
"Let the blood flow!",
|
||||
"Blood fate!",
|
||||
"Plague of blood!",
|
||||
];
|
||||
const fire = [
|
||||
"Firestorm!",
|
||||
"Fire!",
|
||||
"Fire, yes! Now you're all on fire!",
|
||||
"Fire! Oh, that's a good one!",
|
||||
"Burn fools, burn!",
|
||||
"BURN!",
|
||||
"Burn fools!",
|
||||
"Hellfire!",
|
||||
];
|
||||
const jarate = [
|
||||
"Jarate!",
|
||||
"Jarate! No magic is beneath Merasmus!",
|
||||
"Jarate! That is what you think it is!",
|
||||
"Rain of waste!",
|
||||
"Jarate! Merasmus is...sorry about this one.",
|
||||
"Jarate! Merasmus is...not proud...of this one.",
|
||||
"Rain of Jarate!",
|
||||
"Rain of Jarate! *sotto voce* I'm sorry about this.",
|
||||
"Jarate!",
|
||||
"Jarate! Jarate for everyone!",
|
||||
"Jarate for everyone! I'm so, so sorry!",
|
||||
];
|
||||
const ghosts = [
|
||||
"Ghosts!",
|
||||
"Let the haunting... begin!",
|
||||
"Rise, rise from your graves!",
|
||||
"Plague of ghosts!",
|
||||
];
|
||||
const lowgravity = [
|
||||
"Low gravity!",
|
||||
"Gravity displeases me, so I have removed it!",
|
||||
"Gravity displeases me, so I have removed it! ...Most of it!",
|
||||
"Gravity! I banish thee!",
|
||||
"Bid farewell to your precious gravity!",
|
||||
];
|
||||
const superjump = ["Super jumping!", "High jump!"];
|
||||
const crithit = ["It is the crit boostening!"];
|
||||
const ubercharge = [
|
||||
"You are GODS! *sotto voce* ...I don't know why I put that on the wheel...",
|
||||
"You are GODS! Magic! It is not an exact science.",
|
||||
"Invincible! INVINCIBL- Wait, wait, what?",
|
||||
"Everybody's invincible! Muhahahaha! Fools! Ahahaha... eheh... Hold on...",
|
||||
"You are GODS! Nahahaha... Enjoy your false confidence. It will be your doom!",
|
||||
"You are GODS! Aha, that may seem good, but it will be bad. In the fullness of time.",
|
||||
"You are GODS! I... meant to do that. It will go badly for you. You watch.",
|
||||
"You are GODS! Wait, no no no no no!",
|
||||
"ÜBERCHARGE!",
|
||||
];
|
||||
if (this.turn % 3 !== 0) return;
|
||||
this.add('-message', `${this.sample(spinSet)}`);
|
||||
const result = this.random(9);
|
||||
// result = 0;
|
||||
switch (result) {
|
||||
case 0:
|
||||
this.add('-message', `${this.sample(bighead)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
pokemons.removeVolatile('shrunken');
|
||||
pokemons.addVolatile('fakedynamax', pokemons);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
this.add('-message', `${this.sample(smallhead)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
pokemons.removeVolatile('fakedynamax');
|
||||
pokemons.addVolatile('shrunken', pokemons);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
this.add('-message', `${this.sample(superspeed)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
this.boost({ spe: 2 }, pokemons, pokemons, null, true);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
this.add('-message', `${this.sample(dance)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
this.add('-anim', pokemons, "Teeter Dance", pokemons);
|
||||
this.add('-anim', pokemons, "Revelation Dance", pokemons);
|
||||
this.add('-anim', pokemons, "Quiver Dance", pokemons);
|
||||
this.add('-anim', pokemons, "Victory Dance", pokemons);
|
||||
this.add('-anim', pokemons, "Dragon Dance", pokemons);
|
||||
this.add('-anim', pokemons, "Swords Dance", pokemons);
|
||||
this.add('-anim', pokemons, "Petal Dance", pokemons);
|
||||
this.add('-anim', pokemons, "Lunar Dance", pokemons);
|
||||
this.add('-anim', pokemons, "Feather Dance", pokemons);
|
||||
this.add('-anim', pokemons, "Rain Dance", pokemons);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
const temps = this.random(4);
|
||||
// const temps = 3;
|
||||
switch (temps) {
|
||||
case 0:
|
||||
this.add('-message', `${this.sample(bleed)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
pokemons.trySetStatus('psn', pokemons);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
this.add('-message', `${this.sample(fire)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
pokemons.trySetStatus('brn', pokemons);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
this.add('-message', `${this.sample(jarate)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
pokemons.addVolatile('jarate', pokemons);
|
||||
this.hint('pokemons covered in Jarate take 1.35x damage from opponent\'s attacks.');
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
this.add('-message', `${this.sample(ghosts)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
pokemons.addVolatile('jumpscare', pokemons);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
this.add('-message', `${this.sample(lowgravity)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
pokemons.addVolatile('telekinesis', pokemons);
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
this.add('-message', `${this.sample(superjump)}`);
|
||||
this.field.setWeather('superjump');
|
||||
break;
|
||||
case 7:
|
||||
this.add('-message', `${this.sample(crithit)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
pokemons.addVolatile('laserfocus', pokemons);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
this.add('-message', `${this.sample(ubercharge)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
pokemons.addVolatile('ubercharge', pokemons);
|
||||
}
|
||||
this.hint('Ubercharged Pokemon take no damage from attacks.');
|
||||
}
|
||||
},
|
||||
onBasePowerPriority: 19,
|
||||
onBasePower(basePower, attacker, defender, move) {
|
||||
if ((attacker.hasType('Retaw') && move.type === 'Water') ||
|
||||
(attacker.hasType('Critcele') && move.type === 'Electric') ||
|
||||
(attacker.hasType('Pdark') && move.type === 'Dark') ||
|
||||
(attacker.hasType('Prock') && move.type === 'Rock') ||
|
||||
(attacker.hasType('ark') && move.type === 'Dark')) {
|
||||
return this.chainModify(1.5);
|
||||
}
|
||||
},
|
||||
},
|
||||
spriteviewer: {
|
||||
effectType: 'ValidatorRule',
|
||||
name: 'Sprite Viewer',
|
||||
desc: "Displays a fakemon's sprite in chat when it is switched in for the first time",
|
||||
onBegin() {
|
||||
this.add('rule', 'Sprite Viewer: Displays sprites in chat');
|
||||
},
|
||||
onSwitchIn(pokemon) {
|
||||
if (!this.effectState[pokemon.species.id]) {
|
||||
this.add('-message', `${pokemon.species.name}'s Sprite:`);
|
||||
this.add(`raw|<img src="https://raw.githubusercontent.com/scoopapa/DH2/refs/heads/main/data/mods/spookymod/sprites/front/${pokemon.species.id}.png" height="96" width="96">`);
|
||||
this.effectState[pokemon.species.id] = true;
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
@ -1,101 +0,0 @@
|
|||
export const Scripts: ModdedBattleScriptsData = {
|
||||
gen: 9,
|
||||
// the below is all commented out due to an ability that requires checkFainted, but it seems like we can't edit checkFainted
|
||||
/* checkFainted() {
|
||||
for (const side of this.sides) {
|
||||
for (const pokemon of side.active) {
|
||||
if (pokemon.fainted) {
|
||||
pokemon.status = 'fnt' as ID;
|
||||
pokemon.switchFlag = true;
|
||||
} else if (pokemon.effectState.zombie) {
|
||||
pokemon.status = '';
|
||||
pokemon.switchFlag = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
faintMessages(lastFirst = false, forceCheck = false, checkWin = true) {
|
||||
if (this.ended) return;
|
||||
const length = this.faintQueue.length;
|
||||
if (!length) {
|
||||
if (forceCheck && this.checkWin()) return true;
|
||||
return false;
|
||||
}
|
||||
if (lastFirst) {
|
||||
this.faintQueue.unshift(this.faintQueue[this.faintQueue.length - 1]);
|
||||
this.faintQueue.pop();
|
||||
}
|
||||
let faintQueueLeft, faintData;
|
||||
while (this.faintQueue.length) {
|
||||
faintQueueLeft = this.faintQueue.length;
|
||||
faintData = this.faintQueue.shift()!;
|
||||
const pokemon: Pokemon = faintData.target;
|
||||
if (!pokemon.fainted && this.runEvent('BeforeFaint', pokemon, faintData.source, faintData.effect)) {
|
||||
this.add('faint', pokemon);
|
||||
if (
|
||||
!(pokemon.species.name === 'Trevenant' && pokemon.ability === 'revive' && !this.effectState.zombie &&
|
||||
!pokemon.transformed && this.canSwitch(pokemon.side))
|
||||
) {
|
||||
pokemon.side.pokemonLeft--;
|
||||
}
|
||||
this.runEvent('Faint', pokemon, faintData.source, faintData.effect);
|
||||
this.singleEvent('End', pokemon.getAbility(), pokemon.abilityState, pokemon);
|
||||
this.singleEvent('End', pokemon.getItem(), pokemon.itemState, pokemon);
|
||||
if (pokemon.formeRegression && !pokemon.transformed) {
|
||||
// before clearing volatiles
|
||||
pokemon.baseSpecies = this.dex.species.get(pokemon.set.species || pokemon.set.name);
|
||||
pokemon.baseAbility = toID(pokemon.set.ability);
|
||||
}
|
||||
pokemon.clearVolatile(false);
|
||||
if (!this.effectState.zombie) {
|
||||
pokemon.fainted = true;
|
||||
} else {
|
||||
pokemon.faintQueued = false;
|
||||
}
|
||||
pokemon.illusion = null;
|
||||
pokemon.isActive = false;
|
||||
pokemon.isStarted = false;
|
||||
delete pokemon.terastallized;
|
||||
if (pokemon.formeRegression) {
|
||||
// after clearing volatiles
|
||||
pokemon.details = pokemon.getUpdatedDetails();
|
||||
this.add('detailschange', pokemon, pokemon.details, '[silent]');
|
||||
pokemon.updateMaxHp();
|
||||
pokemon.formeRegression = false;
|
||||
}
|
||||
pokemon.side.faintedThisTurn = pokemon;
|
||||
if (this.faintQueue.length >= faintQueueLeft) checkWin = true;
|
||||
}
|
||||
}
|
||||
if (this.gen <= 1) {
|
||||
// in gen 1, fainting skips the rest of the turn
|
||||
// residuals don't exist in gen 1
|
||||
this.queue.clear();
|
||||
// Fainting clears accumulated Bide damage
|
||||
for (const pokemon of this.getAllActive()) {
|
||||
if (pokemon.volatiles['bide']?.damage) {
|
||||
pokemon.volatiles['bide'].damage = 0;
|
||||
this.hint("Desync Clause Mod activated!");
|
||||
this.hint("In Gen 1, Bide's accumulated damage is reset to 0 when a Pokemon faints.");
|
||||
}
|
||||
}
|
||||
} else if (this.gen <= 3 && this.gameType === 'singles') {
|
||||
// in gen 3 or earlier, fainting in singles skips to residuals
|
||||
for (const pokemon of this.getAllActive()) {
|
||||
if (this.gen <= 2) {
|
||||
// in gen 2, fainting skips moves only
|
||||
this.queue.cancelMove(pokemon);
|
||||
} else {
|
||||
// in gen 3, fainting skips all moves and switches
|
||||
this.queue.cancelAction(pokemon);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (checkWin && this.checkWin(faintData)) return true;
|
||||
if (faintData && length) {
|
||||
this.runEvent('AfterFaint', faintData.target, faintData.source, faintData.effect, length);
|
||||
}
|
||||
return false;
|
||||
},
|
||||
*/
|
||||
};
|
||||
|
|
@ -1,112 +0,0 @@
|
|||
export const TypeChart: import('../../../sim/dex-data').ModdedTypeDataTable = {
|
||||
ark: {
|
||||
damageTaken: {
|
||||
Bug: 1,
|
||||
Dark: 2,
|
||||
Dragon: 0,
|
||||
Electric: 0,
|
||||
Fairy: 1,
|
||||
Fighting: 1,
|
||||
Fire: 0,
|
||||
Flying: 0,
|
||||
Ghost: 2,
|
||||
Grass: 0,
|
||||
Ground: 0,
|
||||
Ice: 0,
|
||||
Normal: 0,
|
||||
Poison: 0,
|
||||
Psychic: 3,
|
||||
Rock: 0,
|
||||
Steel: 0,
|
||||
Water: 0,
|
||||
},
|
||||
},
|
||||
critcele: {
|
||||
damageTaken: {
|
||||
Bug: 0,
|
||||
Dark: 0,
|
||||
Dragon: 0,
|
||||
Electric: 1,
|
||||
Fairy: 0,
|
||||
Fighting: 0,
|
||||
Fire: 0,
|
||||
Flying: 1,
|
||||
Ghost: 0,
|
||||
Grass: 0,
|
||||
Ground: 2,
|
||||
Ice: 0,
|
||||
Normal: 0,
|
||||
Poison: 0,
|
||||
Psychic: 0,
|
||||
Rock: 0,
|
||||
Steel: 1,
|
||||
Water: 0,
|
||||
},
|
||||
},
|
||||
pdark: {
|
||||
damageTaken: {
|
||||
Bug: 1,
|
||||
Dark: 2,
|
||||
Dragon: 0,
|
||||
Electric: 0,
|
||||
Fairy: 1,
|
||||
Fighting: 1,
|
||||
Fire: 0,
|
||||
Flying: 0,
|
||||
Ghost: 2,
|
||||
Grass: 0,
|
||||
Ground: 0,
|
||||
Ice: 0,
|
||||
Normal: 0,
|
||||
Poison: 2,
|
||||
Psychic: 3,
|
||||
Rock: 0,
|
||||
Steel: 0,
|
||||
Water: 0,
|
||||
},
|
||||
},
|
||||
prock: {
|
||||
damageTaken: {
|
||||
Bug: 0,
|
||||
Dark: 0,
|
||||
Dragon: 0,
|
||||
Electric: 0,
|
||||
Fairy: 0,
|
||||
Fighting: 1,
|
||||
Fire: 2,
|
||||
Flying: 2,
|
||||
Ghost: 0,
|
||||
Grass: 1,
|
||||
Ground: 1,
|
||||
Ice: 0,
|
||||
Normal: 2,
|
||||
Poison: 2,
|
||||
Psychic: 2,
|
||||
Rock: 0,
|
||||
Steel: 1,
|
||||
Water: 1,
|
||||
},
|
||||
},
|
||||
retaw: {
|
||||
damageTaken: {
|
||||
Bug: 0,
|
||||
Dark: 0,
|
||||
Dragon: 0,
|
||||
Electric: 2,
|
||||
Fairy: 0,
|
||||
Fighting: 0,
|
||||
Fire: 1,
|
||||
Flying: 0,
|
||||
Ghost: 0,
|
||||
Grass: 2,
|
||||
Ground: 0,
|
||||
Ice: 1,
|
||||
Normal: 0,
|
||||
Poison: 0,
|
||||
Psychic: 0,
|
||||
Rock: 0,
|
||||
Steel: 1,
|
||||
Water: 1,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
@ -3789,7 +3789,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
|
|||
flags: { protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1 },
|
||||
volatileStatus: 'disable',
|
||||
onTryHit(target) {
|
||||
if (!target.lastMove || target.lastMove.isZ || target.lastMove.isMax || target.lastMove.id === 'struggle') {
|
||||
if (!target.lastMove || target.lastMove.isZOrMaxPowered || target.lastMove.isMax || target.lastMove.id === 'struggle') {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
|
|
@ -3829,7 +3829,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
|
|||
},
|
||||
onBeforeMovePriority: 7,
|
||||
onBeforeMove(attacker, defender, move) {
|
||||
if (!move.isZ && move.id === this.effectState.move) {
|
||||
if (!(move.isZ && move.isZOrMaxPowered) && move.id === this.effectState.move) {
|
||||
this.add('cant', attacker, 'Disable', move);
|
||||
return false;
|
||||
}
|
||||
|
|
@ -4909,9 +4909,10 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
|
|||
let move: Move | ActiveMove | null = target.lastMove;
|
||||
if (!move || target.volatiles['dynamax']) return false;
|
||||
|
||||
// Encore only works on Max Moves if the base move is not itself a Max Move
|
||||
if (move.isMax && move.baseMove) move = this.dex.moves.get(move.baseMove);
|
||||
const moveSlot = target.getMoveData(move.id);
|
||||
if (move.isZ || move.flags['failencore'] || !moveSlot || moveSlot.pp <= 0) {
|
||||
if (move.isZ || move.isMax || move.flags['failencore'] || !moveSlot || moveSlot.pp <= 0) {
|
||||
// it failed
|
||||
return false;
|
||||
}
|
||||
|
|
@ -8630,7 +8631,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
|
|||
onRestart(target, source, effect) {
|
||||
if (effect?.name === 'Psychic Noise') return;
|
||||
|
||||
this.add('-fail', target, 'move: Heal Block'); // Succeeds to supress downstream messages
|
||||
this.add('-fail', target, 'move: Heal Block'); // Succeeds to suppress downstream messages
|
||||
if (!source.moveThisTurnResult) {
|
||||
source.moveThisTurnResult = false;
|
||||
}
|
||||
|
|
@ -9858,7 +9859,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
|
|||
},
|
||||
onFoeBeforeMovePriority: 4,
|
||||
onFoeBeforeMove(attacker, defender, move) {
|
||||
if (move.id !== 'struggle' && this.effectState.source.hasMove(move.id) && !move.isZ && !move.isMax) {
|
||||
if (move.id !== 'struggle' && this.effectState.source.hasMove(move.id) && !move.isZOrMaxPowered) {
|
||||
this.add('cant', attacker, 'move: Imprison', move);
|
||||
return false;
|
||||
}
|
||||
|
|
@ -19739,7 +19740,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
|
|||
},
|
||||
onBeforeMovePriority: 5,
|
||||
onBeforeMove(attacker, defender, move) {
|
||||
if (!move.isZ && move.category === 'Status' && move.id !== 'mefirst') {
|
||||
if (!(move.isZ && move.isZOrMaxPowered) && move.category === 'Status' && move.id !== 'mefirst') {
|
||||
this.add('cant', attacker, 'move: Taunt', move);
|
||||
return false;
|
||||
}
|
||||
|
|
@ -20161,13 +20162,13 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
|
|||
},
|
||||
onBeforeMovePriority: 6,
|
||||
onBeforeMove(pokemon, target, move) {
|
||||
if (!move.isZ && !move.isMax && move.flags['sound']) {
|
||||
if (!move.isZOrMaxPowered && move.flags['sound']) {
|
||||
this.add('cant', pokemon, 'move: Throat Chop');
|
||||
return false;
|
||||
}
|
||||
},
|
||||
onModifyMove(move, pokemon, target) {
|
||||
if (!move.isZ && !move.isMax && move.flags['sound']) {
|
||||
if (!move.isZOrMaxPowered && move.flags['sound']) {
|
||||
this.add('cant', pokemon, 'move: Throat Chop');
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
422
data/pokedex.ts
422
data/pokedex.ts
|
|
@ -803,8 +803,8 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
evoType: "useItem",
|
||||
evoItem: "Thunder Stone",
|
||||
eggGroups: ["Field", "Fairy"],
|
||||
otherFormes: ["Raichu-Alola"],
|
||||
formeOrder: ["Raichu", "Raichu-Alola"],
|
||||
otherFormes: ["Raichu-Alola", "Raichu-Mega-X", "Raichu-Mega-Y"],
|
||||
formeOrder: ["Raichu", "Raichu-Alola", "Raichu-Mega-X", "Raichu-Mega-Y"],
|
||||
},
|
||||
raichualola: {
|
||||
num: 26,
|
||||
|
|
@ -823,6 +823,36 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
evoRegion: "Alola",
|
||||
eggGroups: ["Field", "Fairy"],
|
||||
},
|
||||
raichumegax: {
|
||||
num: 26,
|
||||
name: "Raichu-Mega-X",
|
||||
baseSpecies: "Raichu",
|
||||
forme: "Mega-X",
|
||||
types: ["Electric"],
|
||||
baseStats: { hp: 60, atk: 135, def: 95, spa: 90, spd: 95, spe: 110 },
|
||||
abilities: { 0: "Surge Surfer" },
|
||||
heightm: 1.2,
|
||||
weightkg: 38,
|
||||
color: "Yellow",
|
||||
eggGroups: ["Field", "Fairy"],
|
||||
requiredItem: "Raichunite X",
|
||||
gen: 9,
|
||||
},
|
||||
raichumegay: {
|
||||
num: 26,
|
||||
name: "Raichu-Mega-Y",
|
||||
baseSpecies: "Raichu",
|
||||
forme: "Mega-Y",
|
||||
types: ["Electric"],
|
||||
baseStats: { hp: 60, atk: 100, def: 55, spa: 160, spd: 80, spe: 130 },
|
||||
abilities: { 0: "Surge Surfer" },
|
||||
heightm: 1,
|
||||
weightkg: 26,
|
||||
color: "Yellow",
|
||||
eggGroups: ["Field", "Fairy"],
|
||||
requiredItem: "Raichunite Y",
|
||||
gen: 9,
|
||||
},
|
||||
sandshrew: {
|
||||
num: 27,
|
||||
name: "Sandshrew",
|
||||
|
|
@ -6626,6 +6656,23 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
evoCondition: "at night",
|
||||
eggGroups: ["Amorphous"],
|
||||
canHatch: true,
|
||||
otherFormes: ["Chimecho-Mega"],
|
||||
formeOrder: ["Chimecho", "Chimecho-Mega"],
|
||||
},
|
||||
chimechomega: {
|
||||
num: 358,
|
||||
name: "Chimecho-Mega",
|
||||
baseSpecies: "Chimecho",
|
||||
forme: "Mega",
|
||||
types: ["Psychic", "Steel"],
|
||||
baseStats: { hp: 75, atk: 50, def: 110, spa: 135, spd: 120, spe: 65 },
|
||||
abilities: { 0: "Levitate" },
|
||||
heightm: 1.2,
|
||||
weightkg: 8,
|
||||
color: "Blue",
|
||||
eggGroups: ["Amorphous"],
|
||||
requiredItem: "Chimechite",
|
||||
gen: 9,
|
||||
},
|
||||
absol: {
|
||||
num: 359,
|
||||
|
|
@ -6637,8 +6684,8 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
weightkg: 47,
|
||||
color: "White",
|
||||
eggGroups: ["Field"],
|
||||
otherFormes: ["Absol-Mega"],
|
||||
formeOrder: ["Absol", "Absol-Mega"],
|
||||
otherFormes: ["Absol-Mega", "Absol-Mega-Z"],
|
||||
formeOrder: ["Absol", "Absol-Mega", "Absol-Mega-Z"],
|
||||
},
|
||||
absolmega: {
|
||||
num: 359,
|
||||
|
|
@ -6654,6 +6701,21 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
eggGroups: ["Field"],
|
||||
requiredItem: "Absolite",
|
||||
},
|
||||
absolmegaz: {
|
||||
num: 359,
|
||||
name: "Absol-Mega-Z",
|
||||
baseSpecies: "Absol",
|
||||
forme: "Mega-Z",
|
||||
types: ["Dark", "Ghost"],
|
||||
baseStats: { hp: 65, atk: 154, def: 60, spa: 75, spd: 60, spe: 151 },
|
||||
abilities: { 0: "Magic Bounce" },
|
||||
heightm: 1.2,
|
||||
weightkg: 49,
|
||||
color: "Black",
|
||||
eggGroups: ["Field"],
|
||||
requiredItem: "Absolite Z",
|
||||
gen: 9,
|
||||
},
|
||||
wynaut: {
|
||||
num: 360,
|
||||
name: "Wynaut",
|
||||
|
|
@ -7352,6 +7414,23 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
prevo: "Staravia",
|
||||
evoLevel: 34,
|
||||
eggGroups: ["Flying"],
|
||||
otherFormes: ["Staraptor-Mega"],
|
||||
formeOrder: ["Staraptor", "Staraptor-Mega"],
|
||||
},
|
||||
staraptormega: {
|
||||
num: 398,
|
||||
name: "Staraptor-Mega",
|
||||
baseSpecies: "Staraptor",
|
||||
forme: "Mega",
|
||||
types: ["Fighting", "Flying"],
|
||||
baseStats: { hp: 85, atk: 140, def: 100, spa: 60, spd: 90, spe: 110 },
|
||||
abilities: { 0: "Intimidate", H: "Reckless" },
|
||||
heightm: 1.9,
|
||||
weightkg: 50,
|
||||
color: "Gray",
|
||||
eggGroups: ["Flying"],
|
||||
requiredItem: "Staraptite",
|
||||
gen: 9,
|
||||
},
|
||||
bidoof: {
|
||||
num: 399,
|
||||
|
|
@ -8066,8 +8145,8 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
prevo: "Gabite",
|
||||
evoLevel: 48,
|
||||
eggGroups: ["Monster", "Dragon"],
|
||||
otherFormes: ["Garchomp-Mega"],
|
||||
formeOrder: ["Garchomp", "Garchomp-Mega"],
|
||||
otherFormes: ["Garchomp-Mega", "Garchomp-Mega-Z"],
|
||||
formeOrder: ["Garchomp", "Garchomp-Mega", "Garchomp-Mega-Z"],
|
||||
},
|
||||
garchompmega: {
|
||||
num: 445,
|
||||
|
|
@ -8083,6 +8162,21 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
eggGroups: ["Monster", "Dragon"],
|
||||
requiredItem: "Garchompite",
|
||||
},
|
||||
garchompmegaz: {
|
||||
num: 445,
|
||||
name: "Garchomp-Mega-Z",
|
||||
baseSpecies: "Garchomp",
|
||||
forme: "Mega-Z",
|
||||
types: ["Dragon"],
|
||||
baseStats: { hp: 108, atk: 130, def: 85, spa: 141, spd: 85, spe: 151 },
|
||||
abilities: { 0: "Sand Force" },
|
||||
heightm: 1.9,
|
||||
weightkg: 99,
|
||||
color: "Blue",
|
||||
eggGroups: ["Monster", "Dragon"],
|
||||
requiredItem: "Garchompite Z",
|
||||
gen: 9,
|
||||
},
|
||||
munchlax: {
|
||||
num: 446,
|
||||
name: "Munchlax",
|
||||
|
|
@ -8125,8 +8219,8 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
evoType: "levelFriendship",
|
||||
evoCondition: "during the day",
|
||||
eggGroups: ["Field", "Human-Like"],
|
||||
otherFormes: ["Lucario-Mega"],
|
||||
formeOrder: ["Lucario", "Lucario-Mega"],
|
||||
otherFormes: ["Lucario-Mega", "Lucario-Mega-Z"],
|
||||
formeOrder: ["Lucario", "Lucario-Mega", "Lucario-Mega-Z"],
|
||||
},
|
||||
lucariomega: {
|
||||
num: 448,
|
||||
|
|
@ -8143,6 +8237,22 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
eggGroups: ["Field", "Human-Like"],
|
||||
requiredItem: "Lucarionite",
|
||||
},
|
||||
lucariomegaz: {
|
||||
num: 448,
|
||||
name: "Lucario-Mega-Z",
|
||||
baseSpecies: "Lucario",
|
||||
forme: "Mega-Z",
|
||||
types: ["Fighting", "Steel"],
|
||||
genderRatio: { M: 0.875, F: 0.125 },
|
||||
baseStats: { hp: 70, atk: 100, def: 70, spa: 164, spd: 70, spe: 151 },
|
||||
abilities: { 0: "Adaptability" },
|
||||
heightm: 1.3,
|
||||
weightkg: 49.4,
|
||||
color: "Gray",
|
||||
eggGroups: ["Field", "Human-Like"],
|
||||
requiredItem: "Lucarionite Z",
|
||||
gen: 9,
|
||||
},
|
||||
hippopotas: {
|
||||
num: 449,
|
||||
name: "Hippopotas",
|
||||
|
|
@ -8809,6 +8919,24 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
color: "Brown",
|
||||
tags: ["Sub-Legendary"],
|
||||
eggGroups: ["Undiscovered"],
|
||||
otherFormes: ["Heatran-Mega"],
|
||||
formeOrder: ["Heatran", "Heatran-Mega"],
|
||||
},
|
||||
heatranmega: {
|
||||
num: 485,
|
||||
name: "Heatran-Mega",
|
||||
baseSpecies: "Heatran",
|
||||
forme: "Mega",
|
||||
types: ["Fire", "Steel"],
|
||||
baseStats: { hp: 91, atk: 120, def: 106, spa: 175, spd: 141, spe: 67 },
|
||||
abilities: { 0: "Flash Fire", H: "Flame Body" },
|
||||
heightm: 2.8,
|
||||
weightkg: 570,
|
||||
color: "Brown",
|
||||
tags: ["Sub-Legendary"],
|
||||
eggGroups: ["Undiscovered"],
|
||||
requiredItem: "Heatranite",
|
||||
gen: 9,
|
||||
},
|
||||
regigigas: {
|
||||
num: 486,
|
||||
|
|
@ -8906,6 +9034,25 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
color: "Black",
|
||||
tags: ["Mythical"],
|
||||
eggGroups: ["Undiscovered"],
|
||||
otherFormes: ["Darkrai-Mega"],
|
||||
formeOrder: ["Darkrai", "Darkrai-Mega"],
|
||||
},
|
||||
darkraimega: {
|
||||
num: 491,
|
||||
name: "Darkrai-Mega",
|
||||
baseSpecies: "Darkrai",
|
||||
forme: "Mega",
|
||||
types: ["Dark"],
|
||||
gender: "N",
|
||||
baseStats: { hp: 70, atk: 120, def: 130, spa: 165, spd: 130, spe: 85 },
|
||||
abilities: { 0: "Bad Dreams" },
|
||||
heightm: 3,
|
||||
weightkg: 240,
|
||||
color: "Black",
|
||||
tags: ["Mythical"],
|
||||
eggGroups: ["Undiscovered"],
|
||||
requiredItem: "Darkranite",
|
||||
gen: 9,
|
||||
},
|
||||
shaymin: {
|
||||
num: 492,
|
||||
|
|
@ -11275,6 +11422,24 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
prevo: "Golett",
|
||||
evoLevel: 43,
|
||||
eggGroups: ["Mineral"],
|
||||
otherFormes: ["Golurk-Mega"],
|
||||
formeOrder: ["Golurk", "Golurk-Mega"],
|
||||
},
|
||||
golurkmega: {
|
||||
num: 623,
|
||||
name: "Golurk-Mega",
|
||||
baseSpecies: "Golurk",
|
||||
forme: "Mega",
|
||||
types: ["Ground", "Ghost"],
|
||||
gender: "N",
|
||||
baseStats: { hp: 89, atk: 159, def: 105, spa: 70, spd: 105, spe: 55 },
|
||||
abilities: { 0: "Iron Fist", 1: "Klutz", H: "No Guard" },
|
||||
heightm: 4,
|
||||
weightkg: 330,
|
||||
color: "Green",
|
||||
eggGroups: ["Mineral"],
|
||||
requiredItem: "Golurkite",
|
||||
gen: 9,
|
||||
},
|
||||
pawniard: {
|
||||
num: 624,
|
||||
|
|
@ -12537,8 +12702,8 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
prevo: "Espurr",
|
||||
evoLevel: 25,
|
||||
eggGroups: ["Field"],
|
||||
otherFormes: ["Meowstic-F"],
|
||||
formeOrder: ["Meowstic", "Meowstic-F"],
|
||||
otherFormes: ["Meowstic-F", "Meowstic-M-Mega", "Meowstic-F-Mega"],
|
||||
formeOrder: ["Meowstic", "Meowstic-F", "Meowstic-M-Mega", "Meowstic-F-Mega"],
|
||||
},
|
||||
meowsticf: {
|
||||
num: 678,
|
||||
|
|
@ -12556,6 +12721,40 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
evoLevel: 25,
|
||||
eggGroups: ["Field"],
|
||||
},
|
||||
meowsticmmega: {
|
||||
num: 678,
|
||||
name: "Meowstic-M-Mega",
|
||||
baseSpecies: "Meowstic",
|
||||
forme: "M-Mega",
|
||||
types: ["Psychic"],
|
||||
gender: "M",
|
||||
baseStats: { hp: 74, atk: 48, def: 76, spa: 143, spd: 101, spe: 124 },
|
||||
abilities: { 0: "Keen Eye", 1: "Infiltrator", H: "Competitive" },
|
||||
heightm: 0.8,
|
||||
weightkg: 10.1,
|
||||
color: "Blue",
|
||||
eggGroups: ["Field"],
|
||||
requiredItem: "Meowsticite",
|
||||
battleOnly: "Meowstic",
|
||||
gen: 9,
|
||||
},
|
||||
meowsticfmega: {
|
||||
num: 678,
|
||||
name: "Meowstic-F-Mega",
|
||||
baseSpecies: "Meowstic",
|
||||
forme: "F-Mega",
|
||||
types: ["Psychic"],
|
||||
gender: "F",
|
||||
baseStats: { hp: 74, atk: 48, def: 76, spa: 143, spd: 101, spe: 124 },
|
||||
abilities: { 0: "Keen Eye", 1: "Infiltrator", H: "Competitive" },
|
||||
heightm: 0.8,
|
||||
weightkg: 10.1,
|
||||
color: "White",
|
||||
eggGroups: ["Field"],
|
||||
requiredItem: "Meowsticite",
|
||||
battleOnly: "Meowstic-F",
|
||||
gen: 9,
|
||||
},
|
||||
honedge: {
|
||||
num: 679,
|
||||
name: "Honedge",
|
||||
|
|
@ -13751,6 +13950,23 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
evoType: "useItem",
|
||||
evoItem: "Ice Stone",
|
||||
eggGroups: ["Water 3"],
|
||||
otherFormes: ["Crabominable-Mega"],
|
||||
formeOrder: ["Crabominable", "Crabominable-Mega"],
|
||||
},
|
||||
crabominablemega: {
|
||||
num: 740,
|
||||
name: "Crabominable-Mega",
|
||||
baseSpecies: "Crabominable",
|
||||
forme: "Mega",
|
||||
types: ["Fighting", "Ice"],
|
||||
baseStats: { hp: 97, atk: 157, def: 122, spa: 62, spd: 107, spe: 33 },
|
||||
abilities: { 0: "Hyper Cutter", 1: "Iron Fist", H: "Anger Point" },
|
||||
heightm: 2.6,
|
||||
weightkg: 252.8,
|
||||
color: "White",
|
||||
eggGroups: ["Water 3"],
|
||||
requiredItem: "Crabominite",
|
||||
gen: 9,
|
||||
},
|
||||
oricorio: {
|
||||
num: 741,
|
||||
|
|
@ -14284,6 +14500,23 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
prevo: "Wimpod",
|
||||
evoLevel: 30,
|
||||
eggGroups: ["Bug", "Water 3"],
|
||||
otherFormes: ["Golisopod-Mega"],
|
||||
formeOrder: ["Golisopod", "Golisopod-Mega"],
|
||||
},
|
||||
golisopodmega: {
|
||||
num: 768,
|
||||
name: "Golisopod-Mega",
|
||||
baseSpecies: "Golisopod",
|
||||
forme: "Mega",
|
||||
types: ["Bug", "Steel"],
|
||||
baseStats: { hp: 75, atk: 150, def: 175, spa: 70, spd: 120, spe: 40 },
|
||||
abilities: { 0: "Emergency Exit" },
|
||||
heightm: 2.3,
|
||||
weightkg: 148,
|
||||
color: "Gray",
|
||||
eggGroups: ["Bug", "Water 3"],
|
||||
requiredItem: "Golisopite",
|
||||
gen: 9,
|
||||
},
|
||||
sandygast: {
|
||||
num: 769,
|
||||
|
|
@ -15192,8 +15425,8 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
color: "Gray",
|
||||
eggGroups: ["Undiscovered"],
|
||||
tags: ["Mythical"],
|
||||
otherFormes: ["Magearna-Original"],
|
||||
formeOrder: ["Magearna", "Magearna-Original"],
|
||||
otherFormes: ["Magearna-Original", "Magearna-Mega", "Magearna-Original-Mega"],
|
||||
formeOrder: ["Magearna", "Magearna-Original", "Magearna-Mega", "Magearna-Original-Mega"],
|
||||
},
|
||||
magearnaoriginal: {
|
||||
num: 801,
|
||||
|
|
@ -15209,6 +15442,39 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
color: "Red",
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
magearnamega: {
|
||||
num: 801,
|
||||
name: "Magearna-Mega",
|
||||
baseSpecies: "Magearna",
|
||||
forme: "Mega",
|
||||
types: ["Steel", "Fairy"],
|
||||
gender: "N",
|
||||
baseStats: { hp: 80, atk: 125, def: 115, spa: 170, spd: 115, spe: 95 },
|
||||
abilities: { 0: "Soul-Heart" },
|
||||
heightm: 1.3,
|
||||
weightkg: 248.1,
|
||||
color: "Gray",
|
||||
eggGroups: ["Undiscovered"],
|
||||
requiredItem: "Magearnite",
|
||||
gen: 9,
|
||||
},
|
||||
magearnaoriginalmega: {
|
||||
num: 801,
|
||||
name: "Magearna-Original-Mega",
|
||||
baseSpecies: "Magearna",
|
||||
forme: "Original-Mega",
|
||||
types: ["Steel", "Fairy"],
|
||||
gender: "N",
|
||||
baseStats: { hp: 80, atk: 125, def: 115, spa: 170, spd: 115, spe: 95 },
|
||||
abilities: { 0: "Soul-Heart" },
|
||||
heightm: 1.3,
|
||||
weightkg: 248.1,
|
||||
color: "Red",
|
||||
eggGroups: ["Undiscovered"],
|
||||
requiredItem: "Magearnite",
|
||||
battleOnly: "Magearna-Original",
|
||||
gen: 9,
|
||||
},
|
||||
marshadow: {
|
||||
num: 802,
|
||||
name: "Marshadow",
|
||||
|
|
@ -15290,6 +15556,25 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
color: "Yellow",
|
||||
tags: ["Mythical"],
|
||||
eggGroups: ["Undiscovered"],
|
||||
otherFormes: ["Zeraora-Mega"],
|
||||
formeOrder: ["Zeraora", "Zeraora-Mega"],
|
||||
},
|
||||
zeraoramega: {
|
||||
num: 807,
|
||||
name: "Zeraora-Mega",
|
||||
baseSpecies: "Zeraora",
|
||||
forme: "Mega",
|
||||
types: ["Electric"],
|
||||
gender: "N",
|
||||
baseStats: { hp: 88, atk: 157, def: 75, spa: 147, spd: 80, spe: 153 },
|
||||
abilities: { 0: "Volt Absorb" },
|
||||
heightm: 1.5,
|
||||
weightkg: 44.5,
|
||||
color: "Yellow",
|
||||
tags: ["Mythical"],
|
||||
eggGroups: ["Undiscovered"],
|
||||
requiredItem: "Zeraorite",
|
||||
gen: 9,
|
||||
},
|
||||
meltan: {
|
||||
num: 808,
|
||||
|
|
@ -17986,6 +18271,22 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
evoType: "useItem",
|
||||
evoItem: "Fire Stone",
|
||||
eggGroups: ["Grass"],
|
||||
otherFormes: ["Scovillain-Mega"],
|
||||
formeOrder: ["Scovillain", "Scovillain-Mega"],
|
||||
},
|
||||
scovillainmega: {
|
||||
num: 952,
|
||||
name: "Scovillain-Mega",
|
||||
baseSpecies: "Scovillain",
|
||||
forme: "Mega",
|
||||
types: ["Grass", "Fire"],
|
||||
baseStats: { hp: 65, atk: 138, def: 85, spa: 138, spd: 85, spe: 75 },
|
||||
abilities: { 0: "Chlorophyll", 1: "Insomnia", H: "Moody" },
|
||||
heightm: 1.2,
|
||||
weightkg: 22,
|
||||
color: "Green",
|
||||
eggGroups: ["Grass"],
|
||||
requiredItem: "Scovillainite",
|
||||
},
|
||||
rellor: {
|
||||
num: 953,
|
||||
|
|
@ -18230,6 +18531,22 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
prevo: "Glimmet",
|
||||
evoLevel: 35,
|
||||
eggGroups: ["Mineral"],
|
||||
otherFormes: ["Glimmora-Mega"],
|
||||
formeOrder: ["Glimmora", "Glimmora-Mega"],
|
||||
},
|
||||
glimmoramega: {
|
||||
num: 970,
|
||||
name: "Glimmora-Mega",
|
||||
baseSpecies: "Glimmora",
|
||||
forme: "Mega",
|
||||
types: ["Rock", "Poison"],
|
||||
baseStats: { hp: 83, atk: 90, def: 105, spa: 150, spd: 96, spe: 101 },
|
||||
abilities: { 0: "Toxic Debris", H: "Corrosion" },
|
||||
heightm: 2.8,
|
||||
weightkg: 77,
|
||||
color: "Blue",
|
||||
eggGroups: ["Mineral"],
|
||||
requiredItem: "Glimmoranite",
|
||||
},
|
||||
greavard: {
|
||||
num: 971,
|
||||
|
|
@ -18326,23 +18643,80 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
heightm: 0.3,
|
||||
weightkg: 8,
|
||||
color: "Red",
|
||||
cosmeticFormes: ["Tatsugiri-Droopy", "Tatsugiri-Stretchy"],
|
||||
formeOrder: ["Tatsugiri", "Tatsugiri-Droopy", "Tatsugiri-Stretchy"],
|
||||
eggGroups: ["Water 2"],
|
||||
otherFormes: ["Tatsugiri-Droopy", "Tatsugiri-Stretchy", "Tatsugiri-Curly-Mega", "Tatsugiri-Droopy-Mega", "Tatsugiri-Stretchy-Mega"],
|
||||
formeOrder: ["Tatsugiri", "Tatsugiri-Droopy", "Tatsugiri-Stretchy", "Tatsugiri-Curly-Mega", "Tatsugiri-Droopy-Mega", "Tatsugiri-Stretchy-Mega"],
|
||||
},
|
||||
tatsugiridroopy: {
|
||||
isCosmeticForme: true,
|
||||
num: 978,
|
||||
name: "Tatsugiri-Droopy",
|
||||
baseSpecies: "Tatsugiri",
|
||||
forme: "Droopy",
|
||||
types: ["Dragon", "Water"],
|
||||
baseStats: { hp: 68, atk: 50, def: 60, spa: 120, spd: 95, spe: 82 },
|
||||
abilities: { 0: "Commander", H: "Storm Drain" },
|
||||
heightm: 0.3,
|
||||
weightkg: 8,
|
||||
color: "Pink",
|
||||
eggGroups: ["Water 2"],
|
||||
},
|
||||
tatsugiristretchy: {
|
||||
isCosmeticForme: true,
|
||||
num: 978,
|
||||
name: "Tatsugiri-Stretchy",
|
||||
baseSpecies: "Tatsugiri",
|
||||
forme: "Stretchy",
|
||||
types: ["Dragon", "Water"],
|
||||
baseStats: { hp: 68, atk: 50, def: 60, spa: 120, spd: 95, spe: 82 },
|
||||
abilities: { 0: "Commander", H: "Storm Drain" },
|
||||
heightm: 0.3,
|
||||
weightkg: 8,
|
||||
color: "Yellow",
|
||||
eggGroups: ["Water 2"],
|
||||
},
|
||||
tatsugiricurlymega: {
|
||||
num: 978,
|
||||
name: "Tatsugiri-Curly-Mega",
|
||||
baseSpecies: "Tatsugiri",
|
||||
forme: "Curly-Mega",
|
||||
types: ["Dragon", "Water"],
|
||||
baseStats: { hp: 68, atk: 65, def: 90, spa: 135, spd: 125, spe: 92 },
|
||||
abilities: { 0: "Commander", H: "Storm Drain" },
|
||||
heightm: 0.3,
|
||||
weightkg: 8,
|
||||
color: "Red",
|
||||
eggGroups: ["Water 2"],
|
||||
requiredItem: "Tatsugirinite",
|
||||
battleOnly: "Tatsugiri",
|
||||
},
|
||||
tatsugiridroopymega: {
|
||||
num: 978,
|
||||
name: "Tatsugiri-Droopy-Mega",
|
||||
baseSpecies: "Tatsugiri",
|
||||
forme: "Droopy-Mega",
|
||||
types: ["Dragon", "Water"],
|
||||
baseStats: { hp: 68, atk: 65, def: 90, spa: 135, spd: 125, spe: 92 },
|
||||
abilities: { 0: "Commander", H: "Storm Drain" },
|
||||
heightm: 0.3,
|
||||
weightkg: 8,
|
||||
color: "Pink",
|
||||
eggGroups: ["Water 2"],
|
||||
requiredItem: "Tatsugirinite",
|
||||
battleOnly: "Tatsugiri-Droopy",
|
||||
},
|
||||
tatsugiristretchymega: {
|
||||
num: 978,
|
||||
name: "Tatsugiri-Stretchy-Mega",
|
||||
baseSpecies: "Tatsugiri",
|
||||
forme: "Stretchy-Mega",
|
||||
types: ["Dragon", "Water"],
|
||||
baseStats: { hp: 68, atk: 65, def: 90, spa: 135, spd: 125, spe: 92 },
|
||||
abilities: { 0: "Commander", H: "Storm Drain" },
|
||||
heightm: 0.3,
|
||||
weightkg: 8,
|
||||
color: "Yellow",
|
||||
eggGroups: ["Water 2"],
|
||||
requiredItem: "Tatsugirinite",
|
||||
battleOnly: "Tatsugiri-Stretchy",
|
||||
},
|
||||
annihilape: {
|
||||
num: 979,
|
||||
|
|
@ -18626,6 +19000,22 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
prevo: "Arctibax",
|
||||
evoLevel: 54,
|
||||
eggGroups: ["Dragon", "Mineral"],
|
||||
otherFormes: ["Baxcalibur-Mega"],
|
||||
formeOrder: ["Baxcalibur", "Baxcalibur-Mega"],
|
||||
},
|
||||
baxcaliburmega: {
|
||||
num: 998,
|
||||
name: "Baxcalibur-Mega",
|
||||
baseSpecies: "Baxcalibur",
|
||||
forme: "Mega",
|
||||
types: ["Dragon", "Ice"],
|
||||
baseStats: { hp: 115, atk: 175, def: 117, spa: 105, spd: 101, spe: 87 },
|
||||
abilities: { 0: "Thermal Exchange", H: "Ice Body" },
|
||||
heightm: 2.1,
|
||||
weightkg: 315,
|
||||
color: "Blue",
|
||||
eggGroups: ["Dragon", "Mineral"],
|
||||
requiredItem: "Baxcalibrite",
|
||||
},
|
||||
gimmighoul: {
|
||||
num: 999,
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -1074,5 +1074,93 @@
|
|||
"teraTypes": ["Poison"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"feraligatr": {
|
||||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Dragon Dance", "Thunder Fang", "Crunch", "Liquidation"],
|
||||
"abilities": ["Sheer Force"],
|
||||
"teraTypes": ["Dark"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"feraligatrmega": {
|
||||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Dragon Dance", "Thunder Fang", "Poison Fang", "Crunch", "Fire Fang"],
|
||||
"abilities": ["Sheer Force"],
|
||||
"teraTypes": ["Normal"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"salazzle": {
|
||||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["Magma Storm", "Malignant Chain", "Venoshock", "Psychic Noise", "Baneful Bunker"],
|
||||
"abilities": ["Corrosive Soul"],
|
||||
"teraTypes": ["Flying"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"kyogre": {
|
||||
"level": 80,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Origin Pulse", "Thunder", "Ice Beam", "Hurricane", "Tidal Surge"],
|
||||
"abilities": ["Oceanic Blessing"],
|
||||
"teraTypes": ["Water"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"azelf": {
|
||||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Rapid Spin", "Metronome", "Loot Box", "Acupressure"],
|
||||
"abilities": ["Auto Spin"],
|
||||
"teraTypes": ["Stellar"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"decidueye": {
|
||||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Sinister Arrows", "Leaf Blade", "Defog", "Roost", "Spirit Shackle", "U-turn"],
|
||||
"abilities": ["Overgrow", "Sniper"],
|
||||
"teraTypes": ["Steel", "Dark", "Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"ogerponcornerstone": {
|
||||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Sappy Seed", "Ivy Cudgel", "Synthesis", "Spiky Shield", "Thousand Waves"],
|
||||
"abilities": ["Solid Rock"],
|
||||
"teraTypes": ["Rock"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"glimmora": {
|
||||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Mortal Spin", "Meteor Beam", "Power Gem", "Ice Beam", "Malignant Chain"],
|
||||
"abilities": ["Corrosion"],
|
||||
"teraTypes": ["Grass"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -232,7 +232,10 @@ export class RandomChatBatsTeams extends RandomTeams {
|
|||
if (species.id === 'ogerponhearthflame') this.incompatibleMoves(moves, movePool, 'crabhammer', 'stoneedge');
|
||||
if (species.id === 'hitmontop') this.incompatibleMoves(moves, movePool, 'bulkup', 'rapidspin');
|
||||
if (species.id === 'mesprit') this.incompatibleMoves(moves, movePool, 'psychic', 'storedpower');
|
||||
if (species.id === 'mesprit') this.incompatibleMoves(moves, movePool, 'knockoff', 'earthquake');
|
||||
if (species.id === 'primeape') this.incompatibleMoves(moves, movePool, 'knockoff', 'earthquake');
|
||||
if (species.id === 'feraligatrmega') this.incompatibleMoves(moves, movePool, 'thunderfang', 'poisonfang');
|
||||
if (species.id === 'salazzle') this.incompatibleMoves(moves, movePool, 'malignantchain', 'venoshock');
|
||||
if (species.id === 'glimmora') this.incompatibleMoves(moves, movePool, 'powergem', 'meteorbeam');
|
||||
}
|
||||
|
||||
override randomMoveset(
|
||||
|
|
@ -713,6 +716,14 @@ export class RandomChatBatsTeams extends RandomTeams {
|
|||
if (species.id === 'primeape') return 'Eviolite';
|
||||
if (species.id === 'rillaboom') return 'Heavy-Duty Boots';
|
||||
if (species.id === 'mandibuzz') return 'Thick Club';
|
||||
if (species.id === 'feraligatr') return 'Life Orb';
|
||||
if (species.id === 'salazzle') return 'Heavy-Duty Boots';
|
||||
if (species.id === 'kyogre') return 'Waterium Z';
|
||||
if (species.id === 'azelf') return 'Focus Band';
|
||||
if (species.id === 'decidueye') return this.sample(['Life Orb', 'Heavy-Duty Boots', "Leftovers"]);
|
||||
if (species.id === 'ogerponcornerstone') return 'Cornerstone Mask';
|
||||
if (species.id === 'glimmora' && moves.has('meteorbeam')) return 'Power Herb';
|
||||
if (species.id === 'glimmora') return 'Air Balloon';
|
||||
}
|
||||
|
||||
override randomSet(
|
||||
|
|
@ -997,7 +1008,7 @@ export class RandomChatBatsTeams extends RandomTeams {
|
|||
// if (potd?.exists && (pokemon.length === 1 || this.maxTeamSize === 1)) species = potd;
|
||||
|
||||
// testing code
|
||||
// if (pokemon.length === 0 || this.maxTeamSize === 1) species = this.dex.species.get('Mew');
|
||||
// if (pokemon.length === 0 || this.maxTeamSize === 1) species = this.dex.species.get('Feraligatr-Mega');
|
||||
|
||||
let set: RandomTeamsTypes.RandomSet;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
{
|
||||
"bulbasaur": {
|
||||
"level": 89,
|
||||
"level": 91,
|
||||
"moves": ["bodyslam", "razorleaf", "sleeppowder", "swordsdance"]
|
||||
},
|
||||
"ivysaur": {
|
||||
"level": 80,
|
||||
"level": 82,
|
||||
"moves": ["bodyslam", "razorleaf", "sleeppowder", "swordsdance"]
|
||||
},
|
||||
"venusaur": {
|
||||
"level": 74,
|
||||
"level": 73,
|
||||
"moves": ["bodyslam", "razorleaf", "sleeppowder"],
|
||||
"exclusiveMoves": ["hyperbeam", "swordsdance", "swordsdance"]
|
||||
},
|
||||
|
|
@ -58,7 +58,7 @@
|
|||
"exclusiveMoves": ["agility", "agility", "megadrain"]
|
||||
},
|
||||
"pidgey": {
|
||||
"level": 93,
|
||||
"level": 95,
|
||||
"moves": ["agility", "agility", "quickattack", "quickattack", "skyattack"],
|
||||
"essentialMoves": ["doubleedge"],
|
||||
"exclusiveMoves": ["mirrormove", "sandattack", "substitute"],
|
||||
|
|
@ -164,7 +164,7 @@
|
|||
"exclusiveMoves": ["blizzard", "counter", "hyperbeam", "hyperbeam", "psychic", "sing", "sing"]
|
||||
},
|
||||
"vulpix": {
|
||||
"level": 88,
|
||||
"level": 89,
|
||||
"moves": ["bodyslam", "confuseray", "fireblast"],
|
||||
"exclusiveMoves": ["flamethrower", "flamethrower", "quickattack", "reflect", "substitute", "substitute"]
|
||||
},
|
||||
|
|
@ -199,7 +199,7 @@
|
|||
"exclusiveMoves": ["stunspore", "stunspore", "swordsdance"]
|
||||
},
|
||||
"gloom": {
|
||||
"level": 82,
|
||||
"level": 83,
|
||||
"moves": ["doubleedge", "megadrain", "sleeppowder"],
|
||||
"exclusiveMoves": ["stunspore", "stunspore", "swordsdance"]
|
||||
},
|
||||
|
|
@ -245,7 +245,7 @@
|
|||
"persian": {
|
||||
"level": 73,
|
||||
"moves": ["bodyslam", "bubblebeam", "slash"],
|
||||
"exclusiveMoves": ["hyperbeam", "thunderbolt"]
|
||||
"exclusiveMoves": ["hyperbeam", "thunderbolt", "thunderbolt", "thunderbolt"]
|
||||
},
|
||||
"psyduck": {
|
||||
"level": 89,
|
||||
|
|
@ -269,7 +269,7 @@
|
|||
"exclusiveMoves": ["counter", "lowkick", "hyperbeam", "hyperbeam"]
|
||||
},
|
||||
"growlithe": {
|
||||
"level": 89,
|
||||
"level": 91,
|
||||
"moves": ["agility", "bodyslam", "fireblast"],
|
||||
"exclusiveMoves": ["flamethrower", "reflect"]
|
||||
},
|
||||
|
|
@ -308,12 +308,12 @@
|
|||
"exclusiveMoves": ["counter", "reflect", "reflect", "seismictoss", "seismictoss"]
|
||||
},
|
||||
"machop": {
|
||||
"level": 89,
|
||||
"level": 92,
|
||||
"moves": ["bodyslam", "earthquake", "submission"],
|
||||
"exclusiveMoves": ["counter", "rockslide", "rockslide"]
|
||||
},
|
||||
"machoke": {
|
||||
"level": 81,
|
||||
"level": 84,
|
||||
"moves": ["bodyslam", "earthquake", "submission"],
|
||||
"exclusiveMoves": ["counter", "rockslide", "rockslide"]
|
||||
},
|
||||
|
|
@ -369,13 +369,13 @@
|
|||
"moves": ["agility", "bodyslam", "fireblast", "hyperbeam"]
|
||||
},
|
||||
"slowpoke": {
|
||||
"level": 84,
|
||||
"level": 83,
|
||||
"moves": ["blizzard", "psychic", "surf"],
|
||||
"essentialMoves": ["amnesia", "thunderwave"],
|
||||
"comboMoves": ["amnesia", "rest", "surf", "thunderwave"]
|
||||
},
|
||||
"slowbro": {
|
||||
"level": 68,
|
||||
"level": 69,
|
||||
"moves": ["blizzard", "psychic", "surf"],
|
||||
"essentialMoves": ["amnesia", "thunderwave"],
|
||||
"comboMoves": ["amnesia", "rest", "surf", "thunderwave"]
|
||||
|
|
@ -523,7 +523,7 @@
|
|||
"moves": ["bodyslam", "earthquake", "rockslide", "substitute"]
|
||||
},
|
||||
"rhydon": {
|
||||
"level": 68,
|
||||
"level": 71,
|
||||
"moves": ["bodyslam", "earthquake", "rockslide", "substitute"]
|
||||
},
|
||||
"chansey": {
|
||||
|
|
@ -693,7 +693,7 @@
|
|||
"exclusiveMoves": ["doubleedge", "doubleedge", "doubleedge", "reflect"]
|
||||
},
|
||||
"dratini": {
|
||||
"level": 89,
|
||||
"level": 91,
|
||||
"moves": ["bodyslam", "hyperbeam", "thunderbolt", "thunderbolt"],
|
||||
"essentialMoves": ["blizzard", "thunderwave"]
|
||||
},
|
||||
|
|
|
|||
|
|
@ -220,6 +220,8 @@ export class RandomGen1Teams extends RandomGen2Teams {
|
|||
* Random set generation for Gen 1 Random Battles.
|
||||
*/
|
||||
override randomSet(species: string | Species): RandomTeamsTypes.RandomSet {
|
||||
const ruleTable = this.dex.formats.getRuleTable(this.format);
|
||||
|
||||
species = this.dex.species.get(species);
|
||||
if (!species.exists) species = this.dex.species.get('pikachu'); // Because Gen 1.
|
||||
|
||||
|
|
@ -275,7 +277,7 @@ export class RandomGen1Teams extends RandomGen2Teams {
|
|||
if (move.damageCallback || move.damage) return true;
|
||||
return move.category !== 'Physical';
|
||||
});
|
||||
if (noAttackStatMoves && !moves.has('mimic') && !moves.has('transform')) {
|
||||
if (noAttackStatMoves && !moves.has('mimic') && !moves.has('transform') && !ruleTable.has('forceofthefallenmod')) {
|
||||
evs.atk = 0;
|
||||
// We don't want to lower the HP DV/IV
|
||||
ivs.atk = 2;
|
||||
|
|
|
|||
|
|
@ -103,6 +103,7 @@
|
|||
]
|
||||
},
|
||||
"pikachu": {
|
||||
"level": 73,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
|
|
|||
|
|
@ -342,7 +342,7 @@
|
|||
]
|
||||
},
|
||||
"arcanine": {
|
||||
"level": 79,
|
||||
"level": 78,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
|
@ -510,7 +510,7 @@
|
|||
]
|
||||
},
|
||||
"dodrio": {
|
||||
"level": 77,
|
||||
"level": 78,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
|
|
@ -806,7 +806,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["calmmind", "hiddenpowerfire", "icebeam", "lovelykiss", "psychic", "substitute"],
|
||||
"movepool": ["calmmind", "icebeam", "lovelykiss", "psychic", "substitute"],
|
||||
"abilities": ["Oblivious"]
|
||||
}
|
||||
]
|
||||
|
|
@ -1176,7 +1176,7 @@
|
|||
]
|
||||
},
|
||||
"noctowl": {
|
||||
"level": 92,
|
||||
"level": 93,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Staller",
|
||||
|
|
@ -1753,7 +1753,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["calmmind", "icebeam", "recover", "surf", "toxic"],
|
||||
"movepool": ["calmmind", "explosion", "icebeam", "recover", "surf", "toxic"],
|
||||
"abilities": ["Natural Cure"]
|
||||
}
|
||||
]
|
||||
|
|
@ -2613,7 +2613,7 @@
|
|||
]
|
||||
},
|
||||
"cacturne": {
|
||||
"level": 95,
|
||||
"level": 96,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Staller",
|
||||
|
|
@ -2690,7 +2690,7 @@
|
|||
},
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["earthquake", "explosion", "overheat", "rockslide", "shadowball"],
|
||||
"movepool": ["earthquake", "explosion", "rockslide", "shadowball"],
|
||||
"abilities": ["Levitate"],
|
||||
"preferredTypes": ["Ground"]
|
||||
}
|
||||
|
|
@ -2781,7 +2781,7 @@
|
|||
]
|
||||
},
|
||||
"kecleon": {
|
||||
"level": 91,
|
||||
"level": 92,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
|
|
@ -3024,7 +3024,7 @@
|
|||
]
|
||||
},
|
||||
"latios": {
|
||||
"level": 67,
|
||||
"level": 66,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
|
|
|
|||
|
|
@ -524,6 +524,8 @@ export class RandomGen3Teams extends RandomGen4Teams {
|
|||
teamDetails: RandomTeamsTypes.TeamDetails = {},
|
||||
isLead = false
|
||||
): RandomTeamsTypes.RandomSet {
|
||||
const ruleTable = this.dex.formats.getRuleTable(this.format);
|
||||
|
||||
species = this.dex.species.get(species);
|
||||
const forme = this.getForme(species);
|
||||
const sets = this.randomSets[species.id]["sets"];
|
||||
|
|
@ -597,7 +599,7 @@ export class RandomGen3Teams extends RandomGen4Teams {
|
|||
}
|
||||
|
||||
// Minimize confusion damage
|
||||
if (!counter.get('Physical') && !moves.has('transform')) {
|
||||
if (!counter.get('Physical') && !moves.has('transform') && !ruleTable.has('forceofthefallenmod')) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = hasHiddenPower ? (ivs.atk || 31) - 28 : 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -137,7 +137,7 @@
|
|||
]
|
||||
},
|
||||
"sandslash": {
|
||||
"level": 89,
|
||||
"level": 88,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Spinner",
|
||||
|
|
@ -173,7 +173,7 @@
|
|||
]
|
||||
},
|
||||
"clefable": {
|
||||
"level": 84,
|
||||
"level": 83,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
|
@ -234,7 +234,7 @@
|
|||
]
|
||||
},
|
||||
"parasect": {
|
||||
"level": 98,
|
||||
"level": 99,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
|
@ -382,7 +382,8 @@
|
|||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["haze", "hydropump", "icebeam", "rapidspin", "sludgebomb", "surf", "toxicspikes"],
|
||||
"abilities": ["Clear Body", "Liquid Ooze"]
|
||||
"abilities": ["Clear Body", "Liquid Ooze"],
|
||||
"preferredTypes": ["Poison"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -487,6 +488,11 @@
|
|||
"role": "Bulky Support",
|
||||
"movepool": ["explosion", "iceshard", "rapidspin", "rockblast", "spikes", "surf", "toxicspikes"],
|
||||
"abilities": ["Shell Armor", "Skill Link"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["explosion", "icebeam", "iceshard", "rapidspin", "spikes", "surf", "toxicspikes"],
|
||||
"abilities": ["Shell Armor"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -596,7 +602,7 @@
|
|||
},
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["bulkup", "closecombat", "drainpunch", "icepunch", "machpunch", "stoneedge"],
|
||||
"movepool": ["bulkup", "closecombat", "icepunch", "machpunch", "stoneedge"],
|
||||
"abilities": ["Iron Fist"]
|
||||
}
|
||||
]
|
||||
|
|
@ -812,10 +818,9 @@
|
|||
"abilities": ["Swift Swim"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["earthpower", "icebeam", "spikes", "stealthrock", "surf", "toxicspikes"],
|
||||
"abilities": ["Shell Armor", "Swift Swim"],
|
||||
"preferredTypes": ["Ice"]
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["icebeam", "spikes", "stealthrock", "surf", "toxicspikes"],
|
||||
"abilities": ["Shell Armor", "Swift Swim"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -851,7 +856,7 @@
|
|||
]
|
||||
},
|
||||
"snorlax": {
|
||||
"level": 77,
|
||||
"level": 78,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
|
|
@ -872,7 +877,7 @@
|
|||
]
|
||||
},
|
||||
"articuno": {
|
||||
"level": 81,
|
||||
"level": 82,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Staller",
|
||||
|
|
@ -897,7 +902,7 @@
|
|||
]
|
||||
},
|
||||
"moltres": {
|
||||
"level": 81,
|
||||
"level": 82,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
|
|
@ -927,7 +932,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["aurasphere", "calmmind", "fireblast", "psychic", "recover", "shadowball"],
|
||||
"movepool": ["aurasphere", "calmmind", "fireblast", "psychic", "recover", "signalbeam"],
|
||||
"abilities": ["Pressure"]
|
||||
}
|
||||
]
|
||||
|
|
@ -1159,6 +1164,11 @@
|
|||
"role": "Wallbreaker",
|
||||
"movepool": ["earthpower", "hiddenpowerfire", "hiddenpowerice", "hiddenpowerrock", "leafstorm", "sludgebomb"],
|
||||
"abilities": ["Chlorophyll"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["earthpower", "hiddenpowerfire", "solarbeam", "sunnyday"],
|
||||
"abilities": ["Chlorophyll"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -1171,7 +1181,6 @@
|
|||
"abilities": ["Water Absorb"]
|
||||
},
|
||||
{
|
||||
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["earthquake", "recover", "toxic", "waterfall"],
|
||||
"abilities": ["Water Absorb"]
|
||||
|
|
@ -1236,7 +1245,7 @@
|
|||
]
|
||||
},
|
||||
"wobbuffet": {
|
||||
"level": 86,
|
||||
"level": 87,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
|
@ -1299,9 +1308,14 @@
|
|||
"granbull": {
|
||||
"level": 88,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["earthquake", "healbell", "return", "thunderwave"],
|
||||
"abilities": ["Intimidate"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["closecombat", "crunch", "healbell", "return", "thunderwave"],
|
||||
"movepool": ["closecombat", "crunch", "return", "thunderwave"],
|
||||
"abilities": ["Intimidate"]
|
||||
}
|
||||
]
|
||||
|
|
@ -1342,7 +1356,7 @@
|
|||
]
|
||||
},
|
||||
"heracross": {
|
||||
"level": 80,
|
||||
"level": 79,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
|
|
@ -1352,7 +1366,8 @@
|
|||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["closecombat", "earthquake", "megahorn", "nightslash", "stoneedge", "swordsdance"],
|
||||
"abilities": ["Guts"]
|
||||
"abilities": ["Guts"],
|
||||
"preferredTypes": ["Rock"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -1475,16 +1490,10 @@
|
|||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Spinner",
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["earthquake", "iceshard", "rapidspin", "stealthrock", "stoneedge", "toxic"],
|
||||
"abilities": ["Sturdy"],
|
||||
"preferredTypes": ["Rock"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["earthquake", "gunkshot", "iceshard", "stealthrock", "stoneedge"],
|
||||
"abilities": ["Sturdy"],
|
||||
"preferredTypes": ["Rock"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -1631,7 +1640,7 @@
|
|||
]
|
||||
},
|
||||
"hooh": {
|
||||
"level": 72,
|
||||
"level": 73,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
|
|
@ -1680,13 +1689,13 @@
|
|||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["agility", "fireblast", "stoneedge", "superpower", "thunderpunch", "vacuumwave"],
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["agility", "earthquake", "fireblast", "stoneedge", "superpower", "vacuumwave"],
|
||||
"abilities": ["Blaze"]
|
||||
},
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["flareblitz", "stoneedge", "superpower", "swordsdance", "thunderpunch"],
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["earthquake", "flareblitz", "stoneedge", "superpower", "swordsdance"],
|
||||
"abilities": ["Blaze"]
|
||||
}
|
||||
]
|
||||
|
|
@ -2136,7 +2145,7 @@
|
|||
]
|
||||
},
|
||||
"torkoal": {
|
||||
"level": 88,
|
||||
"level": 87,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
|
@ -2355,7 +2364,7 @@
|
|||
]
|
||||
},
|
||||
"kecleon": {
|
||||
"level": 91,
|
||||
"level": 92,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
|
@ -2370,7 +2379,7 @@
|
|||
{
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["hiddenpowerfighting", "shadowclaw", "shadowsneak", "thunderwave", "willowisp"],
|
||||
"abilities": ["Frisk", "Insomnia"]
|
||||
"abilities": ["Insomnia"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -2525,7 +2534,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["earthquake", "explosion", "rest", "stealthrock", "stoneedge", "thunderwave", "toxic"],
|
||||
"movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "thunderwave", "toxic"],
|
||||
"abilities": ["Clear Body"]
|
||||
},
|
||||
{
|
||||
|
|
@ -2654,7 +2663,7 @@
|
|||
]
|
||||
},
|
||||
"jirachi": {
|
||||
"level": 75,
|
||||
"level": 74,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
|
@ -2685,7 +2694,7 @@
|
|||
]
|
||||
},
|
||||
"deoxysattack": {
|
||||
"level": 72,
|
||||
"level": 71,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
|
|
@ -2710,7 +2719,7 @@
|
|||
]
|
||||
},
|
||||
"deoxysspeed": {
|
||||
"level": 79,
|
||||
"level": 80,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Support",
|
||||
|
|
@ -2930,7 +2939,7 @@
|
|||
]
|
||||
},
|
||||
"floatzel": {
|
||||
"level": 84,
|
||||
"level": 83,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
|
@ -2946,7 +2955,7 @@
|
|||
]
|
||||
},
|
||||
"cherrim": {
|
||||
"level": 96,
|
||||
"level": 95,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Staller",
|
||||
|
|
@ -3127,7 +3136,7 @@
|
|||
]
|
||||
},
|
||||
"hippowdon": {
|
||||
"level": 80,
|
||||
"level": 79,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
|
@ -3496,7 +3505,7 @@
|
|||
]
|
||||
},
|
||||
"rotomfan": {
|
||||
"level": 79,
|
||||
"level": 78,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
|
|
@ -3616,7 +3625,7 @@
|
|||
]
|
||||
},
|
||||
"regigigas": {
|
||||
"level": 82,
|
||||
"level": 83,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Staller",
|
||||
|
|
@ -3686,7 +3695,7 @@
|
|||
]
|
||||
},
|
||||
"darkrai": {
|
||||
"level": 69,
|
||||
"level": 68,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
|
|
|
|||
|
|
@ -215,17 +215,6 @@ export class RandomGen4Teams extends RandomGen5Teams {
|
|||
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;
|
||||
}
|
||||
}
|
||||
if (species.id === 'bastiodon') {
|
||||
// Enforces Toxic too, for good measure.
|
||||
this.incompatibleMoves(moves, movePool, ['metalburst', 'protect', 'roar'], ['metalburst', 'protect']);
|
||||
|
|
@ -662,6 +651,8 @@ export class RandomGen4Teams extends RandomGen5Teams {
|
|||
teamDetails: RandomTeamsTypes.TeamDetails = {},
|
||||
isLead = false
|
||||
): RandomTeamsTypes.RandomSet {
|
||||
const ruleTable = this.dex.formats.getRuleTable(this.format);
|
||||
|
||||
species = this.dex.species.get(species);
|
||||
const forme = this.getForme(species);
|
||||
const sets = this.randomSets[species.id]["sets"];
|
||||
|
|
@ -758,7 +749,7 @@ export class RandomGen4Teams extends RandomGen5Teams {
|
|||
}
|
||||
|
||||
// Minimize confusion damage
|
||||
if (!counter.get('Physical') && !moves.has('transform')) {
|
||||
if (!counter.get('Physical') && !moves.has('transform') && !ruleTable.has('forceofthefallenmod')) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = hasHiddenPower ? (ivs.atk || 31) - 28 : 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"venusaur": {
|
||||
"level": 84,
|
||||
"level": 83,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Staller",
|
||||
|
|
@ -321,9 +321,15 @@
|
|||
"golduck": {
|
||||
"level": 88,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["calmmind", "encore", "focusblast", "icebeam", "scald", "substitute"],
|
||||
"abilities": ["Cloud Nine", "Swift Swim"],
|
||||
"preferredTypes": ["Ice"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam", "scald"],
|
||||
"movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam"],
|
||||
"abilities": ["Cloud Nine", "Swift Swim"],
|
||||
"preferredTypes": ["Ice"]
|
||||
}
|
||||
|
|
@ -418,7 +424,8 @@
|
|||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["haze", "icebeam", "rapidspin", "scald", "sludgebomb", "toxicspikes"],
|
||||
"abilities": ["Clear Body", "Liquid Ooze"]
|
||||
"abilities": ["Clear Body", "Liquid Ooze"],
|
||||
"preferredTypes": ["Poison"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -515,7 +522,7 @@
|
|||
]
|
||||
},
|
||||
"cloyster": {
|
||||
"level": 78,
|
||||
"level": 79,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
|
|
@ -529,7 +536,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["focusblast", "painsplit", "shadowball", "sludgewave", "substitute", "trick", "willowisp"],
|
||||
"movepool": ["destinybond", "focusblast", "painsplit", "shadowball", "sludgewave", "substitute", "trick", "willowisp"],
|
||||
"abilities": ["Levitate"],
|
||||
"preferredTypes": ["Fighting"]
|
||||
}
|
||||
|
|
@ -644,7 +651,7 @@
|
|||
]
|
||||
},
|
||||
"rhydon": {
|
||||
"level": 83,
|
||||
"level": 82,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
|
|
@ -913,7 +920,7 @@
|
|||
]
|
||||
},
|
||||
"articuno": {
|
||||
"level": 84,
|
||||
"level": 83,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Staller",
|
||||
|
|
@ -983,7 +990,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"],
|
||||
"movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "signalbeam"],
|
||||
"abilities": ["Unnerve"]
|
||||
}
|
||||
]
|
||||
|
|
@ -1189,7 +1196,7 @@
|
|||
]
|
||||
},
|
||||
"jumpluff": {
|
||||
"level": 82,
|
||||
"level": 81,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Support",
|
||||
|
|
@ -1310,7 +1317,7 @@
|
|||
]
|
||||
},
|
||||
"forretress": {
|
||||
"level": 78,
|
||||
"level": 79,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
|
@ -1373,9 +1380,14 @@
|
|||
"granbull": {
|
||||
"level": 90,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["earthquake", "healbell", "return", "thunderwave"],
|
||||
"abilities": ["Intimidate"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["closecombat", "crunch", "healbell", "return", "thunderwave"],
|
||||
"movepool": ["closecombat", "crunch", "return", "thunderwave"],
|
||||
"abilities": ["Intimidate"]
|
||||
}
|
||||
]
|
||||
|
|
@ -1432,7 +1444,7 @@
|
|||
]
|
||||
},
|
||||
"ursaring": {
|
||||
"level": 85,
|
||||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
|
|
@ -1467,7 +1479,7 @@
|
|||
]
|
||||
},
|
||||
"octillery": {
|
||||
"level": 91,
|
||||
"level": 92,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
|
|
@ -1545,16 +1557,10 @@
|
|||
"level": 82,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Spinner",
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["earthquake", "iceshard", "rapidspin", "stealthrock", "stoneedge", "toxic"],
|
||||
"abilities": ["Sturdy"],
|
||||
"preferredTypes": ["Rock"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["earthquake", "gunkshot", "iceshard", "stealthrock", "stoneedge"],
|
||||
"abilities": ["Sturdy"],
|
||||
"preferredTypes": ["Rock"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -1711,7 +1717,7 @@
|
|||
]
|
||||
},
|
||||
"celebi": {
|
||||
"level": 81,
|
||||
"level": 80,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
|
@ -2187,7 +2193,7 @@
|
|||
]
|
||||
},
|
||||
"grumpig": {
|
||||
"level": 92,
|
||||
"level": 91,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
|
|
@ -2388,7 +2394,7 @@
|
|||
]
|
||||
},
|
||||
"castform": {
|
||||
"level": 97,
|
||||
"level": 98,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
|
|
@ -2398,7 +2404,7 @@
|
|||
]
|
||||
},
|
||||
"kecleon": {
|
||||
"level": 94,
|
||||
"level": 95,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
|
@ -2413,7 +2419,7 @@
|
|||
{
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["hiddenpowerfighting", "shadowclaw", "shadowsneak", "thunderwave", "willowisp"],
|
||||
"abilities": ["Cursed Body", "Frisk", "Insomnia"]
|
||||
"abilities": ["Insomnia"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -2542,7 +2548,7 @@
|
|||
]
|
||||
},
|
||||
"salamence": {
|
||||
"level": 75,
|
||||
"level": 74,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
|
|
@ -2702,7 +2708,7 @@
|
|||
]
|
||||
},
|
||||
"jirachi": {
|
||||
"level": 75,
|
||||
"level": 74,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
|
@ -2777,7 +2783,7 @@
|
|||
]
|
||||
},
|
||||
"infernape": {
|
||||
"level": 79,
|
||||
"level": 78,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
|
|
@ -2848,7 +2854,7 @@
|
|||
]
|
||||
},
|
||||
"luxray": {
|
||||
"level": 89,
|
||||
"level": 88,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
|
|
@ -2934,7 +2940,7 @@
|
|||
]
|
||||
},
|
||||
"wormadamtrash": {
|
||||
"level": 88,
|
||||
"level": 87,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Staller",
|
||||
|
|
@ -3426,12 +3432,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["earthquake", "iceshard", "iciclecrash", "stealthrock"],
|
||||
"abilities": ["Thick Fat"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["earthquake", "iceshard", "iciclecrash", "stoneedge", "superpower"],
|
||||
"movepool": ["earthquake", "iceshard", "iciclecrash", "stealthrock", "stoneedge", "superpower"],
|
||||
"abilities": ["Thick Fat"]
|
||||
}
|
||||
]
|
||||
|
|
@ -3513,7 +3514,7 @@
|
|||
]
|
||||
},
|
||||
"rotomwash": {
|
||||
"level": 79,
|
||||
"level": 80,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
|
|
@ -3563,7 +3564,7 @@
|
|||
]
|
||||
},
|
||||
"mesprit": {
|
||||
"level": 82,
|
||||
"level": 83,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
|
@ -3662,7 +3663,7 @@
|
|||
]
|
||||
},
|
||||
"giratinaorigin": {
|
||||
"level": 73,
|
||||
"level": 72,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
|
@ -3976,7 +3977,7 @@
|
|||
]
|
||||
},
|
||||
"serperior": {
|
||||
"level": 85,
|
||||
"level": 86,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
|
@ -4274,7 +4275,7 @@
|
|||
},
|
||||
{
|
||||
"role": "Staller",
|
||||
"movepool": ["hurricane", "leechseed", "protect", "substitute"],
|
||||
"movepool": ["encore", "hurricane", "leechseed", "substitute"],
|
||||
"abilities": ["Prankster"]
|
||||
}
|
||||
]
|
||||
|
|
@ -4353,12 +4354,12 @@
|
|||
"level": 82,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["crunch", "dragondance", "highjumpkick", "stoneedge", "zenheadbutt"],
|
||||
"abilities": ["Intimidate", "Moxie"]
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["crunch", "dragondance", "drainpunch", "stoneedge", "zenheadbutt"],
|
||||
"abilities": ["Intimidate"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["bulkup", "crunch", "drainpunch", "rest"],
|
||||
"abilities": ["Shed Skin"]
|
||||
}
|
||||
|
|
@ -4422,7 +4423,7 @@
|
|||
]
|
||||
},
|
||||
"garbodor": {
|
||||
"level": 89,
|
||||
"level": 90,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
|
|
@ -4466,7 +4467,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recover", "signalbeam"],
|
||||
"movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recover"],
|
||||
"abilities": ["Magic Guard"]
|
||||
}
|
||||
]
|
||||
|
|
@ -4568,9 +4569,13 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["bugbuzz", "gigadrain", "hiddenpowerice", "thunder", "voltswitch"],
|
||||
"abilities": ["Compound Eyes"],
|
||||
"preferredTypes": ["Bug"]
|
||||
"movepool": ["bugbuzz", "hiddenpowerice", "thunder", "voltswitch"],
|
||||
"abilities": ["Compound Eyes"]
|
||||
},
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["bugbuzz", "energyball", "thunder", "voltswitch"],
|
||||
"abilities": ["Compound Eyes"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -4616,7 +4621,7 @@
|
|||
]
|
||||
},
|
||||
"beheeyem": {
|
||||
"level": 90,
|
||||
"level": 89,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
|
|
@ -4626,7 +4631,7 @@
|
|||
]
|
||||
},
|
||||
"chandelure": {
|
||||
"level": 80,
|
||||
"level": 79,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
|
@ -4930,7 +4935,7 @@
|
|||
]
|
||||
},
|
||||
"zekrom": {
|
||||
"level": 75,
|
||||
"level": 74,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
|
|
@ -4945,7 +4950,7 @@
|
|||
]
|
||||
},
|
||||
"landorus": {
|
||||
"level": 75,
|
||||
"level": 74,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
|
|
@ -4956,7 +4961,8 @@
|
|||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["calmmind", "earthpower", "focusblast", "psychic", "rockpolish", "sludgewave"],
|
||||
"abilities": ["Sheer Force"]
|
||||
"abilities": ["Sheer Force"],
|
||||
"preferredTypes": ["Poison"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
|||
|
|
@ -236,15 +236,8 @@ export class RandomGen5Teams extends RandomGen6Teams {
|
|||
if (abilities.includes('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;
|
||||
}
|
||||
if (species.id === 'mamoswine') {
|
||||
this.incompatibleMoves(moves, movePool, ['stealthrock', 'stoneedge'], ['stoneedge', 'superpower']);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -711,6 +704,8 @@ export class RandomGen5Teams extends RandomGen6Teams {
|
|||
teamDetails: RandomTeamsTypes.TeamDetails = {},
|
||||
isLead = false
|
||||
): RandomTeamsTypes.RandomSet {
|
||||
const ruleTable = this.dex.formats.getRuleTable(this.format);
|
||||
|
||||
species = this.dex.species.get(species);
|
||||
const forme = this.getForme(species);
|
||||
const sets = this.randomSets[species.id]["sets"];
|
||||
|
|
@ -817,7 +812,7 @@ export class RandomGen5Teams extends RandomGen6Teams {
|
|||
// Minimize confusion damage, including if Foul Play is its only physical attack
|
||||
if (
|
||||
(!counter.get('Physical') || (counter.get('Physical') <= 1 && (moves.has('foulplay') || moves.has('rapidspin')))) &&
|
||||
!moves.has('transform')
|
||||
!moves.has('transform') && !ruleTable.has('forceofthefallenmod')
|
||||
) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = hasHiddenPower ? (ivs.atk || 31) - 28 : 0;
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
]
|
||||
},
|
||||
"venusaurmega": {
|
||||
"level": 78,
|
||||
"level": 77,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
|
|
@ -105,7 +105,7 @@
|
|||
]
|
||||
},
|
||||
"beedrillmega": {
|
||||
"level": 78,
|
||||
"level": 77,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
|
@ -212,7 +212,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["earthpower", "fireblast", "icebeam", "sludgewave", "stealthrock", "toxicspikes"],
|
||||
"movepool": ["earthpower", "fireblast", "icebeam", "poisonjab", "sludgewave", "stealthrock", "toxicspikes"],
|
||||
"abilities": ["Sheer Force"],
|
||||
"preferredTypes": ["Ice"]
|
||||
}
|
||||
|
|
@ -223,7 +223,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["earthpower", "fireblast", "icebeam", "sludgewave", "substitute", "superpower"],
|
||||
"movepool": ["earthpower", "fireblast", "icebeam", "poisonjab", "sludgewave", "substitute"],
|
||||
"abilities": ["Sheer Force"],
|
||||
"preferredTypes": ["Ice"]
|
||||
}
|
||||
|
|
@ -339,9 +339,15 @@
|
|||
"golduck": {
|
||||
"level": 90,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["calmmind", "encore", "focusblast", "icebeam", "scald", "substitute"],
|
||||
"abilities": ["Cloud Nine", "Swift Swim"],
|
||||
"preferredTypes": ["Ice"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam", "scald"],
|
||||
"movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam"],
|
||||
"abilities": ["Cloud Nine", "Swift Swim"],
|
||||
"preferredTypes": ["Ice"]
|
||||
}
|
||||
|
|
@ -822,7 +828,7 @@
|
|||
]
|
||||
},
|
||||
"pinsir": {
|
||||
"level": 84,
|
||||
"level": 85,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
|
@ -859,7 +865,7 @@
|
|||
]
|
||||
},
|
||||
"gyarados": {
|
||||
"level": 77,
|
||||
"level": 78,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
|
|
@ -1056,7 +1062,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"],
|
||||
"movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "signalbeam"],
|
||||
"abilities": ["Unnerve"]
|
||||
}
|
||||
]
|
||||
|
|
@ -1076,7 +1082,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"],
|
||||
"movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "signalbeam"],
|
||||
"abilities": ["Unnerve"]
|
||||
}
|
||||
]
|
||||
|
|
@ -1176,7 +1182,7 @@
|
|||
]
|
||||
},
|
||||
"crobat": {
|
||||
"level": 81,
|
||||
"level": 80,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
|
|
@ -1388,7 +1394,7 @@
|
|||
]
|
||||
},
|
||||
"wobbuffet": {
|
||||
"level": 92,
|
||||
"level": 93,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
|
@ -1500,7 +1506,7 @@
|
|||
]
|
||||
},
|
||||
"scizor": {
|
||||
"level": 79,
|
||||
"level": 78,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
|
|
@ -1661,7 +1667,7 @@
|
|||
]
|
||||
},
|
||||
"houndoom": {
|
||||
"level": 85,
|
||||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
|
@ -1848,7 +1854,7 @@
|
|||
]
|
||||
},
|
||||
"lugia": {
|
||||
"level": 72,
|
||||
"level": 71,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Staller",
|
||||
|
|
@ -2506,6 +2512,11 @@
|
|||
"role": "Bulky Setup",
|
||||
"movepool": ["dragondance", "earthquake", "outrage", "roost"],
|
||||
"abilities": ["Natural Cure"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["dracometeor", "earthquake", "fireblast", "healbell", "roost", "toxic"],
|
||||
"abilities": ["Natural Cure"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -2516,11 +2527,6 @@
|
|||
"role": "Setup Sweeper",
|
||||
"movepool": ["dragondance", "earthquake", "return", "roost"],
|
||||
"abilities": ["Natural Cure"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["earthquake", "fireblast", "healbell", "return", "roost"],
|
||||
"abilities": ["Natural Cure"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -3806,7 +3812,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["doubleedge", "knockoff", "leafblade", "swordsdance", "synthesis", "xscissor"],
|
||||
"movepool": ["doubleedge", "knockoff", "leafblade", "substitute", "swordsdance", "synthesis"],
|
||||
"abilities": ["Chlorophyll"],
|
||||
"preferredTypes": ["Dark"]
|
||||
}
|
||||
|
|
@ -4079,9 +4085,13 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["drainpunch", "knockoff", "return", "substitute", "thunderwave"],
|
||||
"abilities": ["Slow Start"],
|
||||
"preferredTypes": ["Dark"]
|
||||
"movepool": ["drainpunch", "knockoff", "return", "thunderwave"],
|
||||
"abilities": ["Slow Start"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["knockoff", "return", "substitute", "thunderwave"],
|
||||
"abilities": ["Slow Start"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -4718,7 +4728,7 @@
|
|||
]
|
||||
},
|
||||
"scolipede": {
|
||||
"level": 80,
|
||||
"level": 79,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Support",
|
||||
|
|
@ -4773,7 +4783,7 @@
|
|||
]
|
||||
},
|
||||
"krookodile": {
|
||||
"level": 79,
|
||||
"level": 78,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
|
@ -4822,9 +4832,9 @@
|
|||
"level": 83,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["dragondance", "highjumpkick", "ironhead", "knockoff"],
|
||||
"abilities": ["Intimidate", "Moxie"]
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["dragondance", "drainpunch", "ironhead", "knockoff"],
|
||||
"abilities": ["Intimidate"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
|
|
@ -4937,7 +4947,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recover", "signalbeam"],
|
||||
"movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recover"],
|
||||
"abilities": ["Magic Guard"]
|
||||
}
|
||||
]
|
||||
|
|
@ -5045,7 +5055,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["bugbuzz", "gigadrain", "stickyweb", "thunder", "voltswitch"],
|
||||
"movepool": ["bugbuzz", "energyball", "stickyweb", "thunder", "voltswitch"],
|
||||
"abilities": ["Compound Eyes"],
|
||||
"preferredTypes": ["Bug"]
|
||||
}
|
||||
|
|
@ -5186,7 +5196,7 @@
|
|||
]
|
||||
},
|
||||
"druddigon": {
|
||||
"level": 85,
|
||||
"level": 86,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
|
|
@ -5293,7 +5303,7 @@
|
|||
},
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["darkpulse", "dracometeor", "fireblast", "roost", "uturn"],
|
||||
"movepool": ["darkpulse", "dracometeor", "fireblast", "roost", "toxic", "uturn"],
|
||||
"abilities": ["Levitate"]
|
||||
},
|
||||
{
|
||||
|
|
@ -5685,7 +5695,7 @@
|
|||
]
|
||||
},
|
||||
"pangoro": {
|
||||
"level": 85,
|
||||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
|
|
@ -6001,7 +6011,7 @@
|
|||
]
|
||||
},
|
||||
"gourgeistsuper": {
|
||||
"level": 88,
|
||||
"level": 87,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
|
|
|||
|
|
@ -227,7 +227,7 @@ export class RandomGen6Teams extends RandomGen7Teams {
|
|||
['hornleech', 'woodhammer'],
|
||||
[['gigadrain', 'leafstorm'], ['leafstorm', 'petaldance', 'powerwhip']],
|
||||
['wildcharge', 'thunderbolt'],
|
||||
['gunkshot', 'poisonjab'],
|
||||
[['gunkshot', 'sludgewave'], 'poisonjab'],
|
||||
[['drainpunch', 'focusblast'], ['closecombat', 'highjumpkick', 'superpower']],
|
||||
['stoneedge', 'headsmash'],
|
||||
['dracometeor', 'dragonpulse'],
|
||||
|
|
@ -769,6 +769,8 @@ export class RandomGen6Teams extends RandomGen7Teams {
|
|||
teamDetails: RandomTeamsTypes.TeamDetails = {},
|
||||
isLead = false
|
||||
): RandomTeamsTypes.RandomSet {
|
||||
const ruleTable = this.dex.formats.getRuleTable(this.format);
|
||||
|
||||
species = this.dex.species.get(species);
|
||||
const forme = this.getForme(species);
|
||||
const sets = this.randomSets[species.id]["sets"];
|
||||
|
|
@ -816,7 +818,8 @@ export class RandomGen6Teams extends RandomGen7Teams {
|
|||
// Minimize confusion damage, including if Foul Play is its only physical attack
|
||||
if (
|
||||
(!counter.get('Physical') || (counter.get('Physical') <= 1 && (moves.has('foulplay') || moves.has('rapidspin')))) &&
|
||||
!moves.has('copycat') && !moves.has('transform')
|
||||
!moves.has('copycat') && !moves.has('transform') &&
|
||||
!ruleTable.has('forceofthefallenmod')
|
||||
) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = 0;
|
||||
|
|
@ -1130,7 +1133,6 @@ export class RandomGen6Teams extends RandomGen7Teams {
|
|||
if (teamData.weaknesses[type] >= 3) return this.randomFactoryTeam(side, ++depth);
|
||||
}
|
||||
}
|
||||
|
||||
return pokemon;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -283,7 +283,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["earthpower", "fireblast", "icebeam", "sludgewave", "stealthrock", "toxicspikes"],
|
||||
"movepool": ["earthpower", "fireblast", "icebeam", "poisonjab", "sludgewave", "stealthrock", "toxicspikes"],
|
||||
"abilities": ["Sheer Force"],
|
||||
"preferredTypes": ["Ice"]
|
||||
}
|
||||
|
|
@ -294,7 +294,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["earthpower", "fireblast", "icebeam", "sludgewave", "substitute", "superpower"],
|
||||
"movepool": ["earthpower", "fireblast", "icebeam", "poisonjab", "sludgewave", "substitute", "throatchop"],
|
||||
"abilities": ["Sheer Force"],
|
||||
"preferredTypes": ["Ice"]
|
||||
}
|
||||
|
|
@ -453,10 +453,16 @@
|
|||
"level": 93,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam", "scald"],
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["calmmind", "encore", "focusblast", "icebeam", "scald", "substitute"],
|
||||
"abilities": ["Cloud Nine", "Swift Swim"],
|
||||
"preferredTypes": ["Ice"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam"],
|
||||
"abilities": ["Cloud Nine", "Swift Swim"],
|
||||
"preferredTypes": ["Ice"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -882,7 +888,7 @@
|
|||
]
|
||||
},
|
||||
"rhydon": {
|
||||
"level": 86,
|
||||
"level": 85,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
|
|
@ -933,7 +939,7 @@
|
|||
]
|
||||
},
|
||||
"seaking": {
|
||||
"level": 94,
|
||||
"level": 95,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
|
@ -1269,7 +1275,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"],
|
||||
"movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "signalbeam"],
|
||||
"abilities": ["Unnerve"]
|
||||
}
|
||||
]
|
||||
|
|
@ -1289,7 +1295,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"],
|
||||
"movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "signalbeam"],
|
||||
"abilities": ["Unnerve"]
|
||||
}
|
||||
]
|
||||
|
|
@ -1437,7 +1443,7 @@
|
|||
]
|
||||
},
|
||||
"ampharosmega": {
|
||||
"level": 84,
|
||||
"level": 85,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
|
|
@ -1549,7 +1555,7 @@
|
|||
]
|
||||
},
|
||||
"espeon": {
|
||||
"level": 84,
|
||||
"level": 83,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
|
@ -1686,7 +1692,7 @@
|
|||
]
|
||||
},
|
||||
"steelixmega": {
|
||||
"level": 81,
|
||||
"level": 80,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
|
@ -1863,7 +1869,7 @@
|
|||
]
|
||||
},
|
||||
"skarmory": {
|
||||
"level": 76,
|
||||
"level": 75,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
|
@ -1888,7 +1894,7 @@
|
|||
]
|
||||
},
|
||||
"houndoommega": {
|
||||
"level": 81,
|
||||
"level": 80,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
|
|
@ -2454,7 +2460,7 @@
|
|||
]
|
||||
},
|
||||
"sableyemega": {
|
||||
"level": 87,
|
||||
"level": 86,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
|
|
@ -2562,7 +2568,7 @@
|
|||
]
|
||||
},
|
||||
"minun": {
|
||||
"level": 94,
|
||||
"level": 95,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
|
|
@ -2731,7 +2737,7 @@
|
|||
]
|
||||
},
|
||||
"cacturne": {
|
||||
"level": 92,
|
||||
"level": 93,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
|
|
@ -2748,6 +2754,11 @@
|
|||
"altaria": {
|
||||
"level": 92,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["dragondance", "earthquake", "outrage", "roost"],
|
||||
"abilities": ["Natural Cure"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["defog", "dracometeor", "earthquake", "fireblast", "healbell", "roost", "toxic"],
|
||||
|
|
@ -3042,7 +3053,7 @@
|
|||
]
|
||||
},
|
||||
"gorebyss": {
|
||||
"level": 84,
|
||||
"level": 85,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
|
|
@ -3368,7 +3379,7 @@
|
|||
]
|
||||
},
|
||||
"deoxysattack": {
|
||||
"level": 73,
|
||||
"level": 72,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
|
|
@ -3749,7 +3760,7 @@
|
|||
]
|
||||
},
|
||||
"honchkrow": {
|
||||
"level": 84,
|
||||
"level": 83,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
|
|
@ -4115,7 +4126,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["doubleedge", "knockoff", "leafblade", "swordsdance", "synthesis", "xscissor"],
|
||||
"movepool": ["doubleedge", "knockoff", "leafblade", "substitute", "swordsdance", "synthesis"],
|
||||
"abilities": ["Chlorophyll"],
|
||||
"preferredTypes": ["Dark"]
|
||||
}
|
||||
|
|
@ -4406,9 +4417,13 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["drainpunch", "knockoff", "return", "substitute", "thunderwave"],
|
||||
"abilities": ["Slow Start"],
|
||||
"preferredTypes": ["Dark"]
|
||||
"movepool": ["drainpunch", "knockoff", "return", "thunderwave"],
|
||||
"abilities": ["Slow Start"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["knockoff", "return", "substitute", "thunderwave"],
|
||||
"abilities": ["Slow Start"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -4970,7 +4985,7 @@
|
|||
]
|
||||
},
|
||||
"swoobat": {
|
||||
"level": 87,
|
||||
"level": 88,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
|
|
@ -5200,9 +5215,9 @@
|
|||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["dragondance", "highjumpkick", "ironhead", "knockoff"],
|
||||
"abilities": ["Intimidate", "Moxie"]
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["dragondance", "drainpunch", "ironhead", "knockoff"],
|
||||
"abilities": ["Intimidate"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
|
|
@ -5315,7 +5330,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recover", "signalbeam"],
|
||||
"movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recover"],
|
||||
"abilities": ["Magic Guard"]
|
||||
}
|
||||
]
|
||||
|
|
@ -5429,7 +5444,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["bugbuzz", "gigadrain", "stickyweb", "thunder", "voltswitch"],
|
||||
"movepool": ["bugbuzz", "energyball", "stickyweb", "thunder", "voltswitch"],
|
||||
"abilities": ["Compound Eyes"],
|
||||
"preferredTypes": ["Bug"]
|
||||
}
|
||||
|
|
@ -5551,7 +5566,7 @@
|
|||
]
|
||||
},
|
||||
"stunfisk": {
|
||||
"level": 89,
|
||||
"level": 88,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
|
|
@ -5694,7 +5709,7 @@
|
|||
},
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["darkpulse", "defog", "dracometeor", "fireblast", "roost", "uturn"],
|
||||
"movepool": ["darkpulse", "defog", "dracometeor", "fireblast", "roost", "toxic", "uturn"],
|
||||
"abilities": ["Levitate"]
|
||||
},
|
||||
{
|
||||
|
|
@ -5802,7 +5817,7 @@
|
|||
]
|
||||
},
|
||||
"thundurus": {
|
||||
"level": 82,
|
||||
"level": 81,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
|
|
@ -5933,7 +5948,7 @@
|
|||
]
|
||||
},
|
||||
"kyuremwhite": {
|
||||
"level": 76,
|
||||
"level": 75,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
|
@ -6051,7 +6066,7 @@
|
|||
]
|
||||
},
|
||||
"diggersby": {
|
||||
"level": 83,
|
||||
"level": 82,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
|
|
@ -6436,7 +6451,7 @@
|
|||
]
|
||||
},
|
||||
"gourgeistsmall": {
|
||||
"level": 90,
|
||||
"level": 91,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
|
@ -6446,7 +6461,7 @@
|
|||
]
|
||||
},
|
||||
"gourgeistlarge": {
|
||||
"level": 90,
|
||||
"level": 91,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
|
@ -6944,7 +6959,7 @@
|
|||
]
|
||||
},
|
||||
"comfey": {
|
||||
"level": 88,
|
||||
"level": 87,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
|
@ -7459,7 +7474,7 @@
|
|||
]
|
||||
},
|
||||
"nihilego": {
|
||||
"level": 80,
|
||||
"level": 79,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Support",
|
||||
|
|
@ -7548,7 +7563,7 @@
|
|||
]
|
||||
},
|
||||
"guzzlord": {
|
||||
"level": 87,
|
||||
"level": 86,
|
||||
"sets": [
|
||||
{
|
||||
"role": "AV Pivot",
|
||||
|
|
@ -7615,9 +7630,10 @@
|
|||
"level": 77,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"role": "Z-Move user",
|
||||
"movepool": ["calmmind", "flashcannon", "fleurcannon", "shiftgear"],
|
||||
"abilities": ["Soul-Heart"]
|
||||
"abilities": ["Soul-Heart"],
|
||||
"preferredTypes": ["Fairy"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
|
@ -7625,10 +7641,9 @@
|
|||
"abilities": ["Soul-Heart"]
|
||||
},
|
||||
{
|
||||
"role": "Z-Move user",
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["aurasphere", "fleurcannon", "ironhead", "shiftgear"],
|
||||
"abilities": ["Soul-Heart"],
|
||||
"preferredTypes": ["Fairy", "Steel"]
|
||||
"abilities": ["Soul-Heart"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
|||
|
|
@ -345,7 +345,7 @@ export class RandomGen7Teams extends RandomGen8Teams {
|
|||
['hornleech', 'woodhammer'],
|
||||
[['gigadrain', 'leafstorm'], ['energyball', 'leafstorm', 'petaldance', 'powerwhip']],
|
||||
['wildcharge', 'thunderbolt'],
|
||||
['gunkshot', 'poisonjab'],
|
||||
[['gunkshot', 'sludgewave'], 'poisonjab'],
|
||||
[['drainpunch', 'focusblast'], ['closecombat', 'highjumpkick', 'superpower']],
|
||||
['dracometeor', 'dragonpulse'],
|
||||
['dragonclaw', 'outrage'],
|
||||
|
|
@ -933,7 +933,7 @@ export class RandomGen7Teams extends RandomGen8Teams {
|
|||
if (ability === 'Sturdy' && moves.has('explosion') && !counter.get('speedsetup')) return 'Custap Berry';
|
||||
if (types.includes('Normal') && moves.has('fakeout') && !!counter.get('Normal')) return 'Silk Scarf';
|
||||
if (species.id === 'latias' || species.id === 'latios') return 'Soul Dew';
|
||||
if (role === 'Bulky Setup' && !!counter.get('speedsetup') && !moves.has('swordsdance')) {
|
||||
if (role === 'Bulky Setup' && (!!counter.get('speedsetup') || moves.has('shiftgear')) && !moves.has('swordsdance')) {
|
||||
return 'Weakness Policy';
|
||||
}
|
||||
if (species.id === 'palkia') return 'Lustrous Orb';
|
||||
|
|
@ -1025,6 +1025,8 @@ export class RandomGen7Teams extends RandomGen8Teams {
|
|||
teamDetails: RandomTeamsTypes.TeamDetails = {},
|
||||
isLead = false
|
||||
): RandomTeamsTypes.RandomSet {
|
||||
const ruleTable = this.dex.formats.getRuleTable(this.format);
|
||||
|
||||
species = this.dex.species.get(species);
|
||||
const forme = this.getForme(species);
|
||||
const sets = this.randomSets[species.id]["sets"];
|
||||
|
|
@ -1083,7 +1085,8 @@ export class RandomGen7Teams extends RandomGen8Teams {
|
|||
// Minimize confusion damage, including if Foul Play is its only physical attack
|
||||
if (
|
||||
(!counter.get('Physical') || (counter.get('Physical') <= 1 && (moves.has('foulplay') || moves.has('rapidspin')))) &&
|
||||
!moves.has('copycat') && !moves.has('transform')
|
||||
!moves.has('copycat') && !moves.has('transform') &&
|
||||
!ruleTable.has('forceofthefallenmod')
|
||||
) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = 0;
|
||||
|
|
@ -1385,7 +1388,6 @@ export class RandomGen7Teams extends RandomGen8Teams {
|
|||
if (pokemon.length < this.maxTeamSize && pokemon.length < 12) {
|
||||
throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`);
|
||||
}
|
||||
|
||||
return pokemon;
|
||||
}
|
||||
|
||||
|
|
@ -1605,7 +1607,8 @@ export class RandomGen7Teams extends RandomGen8Teams {
|
|||
if (isMonotype) {
|
||||
// Prevents Mega Evolutions from breaking the type limits
|
||||
if (itemData.megaStone) {
|
||||
const megaSpecies = this.dex.species.get(itemData.megaStone);
|
||||
const megaSpecies = this.dex.species.get(Array.isArray(itemData.megaStone) ?
|
||||
itemData.megaStone[0] : itemData.megaStone);
|
||||
if (types.length > megaSpecies.types.length) types = [species.types[0]];
|
||||
// Only check the second type because a Mega Evolution should always share the first type with its base forme.
|
||||
if (megaSpecies.types[1] && types[1] && megaSpecies.types[1] !== types[1]) {
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@
|
|||
"doublesMoves": ["dazzlinggleam", "healpulse", "helpinghand", "hypervoice", "thunderwave"]
|
||||
},
|
||||
"vileplume": {
|
||||
"level": 84,
|
||||
"level": 83,
|
||||
"moves": ["aromatherapy", "gigadrain", "sleeppowder", "sludgebomb", "strengthsap"],
|
||||
"doublesLevel": 88,
|
||||
"doublesMoves": ["aromatherapy", "energyball", "pollenpuff", "sleeppowder", "sludgebomb", "strengthsap"]
|
||||
|
|
@ -178,7 +178,7 @@
|
|||
"doublesMoves": ["bulletpunch", "closecombat", "facade", "knockoff", "protect"]
|
||||
},
|
||||
"tentacruel": {
|
||||
"level": 82,
|
||||
"level": 81,
|
||||
"moves": ["haze", "knockoff", "rapidspin", "scald", "sludgebomb", "toxicspikes"],
|
||||
"doublesLevel": 87,
|
||||
"doublesMoves": ["acidspray", "icywind", "knockoff", "muddywater", "rapidspin", "sludgebomb"]
|
||||
|
|
@ -190,7 +190,7 @@
|
|||
"doublesMoves": ["flareblitz", "highhorsepower", "morningsun", "protect", "swordsdance", "wildcharge"]
|
||||
},
|
||||
"rapidashgalar": {
|
||||
"level": 83,
|
||||
"level": 84,
|
||||
"moves": ["highhorsepower", "morningsun", "playrough", "swordsdance", "zenheadbutt"],
|
||||
"doublesLevel": 88,
|
||||
"doublesMoves": ["highhorsepower", "playrough", "protect", "swordsdance", "zenheadbutt"]
|
||||
|
|
@ -323,7 +323,7 @@
|
|||
"moves": ["focusblast", "freezedry", "nastyplot", "psychic", "rapidspin"]
|
||||
},
|
||||
"scyther": {
|
||||
"level": 82,
|
||||
"level": 81,
|
||||
"moves": ["brickbreak", "dualwingbeat", "knockoff", "roost", "swordsdance", "uturn"],
|
||||
"doublesLevel": 84,
|
||||
"doublesMoves": ["brickbreak", "bugbite", "dualwingbeat", "uturn"]
|
||||
|
|
@ -424,7 +424,7 @@
|
|||
"noDynamaxMoves": ["calmmind", "freezingglare", "hurricane", "recover"]
|
||||
},
|
||||
"zapdos": {
|
||||
"level": 78,
|
||||
"level": 79,
|
||||
"moves": ["defog", "discharge", "heatwave", "hurricane", "roost", "uturn"],
|
||||
"doublesLevel": 79,
|
||||
"doublesMoves": ["heatwave", "hurricane", "roost", "tailwind", "thunderbolt", "voltswitch"]
|
||||
|
|
@ -457,7 +457,7 @@
|
|||
"noDynamaxMoves": ["dragondance", "dualwingbeat", "earthquake", "outrage", "roost"]
|
||||
},
|
||||
"mewtwo": {
|
||||
"level": 70,
|
||||
"level": 71,
|
||||
"moves": ["fireblast", "nastyplot", "psystrike", "recover", "shadowball"],
|
||||
"doublesLevel": 74,
|
||||
"doublesMoves": ["aurasphere", "icebeam", "nastyplot", "psystrike", "recover"]
|
||||
|
|
@ -495,7 +495,7 @@
|
|||
"doublesMoves": ["airslash", "heatwave", "lightscreen", "psychic", "reflect", "roost", "tailwind"]
|
||||
},
|
||||
"bellossom": {
|
||||
"level": 82,
|
||||
"level": 83,
|
||||
"moves": ["gigadrain", "moonblast", "quiverdance", "sleeppowder", "strengthsap"],
|
||||
"doublesLevel": 86,
|
||||
"doublesMoves": ["energyball", "moonblast", "quiverdance", "sleeppowder", "strengthsap"]
|
||||
|
|
@ -507,7 +507,7 @@
|
|||
"doublesMoves": ["aquajet", "knockoff", "liquidation", "playrough", "protect"]
|
||||
},
|
||||
"sudowoodo": {
|
||||
"level": 89,
|
||||
"level": 90,
|
||||
"moves": ["earthquake", "headsmash", "stealthrock", "suckerpunch", "woodhammer"],
|
||||
"doublesLevel": 90,
|
||||
"doublesMoves": ["bodypress", "firepunch", "headsmash", "protect", "suckerpunch", "woodhammer"]
|
||||
|
|
@ -569,7 +569,7 @@
|
|||
"noDynamaxMoves": ["curse", "earthquake", "headsmash", "heavyslam", "stealthrock", "toxic"]
|
||||
},
|
||||
"qwilfish": {
|
||||
"level": 87,
|
||||
"level": 86,
|
||||
"moves": ["destinybond", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"],
|
||||
"doublesLevel": 88,
|
||||
"doublesMoves": ["liquidation", "poisonjab", "protect", "taunt", "thunderwave", "toxicspikes"]
|
||||
|
|
@ -641,7 +641,7 @@
|
|||
"doublesMoves": ["icebeam", "recover", "thunderbolt", "toxic", "triattack", "trickroom"]
|
||||
},
|
||||
"hitmontop": {
|
||||
"level": 86,
|
||||
"level": 87,
|
||||
"moves": ["closecombat", "earthquake", "rapidspin", "suckerpunch", "toxic", "tripleaxel"],
|
||||
"doublesLevel": 88,
|
||||
"doublesMoves": ["closecombat", "coaching", "fakeout", "helpinghand", "rapidspin", "suckerpunch", "tripleaxel"]
|
||||
|
|
@ -708,7 +708,7 @@
|
|||
"doublesMoves": ["breakingswipe", "energyball", "focusblast", "leafstorm"]
|
||||
},
|
||||
"blaziken": {
|
||||
"level": 74,
|
||||
"level": 75,
|
||||
"moves": ["closecombat", "flareblitz", "knockoff", "stoneedge", "swordsdance"],
|
||||
"doublesLevel": 78,
|
||||
"doublesMoves": ["closecombat", "flareblitz", "knockoff", "protect", "swordsdance"]
|
||||
|
|
@ -800,7 +800,7 @@
|
|||
"doublesMoves": ["closecombat", "crunch", "flipturn", "icebeam", "protect", "waterfall"]
|
||||
},
|
||||
"wailord": {
|
||||
"level": 91,
|
||||
"level": 92,
|
||||
"moves": ["hydropump", "hypervoice", "icebeam", "waterspout"],
|
||||
"doublesLevel": 88,
|
||||
"doublesMoves": ["hydropump", "heavyslam", "icebeam", "waterspout"]
|
||||
|
|
@ -1065,7 +1065,7 @@
|
|||
"doublesMoves": ["auroraveil", "blizzard", "iceshard", "protect", "woodhammer"]
|
||||
},
|
||||
"weavile": {
|
||||
"level": 79,
|
||||
"level": 78,
|
||||
"moves": ["iceshard", "knockoff", "lowkick", "swordsdance", "tripleaxel"],
|
||||
"doublesLevel": 84,
|
||||
"doublesMoves": ["fakeout", "iceshard", "knockoff", "lowkick", "tripleaxel"]
|
||||
|
|
@ -1119,7 +1119,7 @@
|
|||
"doublesMoves": ["doubleedge", "knockoff", "leafblade", "protect", "swordsdance"]
|
||||
},
|
||||
"glaceon": {
|
||||
"level": 91,
|
||||
"level": 90,
|
||||
"moves": ["freezedry", "protect", "toxic", "wish"],
|
||||
"doublesLevel": 88,
|
||||
"doublesMoves": ["blizzard", "freezedry", "helpinghand", "protect", "shadowball", "wish"]
|
||||
|
|
@ -1186,7 +1186,7 @@
|
|||
"doublesMoves": ["airslash", "nastyplot", "protect", "thunderbolt"]
|
||||
},
|
||||
"rotommow": {
|
||||
"level": 84,
|
||||
"level": 85,
|
||||
"moves": ["leafstorm", "nastyplot", "thunderbolt", "trick", "voltswitch", "willowisp"],
|
||||
"doublesLevel": 88,
|
||||
"doublesMoves": ["electroweb", "leafstorm", "protect", "thunderbolt", "voltswitch", "willowisp"]
|
||||
|
|
@ -1259,7 +1259,7 @@
|
|||
"doublesMoves": ["boltstrike", "glaciate", "protect", "uturn", "vcreate", "zenheadbutt"]
|
||||
},
|
||||
"stoutland": {
|
||||
"level": 87,
|
||||
"level": 88,
|
||||
"moves": ["crunch", "facade", "playrough", "superpower", "wildcharge"],
|
||||
"doublesLevel": 90,
|
||||
"doublesMoves": ["facade", "helpinghand", "superpower", "thunderwave"]
|
||||
|
|
@ -1366,7 +1366,7 @@
|
|||
"doublesMoves": ["closecombat", "highhorsepower", "knockoff", "protect", "rockslide", "taunt"]
|
||||
},
|
||||
"darmanitan": {
|
||||
"level": 79,
|
||||
"level": 78,
|
||||
"moves": ["earthquake", "flareblitz", "rockslide", "superpower", "uturn"],
|
||||
"doublesLevel": 82,
|
||||
"doublesMoves": ["earthquake", "flareblitz", "protect", "rockslide", "superpower", "uturn"]
|
||||
|
|
@ -1502,7 +1502,7 @@
|
|||
"doublesMoves": ["geargrind", "protect", "shiftgear", "wildcharge"]
|
||||
},
|
||||
"beheeyem": {
|
||||
"level": 89,
|
||||
"level": 90,
|
||||
"moves": ["darkpulse", "psychic", "thunderbolt", "trick", "trickroom"],
|
||||
"doublesLevel": 88,
|
||||
"doublesMoves": ["protect", "psychic", "shadowball", "thunderbolt", "trickroom"]
|
||||
|
|
@ -1532,7 +1532,7 @@
|
|||
"doublesMoves": ["freezedry", "haze", "icebeam", "icywind", "rapidspin", "recover", "toxic"]
|
||||
},
|
||||
"accelgor": {
|
||||
"level": 91,
|
||||
"level": 90,
|
||||
"moves": ["bugbuzz", "energyball", "focusblast", "sludgebomb", "spikes", "toxicspikes", "yawn"],
|
||||
"doublesLevel": 88,
|
||||
"doublesMoves": ["acidspray", "bugbuzz", "encore", "energyball", "focusblast"],
|
||||
|
|
@ -1599,7 +1599,7 @@
|
|||
"doublesMoves": ["firelash", "gigadrain", "incinerate", "protect", "suckerpunch", "superpower"]
|
||||
},
|
||||
"durant": {
|
||||
"level": 78,
|
||||
"level": 77,
|
||||
"moves": ["firstimpression", "honeclaws", "ironhead", "rockslide", "superpower"],
|
||||
"doublesLevel": 82,
|
||||
"doublesMoves": ["firstimpression", "ironhead", "protect", "stompingtantrum", "superpower", "xscissor"]
|
||||
|
|
@ -1636,7 +1636,7 @@
|
|||
"noDynamaxMoves": ["closecombat", "leafblade", "stoneedge", "swordsdance"]
|
||||
},
|
||||
"tornadus": {
|
||||
"level": 81,
|
||||
"level": 80,
|
||||
"moves": ["defog", "grassknot", "heatwave", "hurricane", "nastyplot"],
|
||||
"doublesLevel": 80,
|
||||
"doublesMoves": ["heatwave", "hurricane", "nastyplot", "superpower", "tailwind", "taunt"]
|
||||
|
|
@ -1725,7 +1725,7 @@
|
|||
"doublesMoves": ["bodyslam", "highhorsepower", "knockoff", "quickattack", "swordsdance", "uturn"]
|
||||
},
|
||||
"talonflame": {
|
||||
"level": 81,
|
||||
"level": 80,
|
||||
"moves": ["bravebird", "defog", "flareblitz", "roost", "swordsdance", "uturn"],
|
||||
"doublesLevel": 86,
|
||||
"doublesMoves": ["bravebird", "defog", "incinerate", "overheat", "tailwind", "uturn", "willowisp"]
|
||||
|
|
@ -1771,7 +1771,7 @@
|
|||
"doublesMoves": ["healpulse", "moonblast", "protect", "trickroom", "wish"]
|
||||
},
|
||||
"slurpuff": {
|
||||
"level": 79,
|
||||
"level": 80,
|
||||
"moves": ["bellydrum", "drainpunch", "facade", "playrough"],
|
||||
"doublesLevel": 86,
|
||||
"doublesMoves": ["faketears", "flamethrower", "helpinghand", "playrough", "stickyweb"]
|
||||
|
|
@ -1903,7 +1903,7 @@
|
|||
"doublesMoves": ["dazzlinggleam", "focusblast", "geomancy", "moonblast", "thunderbolt"]
|
||||
},
|
||||
"yveltal": {
|
||||
"level": 68,
|
||||
"level": 67,
|
||||
"moves": ["defog", "heatwave", "knockoff", "oblivionwing", "roost", "suckerpunch", "taunt"],
|
||||
"doublesLevel": 71,
|
||||
"doublesMoves": ["darkpulse", "heatwave", "knockoff", "oblivionwing", "roost", "suckerpunch", "tailwind"]
|
||||
|
|
@ -2214,13 +2214,13 @@
|
|||
"doublesMoves": ["anchorshot", "knockoff", "powerwhip", "protect"]
|
||||
},
|
||||
"kommoo": {
|
||||
"level": 81,
|
||||
"level": 80,
|
||||
"moves": ["clangingscales", "clangoroussoul", "closecombat", "poisonjab", "stealthrock"],
|
||||
"doublesLevel": 80,
|
||||
"doublesMoves": ["bodypress", "dracometeor", "irondefense", "protect"]
|
||||
},
|
||||
"tapukoko": {
|
||||
"level": 76,
|
||||
"level": 77,
|
||||
"moves": ["calmmind", "dazzlinggleam", "grassknot", "substitute", "thunderbolt", "voltswitch"],
|
||||
"doublesLevel": 80,
|
||||
"doublesMoves": ["bravebird", "dazzlinggleam", "grassknot", "taunt", "thunderbolt", "uturn"]
|
||||
|
|
@ -2269,13 +2269,13 @@
|
|||
"noDynamaxMoves": ["bulkup", "closecombat", "darkestlariat", "leechlife", "poisonjab", "roost", "stoneedge"]
|
||||
},
|
||||
"pheromosa": {
|
||||
"level": 74,
|
||||
"level": 73,
|
||||
"moves": ["closecombat", "icebeam", "poisonjab", "throatchop", "uturn"],
|
||||
"doublesLevel": 78,
|
||||
"doublesMoves": ["closecombat", "icebeam", "poisonjab", "protect", "throatchop", "uturn"]
|
||||
},
|
||||
"xurkitree": {
|
||||
"level": 76,
|
||||
"level": 77,
|
||||
"moves": ["dazzlinggleam", "energyball", "hypnosis", "thunderbolt", "voltswitch"],
|
||||
"doublesLevel": 79,
|
||||
"doublesMoves": ["dazzlinggleam", "energyball", "thunderbolt", "voltswitch"]
|
||||
|
|
@ -2288,7 +2288,7 @@
|
|||
"noDynamaxMoves": ["airslash", "earthquake", "fireblast", "heavyslam", "leechseed", "protect"]
|
||||
},
|
||||
"kartana": {
|
||||
"level": 72,
|
||||
"level": 73,
|
||||
"moves": ["knockoff", "leafblade", "sacredsword", "smartstrike", "swordsdance"],
|
||||
"doublesLevel": 78,
|
||||
"doublesMoves": ["knockoff", "leafblade", "sacredsword", "smartstrike", "swordsdance"]
|
||||
|
|
@ -2456,17 +2456,17 @@
|
|||
"doublesMoves": ["acrobatics", "dragondance", "dragonrush", "gravapple", "protect"]
|
||||
},
|
||||
"appletun": {
|
||||
"level": 91,
|
||||
"level": 92,
|
||||
"moves": ["appleacid", "dragonpulse", "leechseed", "recover"],
|
||||
"doublesLevel": 90,
|
||||
"doublesMoves": ["appleacid", "dragonpulse", "leechseed", "protect", "recover"]
|
||||
},
|
||||
"appletungmax": {
|
||||
"level": 91,
|
||||
"level": 92,
|
||||
"moves": ["appleacid", "dracometeor", "leechseed", "recover"]
|
||||
},
|
||||
"sandaconda": {
|
||||
"level": 83,
|
||||
"level": 84,
|
||||
"moves": ["coil", "earthquake", "glare", "rest", "stealthrock", "stoneedge"]
|
||||
},
|
||||
"sandacondagmax": {
|
||||
|
|
@ -2565,7 +2565,7 @@
|
|||
"noDynamaxMoves": ["bravebird", "closecombat", "firstimpression", "knockoff", "poisonjab", "swordsdance"]
|
||||
},
|
||||
"mrrime": {
|
||||
"level": 87,
|
||||
"level": 88,
|
||||
"moves": ["focusblast", "freezedry", "psychic", "rapidspin", "slackoff", "trick"],
|
||||
"doublesLevel": 88,
|
||||
"doublesMoves": ["fakeout", "focusblast", "freezedry", "icywind", "protect", "psychic", "rapidspin"]
|
||||
|
|
@ -2613,7 +2613,7 @@
|
|||
"doublesMoves": ["bellydrum", "iciclecrash", "liquidation", "protect"]
|
||||
},
|
||||
"indeedee": {
|
||||
"level": 85,
|
||||
"level": 84,
|
||||
"moves": ["calmmind", "expandingforce", "hypervoice", "mysticalfire", "trick"],
|
||||
"doublesLevel": 80,
|
||||
"doublesMoves": ["encore", "expandingforce", "hypervoice", "mysticalfire", "protect", "trick"]
|
||||
|
|
@ -2625,7 +2625,7 @@
|
|||
"doublesMoves": ["expandingforce", "followme", "healpulse", "helpinghand", "protect"]
|
||||
},
|
||||
"morpeko": {
|
||||
"level": 86,
|
||||
"level": 85,
|
||||
"moves": ["aurawheel", "foulplay", "partingshot", "protect", "psychicfangs", "rapidspin"],
|
||||
"doublesLevel": 88,
|
||||
"doublesMoves": ["aurawheel", "fakeout", "partingshot", "protect", "rapidspin", "superfang"]
|
||||
|
|
@ -2690,7 +2690,7 @@
|
|||
"doublesMoves": ["behemothblade", "closecombat", "playrough", "protect", "psychicfangs", "swordsdance"]
|
||||
},
|
||||
"zamazenta": {
|
||||
"level": 70,
|
||||
"level": 69,
|
||||
"moves": ["closecombat", "crunch", "psychicfangs", "wildcharge"],
|
||||
"doublesLevel": 74,
|
||||
"doublesMoves": ["closecombat", "crunch", "playrough", "protect", "psychicfangs"]
|
||||
|
|
|
|||
|
|
@ -1526,7 +1526,7 @@ export class RandomGen8Teams {
|
|||
case 'Cloud Nine':
|
||||
return (!isNoDynamax || species.id !== 'golduck');
|
||||
case 'Competitive':
|
||||
return (counter.get('Special') < 2 || (moves.has('rest') && moves.has('sleeptalk')));
|
||||
return (!counter.get('Special') || moves.has('rest') && moves.has('sleeptalk'));
|
||||
case 'Compound Eyes': case 'No Guard':
|
||||
return !counter.get('inaccurate');
|
||||
case 'Cursed Body':
|
||||
|
|
@ -2156,10 +2156,11 @@ export class RandomGen8Teams {
|
|||
if (species.name.endsWith('-Gmax')) return species.name.slice(0, -5);
|
||||
|
||||
// Consolidate mostly-cosmetic formes, at least for the purposes of Random Battles
|
||||
if (['Magearna', 'Polteageist', 'Zarude'].includes(species.baseSpecies)) {
|
||||
if (['Polteageist', 'Zarude'].includes(species.baseSpecies)) {
|
||||
return this.sample([species.name].concat(species.otherFormes!));
|
||||
}
|
||||
if (species.baseSpecies === 'Basculin') return 'Basculin' + this.sample(['', '-Blue-Striped']);
|
||||
if (species.baseSpecies === 'Magearna') return 'Magearna' + this.sample(['', '-Original']);
|
||||
if (species.baseSpecies === 'Keldeo' && this.gen <= 7) return 'Keldeo' + this.sample(['', '-Resolute']);
|
||||
if (species.baseSpecies === 'Pikachu' && this.dex.currentMod === 'gen8') {
|
||||
return 'Pikachu' + this.sample(
|
||||
|
|
@ -2176,6 +2177,8 @@ export class RandomGen8Teams {
|
|||
isDoubles = false,
|
||||
isNoDynamax = false
|
||||
): RandomTeamsTypes.RandomSet {
|
||||
const ruleTable = this.dex.formats.getRuleTable(this.format);
|
||||
|
||||
species = this.dex.species.get(species);
|
||||
const forme = this.getForme(species);
|
||||
const gmax = species.name.endsWith('-Gmax');
|
||||
|
|
@ -2413,7 +2416,10 @@ export class RandomGen8Teams {
|
|||
if (move.damageCallback || move.damage) return true;
|
||||
return move.category !== 'Physical' || move.id === 'bodypress';
|
||||
});
|
||||
if (noAttackStatMoves && !moves.has('transform') && (!moves.has('shellsidearm') || !counter.get('Status'))) {
|
||||
if (
|
||||
noAttackStatMoves && !moves.has('transform') && (!moves.has('shellsidearm') || !counter.get('Status')) &&
|
||||
!ruleTable.has('forceofthefallenmod')
|
||||
) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = 0;
|
||||
}
|
||||
|
|
|
|||
2223
data/random-battles/gen9/1v1-factory-sets.json
Normal file
2223
data/random-battles/gen9/1v1-factory-sets.json
Normal file
File diff suppressed because it is too large
Load Diff
|
|
@ -408,7 +408,7 @@
|
|||
]
|
||||
},
|
||||
"slowbrogalar": {
|
||||
"level": 86,
|
||||
"level": 87,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Doubles Wallbreaker",
|
||||
|
|
@ -586,7 +586,7 @@
|
|||
]
|
||||
},
|
||||
"weezing": {
|
||||
"level": 90,
|
||||
"level": 91,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Doubles Support",
|
||||
|
|
@ -1041,7 +1041,7 @@
|
|||
"role": "Offensive Protect",
|
||||
"movepool": ["Hurricane", "Hyper Voice", "Protect", "Tailwind"],
|
||||
"abilities": ["Tinted Lens"],
|
||||
"teraTypes": ["Flying"]
|
||||
"teraTypes": ["Normal", "Steel"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -1096,7 +1096,7 @@
|
|||
]
|
||||
},
|
||||
"azumarill": {
|
||||
"level": 82,
|
||||
"level": 83,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Doubles Wallbreaker",
|
||||
|
|
@ -1414,7 +1414,7 @@
|
|||
]
|
||||
},
|
||||
"donphan": {
|
||||
"level": 86,
|
||||
"level": 87,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Doubles Support",
|
||||
|
|
@ -1480,7 +1480,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Doubles Support",
|
||||
"movepool": ["Heal Pulse", "Helping Hand", "Hyper Voice", "Protect", "Seismic Toss", "Soft-Boiled", "Thunder Wave"],
|
||||
"movepool": ["Helping Hand", "Hyper Voice", "Life Dew", "Soft-Boiled", "Thunder Wave"],
|
||||
"abilities": ["Healer"],
|
||||
"teraTypes": ["Fairy", "Ghost", "Poison"]
|
||||
}
|
||||
|
|
@ -1538,13 +1538,13 @@
|
|||
"role": "Doubles Bulky Setup",
|
||||
"movepool": ["Dragon Dance", "High Horsepower", "Knock Off", "Protect", "Rock Slide", "Stone Edge"],
|
||||
"abilities": ["Sand Stream"],
|
||||
"teraTypes": ["Ghost", "Rock", "Steel"]
|
||||
"teraTypes": ["Ghost", "Rock"]
|
||||
},
|
||||
{
|
||||
"role": "Doubles Bulky Attacker",
|
||||
"movepool": ["Fire Blast", "High Horsepower", "Icy Wind", "Knock Off", "Rock Slide", "Stone Edge"],
|
||||
"abilities": ["Sand Stream"],
|
||||
"teraTypes": ["Flying", "Ghost", "Steel"]
|
||||
"teraTypes": ["Flying", "Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -1682,7 +1682,7 @@
|
|||
},
|
||||
{
|
||||
"role": "Doubles Wallbreaker",
|
||||
"movepool": ["Dazzling Gleam", "Moonblast", "Mystical Fire", "Psychic", "Trick"],
|
||||
"movepool": ["Dazzling Gleam", "Moonblast", "Mystical Fire", "Psychic"],
|
||||
"abilities": ["Trace"],
|
||||
"teraTypes": ["Fairy", "Fire", "Steel"]
|
||||
}
|
||||
|
|
@ -1847,7 +1847,7 @@
|
|||
"role": "Doubles Support",
|
||||
"movepool": ["Encore", "Struggle Bug", "Tailwind", "Thunder Wave"],
|
||||
"abilities": ["Prankster"],
|
||||
"teraTypes": ["Steel", "Water"]
|
||||
"teraTypes": ["Steel", "Water"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -2023,14 +2023,14 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Doubles Support",
|
||||
"movepool": ["Energy Ball", "Helping Hand", "Hurricane", "Protect", "Tailwind", "Wide Guard"],
|
||||
"movepool": ["Energy Ball", "Hurricane", "Protect", "Tailwind", "Wide Guard"],
|
||||
"abilities": ["Harvest"],
|
||||
"teraTypes": ["Steel"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"chimecho": {
|
||||
"level": 95,
|
||||
"level": 94,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Doubles Support",
|
||||
|
|
@ -2091,7 +2091,7 @@
|
|||
]
|
||||
},
|
||||
"regirock": {
|
||||
"level": 83,
|
||||
"level": 82,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Doubles Bulky Setup",
|
||||
|
|
@ -2575,7 +2575,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Doubles Support",
|
||||
"movepool": ["Encore", "Helping Hand", "Hydro Pump", "Icy Wind", "Tailwind", "Tickle"],
|
||||
"movepool": ["Encore", "Helping Hand", "Hydro Pump", "Icy Wind", "Tailwind"],
|
||||
"abilities": ["Storm Drain"],
|
||||
"teraTypes": ["Fire", "Ground"]
|
||||
}
|
||||
|
|
@ -2901,7 +2901,7 @@
|
|||
]
|
||||
},
|
||||
"uxie": {
|
||||
"level": 86,
|
||||
"level": 85,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Doubles Support",
|
||||
|
|
@ -3086,7 +3086,7 @@
|
|||
"role": "Bulky Protect",
|
||||
"movepool": ["Ice Beam", "Protect", "Scald", "Tail Glow"],
|
||||
"abilities": ["Hydration"],
|
||||
"teraTypes": ["Grass", "Steel", "Water"]
|
||||
"teraTypes": ["Grass", "Steel"]
|
||||
},
|
||||
{
|
||||
"role": "Doubles Bulky Setup",
|
||||
|
|
@ -3486,13 +3486,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Doubles Bulky Attacker",
|
||||
"movepool": ["Encore", "Moonblast", "Tailwind", "Taunt"],
|
||||
"abilities": ["Prankster"],
|
||||
"teraTypes": ["Fire", "Ghost", "Steel"]
|
||||
},
|
||||
{
|
||||
"role": "Doubles Support",
|
||||
"movepool": ["Encore", "Helping Hand", "Moonblast", "Tailwind"],
|
||||
"movepool": ["Encore", "Helping Hand", "Moonblast", "Tailwind", "Taunt"],
|
||||
"abilities": ["Prankster"],
|
||||
"teraTypes": ["Fire", "Ghost", "Steel"]
|
||||
}
|
||||
|
|
@ -4298,7 +4292,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Choice Item user",
|
||||
"movepool": ["Aura Sphere", "Dark Pulse", "Dragon Pulse", "Muddy Water", "U-turn"],
|
||||
"movepool": ["Aura Sphere", "Dark Pulse", "Dragon Pulse", "Muddy Water"],
|
||||
"abilities": ["Mega Launcher"],
|
||||
"teraTypes": ["Dark", "Dragon", "Fighting"]
|
||||
},
|
||||
|
|
@ -4372,7 +4366,7 @@
|
|||
]
|
||||
},
|
||||
"goodrahisui": {
|
||||
"level": 82,
|
||||
"level": 81,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Doubles Bulky Attacker",
|
||||
|
|
@ -4411,7 +4405,7 @@
|
|||
]
|
||||
},
|
||||
"avalugg": {
|
||||
"level": 91,
|
||||
"level": 92,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Protect",
|
||||
|
|
@ -4615,7 +4609,7 @@
|
|||
"teraTypes": ["Ground"]
|
||||
},
|
||||
{
|
||||
"role": "Doubles Setup Sweeper",
|
||||
"role": "Doubles Bulky Setup",
|
||||
"movepool": ["Air Slash", "Protect", "Quiver Dance", "Revelation Dance"],
|
||||
"abilities": ["Dancer"],
|
||||
"teraTypes": ["Ground"]
|
||||
|
|
@ -4632,7 +4626,7 @@
|
|||
"teraTypes": ["Ground"]
|
||||
},
|
||||
{
|
||||
"role": "Doubles Setup Sweeper",
|
||||
"role": "Doubles Bulky Setup",
|
||||
"movepool": ["Air Slash", "Protect", "Quiver Dance", "Revelation Dance"],
|
||||
"abilities": ["Dancer"],
|
||||
"teraTypes": ["Ground"]
|
||||
|
|
@ -4649,7 +4643,7 @@
|
|||
"teraTypes": ["Fighting", "Ground"]
|
||||
},
|
||||
{
|
||||
"role": "Doubles Setup Sweeper",
|
||||
"role": "Doubles Bulky Setup",
|
||||
"movepool": ["Air Slash", "Protect", "Quiver Dance", "Revelation Dance"],
|
||||
"abilities": ["Dancer"],
|
||||
"teraTypes": ["Fighting", "Ground"]
|
||||
|
|
@ -4666,7 +4660,7 @@
|
|||
"teraTypes": ["Fighting", "Ground"]
|
||||
},
|
||||
{
|
||||
"role": "Doubles Setup Sweeper",
|
||||
"role": "Doubles Bulky Setup",
|
||||
"movepool": ["Air Slash", "Protect", "Quiver Dance", "Revelation Dance"],
|
||||
"abilities": ["Dancer"],
|
||||
"teraTypes": ["Fighting", "Ground"]
|
||||
|
|
@ -5183,8 +5177,8 @@
|
|||
"teraTypes": ["Dragon", "Steel"]
|
||||
},
|
||||
{
|
||||
"role": "Doubles Support",
|
||||
"movepool": ["Glare", "High Horsepower", "Rest", "Stealth Rock", "Stone Edge"],
|
||||
"role": "Doubles Bulky Attacker",
|
||||
"movepool": ["Glare", "High Horsepower", "Rest", "Stone Edge"],
|
||||
"abilities": ["Shed Skin"],
|
||||
"teraTypes": ["Dragon", "Steel"]
|
||||
}
|
||||
|
|
@ -5206,7 +5200,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Doubles Wallbreaker",
|
||||
"movepool": ["Close Combat", "Poison Jab", "Protect", "Psychic Fangs", "Waterfall"],
|
||||
"movepool": ["Close Combat", "Flip Turn", "Poison Jab", "Protect", "Waterfall"],
|
||||
"abilities": ["Propeller Tail"],
|
||||
"teraTypes": ["Fighting"]
|
||||
}
|
||||
|
|
@ -5316,6 +5310,12 @@
|
|||
"movepool": ["Alluring Voice", "Dazzling Gleam", "Decorate", "Encore", "Protect"],
|
||||
"abilities": ["Aroma Veil"],
|
||||
"teraTypes": ["Steel"]
|
||||
},
|
||||
{
|
||||
"role": "Doubles Bulky Attacker",
|
||||
"movepool": ["Alluring Voice", "Dazzling Gleam", "Decorate", "Helping Hand", "Protect"],
|
||||
"abilities": ["Aroma Veil"],
|
||||
"teraTypes": ["Steel"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -5335,9 +5335,9 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Doubles Support",
|
||||
"movepool": ["Electroweb", "Recover", "Thunderbolt", "Toxic Spikes"],
|
||||
"movepool": ["Electroweb", "Recover", "Scald", "Thunderbolt"],
|
||||
"abilities": ["Electric Surge"],
|
||||
"teraTypes": ["Grass"]
|
||||
"teraTypes": ["Grass", "Water"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -5410,7 +5410,7 @@
|
|||
]
|
||||
},
|
||||
"indeedeef": {
|
||||
"level": 90,
|
||||
"level": 91,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Doubles Support",
|
||||
|
|
@ -5515,7 +5515,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Doubles Wallbreaker",
|
||||
"movepool": ["Close Combat", "Coaching", "Crunch", "Howl", "Iron Head", "Psychic Fangs", "Stone Edge"],
|
||||
"movepool": ["Close Combat", "Coaching", "Crunch", "Howl", "Stone Edge"],
|
||||
"abilities": ["Dauntless Shield"],
|
||||
"teraTypes": ["Dark", "Fighting", "Steel"]
|
||||
},
|
||||
|
|
@ -5673,7 +5673,7 @@
|
|||
]
|
||||
},
|
||||
"calyrexshadow": {
|
||||
"level": 62,
|
||||
"level": 63,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Offensive Protect",
|
||||
|
|
@ -5712,7 +5712,7 @@
|
|||
]
|
||||
},
|
||||
"ursaluna": {
|
||||
"level": 78,
|
||||
"level": 77,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Doubles Wallbreaker",
|
||||
|
|
@ -6121,7 +6121,7 @@
|
|||
"role": "Doubles Support",
|
||||
"movepool": ["Energy Ball", "Fire Blast", "Protect", "Rage Powder", "Will-O-Wisp"],
|
||||
"abilities": ["Chlorophyll"],
|
||||
"teraTypes": ["Fire", "Grass", "Steel"]
|
||||
"teraTypes": ["Fire", "Steel"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -6360,7 +6360,13 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Doubles Wallbreaker",
|
||||
"movepool": ["Hyper Voice", "Nasty Plot", "Protect", "Psychic", "Trick Room"],
|
||||
"movepool": ["Hyper Voice", "Protect", "Psychic", "Trick Room"],
|
||||
"abilities": ["Armor Tail"],
|
||||
"teraTypes": ["Fairy"]
|
||||
},
|
||||
{
|
||||
"role": "Doubles Bulky Attacker",
|
||||
"movepool": ["Hyper Voice", "Nasty Plot", "Psychic", "Trick Room"],
|
||||
"abilities": ["Armor Tail"],
|
||||
"teraTypes": ["Fairy"]
|
||||
}
|
||||
|
|
@ -6422,9 +6428,15 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Doubles Bulky Attacker",
|
||||
"movepool": ["Close Combat", "Crunch", "Protect", "Rage Powder", "Seed Bomb", "Spore", "Sucker Punch"],
|
||||
"movepool": ["Close Combat", "Crunch", "Protect", "Seed Bomb", "Spore", "Sucker Punch"],
|
||||
"abilities": ["Protosynthesis"],
|
||||
"teraTypes": ["Dark", "Poison"]
|
||||
},
|
||||
{
|
||||
"role": "Doubles Support",
|
||||
"movepool": ["Rage Powder", "Seed Bomb", "Spore", "Sucker Punch"],
|
||||
"abilities": ["Protosynthesis"],
|
||||
"teraTypes": ["Ghost", "Poison"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -6669,7 +6681,13 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Bulky Protect",
|
||||
"movepool": ["Knock Off", "Leech Seed", "Pollen Puff", "Protect", "Ruination"],
|
||||
"movepool": ["Knock Off", "Leech Seed", "Pollen Puff", "Protect"],
|
||||
"abilities": ["Tablets of Ruin"],
|
||||
"teraTypes": ["Poison"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Protect",
|
||||
"movepool": ["Knock Off", "Leech Seed", "Protect", "Ruination"],
|
||||
"abilities": ["Tablets of Ruin"],
|
||||
"teraTypes": ["Poison"]
|
||||
}
|
||||
|
|
@ -6727,7 +6745,7 @@
|
|||
]
|
||||
},
|
||||
"walkingwake": {
|
||||
"level": 77,
|
||||
"level": 78,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Doubles Wallbreaker",
|
||||
|
|
|
|||
|
|
@ -757,7 +757,7 @@
|
|||
"item": ["Choice Specs"],
|
||||
"ability": ["Infiltrator"],
|
||||
"evs": {"spa": 252, "spd": 4, "spe": 252},
|
||||
"nature": ["Timid", "Modest"],
|
||||
"nature": ["Timid"],
|
||||
"teraType": ["Dragon", "Ghost"],
|
||||
"moves": [["Draco Meteor"], ["Shadow Ball"], ["Flamethrower"], ["U-turn"]]
|
||||
}, {
|
||||
|
|
|
|||
|
|
@ -60,13 +60,13 @@
|
|||
"teraTypes": ["Dark", "Ground"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Coil", "Earthquake", "Gunk Shot", "Trailblaze"],
|
||||
"abilities": ["Intimidate"],
|
||||
"teraTypes": ["Grass", "Ground"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Bulky Setup",
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Coil", "Earthquake", "Gunk Shot", "Sucker Punch"],
|
||||
"abilities": ["Intimidate"],
|
||||
"teraTypes": ["Dark", "Ground"]
|
||||
|
|
@ -296,7 +296,7 @@
|
|||
"level": 90,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Bulky Setup",
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Encore", "Grass Knot", "Hydro Pump", "Ice Beam", "Nasty Plot"],
|
||||
"abilities": ["Cloud Nine", "Swift Swim"],
|
||||
"teraTypes": ["Water"]
|
||||
|
|
@ -694,7 +694,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Close Combat", "Drain Punch", "Ice Punch", "Knock Off", "Mach Punch", "Rapid Spin", "Swords Dance"],
|
||||
"movepool": ["Drain Punch", "Ice Punch", "Knock Off", "Mach Punch", "Rapid Spin", "Swords Dance"],
|
||||
"abilities": ["Inner Focus", "Iron Fist"],
|
||||
"teraTypes": ["Dark", "Fighting"]
|
||||
},
|
||||
|
|
@ -1417,6 +1417,12 @@
|
|||
"movepool": ["Body Press", "Iron Head", "Rapid Spin", "Spikes", "Stealth Rock"],
|
||||
"abilities": ["Sturdy"],
|
||||
"teraTypes": ["Fighting", "Water"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Iron Head", "Rapid Spin", "Spikes", "Stealth Rock", "Thunder Wave"],
|
||||
"abilities": ["Sturdy"],
|
||||
"teraTypes": ["Water"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -2259,7 +2265,7 @@
|
|||
"teraTypes": ["Dark", "Fire", "Grass", "Ground", "Poison"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Earthquake", "Gunk Shot", "Swords Dance", "Trailblaze"],
|
||||
"abilities": ["Infiltrator"],
|
||||
"teraTypes": ["Grass", "Ground"]
|
||||
|
|
@ -3044,7 +3050,7 @@
|
|||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Body Press", "Flash Cannon", "Thunderbolt", "Volt Switch"],
|
||||
"abilities": ["Magnet Pull"],
|
||||
"abilities": ["Analytic", "Magnet Pull"],
|
||||
"teraTypes": ["Electric", "Fighting", "Flying", "Water"]
|
||||
},
|
||||
{
|
||||
|
|
@ -3179,7 +3185,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["Earthquake", "Ice Shard", "Icicle Crash", "Knock Off", "Stealth Rock"],
|
||||
"movepool": ["Earthquake", "Ice Shard", "Icicle Crash", "Knock Off", "Stealth Rock", "Trailblaze"],
|
||||
"abilities": ["Thick Fat"],
|
||||
"teraTypes": ["Ground", "Ice"]
|
||||
}
|
||||
|
|
@ -3220,7 +3226,7 @@
|
|||
]
|
||||
},
|
||||
"probopass": {
|
||||
"level": 92,
|
||||
"level": 91,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
|
|
@ -3241,7 +3247,7 @@
|
|||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Earthquake", "Pain Split", "Poltergeist", "Shadow Sneak", "Will-O-Wisp"],
|
||||
"movepool": ["Earthquake", "Pain Split", "Poltergeist", "Will-O-Wisp"],
|
||||
"abilities": ["Frisk"],
|
||||
"teraTypes": ["Dark", "Fairy"]
|
||||
},
|
||||
|
|
@ -3748,7 +3754,7 @@
|
|||
]
|
||||
},
|
||||
"arceusgrass": {
|
||||
"level": 72,
|
||||
"level": 73,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
|
|
@ -3788,7 +3794,7 @@
|
|||
]
|
||||
},
|
||||
"arceusice": {
|
||||
"level": 72,
|
||||
"level": 73,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
|
|
@ -3904,7 +3910,7 @@
|
|||
"teraTypes": ["Fire"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Bulk Up", "Drain Punch", "Flare Blitz", "Trailblaze"],
|
||||
"abilities": ["Reckless"],
|
||||
"teraTypes": ["Fighting", "Grass"]
|
||||
|
|
@ -4011,15 +4017,9 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Encore", "Giga Drain", "Moonblast", "Stun Spore", "U-turn"],
|
||||
"movepool": ["Encore", "Giga Drain", "Leech Seed", "Moonblast", "Stun Spore", "Substitute", "U-turn"],
|
||||
"abilities": ["Prankster"],
|
||||
"teraTypes": ["Poison", "Steel"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Encore", "Leech Seed", "Moonblast", "Substitute"],
|
||||
"abilities": ["Prankster"],
|
||||
"teraTypes": ["Steel"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -4095,9 +4095,15 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Bulk Up", "Earthquake", "Gunk Shot", "Knock Off", "Stealth Rock", "Stone Edge"],
|
||||
"movepool": ["Earthquake", "Gunk Shot", "Knock Off", "Stealth Rock", "Stone Edge"],
|
||||
"abilities": ["Intimidate"],
|
||||
"teraTypes": ["Ground", "Poison"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Bulk Up", "Earthquake", "Gunk Shot", "Knock Off"],
|
||||
"abilities": ["Intimidate"],
|
||||
"teraTypes": ["Poison"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -4110,12 +4116,6 @@
|
|||
"abilities": ["Shed Skin"],
|
||||
"teraTypes": ["Poison"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Close Combat", "Dragon Dance", "Knock Off", "Poison Jab"],
|
||||
"abilities": ["Intimidate"],
|
||||
"teraTypes": ["Poison"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Dragon Dance", "Drain Punch", "Knock Off", "Poison Jab"],
|
||||
|
|
@ -4202,7 +4202,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Brave Bird", "Defog", "Hydro Pump", "Knock Off", "Roost"],
|
||||
"movepool": ["Brave Bird", "Defog", "Flip Turn", "Hydro Pump", "Knock Off", "Roost"],
|
||||
"abilities": ["Hydration"],
|
||||
"teraTypes": ["Ground"]
|
||||
}
|
||||
|
|
@ -4264,7 +4264,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Bug Buzz", "Giga Drain", "Sticky Web", "Thunder", "Volt Switch"],
|
||||
"movepool": ["Bug Buzz", "Energy Ball", "Sticky Web", "Thunder", "Volt Switch"],
|
||||
"abilities": ["Compound Eyes"],
|
||||
"teraTypes": ["Electric"]
|
||||
}
|
||||
|
|
@ -4490,7 +4490,7 @@
|
|||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Body Press", "Iron Defense", "Iron Head", "Stealth Rock", "Stone Edge", "Thunder Wave", "Volt Switch"],
|
||||
"movepool": ["Body Press", "Iron Defense", "Iron Head", "Stealth Rock", "Thunder Wave", "Volt Switch"],
|
||||
"abilities": ["Justified"],
|
||||
"teraTypes": ["Ghost", "Water"]
|
||||
}
|
||||
|
|
@ -5325,7 +5325,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Close Combat", "Knock Off", "Stealth Rock", "Stone Edge", "Sucker Punch", "Swords Dance"],
|
||||
"movepool": ["Close Combat", "Knock Off", "Play Rough", "Stealth Rock", "Stone Edge", "Sucker Punch", "Swords Dance"],
|
||||
"abilities": ["No Guard"],
|
||||
"teraTypes": ["Fighting"]
|
||||
}
|
||||
|
|
@ -5502,12 +5502,6 @@
|
|||
"komala": {
|
||||
"level": 89,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Double-Edge", "Earthquake", "Knock Off", "Superpower", "U-turn", "Wood Hammer"],
|
||||
"abilities": ["Comatose"],
|
||||
"teraTypes": ["Fighting", "Grass", "Ground"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Body Slam", "Earthquake", "Knock Off", "Rapid Spin", "U-turn"],
|
||||
|
|
@ -5604,6 +5598,12 @@
|
|||
"abilities": ["Prism Armor"],
|
||||
"teraTypes": ["Dark", "Ground", "Steel"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Dragon Dance", "Earthquake", "Knock Off", "Photon Geyser"],
|
||||
"abilities": ["Prism Armor"],
|
||||
"teraTypes": ["Dark", "Ground", "Steel"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Calm Mind", "Earth Power", "Heat Wave", "Moonlight", "Photon Geyser"],
|
||||
|
|
@ -5622,7 +5622,7 @@
|
|||
"teraTypes": ["Ground", "Steel", "Water"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Dragon Dance", "Earthquake", "Photon Geyser", "Sunsteel Strike"],
|
||||
"abilities": ["Prism Armor"],
|
||||
"teraTypes": ["Ground", "Steel", "Water"]
|
||||
|
|
@ -5659,7 +5659,7 @@
|
|||
"role": "Bulky Setup",
|
||||
"movepool": ["Calm Mind", "Flash Cannon", "Fleur Cannon", "Shift Gear"],
|
||||
"abilities": ["Soul-Heart"],
|
||||
"teraTypes": ["Fairy", "Flying", "Steel", "Water"]
|
||||
"teraTypes": ["Fairy", "Flying", "Water"]
|
||||
},
|
||||
{
|
||||
"role": "Tera Blast user",
|
||||
|
|
@ -6449,16 +6449,22 @@
|
|||
"level": 79,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Aqua Step", "Close Combat", "Knock Off", "Rapid Spin", "Roost", "Triple Axel", "U-turn"],
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["Aqua Step", "Close Combat", "Knock Off", "Triple Axel", "U-turn"],
|
||||
"abilities": ["Moxie"],
|
||||
"teraTypes": ["Fighting", "Water"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Aqua Step", "Close Combat", "Encore", "Knock Off", "Roost", "Swords Dance", "Triple Axel"],
|
||||
"movepool": ["Aqua Step", "Close Combat", "Encore", "Knock Off", "Swords Dance", "Triple Axel"],
|
||||
"abilities": ["Moxie"],
|
||||
"teraTypes": ["Fighting", "Water"]
|
||||
"teraTypes": ["Fighting", "Steel", "Water"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Aqua Step", "Close Combat", "Rapid Spin", "Roost", "Swords Dance"],
|
||||
"abilities": ["Moxie"],
|
||||
"teraTypes": ["Steel"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -6831,7 +6837,7 @@
|
|||
"teraTypes": ["Water"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Gigaton Hammer", "Knock Off", "Play Rough", "Protect", "Swords Dance"],
|
||||
"abilities": ["Mold Breaker"],
|
||||
"teraTypes": ["Steel"]
|
||||
|
|
@ -7280,7 +7286,7 @@
|
|||
]
|
||||
},
|
||||
"ironjugulis": {
|
||||
"level": 78,
|
||||
"level": 77,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
|
|
@ -7314,7 +7320,7 @@
|
|||
]
|
||||
},
|
||||
"ironbundle": {
|
||||
"level": 77,
|
||||
"level": 78,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ interface BattleFactorySet {
|
|||
evs?: Partial<StatsTable>;
|
||||
ivs?: Partial<StatsTable>;
|
||||
shiny?: boolean;
|
||||
level?: number;
|
||||
}
|
||||
interface BSSFactorySet {
|
||||
species: string;
|
||||
|
|
@ -815,6 +816,12 @@ export class RandomTeams {
|
|||
}
|
||||
}
|
||||
|
||||
// Enforce Encore on Whimsicott
|
||||
if (movePool.includes('encore') && species.id === 'whimsicott') {
|
||||
counter = this.addMove('encore', moves, types, abilities, teamDetails, species, isLead, isDoubles,
|
||||
movePool, teraType, role);
|
||||
}
|
||||
|
||||
// Enforce moves in doubles
|
||||
if (isDoubles) {
|
||||
const doublesEnforcedMoves = ['mortalspin', 'spore'];
|
||||
|
|
@ -1175,7 +1182,7 @@ export class RandomTeams {
|
|||
if (moves.has('clangoroussoul') || (species.id === 'toxtricity' && moves.has('shiftgear'))) return 'Throat Spray';
|
||||
if (
|
||||
(species.baseSpecies === 'Magearna' && role === 'Tera Blast user') ||
|
||||
species.id === 'necrozmaduskmane' || (species.id === 'calyrexice' && isDoubles)
|
||||
((species.id === 'calyrexice' || species.id === 'necrozmaduskmane') && isDoubles)
|
||||
) return 'Weakness Policy';
|
||||
if (['dragonenergy', 'lastrespects', 'waterspout'].some(m => moves.has(m))) return 'Choice Scarf';
|
||||
if (
|
||||
|
|
@ -1329,17 +1336,17 @@ export class RandomTeams {
|
|||
teraType: string,
|
||||
role: RandomTeamsTypes.Role,
|
||||
): string {
|
||||
const lifeOrbReqs = ['flamecharge', 'nuzzle', 'rapidspin', 'trailblaze'].every(m => !moves.has(m));
|
||||
const lifeOrbReqs = ['flamecharge', 'nuzzle', 'rapidspin'].every(m => !moves.has(m));
|
||||
|
||||
if (
|
||||
species.id !== 'jirachi' && (counter.get('Physical') >= moves.size) &&
|
||||
['dragontail', 'fakeout', 'firstimpression', 'flamecharge', 'rapidspin'].every(m => !moves.has(m))
|
||||
['dragontail', 'fakeout', 'firstimpression', 'flamecharge', 'rapidspin', 'trailblaze'].every(m => !moves.has(m))
|
||||
) {
|
||||
const scarfReqs = (
|
||||
role !== 'Wallbreaker' &&
|
||||
(species.baseStats.atk >= 100 || ability === 'Huge Power' || ability === 'Pure Power') &&
|
||||
species.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&
|
||||
ability !== 'Speed Boost' && !counter.get('priority') && !moves.has('aquastep')
|
||||
ability !== 'Speed Boost' && !counter.get('priority')
|
||||
);
|
||||
return (scarfReqs && this.randomChance(1, 2)) ? 'Choice Scarf' : 'Choice Band';
|
||||
}
|
||||
|
|
@ -1355,7 +1362,7 @@ export class RandomTeams {
|
|||
);
|
||||
return (scarfReqs && this.randomChance(1, 2)) ? 'Choice Scarf' : 'Choice Specs';
|
||||
}
|
||||
if (counter.get('speedsetup') && role === 'Bulky Setup') return 'Weakness Policy';
|
||||
if (counter.get('speedsetup') && !counter.get('physicalsetup') && role === 'Bulky Setup') return 'Weakness Policy';
|
||||
if (
|
||||
!counter.get('Status') &&
|
||||
!['Fast Attacker', 'Wallbreaker', 'Tera Blast user'].includes(role)
|
||||
|
|
@ -1378,6 +1385,7 @@ export class RandomTeams {
|
|||
) return 'Heavy-Duty Boots';
|
||||
|
||||
// Low Priority
|
||||
if (moves.has('dragondance') && role === 'Bulky Setup') return 'Weakness Policy';
|
||||
if (
|
||||
ability === 'Rough Skin' || (
|
||||
ability === 'Regenerator' && (role === 'Bulky Support' || role === 'Bulky Attacker') &&
|
||||
|
|
@ -1445,10 +1453,11 @@ export class RandomTeams {
|
|||
if (species.cosmeticFormes) return this.sample([species.name].concat(species.cosmeticFormes));
|
||||
|
||||
// Consolidate mostly-cosmetic formes, at least for the purposes of Random Battles
|
||||
if (['Dudunsparce', 'Magearna', 'Maushold', 'Polteageist', 'Sinistcha', 'Zarude'].includes(species.baseSpecies)) {
|
||||
if (['Dudunsparce', 'Maushold', 'Polteageist', 'Sinistcha', 'Zarude'].includes(species.baseSpecies)) {
|
||||
return this.sample([species.name].concat(species.otherFormes!));
|
||||
}
|
||||
if (species.baseSpecies === 'Basculin') return 'Basculin' + this.sample(['', '-Blue-Striped']);
|
||||
if (species.baseSpecies === 'Magearna') return 'Magearna' + this.sample(['', '-Original']);
|
||||
if (species.baseSpecies === 'Pikachu') {
|
||||
return 'Pikachu' + this.sample(
|
||||
['', '-Original', '-Hoenn', '-Sinnoh', '-Unova', '-Kalos', '-Alola', '-Partner', '-World']
|
||||
|
|
@ -1564,7 +1573,10 @@ export class RandomTeams {
|
|||
) return false;
|
||||
return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay';
|
||||
});
|
||||
if (noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime') {
|
||||
if (
|
||||
noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime' &&
|
||||
!ruleTable.has('forceofthefallenmod')
|
||||
) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = 0;
|
||||
}
|
||||
|
|
@ -3000,6 +3012,260 @@ export class RandomTeams {
|
|||
};
|
||||
});
|
||||
}
|
||||
|
||||
random1v1FactorySets: { [species: string]: BattleFactorySpecies } = require('./1v1-factory-sets.json');
|
||||
|
||||
random1v1FactorySet(
|
||||
species: Species, teamData: RandomTeamsTypes.FactoryTeamDetails
|
||||
): RandomTeamsTypes.RandomFactorySet | null {
|
||||
const setList = this.random1v1FactorySets[species.name].sets;
|
||||
|
||||
const itemsLimited = ['choicespecs', 'choiceband', 'choicescarf'];
|
||||
const movesLimited: { [k: string]: string } = {};
|
||||
const abilitiesLimited: { [k: string]: string } = {};
|
||||
|
||||
// Build a pool of eligible sets, given the team partners
|
||||
// Also keep track of moves and items limited to one per team
|
||||
const effectivePool: {
|
||||
set: BattleFactorySet, moves?: string[], item?: string,
|
||||
}[] = [];
|
||||
|
||||
for (const set of setList) {
|
||||
let reject = false;
|
||||
|
||||
// reject disallowed items, specifically a second of any given choice item
|
||||
const allowedItems: string[] = [];
|
||||
let ogItem = set.item;
|
||||
if (!Array.isArray(ogItem)) ogItem = [ogItem];
|
||||
for (const itemString of ogItem) {
|
||||
const itemId = toID(itemString);
|
||||
if (itemsLimited.includes(itemId) && teamData.has[itemId]) continue;
|
||||
allowedItems.push(itemString);
|
||||
}
|
||||
if (!allowedItems.length) continue;
|
||||
const item = this.sample(allowedItems);
|
||||
|
||||
const abilityId = toID(this.sample(set.ability));
|
||||
|
||||
if (abilitiesLimited[abilityId] && teamData.has[abilitiesLimited[abilityId]]) continue;
|
||||
|
||||
const moves: string[] = [];
|
||||
for (const move of set.moves) {
|
||||
const allowedMoves: string[] = [];
|
||||
for (const m of move) {
|
||||
const moveId = toID(m);
|
||||
if (movesLimited[moveId] && teamData.has[movesLimited[moveId]]) continue;
|
||||
allowedMoves.push(m);
|
||||
}
|
||||
if (!allowedMoves.length) {
|
||||
reject = true;
|
||||
break;
|
||||
}
|
||||
moves.push(this.sample(allowedMoves));
|
||||
}
|
||||
if (reject) continue;
|
||||
effectivePool.push({ set, moves, item });
|
||||
}
|
||||
|
||||
if (!effectivePool.length) {
|
||||
if (!teamData.forceResult) return null;
|
||||
for (const set of setList) {
|
||||
effectivePool.push({ set });
|
||||
}
|
||||
}
|
||||
|
||||
// Sets have individual weight, choose one with weighted random selection
|
||||
|
||||
let setData = this.sample(effectivePool); // Init with unweighted random set as fallback
|
||||
|
||||
const total = effectivePool.reduce((a, b) => a + b.set.weight, 0);
|
||||
const setRand = this.random(total);
|
||||
|
||||
let cur = 0;
|
||||
for (const set of effectivePool) {
|
||||
cur += set.set.weight;
|
||||
if (cur > setRand) {
|
||||
setData = set; // Bingo!
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const moves = [];
|
||||
for (const [i, moveSlot] of setData.set.moves.entries()) {
|
||||
moves.push(setData.moves ? setData.moves[i] : this.sample(moveSlot));
|
||||
}
|
||||
|
||||
const item = setData.item || this.sampleIfArray(setData.set.item);
|
||||
|
||||
return {
|
||||
name: species.baseSpecies,
|
||||
species: (typeof species.battleOnly === 'string') ? species.battleOnly : species.name,
|
||||
gender: setData.set.gender || species.gender || this.sample(['M', 'F']),
|
||||
item,
|
||||
ability: this.sampleIfArray(setData.set.ability),
|
||||
shiny: setData.set.shiny || this.randomChance(1, 1024),
|
||||
level: this.adjustLevel || setData.set.level || 100,
|
||||
happiness: 255,
|
||||
evs: { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0, ...setData.set.evs },
|
||||
ivs: { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31, ...setData.set.ivs },
|
||||
nature: this.sampleIfArray(setData.set.nature) || "Serious",
|
||||
moves,
|
||||
};
|
||||
}
|
||||
|
||||
random1v1FactoryTeam(side: PlayerOptions, depth = 0): RandomTeamsTypes.RandomFactorySet[] {
|
||||
this.enforceNoDirectCustomBanlistChanges();
|
||||
|
||||
const forceResult = depth >= 12;
|
||||
|
||||
const pokemon = [];
|
||||
const pokemonPool = Object.keys(this.random1v1FactorySets);
|
||||
|
||||
const teamData: TeamData = {
|
||||
typeCount: {},
|
||||
typeComboCount: {},
|
||||
baseFormes: {},
|
||||
has: {},
|
||||
forceResult,
|
||||
weaknesses: {},
|
||||
resistances: {},
|
||||
};
|
||||
const resistanceAbilities: { [k: string]: string[] } = {
|
||||
dryskin: ['Water'], waterabsorb: ['Water'], stormdrain: ['Water'],
|
||||
flashfire: ['Fire'], heatproof: ['Fire'], waterbubble: ['Fire'], wellbakedbody: ['Fire'],
|
||||
lightningrod: ['Electric'], motordrive: ['Electric'], voltabsorb: ['Electric'],
|
||||
sapsipper: ['Grass'],
|
||||
thickfat: ['Ice', 'Fire'],
|
||||
eartheater: ['Ground'], levitate: ['Ground'],
|
||||
};
|
||||
const movesLimited: { [k: string]: string } = {};
|
||||
const abilitiesLimited: { [k: string]: string } = {};
|
||||
const limitFactor = Math.ceil(this.maxTeamSize / 3);
|
||||
/**
|
||||
* Weighted random shuffle
|
||||
* Uses the fact that for two uniform variables x1 and x2, x1^(1/w1) is larger than x2^(1/w2)
|
||||
* with probability equal to w1/(w1+w2), which is what we want. See e.g. here https://arxiv.org/pdf/1012.0256.pdf,
|
||||
* original paper is behind a paywall.
|
||||
*/
|
||||
const shuffledSpecies = [];
|
||||
for (const speciesName of pokemonPool) {
|
||||
const sortObject = {
|
||||
speciesName,
|
||||
score: this.prng.random() ** (1 / this.random1v1FactorySets[speciesName].weight),
|
||||
};
|
||||
shuffledSpecies.push(sortObject);
|
||||
}
|
||||
shuffledSpecies.sort((a, b) => a.score - b.score);
|
||||
|
||||
while (shuffledSpecies.length && pokemon.length < this.maxTeamSize) {
|
||||
// repeated popping from weighted shuffle is equivalent to repeated weighted sampling without replacement
|
||||
const species = this.dex.species.get(shuffledSpecies.pop()!.speciesName);
|
||||
if (!species.exists) continue;
|
||||
|
||||
if (this.forceMonotype && !species.types.includes(this.forceMonotype)) continue;
|
||||
|
||||
// Limit to one of each species (Species Clause)
|
||||
if (teamData.baseFormes[species.baseSpecies]) continue;
|
||||
|
||||
// Limit 1 of any type (most of the time)
|
||||
const types = species.types;
|
||||
let skip = false;
|
||||
if (!this.forceMonotype) {
|
||||
for (const type of types) {
|
||||
if (teamData.typeCount[type] >= limitFactor && this.randomChance(4, 5)) {
|
||||
skip = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (skip) continue;
|
||||
|
||||
if (!teamData.forceResult && !this.forceMonotype) {
|
||||
// Limit 2 of any weakness
|
||||
for (const typeName of this.dex.types.names()) {
|
||||
// it's weak to the type
|
||||
if (this.dex.getEffectiveness(typeName, species) > 0 && this.dex.getImmunity(typeName, types)) {
|
||||
if (teamData.weaknesses[typeName] >= 2 * limitFactor) {
|
||||
skip = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (skip) continue;
|
||||
|
||||
const set = this.random1v1FactorySet(species, teamData);
|
||||
if (!set) continue;
|
||||
|
||||
// Limit 1 of any type combination
|
||||
let typeCombo = types.slice().sort().join();
|
||||
if (set.ability === "Drought" || set.ability === "Drizzle") {
|
||||
// Drought and Drizzle don't count towards the type combo limit
|
||||
typeCombo = set.ability;
|
||||
}
|
||||
if (!this.forceMonotype && teamData.typeComboCount[typeCombo] >= limitFactor) continue;
|
||||
|
||||
// Okay, the set passes, add it to our team
|
||||
pokemon.push(set);
|
||||
|
||||
// Now that our Pokemon has passed all checks, we can update team data:
|
||||
for (const type of types) {
|
||||
if (type in teamData.typeCount) {
|
||||
teamData.typeCount[type]++;
|
||||
} else {
|
||||
teamData.typeCount[type] = 1;
|
||||
}
|
||||
}
|
||||
if (typeCombo in teamData.typeComboCount) {
|
||||
teamData.typeComboCount[typeCombo]++;
|
||||
} else {
|
||||
teamData.typeComboCount[typeCombo] = 1;
|
||||
}
|
||||
|
||||
teamData.baseFormes[species.baseSpecies] = 1;
|
||||
|
||||
teamData.has[toID(set.item)] = 1;
|
||||
|
||||
for (const move of set.moves) {
|
||||
const moveId = toID(move);
|
||||
if (movesLimited[moveId]) {
|
||||
teamData.has[movesLimited[moveId]] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
const ability = this.dex.abilities.get(set.ability);
|
||||
if (abilitiesLimited[ability.id]) {
|
||||
teamData.has[abilitiesLimited[ability.id]] = 1;
|
||||
}
|
||||
|
||||
for (const typeName of this.dex.types.names()) {
|
||||
const typeMod = this.dex.getEffectiveness(typeName, types);
|
||||
// Track resistances because we will require it for triple weaknesses
|
||||
if (
|
||||
typeMod < 0 ||
|
||||
resistanceAbilities[ability.id]?.includes(typeName) ||
|
||||
!this.dex.getImmunity(typeName, types)
|
||||
) {
|
||||
// We don't care about the number of resistances, so just set to 1
|
||||
teamData.resistances[typeName] = 1;
|
||||
// Track weaknesses
|
||||
} else if (typeMod > 0) {
|
||||
teamData.weaknesses[typeName] = (teamData.weaknesses[typeName] || 0) + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!teamData.forceResult && pokemon.length < this.maxTeamSize) return this.random1v1FactoryTeam(side, ++depth);
|
||||
|
||||
// Quality control we cannot afford for monotype
|
||||
if (!teamData.forceResult && !this.forceMonotype) {
|
||||
for (const type in teamData.weaknesses) {
|
||||
// We reject if our team is triple weak to any type without having a resist
|
||||
if (teamData.resistances[type]) continue;
|
||||
if (teamData.weaknesses[type] >= 2 * limitFactor) return this.random1v1FactoryTeam(side, ++depth);
|
||||
}
|
||||
}
|
||||
return pokemon;
|
||||
}
|
||||
}
|
||||
|
||||
export default RandomTeams;
|
||||
|
|
|
|||
|
|
@ -634,7 +634,7 @@ export class RandomBabyTeams extends RandomTeams {
|
|||
return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay';
|
||||
});
|
||||
|
||||
if (noAttackStatMoves) {
|
||||
if (noAttackStatMoves && !ruleTable.has('forceofthefallenmod')) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -569,7 +569,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Encore", "Moonblast", "Recover", "Scald", "Thunder Wave"],
|
||||
"movepool": ["Moonblast", "Recover", "Scald", "Thunder Wave"],
|
||||
"abilities": ["Multiscale", "Rough Skin"],
|
||||
"teraTypes": ["Poison", "Steel"]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -148,7 +148,10 @@ export class RandomCAPTeams extends RandomTeams {
|
|||
) return false;
|
||||
return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay';
|
||||
});
|
||||
if (noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime') {
|
||||
if (
|
||||
noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime' &&
|
||||
!ruleTable.has('forceofthefallenmod')
|
||||
) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4782,7 +4782,7 @@
|
|||
"teraTypes": ["Fairy"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["Alluring Voice", "Dark Pulse", "Protect", "Psychic", "Thunderbolt"],
|
||||
"abilities": ["Competitive"],
|
||||
"teraTypes": ["Dark", "Electric", "Fairy"]
|
||||
|
|
|
|||
|
|
@ -864,7 +864,7 @@ export class RandomFFATeams extends RandomTeams {
|
|||
return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay';
|
||||
});
|
||||
|
||||
if (noAttackStatMoves) {
|
||||
if (noAttackStatMoves && !ruleTable.has('forceofthefallenmod')) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = 0;
|
||||
}
|
||||
|
|
|
|||
856
data/random-battles/scootopiav2/random-sets.json
Normal file
856
data/random-battles/scootopiav2/random-sets.json
Normal file
|
|
@ -0,0 +1,856 @@
|
|||
{
|
||||
"albatrygon": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Sticky Web", "Taunt", "Encore", "Brave Bird", "Memento", "Parting Shot"],
|
||||
"abilities": ["Prankster"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Tidy Up", "Brave Bird", "Drill Peck", "Feral Rush", "Feral Bite", "Sacred Sword"],
|
||||
"abilities": ["Prankster"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"aurorowl": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Frost Breath", "Air Cutter", "Focus Blast", "Nasty Plot"],
|
||||
"abilities": ["Technician"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"arbrella": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["Earthquake", "Wood Hammer", "Swords Dance", "Synthesis", "Stone Edge", "Superpower"],
|
||||
"abilities": ["Tough Claws"]
|
||||
},
|
||||
{
|
||||
"role": "Choice Scarf",
|
||||
"movepool": ["Earthquake", "Wood Hammer", "Stone Edge", "Superpower"],
|
||||
"abilities": ["Tough Claws"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"avastar": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Thunder Wave", "Heavy Slam", "Psychic", "Recover", "Teleport"],
|
||||
"abilities": ["Shell Bunker"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Calm Mind", "Psychic", "Flash Cannon", "Recover", "Thunderbolt"],
|
||||
"abilities": ["Shell Bunker"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"axolacred": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Stealth Rock", "Dragon Tail", "Roost", "Core Enforcer", "Scald", "Defog", "Shed Tail"],
|
||||
"abilities": ["Magic Guard"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Feral Rush", "Core Enforcer", "Flip Turn", "Recover"],
|
||||
"abilities": ["Magic Guard"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"barracoth": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Sheer Cold", "Flip Turn", "Triple Axel", "Slack Off"],
|
||||
"abilities": ["Multiscale", "Filter"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"blunderbusk": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Hydro Pump", "Aura Sphere", "Ice Beam", "Dark Pulse", "Dragon Pulse"],
|
||||
"abilities": ["Mega Launcher"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"brawnkey": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Stealth Rock", "Drain Punch", "Iron Head", "Chilly Reception", "Spikes"],
|
||||
"abilities": ["Levitate"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Iron Defense", "Body Press", "Iron Head", "Stealth Rock"],
|
||||
"abilities": ["Levitate"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Bulk Up", "Drain Punch", "Iron Head", "Stealth Rock"],
|
||||
"abilities": ["Levitate"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"carapex": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Tailwind", "Acrobatics", "Earthquake", "Stone Edge"],
|
||||
"abilities": ["Wind Rider"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Stealth Rock", "Roost", "Body Press", "Knock Off", "Crystal Bash", "U-Turn"],
|
||||
"abilities": ["Wind Rider"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"celespirit": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Sheer Cold", "Moonlight", "Hex", "Ice Beam", "Moonblast"],
|
||||
"abilities": ["Levitate"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Calm Mind", "Crystal Burst", "Shadow Ball", "Moonlight"],
|
||||
"abilities": ["Levitate"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"cellsius": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Calm Mind", "Hydro Pump", "Moonblast", "Ice Beam", "Psychic"],
|
||||
"abilities": ["Beast Boost"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Hydro Pump", "Moonblast", "Ice Beam", "Flip Turn", "Psychic"],
|
||||
"abilities": ["Beast Boost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"cindoe": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Overheat", "Fiery Wrath", "Parting Shot", "Morning Sun"],
|
||||
"abilities": ["Natural Cure"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Nasty Plot", "Fiery Wrath", "Fire Blast", "Morning Sun"],
|
||||
"abilities": ["Natural Cure"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
|
||||
"movepool": ["Nasty Plot", "Fiery Wrath", "Crystal Burst", "Morning Sun"],
|
||||
"abilities": ["Natural Cure"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"cinnastar": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "AV Pivot",
|
||||
"movepool": ["Sludge Bomb", "Earth Power", "Focus Blast", "Mortal Spin"],
|
||||
"abilities": ["Regenerator"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Earth Power", "Mortal Spin", "Recover", "Stealth Rock", "Power Gem"],
|
||||
"abilities": ["Regenerator"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"cobracotta": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Poison Fang", "Leech Seed", "Knock Off", "Synthesis", "Stealth Rock", "Power Whip"],
|
||||
"abilities": ["Heatproof"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"corundell": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Meteor Beam", "Power Gem", "Overheat", "Earth Power", "Volt Switch", "Energy Ball"],
|
||||
"abilities": ["Lightning Rod"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"crossont": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Spikes", "Recover", "Knock Off", "Circle Throw"],
|
||||
"abilities": ["Mold Breaker", "Sniper"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
|
||||
"movepool": ["Crystal Cutter", "Close Combat", "Bulk Up", "Substitute"],
|
||||
"abilities": ["Sniper"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"cyllindrake": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Body Press", "Rapid Spin", "Morning Sun", "Stealth Rock", "Boomburst"],
|
||||
"abilities": ["Scrappy"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Stealth Rock", "Rapid Spin", "Steel Beam", "Fire Blast"],
|
||||
"abilities": ["Scrappy"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
||||
"movepool": ["Feral Shriek", "Flash Cannon", "Earth Power", "Feral Spray", "Rapid Spin"],
|
||||
"abilities": ["Punk Rock"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"dojodo": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Bulk Up", "Drain Punch", "Jet Punch", "Knock Off", "Substitute"],
|
||||
"abilities": ["Supreme Overlord"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
|
||||
"movepool": ["Bulk Up", "Drain Punch", "Crystal Bash", "Jet Punch", "Crystal Healing"],
|
||||
"abilities": ["Supreme Overlord"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"dolphena": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Coil", "Scale Shot", "Iron Tail", "Liquidation"],
|
||||
"abilities": ["Mythical Presence"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Dragon Dance", "Scale Shot", "Liquidation", "Iron Head", "Substitute"],
|
||||
"abilities": ["Mythical Presence"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Coil", "Scale Shot", "Iron Tail", "Liquidation"],
|
||||
|
||||
"abilities": ["Mythical Presence"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Defog", "Flip Turn", "Moonlight", "Dragon Tail"],
|
||||
"abilities": ["Mythical Presence"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"dracoil": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Defog", "Roost", "U-Turn", "Hurricane", "Fire Blast", "Glare", "Draco Meteor", "Earthquake"],
|
||||
"abilities": ["Mythical Presence"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Dragon Dance", "Acrobatics", "Substitute", "Earthquake"],
|
||||
"abilities": ["Gluttony"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Dragon Dance", "Dragon Rush", "Coil", "Earthquake", "Dual Wingbeat"],
|
||||
"abilities": ["Mythical Presence"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Feral Bite", "Dragon Tail", "Roost", "Glare", "Defog"],
|
||||
"abilities": ["Mythical Presence"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"efflor": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Giga Drain", "Leech Seed", "Rapid Spin", "Stealth Rock", "Chilly Reception"],
|
||||
"abilities": ["Seed Sower"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Curse", "Stone Edge", "Body Press", "Synthesis"],
|
||||
"abilities": ["Unaware"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"electangle": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Gyro Ball", "Stealth Rock", "Body Press", "Volt Switch", "Discharge"],
|
||||
"abilities": ["Filter"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"elemadillo": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Flash Cannon", "Thunderbolt", "Volt Switch", "Energy Ball"],
|
||||
"abilities": ["Motor Drive", "Weak Armor"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
||||
"movepool": ["Feral Power", "Flash Cannon", "Earth Power", "Feral Resilience"],
|
||||
"abilities": ["Motor Drive", "Weak Armor"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"embuck": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Blaze Kick", "Will-o-Wisp", "Morning Sun", "U-Turn", "Close Combat"],
|
||||
"abilities": ["Intimidate"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
||||
"movepool": ["Blaze Kick", "Crystal Bash", "Will-o-Wisp", "Morning Sun", "U-Turn"],
|
||||
"abilities": ["Intimidate"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Flare Blitz", "Wild Charge", "U-Turn", "Close Combat"],
|
||||
"abilities": ["Intimidate"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"faerenheit": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Calm Mind", "Lava Plume", "Moonblast", "Morning Sun"],
|
||||
"abilities": ["Beast Boost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
|
||||
"movepool": ["Calm Mind", "Lava Plume", "Crystal Cage", "Morning Sun"],
|
||||
"abilities": ["Beast Boost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"fenreil": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Double Edge", "Knock Off", "Superpower", "U-Turn"],
|
||||
"abilities": ["Natural Cure"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
||||
"movepool": ["Feral Bite", "Knock Off", "Iron Head", "Feral Shred"],
|
||||
"abilities": ["Natural Cure"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"flocura": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Stealth Rock", "Thunder Wave", "U-Turn", "Leaf Storm"],
|
||||
"abilities": ["Power Construct"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Nasty Plot", "Giga Drain", "Psychic", "Earth Power"],
|
||||
"abilities": ["Levitate"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
|
||||
"movepool": ["Nasty Plot", "Giga Drain", "Feral Power", "Earth Power"],
|
||||
"abilities": ["Levitate"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Leaf Storm", "U-Turn", "Psychic", "Earth Power"],
|
||||
"abilities": ["Levitate"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Leech Seed", "U-Turn", "Thunder Wave", "Psychic", "Giga Drain", "Stealth Rock"],
|
||||
"abilities": ["Power Construct"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"harzodia": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Light Screen", "Reflect", "Teleport", "Thunder Wave", "Psychic"],
|
||||
"abilities": ["Prankster"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Meteor Beam", "Psychic", "Shadow Ball", "Calm Mind", "Focus Blast"],
|
||||
"abilities": ["Unburden"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"jaegorm": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["First Impression", "U-Turn", "Photon Ray", "Knock Off", "Superpower", "Earthquake"],
|
||||
"abilities": ["Schooling"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"jamborai": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Mortal Spin", "Recover", "Pyschic", "Scald", "Teleport"],
|
||||
"abilities": ["Water Absorb"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Calm Mind", "Recover", "Pyschic", "Scald", "Sludge Bomb", "Stored Power"],
|
||||
"abilities": ["Water Absorb"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
||||
"movepool": ["Mortal Spin", "Recover", "Crystal Cage", "Crystal Healing", "Teleport"],
|
||||
"abilities": ["Gooey"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
|
||||
"movepool": ["Crystal Fortification", "Recover", "Stored Power", "Crystal Beam"],
|
||||
"abilities": ["Gooey"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"kodokai": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
||||
"movepool": ["Crystal Cage", "Hex", "Will-o-Wisp", "Moonlight"],
|
||||
"abilities": ["Aroma Veil"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Wish", "Hex", "Will-o-Wisp", "Moonlight"],
|
||||
"abilities": ["Aroma Veil"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"krachiten": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["First Impression", "U-Turn", "Liquidation", "Rapid Spin"],
|
||||
"abilities": ["Torrent"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
||||
"movepool": ["Crystal Cutter", "U-Turn", "Aqua Cutter", "Superpower", "Rapid Spin"],
|
||||
"abilities": ["Sniper"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"lumoth": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Quiver Dance", "Hex", "Sleep Powder", "Bug Buzz"],
|
||||
"abilities": ["Levitate"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"minillow": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Nasty Plot", "Agility", "Hydro Pump", "Moonblast", "Substitute"],
|
||||
"abilities": ["Adaptability"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"muabboa": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Earthquake", "U-Turn", "Close Combat", "Knock Off"],
|
||||
"abilities": ["Inner Focus"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
|
||||
"movepool": ["Swords Dance", "Earthquake", "Feral Rush", "Close Combat"],
|
||||
"abilities": ["Inner Focus"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"noxtrice": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Poison Jab", "Flare Blitz", "Roost", "U-Turn"],
|
||||
"abilities": ["Poison Touch"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Gunk Shot", "Flare Blitz", "Earthquake", "Dragon Dance"],
|
||||
"abilities": ["Poison Touch"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Gunk Shot", "Feral Rush", "Earthquake", "Dragon Dance"],
|
||||
"abilities": ["Flash Fire"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"nunopod": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Earthquake", "Body Press", "Triple Axel", "Flip Turn", "Stealth Rock", "Rapid Spin", "Recover"],
|
||||
"abilities": ["Opportunist"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
||||
"movepool": ["Crystal Bash", "Body Press", "Earthquake", "Flip Turn", "Stealth Rock", "Rapid Spin", "Recover"],
|
||||
"abilities": ["Opportunist"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"orchile": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Moonblast", "Earth Power", "Will-o-Wisp", "Strength Sap", "Spikes"],
|
||||
"abilities": ["Flower Veil"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Moonblast", "Earth Power", "Calm Mind", "Strength Sap"],
|
||||
"abilities": ["Flower Veil"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"platypad": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Revival Blessing", "Wave Crash", "Flip Turn", "Synthesis"],
|
||||
"abilities": ["Flower Veil"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
|
||||
"movepool": ["Feral Resilience", "Feral Breath", "Giga Drain", "Synthesis"],
|
||||
"abilities": ["Triage"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"pythos": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Coil", "Knock Off", "Iron Tail", "Sucker Punch", "Superpower", "Facade"],
|
||||
"abilities": ["Guts"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"quadringo": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Defog", "Roost", "Dragon Tail", "Earthquake", "Moonblast"],
|
||||
"abilities": ["Pastel Veil"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Calm Mind", "Moonblast", "Mystical Fire", "Roost"],
|
||||
"abilities": ["Pastel Veil"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Moonblast", "Draco Meteor", "Mystical Fire", "Earthquake"],
|
||||
"abilities": ["Pastel Veil"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
||||
"movepool": ["Feral Rush", "Earthquake", "Feral Shred", "Roost"],
|
||||
"abilities": ["Pastel Veil"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"rantler": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Double Edge", "Ice Spinner", "Superpower", "Earthquake"],
|
||||
"abilities": ["Slush Rush"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Swords Dance", "Double Edge", "Ice Spinner", "Superpower", "Earthquake", "Quick Attack"],
|
||||
"abilities": ["Slush Rush"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Double Edge", "Ice Spinner", "Superpower", "Quick Attack", "Fake Out"],
|
||||
"abilities": ["Tough Claws"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"roscenti": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["First Impression", "U-Turn", "Superpower", "Rock Blast", "Bullet Seed"],
|
||||
"abilities": ["Skill Link"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
||||
"movepool": ["First Impression", "U-Turn", "Feral Rush", "Drill Run", "Iron Tail"],
|
||||
"abilities": ["Sheer Force"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
||||
"movepool": ["First Impression", "U-Turn", "Crystal Tail", "Superpower", "Rock Slide"],
|
||||
"abilities": ["Sheer Force"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"salamalix": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Stealth Rock", "Spikes", "Stone Edge", "Close Combat", "Iron Head"],
|
||||
"abilities": ["Intimidate"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Swords Dance", "Iron Head", "Close Combat", "Accelerock"],
|
||||
"abilities": ["Intimidate"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"salaos": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Toxic", "Recover", "Fiery Wrath", "Scald", "Flamethrower", "Toxic Spikes"],
|
||||
"abilities": ["Good as Gold"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
||||
"movepool": ["Toxic", "Recover", "Crystal Cage", "Flamethrower", "Toxic Spikes"],
|
||||
"abilities": ["Good as Gold"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"saphor": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Stealth Rock", "Earthquake", "Body Slam", "Slack Off", "Roar", "Heal Bell"],
|
||||
"abilities": ["Thick Fat"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
||||
"movepool": ["Stealth Rock", "Crystal Tail", "Crystal Shard", "Slack Off", "Roar", "Crystal Healing"],
|
||||
"abilities": ["Thick Fat"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
|
||||
"movepool": ["Bulk Up", "Crystal Cutter", "Slack Off", "Body Press"],
|
||||
"abilities": ["Thick Fat"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
|
||||
"movepool": ["Calm Mind", "Crystal Cage", "Slack Off", "Focus Blast"],
|
||||
"abilities": ["Thick Fat"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Headlong Rush", "Double Edge", "Heavy Slam", "Superpower", "Stone Edge"],
|
||||
"abilities": ["Thick Fat"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"scalaron": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Flamethrower", "Hurricane", "Roost", "U-Turn", "Defog", "Toxic", "Will-o-Wisp"],
|
||||
"abilities": ["Filter"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
|
||||
"movepool": ["Flamethrower", "Crystal Cage", "Roost", "U-Turn", "Defog", "Will-o-Wisp", "Crystal Shard"],
|
||||
"abilities": ["Filter"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"soleron": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Thunderbolt", "Hurricane", "Heat Wave", "U-Turn", "Air Slash", "Volt Switch", "Roost"],
|
||||
"abilities": ["Battle Bond"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Thunderbolt", "Feral Power", "Feral Spray", "Volt Switch", "Roost"],
|
||||
|
||||
"abilities": ["Battle Bond"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Thunderbolt", "Crystal Burst", "Heat Wave", "Volt Switch", "Hurricane"],
|
||||
|
||||
"abilities": ["Battle Bond"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"torgeist": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Toxic Thread", "Hex", "Hurricane", "Heat Wave", "Pain Split", "Taunt"],
|
||||
"abilities": ["Merciless"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
|
||||
"movepool": ["Toxic Thread", "Hex", "Feral Power", "Pain Split", "Taunt", "Nasty Plot"],
|
||||
"abilities": ["Merciless"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
|
||||
"movepool": ["Will-o-Wisp", "Hex", "Feral Power", "Nasty Plot"],
|
||||
"abilities": ["Cursed Body"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"woolora": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Calm Mind", "Cotton Guard", "Stored Power", "Draining Kiss"],
|
||||
"abilities": ["Fluffy", "Pastel Veil"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Calm Mind", "Moonlight", "Stored Power", "Moonblast"],
|
||||
"abilities": ["Fluffy"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"zeploom": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Energy Siphon", "Synthesis", "Stealth Rock", "U-Turn", "Defog", "Toxic", "Earth Power"],
|
||||
"abilities": ["Wind Rider"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -22,13 +22,14 @@ const SETUP = [
|
|||
'acidarmor', 'agility', 'autotomize', 'bellydrum', 'bulkup', 'calmmind', 'clangoroussoul', 'coil', 'cosmicpower', 'curse', 'dragondance',
|
||||
'filletaway', 'flamecharge', 'growth', 'honeclaws', 'howl', 'irondefense', 'meditate', 'nastyplot', 'noretreat', 'poweruppunch', 'quiverdance',
|
||||
'rockpolish', 'shellsmash', 'shiftgear', 'swordsdance', 'tailglow', 'takeheart', 'tidyup', 'trailblaze', 'trickroom', 'workup', 'victorydance',
|
||||
'feralresilience', 'feralspray', 'crystalfortification',
|
||||
];
|
||||
const SPEED_CONTROL = [
|
||||
'electroweb', 'glare', 'icywind', 'lowsweep', 'quash', 'stringshot', 'tailwind', 'thunderwave', 'trickroom',
|
||||
];
|
||||
// Hazard-setting moves
|
||||
const HAZARDS = [
|
||||
'spikes', 'stealthrock', 'stickyweb', 'toxicspikes',
|
||||
'spikes', 'stealthrock', 'stickyweb', 'toxicspikes', 'crystalshard',
|
||||
];
|
||||
// Protect and its variants
|
||||
const PROTECT_MOVES = [
|
||||
|
|
@ -68,7 +69,7 @@ const NO_LEAD_POKEMON = [
|
|||
const DOUBLES_NO_LEAD_POKEMON = [
|
||||
'Basculegion', 'Houndstone', 'Iron Bundle', 'Roaring Moon', 'Zacian', 'Zamazenta',
|
||||
];
|
||||
export class RandomSPMTeams extends RandomTeams {
|
||||
export class RandomSCTeams extends RandomTeams {
|
||||
override cullMovePool(
|
||||
types: string[],
|
||||
moves: Set<string>,
|
||||
|
|
@ -264,6 +265,7 @@ export class RandomSPMTeams extends RandomTeams {
|
|||
role: RandomTeamsTypes.Role,
|
||||
): Set<string> {
|
||||
const moves = new Set<string>();
|
||||
if (this.getSuperType(moves)) types[1] = this.getSuperType(moves);
|
||||
let counter = this.queryMoves(moves, species, teraType, abilities);
|
||||
this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, isDoubles, teraType, role);
|
||||
|
||||
|
|
@ -605,6 +607,7 @@ export class RandomSPMTeams extends RandomTeams {
|
|||
teraType: string,
|
||||
role: RandomTeamsTypes.Role,
|
||||
) {
|
||||
if (this.getSuperType(moves)) return this.getSuperType(moves) + " Orb";
|
||||
if (!isDoubles) {
|
||||
if (role === 'Fast Bulky Setup' && (ability === 'Quark Drive' || ability === 'Protosynthesis')) {
|
||||
return 'Booster Energy';
|
||||
|
|
@ -621,12 +624,33 @@ export class RandomSPMTeams extends RandomTeams {
|
|||
return this.sample(species.requiredItems);
|
||||
}
|
||||
if (role === 'AV Pivot') return 'Assault Vest';
|
||||
if (moves.has('substitute')) return 'Spellbook Magazine';
|
||||
if (moves.has('protect') && ability !== 'Speed Boost') return 'Spellbook Magazine';
|
||||
// Super Type hardcodes
|
||||
if (species.id === 'cyllindrake' && moves.has('shiftgear')) return 'Throat Spray';
|
||||
if (species.id === 'albatrygon' && moves.has('acrobatics')) return 'Sitrus Berry';
|
||||
if (species.id === 'yiankutku' && moves.has('facade') || species.id === 'bluekutku' && moves.has('facade')) {
|
||||
return 'Frost Orb';
|
||||
}
|
||||
if (species.id === 'xenojiiva' && ability === 'Quark Drive') return 'Booster Energy';
|
||||
if (species.id === 'odogaron' && moves.has('closecombat')) return 'White Herb';
|
||||
if (species.id === 'odogaron' && !moves.has('closecombat')) return 'Sitrus Berry';
|
||||
if (
|
||||
ability === 'Magic Guard' || ability === 'Fervent Scales' ||
|
||||
(ability === 'Sheer Force' && counter.get('sheerforce'))
|
||||
) {
|
||||
return 'Life Orb';
|
||||
}
|
||||
if (moves.has('devour') && ability === 'Unburden') return 'Liechi Berry';
|
||||
if (moves.has('virulentvolley')) return 'Loaded Dice';
|
||||
if (moves.has('magnalance') && ability === 'Reactive Core') return 'Flame Orb';
|
||||
if (moves.has('dragondance') && ability === 'Reactive Core') return 'Frost Orb';
|
||||
// other
|
||||
if (moves.has('substitute')) return 'Leftovers';
|
||||
if (moves.has('protect') && ability !== 'Speed Boost') return 'Leftovers';
|
||||
if (counter.get('skilllink') && ability !== 'Skill Link' && species.id !== 'breloom') return 'Loaded Dice';
|
||||
if (moves.has('shellsmash') && ability !== 'Weak Armor') return 'White Herb';
|
||||
if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) {
|
||||
return (types.includes('Fire') || ability === 'Toxic Boost' || ability === 'Poison Heal') ? 'Toxic Orb' : 'Flame Orb';
|
||||
}
|
||||
if (ability === 'Magic Guard' || (ability === 'Sheer Force' && counter.get('sheerforce'))) return 'Life Orb';
|
||||
if (['healingwish', 'switcheroo', 'trick'].some(m => moves.has(m))) {
|
||||
if (
|
||||
species.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&
|
||||
|
|
@ -659,12 +683,20 @@ export class RandomSPMTeams extends RandomTeams {
|
|||
}
|
||||
if (this.dex.getEffectiveness('Rock', species) >= 2) return 'Heavy-Duty Boots';
|
||||
if (species.nfe) return 'Eviolite';
|
||||
if (['Bulky Attacker', 'Bulky Support', 'Bulky Setup'].some(m => role === (m))) return 'Spellbook Magazine';
|
||||
if (['Bulky Attacker', 'Bulky Support', 'Bulky Setup'].some(m => role === (m))) return 'Leftovers';
|
||||
if (role === 'Fast Support' || role === 'Fast Bulky Setup') {
|
||||
return (counter.get('Physical') + counter.get('Special') >= 3) ? 'Life Orb' : 'Spellbook Magazine';
|
||||
return (counter.get('Physical') + counter.get('Special') >= 3) ? 'Life Orb' : 'Leftovers';
|
||||
}
|
||||
}
|
||||
|
||||
getSuperType(moves: Set<string> | string[]): string {
|
||||
for (const move of moves) {
|
||||
if (move.includes('crystal')) return "Crystal";
|
||||
if (move.includes('feral')) return "Feral";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
override randomSet(
|
||||
s: string | Species,
|
||||
teamDetails: RandomTeamsTypes.TeamDetails = {},
|
||||
|
|
@ -676,7 +708,7 @@ export class RandomSPMTeams extends RandomTeams {
|
|||
const sets = this.randomSets[species.id]["sets"];
|
||||
const possibleSets: RandomTeamsTypes.RandomSetData[] = [];
|
||||
|
||||
const ruleTable = this.dex.formats.getRuleTable(this.format);
|
||||
// const ruleTable = this.dex.formats.getRuleTable(this.format);
|
||||
|
||||
for (const set of sets) {
|
||||
// Prevent Fast Bulky Setup on lead Paradox Pokemon, since it generates Booster Energy.
|
||||
|
|
@ -686,7 +718,8 @@ export class RandomSPMTeams extends RandomTeams {
|
|||
set.role === 'Fast Bulky Setup'
|
||||
) continue;
|
||||
// Prevent Tera Blast user if the team already has one, or if Terastallizion is prevented.
|
||||
if ((teamDetails.teraBlast || ruleTable.has('terastalclause')) && set.role === 'Tera Blast user') {
|
||||
// used here to limit team to 1 Super Types user
|
||||
if (teamDetails.teraBlast && set.role === 'Tera Blast user') {
|
||||
continue;
|
||||
}
|
||||
possibleSets.push(set);
|
||||
|
|
@ -706,13 +739,17 @@ export class RandomSPMTeams extends RandomTeams {
|
|||
const evs = { hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85 };
|
||||
const ivs = { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 };
|
||||
|
||||
const types = species.types;
|
||||
const types = [];
|
||||
types[0] = species.types[0];
|
||||
if (species.types[1]) types[1] = species.types[1];
|
||||
const abilities = set.abilities!;
|
||||
|
||||
// Get moves
|
||||
const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, isDoubles, movePool, teraType, role);
|
||||
const counter = this.queryMoves(moves, species, teraType, abilities);
|
||||
|
||||
if (this.getSuperType(moves)) types[1] = this.getSuperType(moves);
|
||||
|
||||
// Get ability
|
||||
ability = this.getAbility(types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role);
|
||||
|
||||
|
|
@ -798,7 +835,7 @@ export class RandomSPMTeams extends RandomTeams {
|
|||
|
||||
override randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./random-sets.json');
|
||||
|
||||
randomSPMTeam() {
|
||||
randomSCTeam() {
|
||||
this.enforceNoDirectCustomBanlistChanges();
|
||||
|
||||
const seed = this.prng.getSeed();
|
||||
|
|
@ -817,6 +854,7 @@ export class RandomSPMTeams extends RandomTeams {
|
|||
|
||||
const baseFormes: { [k: string]: number } = {};
|
||||
|
||||
// const superTypeCount = 0;
|
||||
const typeCount: { [k: string]: number } = {};
|
||||
const typeComboCount: { [k: string]: number } = {};
|
||||
const typeWeaknesses: { [k: string]: number } = {};
|
||||
|
|
@ -869,14 +907,17 @@ export class RandomSPMTeams extends RandomTeams {
|
|||
) {
|
||||
if (pokemon.length + leadsRemaining === this.maxTeamSize) continue;
|
||||
set = this.randomSet(species, teamDetails, false, isDoubles);
|
||||
if (teamDetails.teraBlast && this.getSuperType(set.moves)) continue;
|
||||
pokemon.push(set);
|
||||
} else {
|
||||
set = this.randomSet(species, teamDetails, true, isDoubles);
|
||||
if (teamDetails.teraBlast && this.getSuperType(set.moves)) continue;
|
||||
pokemon.unshift(set);
|
||||
leadsRemaining--;
|
||||
}
|
||||
} else {
|
||||
set = this.randomSet(species, teamDetails, false, isDoubles);
|
||||
if (teamDetails.teraBlast && this.getSuperType(set.moves)) continue;
|
||||
pokemon.push(set);
|
||||
}
|
||||
|
||||
|
|
@ -900,6 +941,11 @@ export class RandomSPMTeams extends RandomTeams {
|
|||
typeComboCount[typeCombo] = 1;
|
||||
}
|
||||
|
||||
// Increment item counter
|
||||
if (set.item === "Crystal Orb" || set.item === "Feral Orb") {
|
||||
teamDetails.teraBlast = 1;
|
||||
}
|
||||
|
||||
// Increment weakness counter
|
||||
for (const typeName of this.dex.types.names()) {
|
||||
// it's weak to the type
|
||||
|
|
@ -952,4 +998,4 @@ export class RandomSPMTeams extends RandomTeams {
|
|||
}
|
||||
}
|
||||
|
||||
export default RandomSPMTeams;
|
||||
export default RandomSCTeams;
|
||||
|
|
@ -1,511 +0,0 @@
|
|||
{
|
||||
"aegislash": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Bitter Malice", "Toxic", "Confuse Ray", "Protect", "Gyro Ball", "Night Slash", "Defog"],
|
||||
"abilities": ["Bulletproof"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Shadow Claw", "Shadow Sneak", "King's Shield", "Iron Head", "Close Combat", "Swords Dance"],
|
||||
"abilities": ["Stance Change"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"banettemega": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Shadow Claw", "Shadow Sneak", "Sucker Punch", "Pursuit", "Swords Dance", "Dark Pulse", "Grudge"],
|
||||
"abilities": ["Tough Claws"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"ceruledge": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Bitter Blade", "Spirit Shackle", "Close Combat", "Swords Dance"],
|
||||
"abilities": ["Triage"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Bitter Blade", "Poltergeist", "Close Combat", "Swords Dance", "Shadow Sneak", "Taunt"],
|
||||
"abilities": ["Sharpness"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"dofagrigus": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Hex", "Will-O-Wisp", "Strength Sap", "Knock Off", "Haze", "Body Press"],
|
||||
"abilities": ["Dummy"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Shadow Ball", "Calm Mind", "Strength Sap", "Dark Pulse"],
|
||||
"abilities": ["Dummy"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"eddyazbear": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Spirit Shackle", "Close Combat", "Sucker Punch", "Bite", "Shadow Sneak", "Pursuit", "Grudge"],
|
||||
"abilities": ["Strong Jaw"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"fluttermane": {
|
||||
"level": 90,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Astral Barrage", "Shadow Ball", "Moonblast", "Dark Pulse", "Mystical Fire", "Energy Ball", "Thunderbolt"],
|
||||
"abilities": ["Protosynthesis", "Levitate"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"fluttermane2": {
|
||||
"level": 90,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Wish", "Protect", "Moonblast", "Ominous Wind", "Night Shade", "Defog"],
|
||||
"abilities": ["Levitate"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"gourgeist": {
|
||||
"level": 90,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Moongeist Beam", "Moonlight", "Solar Beam", "Flamethrower"],
|
||||
"abilities": ["Desolate Land"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Shadow Ball", "Moonblast", "Growth", "Solar Beam", "Flamethrower"],
|
||||
"abilities": ["Desolate Land"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"gourgeistgigantic": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Bitter Malice", "Flamethrower", "Infernal Parade", "Confuse Ray", "Moonblast", "Strength Sap", "Spit Up"],
|
||||
"abilities": ["Pulp Up"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Bitter Malice", "Flamethrower", "Infernal Parade", "Moonblast", "Strength Sap", "Spit Up", "Nasty Plot"],
|
||||
"abilities": ["Pulp Up"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"gourgeistlarge": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Bitter Malice", "Flamethrower", "Infernal Parade", "Moonblast", "Strength Sap"],
|
||||
"abilities": ["Spoky"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"gourgeisttiny": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Shadow Bone", "Shadow Punch", "Power Whip", "Flare Blitz", "Play Rough", "Strength Sap", "Pain Split"],
|
||||
"abilities": ["Dazzling"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Trick-or-Treat", "Shadow Punch", "Power Whip", "Flare Blitz", "Play Rough", "Strength Sap", "Pain Split"],
|
||||
"abilities": ["Dazzling"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"houndstone": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Spirit Shackle", "Body Press", "Rapid Spin", "Cotton Guard", "Recover", "Will-O-Wisp"],
|
||||
"abilities": ["Undead"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Shadow Bone", "Crunch", "Roar", "Teleport", "Recover", "Will-O-Wisp"],
|
||||
"abilities": ["Fluffy"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Last Respects", "Play Rough", "Crunch", "Sucker Punch", "Trick", "Shadow Sneak"],
|
||||
"abilities": ["Undead"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"indeedee": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Shadow Ball", "Expanding Force", "Healing Wish", "Dazzling Gleam", "Encore", "Trick"],
|
||||
"abilities": ["Psychic Surge"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Shadow Ball", "Psychic", "Healing Wish", "Dazzling Gleam", "Encore", "Rapid Spin"],
|
||||
"abilities": ["Scrappy"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"jableye": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Bitter Malice", "Rage Fist", "Confuse Ray", "Dark Pulse", "Recover", "Strength Sap", "Thunder Wave", "Toxic", "Will-O-Wisp"],
|
||||
"abilities": ["Jankster"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Hex", "Nightmare", "Recover", "Will-O-Wisp"],
|
||||
"abilities": ["Jankster"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Bitter Malice", "Calm Mind", "Dark Pulse", "Recover", "Strength Sap", "Thunder Wave", "Toxic", "Will-O-Wisp"],
|
||||
"abilities": ["Jankster"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"jobapplication": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Spirit Shackle", "Lash Out", "Shadow Sneak", "Superpower", "Tidy Up", "Return", "Slack Off"],
|
||||
"abilities": ["No Ability"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Lash Out", "Shadow Sneak", "Astonish", "Parting Shot"],
|
||||
"abilities": ["No Ability"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"kilotic": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Shadow Ball", "Scald", "Recover", "Flip Turn", "Ominous Wind", "Confuse Ray", "Haze"],
|
||||
"abilities": ["Intimidate", "Cursed Body"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Shadow Ball", "Scald", "Recover", "Nasty Plot", "Alluring Voice"],
|
||||
"abilities": ["Flare Boost", "Intimidate", "Cursed Body"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"lanturnevil": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Spite", "Confuse Ray", "Destiny Bond", "Confuse Ray", "Plasma Fists", "Shadow Sneak", "Volt Switch", "Liquidation"],
|
||||
"abilities": ["Abyssal Light"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Swords Dance", "Phantom Force", "Destiny Bond", "Plasma Fists", "Shadow Sneak", "Volt Switch", "Liquidation"],
|
||||
"abilities": ["Abyssal Light"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"merasmus": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["BOMBINOMICON!", "Substitute", "Expanding Force", "Spirit Break", "Protect"],
|
||||
"abilities": ["Magician"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Feint Attack", "Substitute", "Curse", "Protect"],
|
||||
"abilities": ["Magician"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"nursola": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Ominous Wind", "Infernal Parade", "Giga Drain", "Stealth Rock", "Haze", "Wish", "Spiky Shield", "Will-O-Wisp"],
|
||||
"abilities": ["Purifying Salt", "Solid Rock"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Hex", "Giga Drain", "Strength Sap", "Will-O-Wisp"],
|
||||
"abilities": ["Purifying Salt", "Solid Rock"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Shadow Ball", "Giga Drain", "Calm Mind", "Strength Sap", "Will-O-Wisp"],
|
||||
"abilities": ["Purifying Salt", "Solid Rock"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"okestarspirit": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Lack Off", "Runch", "Ual Chop", "Words Dance"],
|
||||
"abilities": ["Onder Guard"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"ppiritomb": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Ominous Wind", "Stone Axe", "Salt Cure", "Will-O-Wisp", "Protect"],
|
||||
"abilities": ["PPressure", "Pinfiltrator"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Curse", "Salt Cure", "Rest", "Sleep Talk"],
|
||||
"abilities": ["PPressure", "Pinfiltrator"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Calm Mind", "Power Gem", "Rest", "Sleep Talk", "Will-O-Wisp"],
|
||||
"abilities": ["PPressure", "Pinfiltrator"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"quagsiredead": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Scald", "Earthquake", "Spirit Shackle", "Spikes", "Recover"],
|
||||
"abilities": ["Cursed Body", "Unaware"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"rotom": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Flamethrower", "Energy Ball", "Thunderbolt", "Volt Switch", "Ice Beam", "Shadow Ball", "Hurricane", "Surf", "Trick"],
|
||||
"abilities": ["Shapeshift", "Levitate"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Flamethrower", "Energy Ball", "Thunderbolt", "Volt Switch", "Ice Beam", "Shadow Ball", "Hurricane", "Surf", "Nasty Plot"],
|
||||
"abilities": ["Shapeshift"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"shedinja": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Shadow Force", "Nightmare", "Toxic", "Protect"],
|
||||
"abilities": ["Wonder Guard"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Shadow Sneak", "Shadow Claw", "Sucker Punch", "Night Slash", "Swords Dance", "Protect"],
|
||||
"abilities": ["Wonder Guard"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trevenant": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Spirit Shackle", "Shadow Sneak", "Wood Hammer", "High Jump Kick", "Sucker Punch", "Swords Dance", "Destiny Bond"],
|
||||
"abilities": ["Triage"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Spirit Shackle", "Shadow Sneak", "Horn Leech", "Drain Punch", "Sucker Punch", "Swords Dance"],
|
||||
"abilities": ["Triage"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"ursalunabloodmoon": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Blood Moon", "Moongeist Beam", "Moonlight", "Calm Mind"],
|
||||
"abilities": ["Mind's Eye"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Blood Moon", "Spirit Shackle", "Moonlight", "Earth Power", "Calm Mind"],
|
||||
"abilities": ["Undead"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"vampharos": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Volt Switch", "Thunderbolt", "Ominous Wind", "Moongeist Beam", "Spectral Thief", "Core Enforcer", "Moonlight"],
|
||||
"abilities": ["Vamp"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["Volt Switch", "Thunderbolt", "Shadow Ball", "Infernal Parade", "Core Enforcer", "Moonblast"],
|
||||
"abilities": ["Vamp"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"wunala": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Shadow Ball", "Night Daze", "Moonblast", "Calm Mind"],
|
||||
"abilities": ["Wand Rush"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Spectral Thief", "Moonblast", "Roost", "Will-O-Wisp", "Night Daze"],
|
||||
"abilities": ["Wand Rush"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"xorygonz": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Shadow Ball", "Bitter Malice", "Night Shade", "Recover", "Ice Beam", "Thunderbolt", "Sludge Bomb"],
|
||||
"abilities": ["Mutual Exclusion"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Shadow Ball", "Bitter Malice", "Nasty Plot", "Recover", "Ice Beam", "Thunderbolt", "Sludge Bomb"],
|
||||
"abilities": ["Mutual Exclusion"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"yveltal": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Dragon Tail", "Oblivion Wing", "Shadow Ball", "Roost", "Defog", "U-Turn"],
|
||||
"abilities": ["Intimidate"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Draco Meteor", "Oblivion Wing", "Shadow Ball", "Roost", "Dark Pulse", "U-Turn"],
|
||||
"abilities": ["Dark Aura"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"zoroarkhisui": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Blizzard", "Shadow Ball", "Aurora Veil", "U-Turn", "Flamethrower", "Taunt", "Will-O-Wisp"],
|
||||
"abilities": ["Snow Warning"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Ice Beam", "Shadow Ball", "Nasty Plot", "Flamethrower", "Taunt", "Sludge Bomb"],
|
||||
"abilities": ["Cursed Body", "Illusion"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -1507,9 +1507,17 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
|
|||
typeTable = typeTable.filter(type => species.types.includes(type));
|
||||
}
|
||||
const item = this.dex.items.get(set.item);
|
||||
if (item.megaStone && species.baseSpecies === item.megaEvolves) {
|
||||
species = this.dex.species.get(item.megaStone);
|
||||
typeTable = typeTable.filter(type => species.types.includes(type));
|
||||
if (item.megaStone) {
|
||||
if (Array.isArray(item.megaStone)) {
|
||||
const index = (item.megaEvolves as string[]).indexOf(species.name);
|
||||
if (index >= 0) {
|
||||
species = this.dex.species.get(item.megaStone[index]);
|
||||
typeTable = typeTable.filter(type => species.types.includes(type));
|
||||
}
|
||||
} else {
|
||||
species = this.dex.species.get(item.megaStone);
|
||||
typeTable = typeTable.filter(type => species.types.includes(type));
|
||||
}
|
||||
}
|
||||
if (item.id === "ultranecroziumz" && species.baseSpecies === "Necrozma") {
|
||||
species = this.dex.species.get("Necrozma-Ultra");
|
||||
|
|
@ -1548,9 +1556,17 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
|
|||
}
|
||||
color = species.color;
|
||||
const item = this.dex.items.get(set.item);
|
||||
if (item.megaStone && species.baseSpecies === item.megaEvolves) {
|
||||
species = this.dex.species.get(item.megaStone);
|
||||
color = species.color;
|
||||
if (item.megaStone) {
|
||||
if (Array.isArray(item.megaStone)) {
|
||||
const index = (item.megaEvolves as string[]).indexOf(species.name);
|
||||
if (index >= 0) {
|
||||
species = this.dex.species.get(item.megaStone[index]);
|
||||
color = species.color;
|
||||
}
|
||||
} else {
|
||||
species = this.dex.species.get(item.megaStone);
|
||||
color = species.color;
|
||||
}
|
||||
}
|
||||
if (item.id === "ultranecroziumz" && species.baseSpecies === "Necrozma") {
|
||||
species = this.dex.species.get("Necrozma-Ultra");
|
||||
|
|
@ -2652,8 +2668,10 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
|
|||
}
|
||||
if (set.item && this.dex.items.get(set.item).megaStone) {
|
||||
const item = this.dex.items.get(set.item);
|
||||
if (item.megaEvolves === species.baseSpecies) {
|
||||
species = this.dex.species.get(item.megaStone);
|
||||
if (item.megaEvolves?.includes(species.name)) {
|
||||
species = this.dex.species.get(Array.isArray(item.megaEvolves) ?
|
||||
(item.megaStone as string[])[item.megaEvolves.indexOf(species.name)] :
|
||||
item.megaStone as string);
|
||||
}
|
||||
}
|
||||
if (this.ruleTable.isRestrictedSpecies(species) ||
|
||||
|
|
@ -2675,7 +2693,11 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
|
|||
}
|
||||
if (set.item) {
|
||||
const item = this.dex.items.get(set.item);
|
||||
if (item.megaEvolves === set.species) godSpecies = this.dex.species.get(item.megaStone);
|
||||
if (item.megaEvolves?.includes(set.species)) {
|
||||
godSpecies = this.dex.species.get(Array.isArray(item.megaEvolves) ?
|
||||
(item.megaStone as string[])[item.megaEvolves.indexOf(set.species)] :
|
||||
item.megaStone as string);
|
||||
}
|
||||
if (["Zacian", "Zamazenta"].includes(godSpecies.baseSpecies) && item.id.startsWith('rusted')) {
|
||||
godSpecies = this.dex.species.get(set.species + "-Crowned");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,10 +55,10 @@ export function crashlogger(
|
|||
}
|
||||
}
|
||||
|
||||
console.error(`\nCRASH: ${stack}\n`);
|
||||
console.error(`\n[${Date.now()}] CRASH: ${stack}\n`);
|
||||
const out = fs.createWriteStream(logPath, { flags: 'a' });
|
||||
out.on('open', () => {
|
||||
out.write(`\n${stack}\n`);
|
||||
out.write(`\n[${Date.now()}] ${stack}\n`);
|
||||
out.end();
|
||||
}).on('error', (err: Error) => {
|
||||
console.error(`\nSUBCRASH: ${err.stack}\n`);
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ export class QueryProcessWrapper<T, U> implements ProcessWrapper {
|
|||
this.process.on('message', (message: string) => {
|
||||
if (message.startsWith('THROW\n')) {
|
||||
const error = new Error();
|
||||
error.stack = message.slice(6);
|
||||
error.stack = `[${this.process.pid}] ${message.slice(6)}`;
|
||||
throw error;
|
||||
}
|
||||
|
||||
|
|
@ -239,7 +239,7 @@ export class StreamProcessWrapper implements ProcessWrapper {
|
|||
this.process.on('message', (message: string) => {
|
||||
if (message.startsWith('THROW\n')) {
|
||||
const error = new Error();
|
||||
error.stack = message.slice(6);
|
||||
error.stack = `[${this.process.pid}] ${message.slice(6)}`;
|
||||
throw error;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -169,6 +169,7 @@ export class SQLDatabaseManager extends QueryProcessManager<DatabaseQuery, any>
|
|||
if (!this.isParentProcess) this.setupDatabase();
|
||||
}
|
||||
private onError(err: Error, query: DatabaseQuery) {
|
||||
err.message += ` [process ${process.pid}]`;
|
||||
if (this.options.onError) {
|
||||
const result = this.options.onError(err, query, false);
|
||||
if (result) return result;
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user