diff --git a/config/formats.ts b/config/formats.ts index c53d43e67e..f2956031df 100644 --- a/config/formats.ts +++ b/config/formats.ts @@ -2809,17 +2809,6 @@ export const Formats: FormatList = [ this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]'); }, }, - /* - { - name: "[Gen 8] Ink's Winter Wonderland", - desc: `Play around both your opponent and the treacherous weather conditions in this randomized micrometa!`, - mod: 'inksrandbats', - team: 'random', - ruleset: ['Dynamax Clause', 'Obtainable', 'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Freeze Clause Mod', 'Permasnow'], - searchShow: false, - challengeShow: false, - }, - */ // Non-Smogon Mods { section: "Non-Smogon Mods", diff --git a/data/mods/inksdynamaxadventure/abilities.ts b/data/mods/inksandboxy/abilities.ts similarity index 100% rename from data/mods/inksdynamaxadventure/abilities.ts rename to data/mods/inksandboxy/abilities.ts diff --git a/data/mods/inksdynamaxadventure/formats-data.ts b/data/mods/inksandboxy/formats-data.ts similarity index 76% rename from data/mods/inksdynamaxadventure/formats-data.ts rename to data/mods/inksandboxy/formats-data.ts index 1c56bbd634..388776daa5 100644 --- a/data/mods/inksdynamaxadventure/formats-data.ts +++ b/data/mods/inksandboxy/formats-data.ts @@ -29,9 +29,6 @@ export const FormatsData: {[k: string]: ModdedFormatsData} = { spectriersoul: { tier: "NEW", }, - falinks: { - tier: "NEW", - }, decidueyemega: { tier: "NEW", }, @@ -47,4 +44,22 @@ export const FormatsData: {[k: string]: ModdedFormatsData} = { bunslinger: { tier: "NEW", }, + stalagmight: { + tier: "NEW", + }, + stalactice: { + tier: "NEW", + }, + magmalodon: { + tier: "NEW", + }, + blizzeraph: { + tier: "NEW", + }, + primchilla: { + tier: "NEW", + }, + chemacaw: { + tier: "NEW", + }, }; \ No newline at end of file diff --git a/data/mods/inksdynamaxadventure/items.ts b/data/mods/inksandboxy/items.ts similarity index 95% rename from data/mods/inksdynamaxadventure/items.ts rename to data/mods/inksandboxy/items.ts index b1cbd721e3..0db90444b7 100644 --- a/data/mods/inksdynamaxadventure/items.ts +++ b/data/mods/inksandboxy/items.ts @@ -2,26 +2,10 @@ export const Items: {[k: string]: ModdedItemData} = { //------------------------------------------- //ITEMS EDITED FOR COMPATIBILITY //------------------------------------------- - heavydutyboots: { - inherit: true, - desc: "When switching in, the holder is unaffected by grounded hazards on its side of the field.", - // Hazard Immunity implemented in moves.js - }, //------------------------------------------- //NEW ITEMS //------------------------------------------- - hardhat: { - name: "Hard Hat", - spritenum: 417, - fling: { - basePower: 80, - }, - num: 1120, - gen: 8, - desc: "When switching in, the holder is unaffected by airborne hazards on its side of the field.", - // Hazard Immunity implemented in moves.js - }, //------------------------------------------- //SIGNATURE/MEGA STONE diff --git a/data/mods/inksdynamaxadventure/learnsets.ts b/data/mods/inksandboxy/learnsets.ts similarity index 100% rename from data/mods/inksdynamaxadventure/learnsets.ts rename to data/mods/inksandboxy/learnsets.ts diff --git a/data/mods/inksdynamaxadventure/moves.ts b/data/mods/inksandboxy/moves.ts similarity index 86% rename from data/mods/inksdynamaxadventure/moves.ts rename to data/mods/inksandboxy/moves.ts index 06ffca237f..1a33006c8a 100644 --- a/data/mods/inksdynamaxadventure/moves.ts +++ b/data/mods/inksandboxy/moves.ts @@ -3,36 +3,6 @@ export const Moves: {[k: string]: ModdedMoveData} = { //MOVES EDITED FOR COMPATIBILITY //Hazard/screen removal, etc //------------------------------------------ - //For item compatibility: - stealthrock: { - num: 446, - accuracy: true, - basePower: 0, - category: "Status", - desc: "Sets up a hazard on the opposing side of the field, damaging each opposing Pokemon that switches in. Fails if the effect is already active on the opposing side. Foes lose 1/32, 1/16, 1/8, 1/4, or 1/2 of their maximum HP, rounded down, based on their weakness to the Rock type; 0.25x, 0.5x, neutral, 2x, or 4x, respectively. Can be removed from the opposing side if any opposing Pokemon uses Rapid Spin or Defog successfully, or is hit by Defog.", - shortDesc: "Hurts foes on switch-in. Factors Rock weakness.", - name: "Stealth Rock", - pp: 20, - priority: 0, - flags: {reflectable: 1}, - sideCondition: 'stealthrock', - condition: { - // this is a side condition - onStart(side) { - this.add('-sidestart', side, 'move: Stealth Rock'); - }, - onSwitchIn(pokemon) { - if (pokemon.hasItem('hardhat')) return; - const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6); - this.damage(pokemon.maxhp * Math.pow(2, typeMod) / 8); - }, - }, - secondary: null, - target: "foeSide", - type: "Rock", - zMove: {boost: {def: 1}}, - contestType: "Cool", - }, //For new hazard/screen compatibility: gmaxwindrage: { num: 1000, @@ -284,31 +254,6 @@ export const Moves: {[k: string]: ModdedMoveData} = { //------------------------------------------ //EDITED MOVES //------------------------------------------ - gmaxfinale: { - num: 1000, - accuracy: true, - basePower: 10, - category: "Physical", - desc: "Power is equal to the base move's Max Move power. If this move is successful, each Pokemon on the user's side restores 1/6 of its current maximum HP, even if they have a substitute.", - shortDesc: "Base move affects power. Allies: +1/6 max HP.", - name: "G-Max Finale", - pp: 5, - priority: 0, - flags: {heal: 1}, - isMax: "Alcremie", - self: { - onHit(target, source, move) { - for (const pokemon of source.side.active) { - this.heal(pokemon.maxhp / 6, pokemon, source, move); - } - }, - }, - secondary: null, - target: "adjacentFoe", - type: "Fairy", - contestType: "Cool", - }, - gmaxsmite: { num: 1000, accuracy: true, @@ -349,41 +294,6 @@ export const Moves: {[k: string]: ModdedMoveData} = { type: "Fairy", contestType: "Cool", }, - gmaxhydrosnipe: { - num: 1000, - accuracy: true, - basePower: 10, - category: "Physical", - desc: "Power is equal to the base move's Max Move power. This move ignores the abilities of opposing Pokemon.", - shortDesc: "Base move affects power. Ignores abilities.", - name: "G-Max Hydrosnipe", - pp: 5, - priority: 0, - flags: {}, - onModifyMove(move, pokemon, target) { - const atk = pokemon.getStat('atk', false, true); - const spa = pokemon.getStat('spa', false, true); - const def = target.getStat('def', false, true); - const spd = target.getStat('spd', false, true); - const physical = Math.floor(Math.floor(Math.floor(Math.floor(2 * pokemon.level / 5 + 2) * 90 * atk) / def) / 50); - const special = Math.floor(Math.floor(Math.floor(Math.floor(2 * pokemon.level / 5 + 2) * 90 * spa) / spd) / 50); - if (physical > special || (physical === special && this.random(2) === 0)) { - move.category = 'Physical'; - move.flags.contact = 1; - } - }, - onHit(target, source, move) { - this.hint(move.category + " Hydrosnipe"); - }, - onAfterSubDamage(damage, target, source, move) { - this.hint(move.category + " Hydrosnipe"); - }, - isMax: "Inteleon", - secondary: null, - target: "adjacentFoe", - type: "Water", - contestType: "Cool", - }, snipeshot: { num: 745, @@ -511,47 +421,6 @@ export const Moves: {[k: string]: ModdedMoveData} = { //------------------------------------------ //NEW MOVES //------------------------------------------ - gmaxbaddybad: { - num: 1000, - accuracy: true, - basePower: 10, - category: "Physical", - desc: "This move summons Reflect for 5 turns upon use.", - shortDesc: "Summons Reflect.", - name: "G-Max Baddy Bad", - pp: 5, - priority: 0, - flags: {}, - isMax: "Eevee", - self: { - sideCondition: 'reflect', - }, - secondary: null, - target: "adjacentFoe", - type: "Dark", - contestType: "Cool", - }, - - gmaxglitzyglow: { - num: 1000, - accuracy: true, - basePower: 10, - category: "Physical", - desc: "This move summons Light Screen for 5 turns upon use.", - shortDesc: "Summons Light Screen.", - name: "G-Max Glitzy Glow", - pp: 5, - priority: 0, - flags: {}, - isMax: "Eevee", - self: { - sideCondition: 'lightscreen', - }, - secondary: null, - target: "adjacentFoe", - type: "Psychic", - contestType: "Cool", - }, snowfill: { num: 0.1, diff --git a/data/mods/inksandboxy/pokedex.ts b/data/mods/inksandboxy/pokedex.ts new file mode 100644 index 0000000000..9c1447cd8d --- /dev/null +++ b/data/mods/inksandboxy/pokedex.ts @@ -0,0 +1,439 @@ +export const Pokedex: {[speciesid: string]: ModdedSpeciesData} = { + + //------------------------------------------- + //EDITED POKEMON + NEW MEGAS + //------------------------------------------- + moltresgalar: { + num: 146, + name: "Moltres-Galar", + baseSpecies: "Moltres", + forme: "Galar", + types: ["Dark", "Flying"], + gender: "N", + //90/85/90/100/125/90 + baseStats: {hp: 90, atk: 100, def: 90, spa: 85, spd: 125, spe: 90}, + abilities: {0: "Berserk"}, + heightm: 2, + weightkg: 66, + color: "Red", + eggGroups: ["Undiscovered"], + }, + + regieleki: { + num: 894, + name: "Regieleki", + types: ["Electric"], + gender: "N", + baseStats: {hp: 80, atk: 80, def: 70, spa: 80, spd: 70, spe: 200}, + abilities: {0: "Reinitialize", 1: "Transistor", H: "Plus"}, + heightm: 1.2, + weightkg: 145, + color: "Yellow", + eggGroups: ["Undiscovered"], + }, + regidrago: { + num: 895, + name: "Regidrago", + types: ["Dragon"], + gender: "N", + baseStats: {hp: 200, atk: 70, def: 80, spa: 70, spd: 80, spe: 80}, + abilities: {0: "Dragon's Maw", 1: "Dragon Overflow", H: "Minus"}, + heightm: 2.1, + weightkg: 200, + color: "Green", + eggGroups: ["Undiscovered"], + }, + + glastrier: { + num: 896, + name: "Glastrier", + types: ["Ice"], + gender: "N", + baseStats: {hp: 100, atk: 125, def: 130, spa: 85, spd: 110, spe: 30}, + abilities: {0: "Chilling Neigh", S: "Battle Bond"}, + heightm: 2.2, + weightkg: 800, + color: "White", + eggGroups: ["Undiscovered"], + otherFormes: ["Glastrier-Heart"], + // non-activated Battle Bond is forme 1, but PS does not currently distinguish it + formeOrder: ["Glastrier", "Glastrier", "Glastrier-Heart"], + }, + glastrierheart: { + num: 658, + name: "Glastrier-Heart", + baseSpecies: "Glastrier", + forme: "Heart", + types: ["Ice", "Psychic"], + baseStats: {hp: 100, atk: 155, def: 160, spa: 95, spd: 130, spe: 40}, + abilities: {0: "Battle Bond"}, + heightm: 2.2, + weightkg: 800, + color: "White", + eggGroups: ["Undiscovered"], + requiredAbility: "Battle Bond", + battleOnly: "Glastrier", + }, + spectrier: { + num: 897, + name: "Spectrier", + types: ["Ghost"], + gender: "N", + baseStats: {hp: 100, atk: 85, def: 50, spa: 130, spd: 90, spe: 125}, + abilities: {0: "Grim Neigh", S: "Battle Bond"}, + heightm: 2, + weightkg: 44.5, + color: "Black", + eggGroups: ["Undiscovered"], + otherFormes: ["Spectrier-Soul"], + // non-activated Battle Bond is forme 1, but PS does not currently distinguish it + formeOrder: ["Spectrier", "Spectrier", "Spectrier-Soul"], + }, + spectriersoul: { + num: 658, + name: "Spectrier-Soul", + baseSpecies: "Spectrier", + forme: "Soul", + types: ["Ghost", "Psychic"], + baseStats: {hp: 100, atk: 95, def: 70, spa: 160, spd: 110, spe: 145}, + abilities: {0: "Battle Bond"}, + heightm: 2, + weightkg: 44.5, + color: "Black", + eggGroups: ["Undiscovered"], + requiredAbility: "Battle Bond", + battleOnly: "Spectrier", + }, + froslass: { + inherit: true, + otherFormes: ["Froslass-Mega"], + formeOrder: ["Froslass", "Froslass-Mega"], + }, + froslassmega: { + num: 478, + name: "Froslass-Mega", + baseSpecies: "Froslass", + forme: "Mega", + types: ["Ice", "Ghost"], + baseStats: {hp: 70, atk: 100, def: 70, spa: 110, spd: 110, spe: 120}, + abilities: {0: "Dry Ice"}, + heightm: 1.3, + weightkg: 26.6, + color: "White", + requiredItem: "Froslassite", + }, + + decidueye: { + inherit: true, + abilities: {0: "Overgrow", 1: "Concealment", H: "Long Reach"}, + otherFormes: ["Decidueye-Mega"], + formeOrder: ["Decidueye", "Decidueye-Mega"], + }, + decidueyemega: { + num: 724, + name: "Decidueye-Mega", + baseSpecies: "Decidueye", + forme: "Mega", + types: ["Grass", "Ghost"], + genderRatio: {M: 0.875, F: 0.125}, + baseStats: {hp: 78, atk: 127, def: 95, spa: 120, spd: 120, spe: 90}, + abilities: {0: "Illusion"}, + heightm: 1.6, + weightkg: 36.6, + color: "Brown", + requiredItem: "Deciduite", + }, + grapploct: { + num: 853, + name: "Grapploct", + types: ["Fighting"], + baseStats: {hp: 118, atk: 80, def: 90, spa: 70, spd: 80, spe: 42}, + abilities: {0: "Limber", 1: "Regenerator", H: "Technician"}, + heightm: 1.6, + weightkg: 39, + color: "Blue", + prevo: "Clobbopus", + evoType: "levelMove", + evoMove: "Taunt", + eggGroups: ["Water 1", "Human-Like"], + }, + + frosmoth: { + num: 873, + name: "Frosmoth", + types: ["Ice", "Bug"], + baseStats: {hp: 60, atk: 55, def: 90, spa: 105, spd: 90, spe: 75}, + abilities: {0: "Shield Dust", 1: "Fur Coat", H: "Ice Scales"}, + heightm: 1.3, + weightkg: 42, + color: "White", + prevo: "Snom", + evoType: "levelFriendship", + evoCondition: "at night", + eggGroups: ["Bug"], + }, + dugtrio: { + inherit: true, + otherFormes: ["Dugtrio-Alola", "Dugtrio-Mega"], + formeOrder: ["Dugtrio", "Dugtrio-Alola", "Dugtrio-Mega"], + }, + dugtriomega: { + num: 51, + name: "Dugtrio", + types: ["Ground", "Bug"], + baseStats: {hp: 35, atk: 150, def: 90, spa: 50, spd: 70, spe: 130}, + abilities: {0: "Sap Sipper"}, + heightm: 0.7, + weightkg: 33.3, + color: "Brown", + requiredItem: "Dugtrionite", + }, + + //------------------------------------------- + //NEW POKEMON + //------------------------------------------- + snowshoo: { + num: 99.1, + name: "Snowshoo", + types: ["Normal", "Ice"], + baseStats: {hp: 60, atk: 65, def: 102, spa: 53, spd: 85, spe: 30}, + abilities: {0: "Gluttony", 1: "Cheek Pouch", H: "Flurry Down"}, + heightm: 0.4, + weightkg: 5.5, + color: "White", + evos: ["Harefrost"], + eggGroups: ["Field"], + }, + harefrost: { + num: 99.2, + name: "Harefrost", + types: ["Normal", "Ice"], + baseStats: {hp: 80, atk: 95, def: 117, spa: 85, spd: 90, spe: 45}, + abilities: {0: "Slush Rush", 1: "Cheek Pouch", H: "Flurry Down"}, + heightm: 1, + weightkg: 42.4, + color: "White", + prevo: ["Snowshoo"], + eggGroups: ["Field"], + }, + neuroboxin: { + num: 99.3, + name: "Neuroboxin", + types: ["Poison", "Fighting"], + baseStats: {hp: 114, atk: 72, def: 96, spa: 85, spd: 81, spe: 109}, + abilities: {0: "Infiltrator", 1: "Sticky Hold", H: "Trace"}, + heightm: 1.6, + weightkg: 39, + color: "Purple", + }, + shadeo: { + num: 99.4, + name: "Shadeo", + gender: "N", + types: ["Ghost"], + baseStats: {hp: 70, atk: 105, def: 60, spa: 70, spd: 70, spe: 105}, + abilities: {0: "Prankster"}, + heightm: 0.5, + weightkg: 17, + color: "Gray", + }, + pocketwatch: { + num: 99.5, + name: "UB Pocketwatch", + gender: "N", + types: ["Psychic", "Fighting"], + baseStats: {hp: 71, atk: 127, def: 127, spa: 23, spd: 23, spe: 199}, + abilities: {0: "Beast Boost"}, + heightm: 1, + weightkg: 34.5, + color: "Brown", + }, + finneon: { + inherit: true, + otherFormes: ["Finneon-Alola"], + formeOrder: ["Finneon", "Finneon-Alola"], + }, + finneonalola: { + num: 456, + name: "Finneon-Alola", + baseSpecies: "Finneon", + forme: "Alola", + types: ["Water", "Fairy"], + baseStats: {hp: 49, atk: 49, def: 56, spa: 49, spd: 61, spe: 66}, + abilities: {0: "Swift Swim", 1: "Storm Drain", H: "Pastel Veil"}, + heightm: 0.4, + weightkg: 7, + color: "Blue", + evos: ["Lumineon-Alola"], + eggGroups: ["Water 2", "Fairy"], + }, + lumineon: { + inherit: true, + otherFormes: ["Lumineon-Alola"], + formeOrder: ["Lumineon", "Lumineon-Alola"], + }, + lumineonalola: { + num: 457, + name: "Lumineon-Alola", + baseSpecies: "Lumineon", + forme: "Alola", + types: ["Water", "Fairy"], + baseStats: {hp: 69, atk: 69, def: 76, spa: 69, spd: 86, spe: 91}, + abilities: {0: "Swift Swim", 1: "Storm Drain", H: "Pastel Veil"}, + heightm: 1.2, + weightkg: 24, + color: "Blue", + prevo: "Finneon-Alola", + evoLevel: 31, + eggGroups: ["Water 2", "Fairy"], + }, + teravole: { + num: 99.6, + name: "Teravole", + types: ["Electric"], + baseStats: {hp: 79, atk: 42, def: 94, spa: 89, spd: 124, spe: 67}, + abilities: {0: "Regenerator", 1: "Static", H: "Triage"}, + heightm: 0.5, + weightkg: 7.9, + color: "Yellow", + eggGroups: ["Field", "Fairy"], + }, + emblob: { + num: 99.7, + name: "Emblob", + gender: "N", + types: ["Fire"], + baseStats: {hp: 55, atk: 75, def: 100, spa: 75, spd: 100, spe: 70}, + abilities: {0: "Innards Out"}, + heightm: 0.3, + weightkg: 4, + color: "Red", + eggGroups: ["Mineral"], + }, + bunslinger: { + num: 99.8, + name: "Bunslinger", + types: ["Normal", "Grass"], + baseStats: {hp: 70, atk: 115, def: 86, spa: 66, spd: 66, spe: 84}, + abilities: {0: "Skill Link", 1: "Technician", H: "Quick Draw"}, + heightm: 1.2, + weightkg: 33.3, + color: "Brown", + eggGroups: ["Field", "Human-Like"], + }, + stalagmight: { + num: 99.9, + name: "Stalagmight", + types: ["Rock"], + baseStats: {hp: 45, atk: 81, def: 118, spa: 35, spd: 47, spe: 118}, + abilities: {0: "Sturdy", 1: "Contrary", H: "Limber"}, + heightm: 1.2, + weightkg: 56, + color: "Brown", + eggGroups: ["Mineral"], + }, + stalactice: { + num: 100.1, + name: "Stalactice", + types: ["Ice"], + baseStats: {hp: 65, atk: 91, def: 78, spa: 45, spd: 118, spe: 47}, + abilities: {0: "Sturdy", 1: "Contrary", H: "Water Veil"}, + heightm: 1.2, + weightkg: 36.3, + color: "White", + eggGroups: ["Mineral"], + }, + magmalodon: { + num: 100.2, + name: "Magmalodon", + gender: "N", + types: ["Fire", "Dragon"], + //category: "Magma Mantle", + baseStats: {hp: 85, atk: 67, def: 111, spa: 82, spd: 111, spe: 94}, + abilities: {0: "Clear Body", H: "Immunity"}, + heightm: 1.6, + weightkg: 139, + color: "Red", + eggGroups: ["Undiscovered"], + }, + blizzeraph: { + num: 100.3, + name: "Blizzeraph", + gender: "N", + types: ["Ice", "Flying"], + //category: "Snow Angel", + baseStats: {hp: 80, atk: 81, def: 103, spa: 87, spd: 86, spe: 113}, + abilities: {0: "Competitive", H: "Magic Guard"}, + heightm: 1.7, + weightkg: 55.4, + color: "Blue", + eggGroups: ["Undiscovered"], + }, + primchilla: { + num: 100.4, + name: "Primchilla", + types: ["Normal"], + //category: "Fashionista", + baseStats: {hp: 85, atk: 105, def: 70, spa: 85, spd: 70, spe: 115}, + abilities: {0: "Frisk"}, + heightm: 0.4, + weightkg: 7.5, + color: "White", + eggGroups: ["Field"], + otherFormes: ["Primchilla-Specs", "Primchilla-Band", "Primchilla-Scarf"], + formeOrder: ["Primchilla", "Primchilla-Specs", "Primchilla-Band", "Primchilla-Scarf"], + }, + primchillaspecs: { + num: 100.4, + name: "Primchilla-Specs", + baseSpecies: "Primchilla", + forme: "Specs", + types: ["Normal"], + baseStats: {hp: 85, atk: 95, def: 60, spa: 125, spd: 60, spe: 105}, + abilities: {0: "Compound Eyes"}, + heightm: 0.4, + weightkg: 7.5, + color: "White", + eggGroups: ["Field"], + battleOnly: "Primchilla", + }, + primchillaband: { + num: 100.4, + name: "Primchilla-Band", + baseSpecies: "Primchilla", + forme: "Band", + types: ["Normal"], + baseStats: {hp: 85, atk: 135, def: 75, spa: 75, spd: 75, spe: 85}, + abilities: {0: "Regenerator"}, + heightm: 0.4, + weightkg: 7.5, + color: "White", + eggGroups: ["Field"], + battleOnly: "Primchilla", + }, + primchillascarf: { + num: 100.4, + name: "Primchilla-Scarf", + baseSpecies: "Primchilla", + forme: "Scarf", + types: ["Normal"], + baseStats: {hp: 85, atk: 110, def: 60, spa: 110, spd: 60, spe: 105}, + abilities: {0: "Fur Coat"}, + heightm: 0.4, + weightkg: 7.5, + color: "White", + eggGroups: ["Field"], + battleOnly: "Primchilla", + }, + chemacaw: { + num: 100.5, + name: "Chemacaw", + types: ["Poison", "Fire"], + baseStats: {hp: 55, atk: 115, def: 35, spa: 127, spd: 101, spe: 117}, + abilities: {0: "Poison Touch", 1: "Aftermath", H: "Infiltrator"}, + heightm: 1.2, + weightkg: 35, + color: "Black", + eggGroups: ["Undiscovered"], + }, +} \ No newline at end of file diff --git a/data/mods/inksandboxy/rulesets.ts b/data/mods/inksandboxy/rulesets.ts new file mode 100644 index 0000000000..6008acc957 --- /dev/null +++ b/data/mods/inksandboxy/rulesets.ts @@ -0,0 +1,565 @@ +export const Formats: {[k: string]: FormatData} = { + /* + const IconCategories: {[k: string]: any} = { + regions: { + kanto: {}, + johto: {}, + hoenn: {}, + sinnoh: {}, + unova: {}, + kalos: {}, + alola: {}, + galar: {} + }, + types: { + bug: { + favored: ["alder", "emmet", "lian", "all:ninjaboy"], + exclusive: ["aaron", "all:bugcatcher", "all:bugmaniac", "all:bugsy", "burgh", "guzma", + "viola"] + }, + dark: { + favored: ["adaman", "archer", "all:archie", "cyrus", "all:gladion", "marnie", + "all:maxie", "all:ninjaboy", "shadowtriad", "all:aqua", "all:magma", "all:yellgrunt"], + exclusive: ["all:grimsley", "all:karen", "nanu", "piers", "all:sidney"] + }, + dragon: { + favored: ["adaman", "all:cynthia", "irida", "all:lance", "nurseryaide", "all:veteran", + "volo", "zinnia"], + exclusive: ["all:clair", "all:dragontamer", "all:drake", "drasna", "drayden", "iris", + "raihan"] + }, + electric: { + favored: ["all:cameraman", "all:cyclist", "emmet", "all:guitarist", "all:rocker", + "all:supernerd"], + exclusive: ["clemont", "all:elesa", "all:ltsurge", "volkner", "all:wattson", "sophocles"] + }, + fairy: { + favored: ["bede", "cogita"], + exclusive: ["bede-leader", "all:furisode", "all:mina", "opal"] + }, + fighting: { + favored: ["all:mustard"], + exclusive: ["all:battlegirl", "bea", "all:blackbelt", "all:brawly", "all:bruno", + "all:chuck", "hala", "korrina", "marshal"] + }, + fire: { + favored: ["all:magma", "all:maxie"], + exclusive: ["all:blaine", "chili", "all:firebreather", "all:flannery", "flint", "kabu", + "kiawe", "malva"] + }, + flying: { + favored: ["all:cyclist", "cyrus", "all:lance"], + exclusive: ["all:birdkeeper", "falkner", "kahili", "pilot", "skyla", "all:winona"] + }, + ghost: { + favored: [], + exclusive: ["acerola", "all:agatha", "allister", "all:channeler", "fantina", + "all:hexmaniac", "all:phoebe", "shauntal"] + }, + grass: { + favored: ["adaman"], + exclusive: ["all:aromalady", "cilan", "all:erika", "gardenia", "mallow", "all:milo", + "ramos"] + }, + ground: { + favored: ["all:giovanni", "all:hiker", "all:ruinmaniac"], + exclusive: ["bertha", "clay", "hapu"] + }, + ice: { + favored: ["all:acetrainersnow", "irida", "workerice"], + exclusive: ["all:boarder", "brycen", "candice", "glacia", "all:lorelei", "melony", + "all:pryce", "all:skier", "wulfric"] + }, + normal: { + favored: ["all:anabel", "calaba", "cheren", "mai", "mars", "all:youngster"], + exclusive: ["cheren-gen5bw2", "ilima", "lenora", "all:norman", "all:whitney"] + }, + poison: { + favored: ["archer", "all:ninjaboy", "oleana"], + exclusive: ["jupiter", "all:koga", "petrel", "plumeria", "proton", "roxie"] + }, + psychic: { + favored: ["all:anabel", "bede-leader", "irida", "all:ruinmaniac", "all:wally"], + exclusive: ["avery", "bede", "all:caitlin", "faba", "all:liza", "all:tate", "lucian", + "olympia", "all:psychic", "all:sabrina", "all:will"] + }, + rock: { + favored: ["emmet", "all:hiker", "lian", "peonia", "all:ruinmaniac"], + exclusive: ["all:brock", "gordie", "olivia", "roark", "roxanne"] + }, + steel: { + favored: ["adaman", "ingo", "all:steven", "all:supernerd"], + exclusive: ["byron", "jasmine:all", "molayne", "peony", "rose", "wikstrom"] + }, + water: { + favored: ["adaman", "all:archie", "irida", "all:parasollady", "all:sailor", "all:aqua"], + exclusive: ["crasherwake", "all:fisher", "all:juan", "lana", "marlon", "all:misty", + "nessa", "siebold", "all:sisandbro", "all:swimmer", "all:tuber", "all:wallace"] + } + }, + }; + */ + sandboxmod: { + effectType: 'Rule', + name: 'Sandbox Mod', + desc: "Allows customization of a Pokémon's types and stats based on its nickname.", + onBegin() { //This section handles custom Megas using the sandbox mega stones. + for (const pokemon of this.getAllPokemon()) { + if (!pokemon.set.name) return; + if (pokemon.set.name.substr(0, 1) === "*") { + if (['Mega Stone 1', 'Mega Stone 2', 'Mega Stone H'].includes(pokemon.getItem().name)) { + let newSpecies = this.dex.deepClone(pokemon.species); + switch (pokemon.set.name.substr(1, 1)) {//Primary type + case "a": + case "A": + newSpecies.types[0] = "Dragon"; + break; + case "b": + case "B": + newSpecies.types[0] = "Bug"; + break; + case "c": + case "C": + newSpecies.types[0] = "Psychic"; + break; + case "d": + case "D": + newSpecies.types[0] = "Dark"; + break; + case "e": + case "E": + newSpecies.types[0] = "Electric"; + break; + case "f": + case "F": + newSpecies.types[0] = "Fairy"; + break; + case "g": + case "G": + newSpecies.types[0] = "Grass"; + break; + case "h": + case "H": + newSpecies.types[0] = "Fighting"; + break; + case "i": + case "I": + newSpecies.types[0] = "Ice"; + break; + case "k": + case "K": + newSpecies.types[0] = "Rock"; + break; + case "n": + case "N": + newSpecies.types[0] = "Normal"; + break; + case "o": + case "O": + newSpecies.types[0] = "Ghost"; + break; + case "p": + case "P": + newSpecies.types[0] = "Poison"; + break; + case "r": + case "R": + newSpecies.types[0] = "Fire"; + break; + case "s": + case "S": + newSpecies.types[0] = "Steel"; + break; + case "u": + case "U": + newSpecies.types[0] = "Ground"; + break; + case "w": + case "W": + newSpecies.types[0] = "Water"; + break; + case "y": + case "Y": + newSpecies.types[0] = "Flying"; + break; + case "z": + case "Z": + newSpecies.types[0] = ""; + break; + } + switch (pokemon.set.name.substr(2, 1)) {//Secondary type + case "a": + case "A": + newSpecies.types[1] = "Dragon"; + break; + case "b": + case "B": + newSpecies.types[1] = "Bug"; + break; + case "c": + case "C": + newSpecies.types[1] = "Psychic"; + break; + case "d": + case "D": + newSpecies.types[1] = "Dark"; + break; + case "e": + case "E": + newSpecies.types[1] = "Electric"; + break; + case "f": + case "F": + newSpecies.types[1] = "Fairy"; + break; + case "g": + case "G": + newSpecies.types[1] = "Grass"; + break; + case "h": + case "H": + newSpecies.types[1] = "Fighting"; + break; + case "i": + case "I": + newSpecies.types[1] = "Ice"; + break; + case "k": + case "K": + newSpecies.types[1] = "Rock"; + break; + case "n": + case "N": + newSpecies.types[1] = "Normal"; + break; + case "o": + case "O": + newSpecies.types[1] = "Ghost"; + break; + case "p": + case "P": + newSpecies.types[1] = "Poison"; + break; + case "r": + case "R": + newSpecies.types[1] = "Fire"; + break; + case "s": + case "S": + newSpecies.types[1] = "Steel"; + break; + case "u": + case "U": + newSpecies.types[1] = "Ground"; + break; + case "w": + case "W": + newSpecies.types[1] = "Water"; + break; + case "y": + case "Y": + newSpecies.types[1] = "Flying"; + break; + case "z": + case "Z": + newSpecies.types[1] = ""; + break; + } + //Use isNaN() (lit. Not a Number) to allow for not modifying specific base stats if we want, by just inputting like, xxx + if (!isNaN(pokemon.set.name.substr(3, 3))) newSpecies.baseStats.atk = pokemon.set.name.substr(3, 3); + if (!isNaN(pokemon.set.name.substr(6, 3))) newSpecies.baseStats.def = pokemon.set.name.substr(6, 3); + if (!isNaN(pokemon.set.name.substr(9, 3))) newSpecies.baseStats.spa = pokemon.set.name.substr(9, 3); + if (!isNaN(pokemon.set.name.substr(12, 3))) newSpecies.baseStats.spd = pokemon.set.name.substr(12, 3); + if (!isNaN(pokemon.set.name.substr(15, 3))) newSpecies.baseStats.spe = pokemon.set.name.substr(15, 3); + newSpecies.baseSpecies = pokemon.baseSpecies; + newSpecies.abilities[0] = pokemon.ability; + newSpecies.forme = 'Mega'; + newSpecies.name = pokemon.species.name + '-Mega'; + pokemon.moddedMega = newSpecies; + pokemon.canMegaEvo = pokemon.moddedMega; + const abilities = pokemon.species.abilities; + let ability = abilities[0]; + if (pokemon.getItem().name === 'Mega Stone 2' && abilities[1]) ability = abilities[1]; + if (pokemon.getItem().name === 'Mega Stone H' && abilities['H']) ability = abilities['H']; + pokemon.setAbility(ability); + pokemon.baseAbility = ability as ID; + pokemon.ability = ability as ID; + } + } + } + }, + onModifySpecies(species, target, source) { + if (!target.set.name) return; + if (source || !target?.side || ['Mega Stone 1', 'Mega Stone 2', 'Mega Stone H'].includes(target.getItem().name)) return; + //See if nickname+species qualifies for any presets/easter eggs, set a variable to true + if (target.set.name.substr(0, 1) === "*") {//Add "or (var)" + let newSpecies = this.dex.deepClone(species); + //If (var), use preset instead and then return newSpecies + switch (target.set.name.substr(1, 1)) {//Primary type + case "a": + case "A": + newSpecies.types[0] = "Dragon"; + break; + case "b": + case "B": + newSpecies.types[0] = "Bug"; + break; + case "c": + case "C": + newSpecies.types[0] = "Psychic"; + break; + case "d": + case "D": + newSpecies.types[0] = "Dark"; + break; + case "e": + case "E": + newSpecies.types[0] = "Electric"; + break; + case "f": + case "F": + newSpecies.types[0] = "Fairy"; + break; + case "g": + case "G": + newSpecies.types[0] = "Grass"; + break; + case "h": + case "H": + newSpecies.types[0] = "Fighting"; + break; + case "i": + case "I": + newSpecies.types[0] = "Ice"; + break; + case "k": + case "K": + newSpecies.types[0] = "Rock"; + break; + case "n": + case "N": + newSpecies.types[0] = "Normal"; + break; + case "o": + case "O": + newSpecies.types[0] = "Ghost"; + break; + case "p": + case "P": + newSpecies.types[0] = "Poison"; + break; + case "r": + case "R": + newSpecies.types[0] = "Fire"; + break; + case "s": + case "S": + newSpecies.types[0] = "Steel"; + break; + case "u": + case "U": + newSpecies.types[0] = "Ground"; + break; + case "w": + case "W": + newSpecies.types[0] = "Water"; + break; + case "y": + case "Y": + newSpecies.types[0] = "Flying"; + break; + case "z": + case "Z": + newSpecies.types[0] = ""; + break; + } + switch (target.set.name.substr(2, 1)) {//Secondary type + case "a": + case "A": + newSpecies.types[1] = "Dragon"; + break; + case "b": + case "B": + newSpecies.types[1] = "Bug"; + break; + case "c": + case "C": + newSpecies.types[1] = "Psychic"; + break; + case "d": + case "D": + newSpecies.types[1] = "Dark"; + break; + case "e": + case "E": + newSpecies.types[1] = "Electric"; + break; + case "f": + case "F": + newSpecies.types[1] = "Fairy"; + break; + case "g": + case "G": + newSpecies.types[1] = "Grass"; + break; + case "h": + case "H": + newSpecies.types[1] = "Fighting"; + break; + case "i": + case "I": + newSpecies.types[1] = "Ice"; + break; + case "k": + case "K": + newSpecies.types[1] = "Rock"; + break; + case "n": + case "N": + newSpecies.types[1] = "Normal"; + break; + case "o": + case "O": + newSpecies.types[1] = "Ghost"; + break; + case "p": + case "P": + newSpecies.types[1] = "Poison"; + break; + case "r": + case "R": + newSpecies.types[1] = "Fire"; + break; + case "s": + case "S": + newSpecies.types[1] = "Steel"; + break; + case "u": + case "U": + newSpecies.types[1] = "Ground"; + break; + case "w": + case "W": + newSpecies.types[1] = "Water"; + break; + case "y": + case "Y": + newSpecies.types[1] = "Flying"; + break; + case "z": + case "Z": + newSpecies.types[1] = ""; + break; + } + if (target.set.name.length > 3) {//Allow compatibility for JUST changing the type; if the rest is blank, dont zero stats + let offset = 0; + let mods = ["Y", "Z", "y", "z", "+", "-"]; + /* + if (target.set.name.length > 18) {//Only account for HP if the name is longer than the old format (R.I.P.) + offset = 3; + //Use isNaN() to allow for not modifying specific base stats if we want, by just inputting like, xxx + if (!isNaN(target.set.name.substr(3, 3))) newSpecies.baseStats.hp = target.set.name.substr(3, 3); + } + */ + //Check to see if we want to ADD or SUB + if ( + target.set.name.substr(3, 3).toLowerCase() === "add" || + target.set.name.substr(3, 3).toLowerCase() === "sub" || + mods.includes(target.set.name.substr(3, 1)) + ) {//2 digit stat modifications + let sign = (target.set.name.substr(3, 3).toLowerCase() === "sub") ? -1 : 1; + //Individual modifier logic + let m = new Array(6).fill(sign); + if (mods.includes(target.set.name.substr(3, 1))) { + let key = Array.from(target.set.name.substr(3, 3)); + for (let k = 0; k < key.length; k++) { + //If lowercase (or -): negative. else positive + //If Z (or -): negative. else positive + m[k*2] = (key[k] === "+") ? 1 : + (key[k].toLowerCase() === key[k]) ? -1 : 1; + m[k*2 + 1] = (key[k] === "-") ? -1 : + (key[k].toLowerCase() === "z") ? -1 : 1; + } + } + if (!isNaN(target.set.name.substr(6, 2))) { + newSpecies.baseStats.hp = species.baseStats.hp + target.set.name.substr(6, 2)*m[0]; + } if (!isNaN(target.set.name.substr(8, 2))) { + newSpecies.baseStats.atk = species.baseStats.atk + target.set.name.substr(8, 2)*m[1]; + } if (!isNaN(target.set.name.substr(10, 2))) { + newSpecies.baseStats.def = species.baseStats.def + target.set.name.substr(10, 2)*m[2]; + } if (!isNaN(target.set.name.substr(12, 2))) { + newSpecies.baseStats.spa = species.baseStats.spa + target.set.name.substr(12, 2)*m[3]; + } if (!isNaN(target.set.name.substr(14, 2))) { + newSpecies.baseStats.spd = species.baseStats.spd + target.set.name.substr(14, 2)*m[4]; + } if (!isNaN(target.set.name.substr(16, 2))) { + newSpecies.baseStats.spe = species.baseStats.spe + target.set.name.substr(16, 2)*m[5]; + } + } + else {//3 digit stat assignments + if (!isNaN(target.set.name.substr(3 + offset, 3))) newSpecies.baseStats.atk = target.set.name.substr(3 + offset, 3); + if (!isNaN(target.set.name.substr(6 + offset, 3))) newSpecies.baseStats.def = target.set.name.substr(6 + offset, 3); + if (!isNaN(target.set.name.substr(9 + offset, 3))) newSpecies.baseStats.spa = target.set.name.substr(9 + offset, 3); + if (!isNaN(target.set.name.substr(12 + offset, 3))) newSpecies.baseStats.spd = target.set.name.substr(12 + offset, 3); + if (!isNaN(target.set.name.substr(15 + offset, 3))) newSpecies.baseStats.spe = target.set.name.substr(15 + offset, 3); + } + } + target.isModded = true; + return newSpecies; + } + }, + //onSwitchInPriority, so we go before Data Mod 100% of the time + onSwitchInPriority: 1, + onSwitchIn(pokemon) { + let species = pokemon.species; + let switchedIn = pokemon.switchedIn; + if (pokemon.illusion) { + if (!pokemon.illusion.isModded) return; + species = pokemon.illusion.species; + this.add('-start', pokemon, 'typechange', species.types.join('/'), '[silent]'); + if (pokemon.illusion.switchedIn) return; + pokemon.illusion.switchedIn = true; + } else { + if (!pokemon.isModded) return; + this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]'); + if (pokemon.switchedIn) return; + pokemon.switchedIn = true; + } + const baseStats = species.baseStats; + const type = species.types[0]; + if (species.types[1]) { + const type2 = species.types[1]; + this.add(`raw|`); + } else { + this.add(`raw|`); + } + this.add(`raw|`); + }, + //onDamagingHitOrder, so we go before Data Mod (and after Illusion wearing off, which I modded to have a priority of 1) 100% of the time + onDamagingHitOrder: 2, + onDamagingHit(damage, target, source, move) { + if (target.hasAbility('illusion')) { // making sure the correct information is given when an Illusion breaks + if (target.isModded) { + this.add('-start', target, 'typechange', target.species.types.join('/'), '[silent]'); + if (!target.switchedIn) { + target.switchedIn = true; + let species = target.species; + const baseStats = species.baseStats; + const type = species.types[0]; + if (species.types[1]) { + const type2 = species.types[1]; + this.add(`raw|`); + } else { + this.add(`raw|`); + } + this.add(`raw|`); + } + } else { + const types = target.baseSpecies.types; + if (target.getTypes().join() === types.join()) { + this.add('-end', target, 'typechange', '[silent]'); + } + } + } + }, + }, +}; \ No newline at end of file diff --git a/data/mods/inksdynamaxadventure/scripts.ts b/data/mods/inksandboxy/scripts.ts similarity index 100% rename from data/mods/inksdynamaxadventure/scripts.ts rename to data/mods/inksandboxy/scripts.ts diff --git a/data/mods/inksdynamaxadventure/sprites/back-shiny/readme.txt b/data/mods/inksandboxy/sprites/back-shiny/readme.txt similarity index 100% rename from data/mods/inksdynamaxadventure/sprites/back-shiny/readme.txt rename to data/mods/inksandboxy/sprites/back-shiny/readme.txt diff --git a/data/mods/inksdynamaxadventure/sprites/back/readme.txt b/data/mods/inksandboxy/sprites/back/readme.txt similarity index 100% rename from data/mods/inksdynamaxadventure/sprites/back/readme.txt rename to data/mods/inksandboxy/sprites/back/readme.txt diff --git a/data/mods/inksdynamaxadventure/sprites/front-shiny/readme.txt b/data/mods/inksandboxy/sprites/front-shiny/readme.txt similarity index 100% rename from data/mods/inksdynamaxadventure/sprites/front-shiny/readme.txt rename to data/mods/inksandboxy/sprites/front-shiny/readme.txt diff --git a/data/mods/inksdynamaxadventure/sprites/front/readme.txt b/data/mods/inksandboxy/sprites/front/readme.txt similarity index 100% rename from data/mods/inksdynamaxadventure/sprites/front/readme.txt rename to data/mods/inksandboxy/sprites/front/readme.txt diff --git a/data/mods/inksdynamaxadventure/sprites/icons/readme.txt b/data/mods/inksandboxy/sprites/icons/readme.txt similarity index 100% rename from data/mods/inksdynamaxadventure/sprites/icons/readme.txt rename to data/mods/inksandboxy/sprites/icons/readme.txt diff --git a/data/mods/inksdynamaxadventure/sprites/items/readme.txt b/data/mods/inksandboxy/sprites/items/readme.txt similarity index 100% rename from data/mods/inksdynamaxadventure/sprites/items/readme.txt rename to data/mods/inksandboxy/sprites/items/readme.txt diff --git a/data/mods/inksdynamaxadventure/conditions.ts b/data/mods/inksdynamaxadventure/conditions.ts deleted file mode 100644 index 43a77bcaca..0000000000 --- a/data/mods/inksdynamaxadventure/conditions.ts +++ /dev/null @@ -1,71 +0,0 @@ -export const Conditions: {[k: string]: ConditionData} = { - dynamax: { - name: 'Dynamax', - noCopy: true, - duration: 3, - onStart(pokemon) { - pokemon.removeVolatile('substitute'); - if (pokemon.volatiles['torment']) { - delete pokemon.volatiles['torment']; - this.add('-end', pokemon, 'Torment', '[silent]'); - } - if (['cramorantgulping', 'cramorantgorging'].includes(pokemon.species.id) && !pokemon.transformed) { - pokemon.formeChange('cramorant'); - } - this.add('-start', pokemon, 'Dynamax'); - const gMaxSpecies = this.dex.getSpecies(pokemon.species.name + '-Gmax'); - if (pokemon.gigantamax && pokemon.canGigantamax) this.add('-formechange', pokemon, gMaxSpecies); - if (pokemon.species.maxAb || gMaxSpecies.gMaxAb) { - if (pokemon.gigantamax && pokemon.canGigantamax && gMaxSpecies.gMaxAb) { - pokemon.setAbility(gMaxSpecies.gMaxAb[0]); - this.add('-ability', pokemon, gMaxSpecies.gMaxAb[0]); - } - else { - pokemon.setAbility(pokemon.species.maxAb[0]); - this.add('-ability', pokemon, pokemon.species.maxAb[0]); - } - } - if (pokemon.baseSpecies.name === 'Shedinja') return; - - // Changes based on dynamax level, 2 is max (at LVL 10) - const ratio = this.format.id.startsWith('gen8doublesou') ? 1.5 : 2; - - pokemon.maxhp = Math.floor(pokemon.maxhp * ratio); - pokemon.hp = Math.floor(pokemon.hp * ratio); - this.add('-heal', pokemon, pokemon.getHealth, '[silent]'); - }, - onTryAddVolatile(status, pokemon) { - if (status.id === 'flinch') return null; - }, - onBeforeSwitchOutPriority: -1, - onBeforeSwitchOut(pokemon) { - pokemon.removeVolatile('dynamax'); - }, - onSourceModifyDamage(damage, source, target, move) { - if (move.id === 'behemothbash' || move.id === 'behemothblade' || move.id === 'dynamaxcannon') { - return this.chainModify(2); - } - }, - onDragOutPriority: 2, - onDragOut(pokemon) { - this.add('-block', pokemon, 'Dynamax'); - return null; - }, - onResidualPriority: -100, - onEnd(pokemon) { - this.add('-end', pokemon, 'Dynamax'); - if (pokemon.canGigantamax) this.add('-formechange', pokemon, pokemon.species.name); - if (pokemon.species.maxAb) { - pokemon.setAbility(pokemon.baseAbility); - this.add('-ability', pokemon, pokemon.baseAbility); - } - if (pokemon.baseSpecies.name === 'Shedinja') return; - pokemon.hp = pokemon.getUndynamaxedHP(); - pokemon.maxhp = pokemon.baseMaxhp; - this.add('-heal', pokemon, pokemon.getHealth, '[silent]'); - }, - }, - - - -}; \ No newline at end of file diff --git a/data/mods/inksdynamaxadventure/pokedex.ts b/data/mods/inksdynamaxadventure/pokedex.ts deleted file mode 100644 index 46edbe9085..0000000000 --- a/data/mods/inksdynamaxadventure/pokedex.ts +++ /dev/null @@ -1,992 +0,0 @@ -export const Pokedex: {[speciesid: string]: ModdedSpeciesData} = { - //------------------------------------------- - //G-MAXES - //------------------------------------------- - venusaur: { - inherit: true, - }, - - venusaurgmax: { - num: 3, - name: "Venusaur-Gmax", - baseSpecies: "Venusaur", - forme: "Gmax", - types: ["Grass", "Poison"], - genderRatio: {M: 0.875, F: 0.125}, - baseStats: {hp: 80, atk: 82, def: 83, spa: 100, spd: 100, spe: 80}, - abilities: {0: "Overgrow", H: "Chlorophyll"}, - heightm: 2, - weightkg: 0, - color: "Green", - eggGroups: ["Monster", "Grass"], - isGigantamax: "G-Max Vine Lash", - }, - - charizard: { - inherit: true, - }, - - charizardgmax: { - num: 6, - name: "Charizard-Gmax", - baseSpecies: "Charizard", - forme: "Gmax", - types: ["Fire", "Flying"], - genderRatio: {M: 0.875, F: 0.125}, - baseStats: {hp: 78, atk: 84, def: 78, spa: 109, spd: 85, spe: 100}, - abilities: {0: "Blaze", H: "Solar Power"}, - heightm: 28, - weightkg: 0, - color: "Red", - eggGroups: ["Monster", "Dragon"], - isGigantamax: "G-Max Wildfire", - }, - - blastoise: { - inherit: true, - }, - - blastoisegmax: { - num: 9, - name: "Blastoise-Gmax", - baseSpecies: "Blastoise", - forme: "Gmax", - types: ["Water"], - genderRatio: {M: 0.875, F: 0.125}, - baseStats: {hp: 79, atk: 83, def: 100, spa: 85, spd: 105, spe: 78}, - abilities: {0: "Torrent", H: "Rain Dish"}, - heightm: 1.6, - weightkg: 0, - color: "Blue", - eggGroups: ["Monster", "Water 1"], - isGigantamax: "G-Max Cannonade", - }, - - butterfree: { - inherit: true, - }, - - butterfreegmax: { - num: 12, - name: "Butterfree-Gmax", - baseSpecies: "Butterfree", - forme: "Gmax", - types: ["Bug", "Flying"], - baseStats: {hp: 60, atk: 45, def: 50, spa: 90, spd: 80, spe: 70}, - abilities: {0: "Compound Eyes", H: "Tinted Lens"}, - heightm: 17, - weightkg: 0, - color: "White", - eggGroups: ["Bug"], - isGigantamax: "G-Max Befuddle", - }, - - pikachu: { - inherit: true, - }, - - pikachugmax: { - num: 25, - name: "Pikachu-Gmax", - baseSpecies: "Pikachu", - forme: "Gmax", - types: ["Electric"], - baseStats: {hp: 35, atk: 55, def: 40, spa: 50, spd: 50, spe: 90}, - abilities: {0: "Static", H: "Lightning Rod"}, - heightm: 21, - weightkg: 0, - color: "Yellow", - eggGroups: ["Field", "Fairy"], - isGigantamax: "G-Max Volt Crash", - }, - - machamp: { - inherit: true, - }, - - machampgmax: { - num: 68, - name: "Machamp-Gmax", - baseSpecies: "Machamp", - forme: "Gmax", - types: ["Fighting"], - genderRatio: {M: 0.75, F: 0.25}, - baseStats: {hp: 90, atk: 130, def: 80, spa: 65, spd: 85, spe: 55}, - abilities: {0: "Guts", 1: "No Guard", H: "Steadfast"}, - heightm: 25, - weightkg: 0, - color: "Gray", - eggGroups: ["Human-Like"], - isGigantamax: "G-Max Chi Strike", - }, - - gengar: { - inherit: true, - }, - - gengargmax: { - num: 94, - name: "Gengar-Gmax", - baseSpecies: "Gengar", - forme: "Gmax", - types: ["Ghost", "Poison"], - baseStats: {hp: 60, atk: 65, def: 60, spa: 130, spd: 75, spe: 110}, - abilities: {0: "Cursed Body"}, - heightm: 20, - weightkg: 0, - color: "Purple", - eggGroups: ["Amorphous"], - isGigantamax: "G-Max Terror", - }, - - kingler: { - inherit: true, - }, - - kinglergmax: { - num: 99, - name: "Kingler-Gmax", - baseSpecies: "Kingler", - forme: "Gmax", - types: ["Water"], - baseStats: {hp: 55, atk: 130, def: 115, spa: 50, spd: 50, spe: 75}, - abilities: {0: "Hyper Cutter", 1: "Shell Armor", H: "Sheer Force"}, - heightm: 19, - weightkg: 0, - color: "Red", - eggGroups: ["Water 3"], - isGigantamax: "G-Max Foam Burst", - }, - - lapras: { - inherit: true, - }, - - laprasgmax: { - num: 131, - name: "Lapras-Gmax", - baseSpecies: "Lapras", - forme: "Gmax", - types: ["Water", "Ice"], - baseStats: {hp: 130, atk: 85, def: 80, spa: 85, spd: 95, spe: 60}, - abilities: {0: "Water Absorb", 1: "Shell Armor", H: "Hydration"}, - heightm: 24, - weightkg: 0, - color: "Blue", - eggGroups: ["Monster", "Water 1"], - isGigantamax: "G-Max Resonance", - }, - - eevee: { - inherit: true, - maxAb: {0: "Wonder Guard"}, - }, - - eeveegmax: { - num: 133, - name: "Eevee-Gmax", - baseSpecies: "Eevee", - forme: "Gmax", - types: ["Normal"], - genderRatio: {M: 0.875, F: 0.125}, - baseStats: {hp: 55, atk: 55, def: 50, spa: 45, spd: 65, spe: 55}, - abilities: {0: "Run Away", 1: "Adaptability", H: "Anticipation"}, - heightm: 18, - weightkg: 0, - color: "Brown", - eggGroups: ["Field"], - isGigantamax: "G-Max Cuddle", - gMaxMoves: ["G-Max Cuddle", "G-Max Baddy Bad", "G-Max Glitzy Glow"], - gMaxAb: {0: "Wonder Guard"}, - }, - - snorlax: { - inherit: true, - maxAb: {0: "Intimidate"}, - }, - - snorlaxgmax: { - num: 143, - name: "Snorlax-Gmax", - baseSpecies: "Snorlax", - forme: "Gmax", - types: ["Normal"], - genderRatio: {M: 0.875, F: 0.125}, - baseStats: {hp: 160, atk: 110, def: 65, spa: 65, spd: 110, spe: 30}, - abilities: {0: "Immunity", 1: "Thick Fat", H: "Gluttony"}, - heightm: 35, - weightkg: 0, - color: "Black", - eggGroups: ["Monster"], - isGigantamax: "G-Max Replenish", - gMaxAb: {0: "Grassy Surge"}, - }, - - garbodor: { - inherit: true, - }, - - garbodorgmax: { - num: 569, - name: "Garbodor-Gmax", - baseSpecies: "Garbodor", - forme: "Gmax", - types: ["Poison"], - baseStats: {hp: 80, atk: 95, def: 82, spa: 60, spd: 82, spe: 75}, - abilities: {0: "Stench", 1: "Weak Armor", H: "Aftermath"}, - heightm: 21, - weightkg: 0, - color: "Green", - eggGroups: ["Mineral"], - isGigantamax: "G-Max Malodor", - }, - - melmetal: { - inherit: true, - }, - - melmetalgmax: { - num: 809, - name: "Melmetal-Gmax", - baseSpecies: "Melmetal", - forme: "Gmax", - types: ["Steel"], - gender: "N", - baseStats: {hp: 135, atk: 143, def: 143, spa: 80, spd: 65, spe: 34}, - abilities: {0: "Iron Fist"}, - heightm: 25, - weightkg: 0, - color: "Gray", - eggGroups: ["Undiscovered"], - isGigantamax: "G-Max Meltdown", - }, - - rillaboom: { - inherit: true, - }, - - rillaboomgmax: { - num: 812, - name: "Rillaboom-Gmax", - baseSpecies: "Rillaboom", - forme: "Gmax", - types: ["Grass"], - genderRatio: {M: 0.875, F: 0.125}, - baseStats: {hp: 100, atk: 125, def: 90, spa: 60, spd: 70, spe: 85}, - abilities: {0: "Overgrow", H: "Grassy Surge"}, - heightm: 3, - weightkg: 0, - color: "Green", - eggGroups: ["Field", "Grass"], - isGigantamax: "G-Max Drum Solo", - }, - - cinderace: { - inherit: true, - abilities: {0: "Blaze", H: "Adaptability"}, - maxAb: {0: "Moxie"}, - }, - - cinderacegmax: { - num: 815, - name: "Cinderace-Gmax", - baseSpecies: "Cinderace", - forme: "Gmax", - types: ["Fire"], - genderRatio: {M: 0.875, F: 0.125}, - baseStats: {hp: 80, atk: 116, def: 75, spa: 65, spd: 75, spe: 119}, - abilities: {0: "Blaze", H: "Adaptability"}, - heightm: 3, - weightkg: 0, - color: "White", - eggGroups: ["Field", "Human-Like"], - isGigantamax: "G-Max Fireball", - gMaxAb: {0: "Libero"}, - }, - - inteleon: { - abilities: {0: "Torrent", H: "Quick Draw"}, - maxAb: {0: "Storm Drain"}, - inherit: true, - }, - - inteleongmax: { - num: 818, - name: "Inteleon-Gmax", - baseSpecies: "Inteleon", - forme: "Gmax", - types: ["Water"], - genderRatio: {M: 0.875, F: 0.125}, - baseStats: {hp: 70, atk: 85, def: 65, spa: 125, spd: 65, spe: 120}, - abilities: {0: "Torrent", H: "Quick Draw"}, - heightm: 3, - weightkg: 0, - color: "Blue", - eggGroups: ["Water 1", "Field"], - isGigantamax: "G-Max Hydrosnipe", - gMaxAb: {0: "Download"}, - }, - - corviknight: { - inherit: true, - }, - - corviknightgmax: { - num: 823, - name: "Corviknight-Gmax", - baseSpecies: "Corviknight", - forme: "Gmax", - types: ["Flying", "Steel"], - baseStats: {hp: 98, atk: 87, def: 105, spa: 53, spd: 85, spe: 67}, - abilities: {0: "Pressure", 1: "Unnerve", H: "Mirror Armor"}, - heightm: 14, - weightkg: 0, - color: "Purple", - eggGroups: ["Flying"], - isGigantamax: "G-Max Wind Rage", - }, - - orbeetle: { - inherit: true, - }, - - orbeetlegmax: { - num: 826, - name: "Orbeetle-Gmax", - baseSpecies: "Orbeetle", - forme: "Gmax", - types: ["Bug", "Psychic"], - baseStats: {hp: 60, atk: 45, def: 110, spa: 80, spd: 120, spe: 90}, - abilities: {0: "Swarm", 1: "Frisk", H: "Telepathy"}, - heightm: 14, - weightkg: 0, - color: "Red", - eggGroups: ["Bug"], - isGigantamax: "G-Max Gravitas", - }, - - drednaw: { - inherit: true, - }, - - drednawgmax: { - num: 834, - name: "Drednaw-Gmax", - baseSpecies: "Drednaw", - forme: "Gmax", - types: ["Water", "Rock"], - baseStats: {hp: 90, atk: 115, def: 90, spa: 48, spd: 68, spe: 74}, - abilities: {0: "Strong Jaw", 1: "Shell Armor", H: "Swift Swim"}, - heightm: 24, - weightkg: 0, - color: "Green", - eggGroups: ["Monster", "Water 1"], - isGigantamax: "G-Max Stonesurge", - }, - - coalossal: { - inherit: true, - }, - - coalossalgmax: { - num: 839, - name: "Coalossal-Gmax", - baseSpecies: "Coalossal", - forme: "Gmax", - types: ["Rock", "Fire"], - baseStats: {hp: 110, atk: 80, def: 120, spa: 80, spd: 90, spe: 30}, - abilities: {0: "Steam Engine", 1: "Flame Body", H: "Flash Fire"}, - heightm: 42, - weightkg: 0, - color: "Black", - eggGroups: ["Mineral"], - isGigantamax: "G-Max Volcalith", - }, - - flapple: { - inherit: true, - }, - - flapplegmax: { - num: 841, - name: "Flapple-Gmax", - baseSpecies: "Flapple", - forme: "Gmax", - types: ["Grass", "Dragon"], - baseStats: {hp: 70, atk: 110, def: 80, spa: 95, spd: 60, spe: 70}, - abilities: {0: "Ripen", 1: "Gluttony", H: "Hustle"}, - heightm: 24, - weightkg: 0, - color: "Green", - eggGroups: ["Grass", "Dragon"], - isGigantamax: "G-Max Tartness", - }, - - appletun: { - inherit: true, - }, - - appletungmax: { - num: 842, - name: "Appletun-Gmax", - baseSpecies: "Appletun", - forme: "Gmax", - types: ["Grass", "Dragon"], - baseStats: {hp: 110, atk: 85, def: 80, spa: 100, spd: 80, spe: 30}, - abilities: {0: "Ripen", 1: "Gluttony", H: "Thick Fat"}, - heightm: 24, - weightkg: 0, - color: "Green", - eggGroups: ["Grass", "Dragon"], - isGigantamax: "G-Max Sweetness", - }, - - sandaconda: { - inherit: true, - }, - - sandacondagmax: { - num: 844, - name: "Sandaconda-Gmax", - baseSpecies: "Sandaconda", - forme: "Gmax", - types: ["Ground"], - baseStats: {hp: 72, atk: 107, def: 125, spa: 65, spd: 70, spe: 71}, - abilities: {0: "Sand Spit", 1: "Shed Skin", H: "Sand Veil"}, - heightm: 22, - weightkg: 0, - color: "Green", - eggGroups: ["Field", "Dragon"], - isGigantamax: "G-Max Sandblast", - }, - - toxtricity: { - inherit: true, - }, - - toxtricitylowkey: { - inherit: true, - }, - - toxtricitygmax: { - num: 849, - name: "Toxtricity-Gmax", - baseSpecies: "Toxtricity", - forme: "Gmax", - types: ["Electric", "Poison"], - baseStats: {hp: 75, atk: 98, def: 70, spa: 114, spd: 70, spe: 75}, - abilities: {0: "Punk Rock", 1: "Plus", H: "Technician"}, - heightm: 24, - weightkg: 0, - color: "Purple", - eggGroups: ["Human-Like"], - isGigantamax: "G-Max Stun Shock", - }, - toxtricitylowkeygmax: { - num: 849, - name: "Toxtricity-Low-Key-Gmax", - baseSpecies: "Toxtricity", - forme: "Low-Key-Gmax", - types: ["Electric", "Poison"], - baseStats: {hp: 75, atk: 98, def: 70, spa: 114, spd: 70, spe: 75}, - abilities: {0: "Punk Rock", 1: "Plus", H: "Technician"}, - heightm: 24, - weightkg: 0, - color: "Purple", - eggGroups: ["Human-Like"], - isGigantamax: "G-Max Stun Shock", - battleOnly: "Toxtricity-Low-Key", - }, - - centiskorch: { - inherit: true, - }, - - centiskorchgmax: { - num: 851, - name: "Centiskorch-Gmax", - baseSpecies: "Centiskorch", - forme: "Gmax", - types: ["Fire", "Bug"], - baseStats: {hp: 100, atk: 115, def: 65, spa: 90, spd: 90, spe: 65}, - abilities: {0: "Flash Fire", 1: "White Smoke", H: "Flame Body"}, - heightm: 75, - weightkg: 0, - color: "Red", - eggGroups: ["Bug"], - isGigantamax: "G-Max Centiferno", - }, - - hatterene: { - inherit: true, - maxAb: {0: "Analytic"}, - }, - hatterenegmax: { - num: 858, - name: "Hatterene-Gmax", - baseSpecies: "Hatterene", - forme: "Gmax", - types: ["Psychic", "Fairy"], - gender: "F", - baseStats: {hp: 57, atk: 90, def: 95, spa: 136, spd: 103, spe: 29}, - abilities: {0: "Healer", 1: "Anticipation", H: "Magic Bounce"}, - heightm: 26, - weightkg: 0, - color: "Pink", - eggGroups: ["Fairy"], - isGigantamax: "G-Max Smite", - gMaxAb: {0: "Tangling Hair"}, - }, - - grimmsnarl: { - inherit: true, - }, - - grimmsnarlgmax: { - num: 861, - name: "Grimmsnarl-Gmax", - baseSpecies: "Grimmsnarl", - forme: "Gmax", - types: ["Dark", "Fairy"], - gender: "M", - baseStats: {hp: 95, atk: 120, def: 65, spa: 95, spd: 75, spe: 60}, - abilities: {0: "Prankster", 1: "Frisk", H: "Pickpocket"}, - heightm: 32, - weightkg: 0, - color: "Purple", - eggGroups: ["Fairy", "Human-Like"], - isGigantamax: "G-Max Snooze", - }, - - alcremie: { - inherit: true, - }, - - alcremiegmax: { - num: 869, - name: "Alcremie-Gmax", - baseSpecies: "Alcremie", - forme: "Gmax", - types: ["Fairy"], - gender: "F", - baseStats: {hp: 65, atk: 60, def: 75, spa: 110, spd: 121, spe: 64}, - abilities: {0: "Sweet Veil", H: "Aroma Veil"}, - heightm: 30, - weightkg: 0, - color: "White", - eggGroups: ["Fairy", "Amorphous"], - isGigantamax: "G-Max Finale", - }, - - copperajah: { - inherit: true, - }, - - copperajahgmax: { - num: 879, - name: "Copperajah-Gmax", - baseSpecies: "Copperajah", - forme: "Gmax", - types: ["Steel"], - baseStats: {hp: 122, atk: 130, def: 69, spa: 80, spd: 69, spe: 30}, - abilities: {0: "Sheer Force", H: "Heavy Metal"}, - heightm: 23, - weightkg: 0, - color: "Green", - eggGroups: ["Field", "Mineral"], - isGigantamax: "G-Max Steelsurge", - }, - - duraludon: { - inherit: true, - }, - - duraludongmax: { - num: 884, - name: "Duraludon-Gmax", - baseSpecies: "Duraludon", - forme: "Gmax", - types: ["Steel", "Dragon"], - baseStats: {hp: 70, atk: 95, def: 115, spa: 120, spd: 50, spe: 85}, - abilities: {0: "Light Metal", 1: "Heavy Metal", H: "Stalwart"}, - heightm: 43, - weightkg: 0, - color: "White", - eggGroups: ["Mineral", "Dragon"], - isGigantamax: "G-Max Depletion", - }, - - urshifu: { - inherit: true, - }, - - urshifurapidstrike: { - inherit: true, - }, - - urshifugmax: { - num: 892, - name: "Urshifu-Gmax", - baseSpecies: "Urshifu", - forme: "Gmax", - types: ["Fighting", "Dark"], - genderRatio: {M: 0.875, F: 0.125}, - baseStats: {hp: 100, atk: 130, def: 100, spa: 63, spd: 60, spe: 97}, - abilities: {0: "Unseen Fist"}, - heightm: 3, - weightkg: 0, - color: "Gray", - eggGroups: ["Undiscovered"], - isGigantamax: "G-Max One Blow", - }, - - urshifurapidstrikegmax: { - num: 892, - name: "Urshifu-Rapid-Strike-Gmax", - baseSpecies: "Urshifu", - forme: "Rapid-Strike-Gmax", - types: ["Fighting", "Water"], - genderRatio: {M: 0.875, F: 0.125}, - baseStats: {hp: 100, atk: 130, def: 100, spa: 63, spd: 60, spe: 97}, - abilities: {0: "Unseen Fist"}, - heightm: 1.9, - weightkg: 105, - color: "Gray", - eggGroups: ["Undiscovered"], - isGigantamax: "G-Max Rapid Flow", - battleOnly: "Urshifu-Rapid-Strike", - }, - - //------------------------------------------- - //EDITED POKEMON + NEW MEGAS - //------------------------------------------- - moltresgalar: { - num: 146, - name: "Moltres-Galar", - baseSpecies: "Moltres", - forme: "Galar", - types: ["Dark", "Flying"], - gender: "N", - //90/85/90/100/125/90 - baseStats: {hp: 90, atk: 100, def: 90, spa: 85, spd: 125, spe: 90}, - abilities: {0: "Berserk"}, - heightm: 2, - weightkg: 66, - color: "Red", - eggGroups: ["Undiscovered"], - }, - - regieleki: { - num: 894, - name: "Regieleki", - types: ["Electric"], - gender: "N", - baseStats: {hp: 80, atk: 80, def: 70, spa: 80, spd: 70, spe: 200}, - abilities: {0: "Reinitialize", 1: "Transistor", H: "Plus"}, - heightm: 1.2, - weightkg: 145, - color: "Yellow", - eggGroups: ["Undiscovered"], - }, - regidrago: { - num: 895, - name: "Regidrago", - types: ["Dragon"], - gender: "N", - baseStats: {hp: 200, atk: 70, def: 80, spa: 70, spd: 80, spe: 80}, - abilities: {0: "Dragon's Maw", 1: "Dragon Overflow", H: "Minus"}, - heightm: 2.1, - weightkg: 200, - color: "Green", - eggGroups: ["Undiscovered"], - }, - - glastrier: { - num: 896, - name: "Glastrier", - types: ["Ice"], - gender: "N", - baseStats: {hp: 100, atk: 125, def: 130, spa: 85, spd: 110, spe: 30}, - abilities: {0: "Chilling Neigh", S: "Battle Bond"}, - heightm: 2.2, - weightkg: 800, - color: "White", - eggGroups: ["Undiscovered"], - otherFormes: ["Glastrier-Heart"], - // non-activated Battle Bond is forme 1, but PS does not currently distinguish it - formeOrder: ["Glastrier", "Glastrier", "Glastrier-Heart"], - }, - glastrierheart: { - num: 658, - name: "Glastrier-Heart", - baseSpecies: "Glastrier", - forme: "Heart", - types: ["Ice", "Psychic"], - baseStats: {hp: 100, atk: 155, def: 160, spa: 95, spd: 130, spe: 40}, - abilities: {0: "Battle Bond"}, - heightm: 2.2, - weightkg: 800, - color: "White", - eggGroups: ["Undiscovered"], - requiredAbility: "Battle Bond", - battleOnly: "Glastrier", - }, - spectrier: { - num: 897, - name: "Spectrier", - types: ["Ghost"], - gender: "N", - baseStats: {hp: 100, atk: 85, def: 50, spa: 130, spd: 90, spe: 125}, - abilities: {0: "Grim Neigh", S: "Battle Bond"}, - heightm: 2, - weightkg: 44.5, - color: "Black", - eggGroups: ["Undiscovered"], - otherFormes: ["Spectrier-Soul"], - // non-activated Battle Bond is forme 1, but PS does not currently distinguish it - formeOrder: ["Spectrier", "Spectrier", "Spectrier-Soul"], - }, - spectriersoul: { - num: 658, - name: "Spectrier-Soul", - baseSpecies: "Spectrier", - forme: "Soul", - types: ["Ghost", "Psychic"], - baseStats: {hp: 100, atk: 95, def: 70, spa: 160, spd: 110, spe: 145}, - abilities: {0: "Battle Bond"}, - heightm: 2, - weightkg: 44.5, - color: "Black", - eggGroups: ["Undiscovered"], - requiredAbility: "Battle Bond", - battleOnly: "Spectrier", - }, - froslass: { - inherit: true, - otherFormes: ["Froslass-Mega"], - formeOrder: ["Froslass", "Froslass-Mega"], - }, - froslassmega: { - num: 478, - name: "Froslass-Mega", - baseSpecies: "Froslass", - forme: "Mega", - types: ["Ice", "Ghost"], - baseStats: {hp: 70, atk: 100, def: 70, spa: 110, spd: 110, spe: 120}, - abilities: {0: "Dry Ice"}, - heightm: 1.3, - weightkg: 26.6, - color: "White", - requiredItem: "Froslassite", - }, - - decidueye: { - inherit: true, - abilities: {0: "Overgrow", 1: "Concealment", H: "Long Reach"}, - otherFormes: ["Decidueye-Mega"], - formeOrder: ["Decidueye", "Decidueye-Mega"], - }, - decidueyemega: { - num: 724, - name: "Decidueye-Mega", - baseSpecies: "Decidueye", - forme: "Mega", - types: ["Grass", "Ghost"], - genderRatio: {M: 0.875, F: 0.125}, - baseStats: {hp: 78, atk: 127, def: 95, spa: 120, spd: 120, spe: 90}, - abilities: {0: "Illusion"}, - heightm: 1.6, - weightkg: 36.6, - color: "Brown", - requiredItem: "Deciduite", - }, - grapploct: { - num: 853, - name: "Grapploct", - types: ["Fighting"], - baseStats: {hp: 118, atk: 80, def: 90, spa: 70, spd: 80, spe: 42}, - abilities: {0: "Limber", 1: "Regenerator", H: "Technician"}, - heightm: 1.6, - weightkg: 39, - color: "Blue", - prevo: "Clobbopus", - evoType: "levelMove", - evoMove: "Taunt", - eggGroups: ["Water 1", "Human-Like"], - }, - - falinks: { - num: 870, - name: "Falinks", - types: ["Fighting", "Rock"], - gender: "N", - baseStats: {hp: 65, atk: 100, def: 100, spa: 70, spd: 60, spe: 90}, - abilities: {0: "Battle Armor", H: "Defiant"}, - heightm: 3, - weightkg: 62, - color: "Yellow", - eggGroups: ["Fairy", "Mineral"], - }, - - frosmoth: { - num: 873, - name: "Frosmoth", - types: ["Ice", "Bug"], - baseStats: {hp: 60, atk: 55, def: 90, spa: 105, spd: 90, spe: 75}, - abilities: {0: "Shield Dust", 1: "Fur Coat", H: "Ice Scales"}, - heightm: 1.3, - weightkg: 42, - color: "White", - prevo: "Snom", - evoType: "levelFriendship", - evoCondition: "at night", - eggGroups: ["Bug"], - }, - dugtrio: { - inherit: true, - otherFormes: ["Dugtrio-Alola", "Dugtrio-Mega"], - formeOrder: ["Dugtrio", "Dugtrio-Alola", "Dugtrio-Mega"], - }, - dugtriomega: { - num: 51, - name: "Dugtrio", - types: ["Ground", "Bug"], - baseStats: {hp: 35, atk: 150, def: 90, spa: 50, spd: 70, spe: 130}, - abilities: {0: "Sap Sipper"}, - heightm: 0.7, - weightkg: 33.3, - color: "Brown", - requiredItem: "Dugtrionite", - }, - - //------------------------------------------- - //NEW POKEMON - //------------------------------------------- - snowshoo: { - num: 99.1, - name: "Snowshoo", - types: ["Normal", "Ice"], - baseStats: {hp: 60, atk: 65, def: 102, spa: 53, spd: 85, spe: 30}, - abilities: {0: "Gluttony", 1: "Cheek Pouch", H: "Flurry Down"}, - heightm: 0.4, - weightkg: 5.5, - color: "White", - evos: ["Harefrost"], - eggGroups: ["Field"], - }, - harefrost: { - num: 99.2, - name: "Harefrost", - types: ["Normal", "Ice"], - baseStats: {hp: 80, atk: 95, def: 117, spa: 85, spd: 90, spe: 45}, - abilities: {0: "Slush Rush", 1: "Cheek Pouch", H: "Flurry Down"}, - heightm: 1, - weightkg: 42.4, - color: "White", - prevo: ["Snowshoo"], - eggGroups: ["Field"], - }, - neuroboxin: { - num: 99.3, - name: "Neuroboxin", - types: ["Poison", "Fighting"], - baseStats: {hp: 114, atk: 72, def: 96, spa: 85, spd: 81, spe: 109}, - abilities: {0: "Infiltrator", 1: "Sticky Hold", H: "Trace"}, - heightm: 1.6, - weightkg: 39, - color: "Purple", - }, - shadeo: { - num: 99.4, - name: "Shadeo", - types: ["Ghost"], - baseStats: {hp: 70, atk: 105, def: 60, spa: 70, spd: 70, spe: 105}, - abilities: {0: "Prankster"}, - heightm: 0.5, - weightkg: 17, - color: "Gray", - }, - pocketwatch: { - num: 99.5, - name: "UB Pocketwatch", - types: ["Psychic", "Fighting"], - baseStats: {hp: 71, atk: 127, def: 127, spa: 23, spd: 23, spe: 199}, - abilities: {0: "Beast Boost"}, - heightm: 1, - weightkg: 34.5, - color: "Brown", - }, - finneon: { - inherit: true, - otherFormes: ["Finneon-Alola"], - formeOrder: ["Finneon", "Finneon-Alola"], - }, - finneonalola: { - num: 456, - name: "Finneon-Alola", - baseSpecies: "Finneon", - forme: "Alola", - types: ["Water", "Fairy"], - baseStats: {hp: 49, atk: 49, def: 56, spa: 49, spd: 61, spe: 66}, - abilities: {0: "Swift Swim", 1: "Storm Drain", H: "Pastel Veil"}, - heightm: 0.4, - weightkg: 7, - color: "Blue", - evos: ["Lumineon-Alola"], - eggGroups: ["Water 2", "Fairy"], - }, - lumineon: { - inherit: true, - otherFormes: ["Lumineon-Alola"], - formeOrder: ["Lumineon", "Lumineon-Alola"], - }, - lumineonalola: { - num: 457, - name: "Lumineon-Alola", - baseSpecies: "Lumineon", - forme: "Alola", - types: ["Water", "Fairy"], - baseStats: {hp: 69, atk: 69, def: 76, spa: 69, spd: 86, spe: 91}, - abilities: {0: "Swift Swim", 1: "Storm Drain", H: "Pastel Veil"}, - heightm: 1.2, - weightkg: 24, - color: "Blue", - prevo: "Finneon-Alola", - evoLevel: 31, - eggGroups: ["Water 2", "Fairy"], - }, - teravole: { - num: 99.6, - name: "Teravole", - types: ["Electric"], - baseStats: {hp: 79, atk: 42, def: 94, spa: 89, spd: 124, spe: 67}, - abilities: {0: "Regenerator", 1: "Static", H: "Triage"}, - heightm: 0.5, - weightkg: 7.9, - color: "Yellow", - eggGroups: ["Field", "Fairy"], - }, - emblob: { - num: 99.7, - name: "Emblob", - types: ["Fire"], - baseStats: {hp: 55, atk: 75, def: 100, spa: 75, spd: 100, spe: 70}, - abilities: {0: "Innards Out"}, - heightm: 0.3, - weightkg: 4, - color: "Red", - eggGroups: ["Mineral"], - }, - bunslinger: { - num: 99.8, - name: "Bunslinger", - types: ["Normal", "Grass"], - baseStats: {hp: 70, atk: 115, def: 86, spa: 66, spd: 66, spe: 84}, - abilities: {0: "Skill Link", 1: "Technician", H: "Quick Draw"}, - heightm: 1.2, - weightkg: 33.3, - color: "Brown", - eggGroups: ["Field", "Human-Like"], - }, - -} \ No newline at end of file diff --git a/data/mods/m4asandbox/abilities.ts b/data/mods/m4asandbox/abilities.ts index b17433bc70..59f31f4f01 100644 --- a/data/mods/m4asandbox/abilities.ts +++ b/data/mods/m4asandbox/abilities.ts @@ -2999,6 +2999,8 @@ export const Abilities: {[abilityid: string]: ModdedAbilityData} = { if (pokemon === pokemon.side.pokemon[i]) return; pokemon.illusion = pokemon.side.pokemon[i]; }, + //For sandbox mod utilichart. Hope this doesn't break anything: + onDamagingHitOrder: 1, onDamagingHit(damage, target, source, move) { if (target.illusion) { this.singleEvent('End', this.dex.getAbility('Illusion'), target.abilityData, target, source, move); diff --git a/data/mods/m4asandbox/rulesets.ts b/data/mods/m4asandbox/rulesets.ts index f9e1ce5d2e..938f84a815 100644 --- a/data/mods/m4asandbox/rulesets.ts +++ b/data/mods/m4asandbox/rulesets.ts @@ -911,14 +911,13 @@ export const Formats: {[k: string]: FormatData} = { effectType: 'Rule', name: 'Sandbox Mod', desc: "Allows customization of a Pokémon's types and stats based on its nickname.", - onBegin() { + onBegin() { //This section handles custom Megas using the sandbox mega stones. for (const pokemon of this.getAllPokemon()) { - pokemon.m.originalSpecies = this.dex.getSpecies(pokemon.species.name); // MnM4A if (!pokemon.set.name) return; if (pokemon.set.name.substr(0, 1) === "*") { if (['Mega Stone 1', 'Mega Stone 2', 'Mega Stone H'].includes(pokemon.getItem().name)) { let newSpecies = this.dex.deepClone(pokemon.species); - switch (pokemon.set.name.substr(1, 1)) { + switch (pokemon.set.name.substr(1, 1)) {//Primary type case "a": case "A": newSpecies.types[0] = "Dragon"; @@ -969,7 +968,7 @@ export const Formats: {[k: string]: FormatData} = { break; case "p": case "P": - newSpecies.types[0] = "Poison"; + newSpecies.types[0] = "Poison"; break; case "r": case "R": @@ -996,7 +995,7 @@ export const Formats: {[k: string]: FormatData} = { newSpecies.types[0] = ""; break; } - switch (pokemon.set.name.substr(2, 1)) { + switch (pokemon.set.name.substr(2, 1)) {//Secondary type case "a": case "A": newSpecies.types[1] = "Dragon"; @@ -1047,7 +1046,7 @@ export const Formats: {[k: string]: FormatData} = { break; case "p": case "P": - newSpecies.types[1] = "Poison"; + newSpecies.types[1] = "Poison"; break; case "r": case "R": @@ -1074,11 +1073,12 @@ export const Formats: {[k: string]: FormatData} = { newSpecies.types[1] = ""; break; } - newSpecies.baseStats.atk = pokemon.set.name.substr(3, 3); - newSpecies.baseStats.def = pokemon.set.name.substr(6, 3); - newSpecies.baseStats.spa = pokemon.set.name.substr(9, 3); - newSpecies.baseStats.spd = pokemon.set.name.substr(12, 3); - newSpecies.baseStats.spe = pokemon.set.name.substr(15, 3); + //Use isNaN() (lit. Not a Number) to allow for not modifying specific base stats if we want, by just inputting like, xxx + if (!isNaN(pokemon.set.name.substr(3, 3))) newSpecies.baseStats.atk = pokemon.set.name.substr(3, 3); + if (!isNaN(pokemon.set.name.substr(6, 3))) newSpecies.baseStats.def = pokemon.set.name.substr(6, 3); + if (!isNaN(pokemon.set.name.substr(9, 3))) newSpecies.baseStats.spa = pokemon.set.name.substr(9, 3); + if (!isNaN(pokemon.set.name.substr(12, 3))) newSpecies.baseStats.spd = pokemon.set.name.substr(12, 3); + if (!isNaN(pokemon.set.name.substr(15, 3))) newSpecies.baseStats.spe = pokemon.set.name.substr(15, 3); newSpecies.baseSpecies = pokemon.baseSpecies; newSpecies.abilities[0] = pokemon.ability; newSpecies.forme = 'Mega'; @@ -1097,10 +1097,13 @@ export const Formats: {[k: string]: FormatData} = { } }, onModifySpecies(species, target, source) { + if (!target.set.name) return; if (source || !target?.side || ['Mega Stone 1', 'Mega Stone 2', 'Mega Stone H'].includes(target.getItem().name)) return; - if (target.set.name.substr(0, 1) === "*") { + //See if nickname+species qualifies for any presets/easter eggs, set a variable to true + if (target.set.name.substr(0, 1) === "*") {//Add "or (var)" let newSpecies = this.dex.deepClone(species); - switch (target.set.name.substr(1, 1)) { + //If (var), use preset instead and then return newSpecies + switch (target.set.name.substr(1, 1)) {//Primary type case "a": case "A": newSpecies.types[0] = "Dragon"; @@ -1151,7 +1154,7 @@ export const Formats: {[k: string]: FormatData} = { break; case "p": case "P": - newSpecies.types[0] = "Poison"; + newSpecies.types[0] = "Poison"; break; case "r": case "R": @@ -1178,7 +1181,7 @@ export const Formats: {[k: string]: FormatData} = { newSpecies.types[0] = ""; break; } - switch (target.set.name.substr(2, 1)) { + switch (target.set.name.substr(2, 1)) {//Secondary type case "a": case "A": newSpecies.types[1] = "Dragon"; @@ -1229,7 +1232,7 @@ export const Formats: {[k: string]: FormatData} = { break; case "p": case "P": - newSpecies.types[1] = "Poison"; + newSpecies.types[1] = "Poison"; break; case "r": case "R": @@ -1256,46 +1259,65 @@ export const Formats: {[k: string]: FormatData} = { newSpecies.types[1] = ""; break; } - newSpecies.baseStats.atk = target.set.name.substr(3, 3); - newSpecies.baseStats.def = target.set.name.substr(6, 3); - newSpecies.baseStats.spa = target.set.name.substr(9, 3); - newSpecies.baseStats.spd = target.set.name.substr(12, 3); - newSpecies.baseStats.spe = target.set.name.substr(15, 3); - target.isModded = true; - target.canMegaEvo = null; - if (target.species.isMega) { - const megaSpecies = this.doGetMixedSpecies(newSpecies, this.getMegaDeltas(this.dex.getSpecies(target.canMegaEvo))); - return megaSpecies; + if (target.set.name.length > 3) {//Allow compatibility for JUST changing the type; if the rest is blank, dont zero stats + let offset = 0; + let mods = ["Y", "Z", "y", "z", "+", "-"]; + /* + if (target.set.name.length > 18) {//Only account for HP if the name is longer than the old format (R.I.P.) + offset = 3; + //Use isNaN() to allow for not modifying specific base stats if we want, by just inputting like, xxx + if (!isNaN(target.set.name.substr(3, 3))) newSpecies.baseStats.hp = target.set.name.substr(3, 3); + } + */ + //Check to see if we want to ADD or SUB + if ( + target.set.name.substr(3, 3).toLowerCase() === "add" || + target.set.name.substr(3, 3).toLowerCase() === "sub" || + mods.includes(target.set.name.substr(3, 1)) + ) {//2 digit stat modifications + let sign = (target.set.name.substr(3, 3).toLowerCase() === "sub") ? -1 : 1; + //Individual modifier logic + let m = new Array(6).fill(sign); + if (mods.includes(target.set.name.substr(3, 1))) { + let key = Array.from(target.set.name.substr(3, 3)); + for (let k = 0; k < key.length; k++) { + //If lowercase (or -): negative. else positive + //If Z (or -): negative. else positive + m[k*2] = (key[k] === "+") ? 1 : + (key[k].toLowerCase() === key[k]) ? -1 : 1; + m[k*2 + 1] = (key[k] === "-") ? -1 : + (key[k].toLowerCase() === "z") ? -1 : 1; + } + } + if (!isNaN(target.set.name.substr(6, 2))) { + newSpecies.baseStats.hp = species.baseStats.hp + target.set.name.substr(6, 2)*m[0]; + } if (!isNaN(target.set.name.substr(8, 2))) { + newSpecies.baseStats.atk = species.baseStats.atk + target.set.name.substr(8, 2)*m[1]; + } if (!isNaN(target.set.name.substr(10, 2))) { + newSpecies.baseStats.def = species.baseStats.def + target.set.name.substr(10, 2)*m[2]; + } if (!isNaN(target.set.name.substr(12, 2))) { + newSpecies.baseStats.spa = species.baseStats.spa + target.set.name.substr(12, 2)*m[3]; + } if (!isNaN(target.set.name.substr(14, 2))) { + newSpecies.baseStats.spd = species.baseStats.spd + target.set.name.substr(14, 2)*m[4]; + } if (!isNaN(target.set.name.substr(16, 2))) { + newSpecies.baseStats.spe = species.baseStats.spe + target.set.name.substr(16, 2)*m[5]; + } + } + else {//3 digit stat assignments + if (!isNaN(target.set.name.substr(3 + offset, 3))) newSpecies.baseStats.atk = target.set.name.substr(3 + offset, 3); + if (!isNaN(target.set.name.substr(6 + offset, 3))) newSpecies.baseStats.def = target.set.name.substr(6 + offset, 3); + if (!isNaN(target.set.name.substr(9 + offset, 3))) newSpecies.baseStats.spa = target.set.name.substr(9 + offset, 3); + if (!isNaN(target.set.name.substr(12 + offset, 3))) newSpecies.baseStats.spd = target.set.name.substr(12 + offset, 3); + if (!isNaN(target.set.name.substr(15 + offset, 3))) newSpecies.baseStats.spe = target.set.name.substr(15 + offset, 3); + } } - target.m.originalSpecies = newSpecies; - target.m.moddedSpecies = newSpecies; + target.isModded = true; return newSpecies; } }, + //onSwitchInPriority, so we go before Data Mod 100% of the time + onSwitchInPriority: 1, onSwitchIn(pokemon) { - // MnM4A - if (pokemon.illusion) { - const oMegaSpecies = this.dex.getSpecies(pokemon.illusion.species.originalMega); - if (oMegaSpecies.exists) { - // Place volatiles on the Pokémon to show its mega-evolved condition and details - if (oMegaSpecies.requiredItem || oMegaSpecies.requiredMove) this.add('-start', pokemon, oMegaSpecies.requiredItem || oMegaSpecies.requiredMove, '[silent]'); - const oSpecies = this.dex.getSpecies(pokemon.illusion.m.originalSpecies); - if (oSpecies.types.length !== pokemon.illusion.species.types.length || oSpecies.types[1] !== pokemon.species.types[1]) { - this.add('-start', pokemon, 'typechange', pokemon.illusion.species.types.join('/'), '[silent]'); - } - } - } else { - const oMegaSpecies = this.dex.getSpecies(pokemon.species.originalMega); - if (oMegaSpecies.exists) { - // Place volatiles on the Pokémon to show its mega-evolved condition and details - if (oMegaSpecies.requiredItem || oMegaSpecies.requiredMove) this.add('-start', pokemon, oMegaSpecies.requiredItem || oMegaSpecies.requiredMove, '[silent]'); - const oSpecies = this.dex.getSpecies(pokemon.m.originalSpecies); - if (oSpecies.types.length !== pokemon.species.types.length || oSpecies.types[1] !== pokemon.species.types[1]) { - this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]'); - } - } - } - // Sandbox let species = pokemon.species; let switchedIn = pokemon.switchedIn; if (pokemon.illusion) { @@ -1320,13 +1342,8 @@ export const Formats: {[k: string]: FormatData} = { } this.add(`raw|`); }, - onSwitchOut(pokemon) { - // @ts-ignore - const oMegaSpecies = this.dex.getSpecies(pokemon.species.originalMega); - if (oMegaSpecies.exists) { - this.add('-end', pokemon, oMegaSpecies.requiredItem || oMegaSpecies.requiredMove, '[silent]'); - } - }, + //onDamagingHitOrder, so we go before Data Mod (and after Illusion wearing off, which I modded to have a priority of 1) 100% of the time + onDamagingHitOrder: 2, onDamagingHit(damage, target, source, move) { if (target.hasAbility('illusion')) { // making sure the correct information is given when an Illusion breaks if (target.isModded) { diff --git a/data/mods/m4av6/sprites/icons/delibirdmegafestiverider.png b/data/mods/m4av6/sprites/icons/delibirdmegafestiverider.png deleted file mode 100644 index 8e9a1ec79b..0000000000 Binary files a/data/mods/m4av6/sprites/icons/delibirdmegafestiverider.png and /dev/null differ diff --git a/data/mods/inksrandbats/abilities.ts b/mod archive/inksrandbats/abilities.ts similarity index 100% rename from data/mods/inksrandbats/abilities.ts rename to mod archive/inksrandbats/abilities.ts diff --git a/data/mods/inksrandbats/conditions.ts b/mod archive/inksrandbats/conditions.ts similarity index 100% rename from data/mods/inksrandbats/conditions.ts rename to mod archive/inksrandbats/conditions.ts diff --git a/data/mods/inksrandbats/formats-data.ts b/mod archive/inksrandbats/formats-data.ts similarity index 100% rename from data/mods/inksrandbats/formats-data.ts rename to mod archive/inksrandbats/formats-data.ts diff --git a/data/mods/inksrandbats/moves.ts b/mod archive/inksrandbats/moves.ts similarity index 100% rename from data/mods/inksrandbats/moves.ts rename to mod archive/inksrandbats/moves.ts diff --git a/data/mods/inksrandbats/pokedex.ts b/mod archive/inksrandbats/pokedex.ts similarity index 100% rename from data/mods/inksrandbats/pokedex.ts rename to mod archive/inksrandbats/pokedex.ts diff --git a/data/mods/inksrandbats/random-teams.ts b/mod archive/inksrandbats/random-teams.ts similarity index 100% rename from data/mods/inksrandbats/random-teams.ts rename to mod archive/inksrandbats/random-teams.ts diff --git a/data/mods/inksrandbats/rulesets.ts b/mod archive/inksrandbats/rulesets.ts similarity index 100% rename from data/mods/inksrandbats/rulesets.ts rename to mod archive/inksrandbats/rulesets.ts