diff --git a/config/formats.ts b/config/formats.ts index 3a3f1b62a5..cb9dcbe6c7 100644 --- a/config/formats.ts +++ b/config/formats.ts @@ -931,7 +931,7 @@ export const Formats: FormatList = [ ], ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod', 'Z-Move Clause', 'Data Mod', 'Mega Data Mod'], banlist: [ - 'All Pokemon', 'Red Orb', 'Baton Pass', 'Heracronite', 'Gardevoirite', 'Salamencite', 'Charizardite Y', 'Blue Orb', 'Wishirupti + Cameruptite', + 'All Pokemon', 'Red Orb', 'Baton Pass', 'Heracronite', 'Gardevoirite', 'Salamencite', 'Charizardite Y', 'Blue Orb', 'Wishirupti + Cameruptite', 'Mawilite', ], unbanlist: [ 'Volquag', 'Toxalure', 'Kingtsar', 'Tanette', 'Slowton', @@ -945,7 +945,7 @@ export const Formats: FormatList = [ 'Absable', 'Absable-Mega-X', 'Absable-Mega-Y', 'Scolisharp', 'Ninjacross', 'Gossephalon', 'Dracodoom', 'Dracodoom-Mega', 'Toucosta', 'Weezlord-Galar', 'Sableior', 'Sableior-Mega', 'Sableior-Meteor', 'Sableior-Meteor-Mega', 'Eeluk', 'Maroligatr-Alola', 'Frozerade', - 'Hattaka', 'Glasnow', 'Glasnow-Mega', 'Kokovoir', 'Kyottler', 'Kyottler-Primal', 'Clawliwrath', + 'Hattaka', 'Glasnow', 'Glasnow-Mega', 'Kokovoir', 'Kyottler', 'Clawliwrath', 'Meloslash', 'Meloslash-Melee', 'Tornachamp', 'Cofazor', 'Cofazor-Mega', 'Talonsyl', 'Heatki', 'Sirsola', 'Noze-Dawn-Wings', 'Noze-Ultra', 'Bruxray', 'Kingdeedee', 'Tapu Koma', 'Hawlazzle', 'Whimsilotic', 'Vullacham', 'Vullacham-Mega', 'Dracolix', 'Dracolix-Mega', 'Serpanadel', 'Accelest', 'Buzzeggutor-Alola', @@ -957,7 +957,8 @@ export const Formats: FormatList = [ 'Exeggutor-Prime', 'Porygrigus', 'Golisotops', 'Avarupt', 'Avarupt-Mega', 'Goatitar', 'Goatitar-Mega', 'Fraxshadow', 'Pherogonga', 'Crawmise', 'Wishirupti', - 'Torranadus-Therian', 'Togetops', 'Toxicargo', 'Claylamar', 'Vishitomb', 'Swampflora', 'Swampflora-Mega', 'Swalurchin', 'Serpeblim', + 'Torranadus-Therian', 'Togetops', 'Toxicargo', 'Claylamar', 'Vishitomb', 'Swampflora', 'Swampflora-Mega', 'Swalurchin', 'Serpeblim', + 'Azekrow', 'Trapeino', 'Goodevoir', 'Duramaw', 'Rhybite', 'Oricolyph-Sensu', 'Silvino-Bug', 'Silvino-Dark', 'Silvino-Dragon', 'Silvino-Electric', 'Silvino-Fairy', 'Silvino-Fighting', 'Silvino-Fire', 'Silvino-Flying', 'Silvino-Ghost', 'Silvino-Grass', 'Silvino-Ground', 'Silvino-Ice', @@ -983,10 +984,11 @@ export const Formats: FormatList = [ ], ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod', 'Z-Move Clause', 'Data Mod', 'Mega Data Mod'], banlist: [ - 'All Pokemon', 'Baton Pass' + 'All Pokemon', 'Baton Pass', 'Gardevoirite', 'Mawilite', ], unbanlist: [ - 'Torranadus-Therian', 'Togetops', 'Toxicargo', 'Claylamar', 'Vishitomb', 'Swampflora', 'Swampflora-Mega', 'Swalurchin', 'Serpeblim', + 'Torranadus-Therian', 'Togetops', 'Toxicargo', 'Claylamar', 'Vishitomb', 'Swampflora', 'Swampflora-Mega', 'Swalurchin', 'Serpeblim', + 'Azekrow', 'Trapeino', 'Goodevoir', 'Duramaw', 'Rhybite', 'Oricolyph-Sensu', ], }, { @@ -1456,7 +1458,7 @@ export const Formats: FormatList = [ mod: 'sylvemonstest', teambuilderFormat: 'OU', ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod', 'Data Mod', 'Mega Data Mod', 'SylveMons Intro Mod'], - banlist: ['Uber', 'Arena Trap', 'Power Construct', 'Baton Pass', 'Stalwart + Calm Mind', 'Reverse Core', 'Alakazite', 'Blastoisinite', 'Arceus', 'Darkrai', 'Darmanitan-Galar', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Speed', 'Dialga', 'Genesect', 'Gengarite', 'Greninja-Ash', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lucarionite', 'Lugia', 'Lunala', 'Marshadow', 'Metagrossite', 'Mewtwo', 'Mewtwo-Mega-X', 'Mewtwo-Mega-Y', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Salamencite', 'Shaymin-Sky', 'Solgaleo', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zamazenta', 'Zekrom', 'Zygarde-Base', 'Berserk Gene', 'Kommonium Z', 'Eevee-Starter', 'Pikachu-Starter', 'Eternatus-Eternamax', 'Zygarde-Complete', 'Regigigas', 'Battle Bond', 'Necrozma-Ultra', 'Calyrex-Ice', 'Calyrex-Shadow', 'Ring Target', 'Ice Skates', 'Serperior ++ Flamethrower', 'Moon Stone', 'Shiny Stone', 'Dusk Stone'], + banlist: ['Uber', 'Arena Trap', 'Power Construct', 'Baton Pass', 'Stalwart + Calm Mind', 'Reverse Core', 'Alakazite', 'Blastoisinite', 'Arceus', 'Darkrai', 'Darmanitan-Galar', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Speed', 'Dialga', 'Genesect', 'Gengarite', 'Greninja-Ash', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lucarionite', 'Lugia', 'Lunala', 'Marshadow', 'Metagrossite', 'Mewtwo', 'Mewtwo-Mega-X', 'Mewtwo-Mega-Y', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Salamencite', 'Shaymin-Sky', 'Solgaleo', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zamazenta', 'Zekrom', 'Zygarde-Base', 'Berserk Gene', 'Kommonium Z', 'Eevee-Starter', 'Pikachu-Starter', 'Eternatus-Eternamax', 'Zygarde-Complete', 'Regigigas', 'Battle Bond', 'Necrozma-Ultra', 'Calyrex-Ice', 'Calyrex-Shadow', 'Ring Target', 'Ice Skates', 'Serperior ++ Flamethrower', 'Moon Stone', 'Shiny Stone', 'Dusk Stone', 'Moody'], unbanlist: ['Melmetal', 'Cinderace', 'Magearna', 'Magearna-Original', 'Floette-Eternal', 'Ribombee-Totem', 'Marowak-Alola-Totem', 'Kommo-o-Totem', 'Salazzle-Totem', 'Togedemaru-Totem', 'Mimikyu-Totem', 'Light of Ruin'], }, { @@ -1749,7 +1751,7 @@ export const Formats: FormatList = [ gameType: "doubles", ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod', 'Z-Move Clause', 'Data Mod', 'Mega Data Mod'], banlist: [ - 'All Pokemon', 'Red Orb', 'Baton Pass', 'Heracronite', 'Gardevoirite', 'Salamencite', 'Charizardite Y', 'Blue Orb', 'Wishirupti + Cameruptite', + 'All Pokemon', 'Red Orb', 'Baton Pass', 'Heracronite', 'Gardevoirite', 'Salamencite', 'Charizardite Y', 'Blue Orb', 'Wishirupti + Cameruptite', 'Mawilite', ], unbanlist: [ 'Volquag', 'Toxalure', 'Kingtsar', 'Tanette', 'Slowton', @@ -1774,7 +1776,8 @@ export const Formats: FormatList = [ 'Regibee', 'Regibee-Mega', 'Sigileye', 'Darmearna', 'Mr. Ace', 'Deciduskorch', 'Hypnakart', 'Zerclef', 'Exeggutor-Prime', 'Porygrigus', 'Golisotops', 'Avarupt', 'Avarupt-Mega', 'Goatitar', 'Goatitar-Mega', 'Fraxshadow', 'Pherogonga', 'Crawmise', 'Wishirupti', - 'Torranadus-Therian', 'Togetops', 'Toxicargo', 'Claylamar', 'Vishitomb', 'Swampflora', 'Swampflora-Mega', 'Swalurchin', 'Serpeblim', + 'Torranadus-Therian', 'Togetops', 'Toxicargo', 'Claylamar', 'Vishitomb', 'Swampflora', 'Swampflora-Mega', 'Swalurchin', 'Serpeblim', + 'Azekrow', 'Trapeino', 'Goodevoir', 'Duramaw', 'Rhybite', 'Oricolyph-Sensu', 'Silvino-Bug', 'Silvino-Dark', 'Silvino-Dragon', 'Silvino-Electric', 'Silvino-Fairy', 'Silvino-Fighting', @@ -2893,7 +2896,7 @@ export const Formats: FormatList = [ teambuilderFormat: 'OU', ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod', 'Data Mod', 'Mega Data Mod'], unbanlist: ['Floette-Eternal', 'Light of Ruin'], - banlist: ['Uber', 'Arena Trap', 'Power Construct', 'Shadow Tag', 'Baton Pass', 'Alakazite', 'Arceus', 'Darkrai', 'Gorilla Tactics', 'Deoxys-Attack', 'Deoxys-Speed', 'Dialga', 'Genesect', 'Gengarite', 'Greninja-Ash', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lucarionite', 'Lugia', 'Lunala', 'Marshadow', 'Metagrossite', 'Mewtwo', 'Mewtwo-Mega-X', 'Mewtwo-Mega-Y', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Salamencite', 'Solgaleo', 'Tornadus-Therian', 'Xerneas', 'Yveltal', 'Zacian', 'Zamazenta', 'Zekrom', 'Zygarde', 'Berserk Gene', 'Kommonium Z', 'Eevee-Starter', 'Pikachu-Starter', + banlist: ['Uber', 'Arena Trap', 'Power Construct', 'Shadow Tag', 'Baton Pass', 'Alakazite', 'Arceus', 'Darkrai', 'Gorilla Tactics', 'Deoxys-Attack', 'Deoxys-Speed', 'Dialga', 'Genesect', 'Gengarite', 'Greninja-Ash', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lucarionite', 'Lugia', 'Lunala', 'Marshadow', 'Metagrossite', 'Mewtwo', 'Mewtwo-Mega-X', 'Mewtwo-Mega-Y', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Salamencite', 'Solgaleo', 'Tornadus-Therian', 'Xerneas', 'Yveltal', 'Zacian', 'Zamazenta', 'Zekrom', 'Zygarde', 'Berserk Gene', 'Kommonium Z', 'Eevee-Starter', 'Pikachu-Starter', 'Moody', 'Normalium Z', 'Fairium Z', 'Fightinium Z', 'Firium Z', 'Flyinium Z', 'Darkinium Z', 'Dragonium Z', 'Buginium Z', 'Waterium Z', 'Electrium Z', 'Ghostium Z', 'Grassium Z', 'Groundium Z', 'Icium Z', 'Poisonium Z', 'Psychium Z', 'Rockium Z', 'Steelium Z'], }, { @@ -2914,7 +2917,7 @@ export const Formats: FormatList = [ battle: 4, }, ruleset: ['Standard GBU', 'VGC Timer', 'Dynamax Clause', 'Data Mod', 'Mega Data Mod', '+Past'], - banlist: ['All Pokemon', 'Normalium Z', 'Fairium Z', 'Fightinium Z', 'Firium Z', 'Flyinium Z', 'Darkinium Z', 'Dragonium Z', 'Buginium Z', 'Waterium Z', 'Electrium Z', 'Ghostium Z', 'Grassium Z', 'Groundium Z', 'Icium Z', 'Poisonium Z', 'Psychium Z', 'Rockium Z', 'Steelium Z', 'Seal Away'], + banlist: ['All Pokemon', 'Normalium Z', 'Fairium Z', 'Fightinium Z', 'Firium Z', 'Flyinium Z', 'Darkinium Z', 'Dragonium Z', 'Buginium Z', 'Waterium Z', 'Electrium Z', 'Ghostium Z', 'Grassium Z', 'Groundium Z', 'Icium Z', 'Poisonium Z', 'Psychium Z', 'Rockium Z', 'Steelium Z', 'Seal Away', 'Moody'], unbanlist: [ 'Floette-Eternal', 'Light of Ruin', 'Synthinobi', 'Chemicander', 'Primadillo', 'Bersawk', 'Electzal', 'Pyrogrine', 'Chompean', 'Mothicoal', 'Neurowatt', 'Menursa', 'Bloomivolt', 'Muaytiger', 'Hareloom', 'Razorine', 'Frospherous', 'Arbborry', 'Mustellar', 'Wolverflare', 'Photyrant', 'Ghoulgoyle', 'Cortefauna', 'Gammaroo', 'Serpentorch', 'Kaclash', 'Solinira', 'Zapish', 'Sanatee', 'Glaciarch', 'Creaviary', 'Plummuse', 'Sparsqueak', 'Darsqueak', 'Giraflame', 'Lycacia', 'Remodile', 'Petrasapien', 'Petradvena', 'Fyrecho', 'Osprime', 'Buffalocean', 'Ingarde', 'Venometta', 'Nimbless', 'Frixen', 'Necrice', 'Goblizz', 'Ptarabola', 'Dominidon', 'Frostonna', 'Geareon', 'Mytheon', diff --git a/data/mods/feuu/abilities.ts b/data/mods/feuu/abilities.ts index 9c4038206c..87128647a5 100644 --- a/data/mods/feuu/abilities.ts +++ b/data/mods/feuu/abilities.ts @@ -3166,5 +3166,99 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { name: "Self Sacrifice", shortDesc: "When this Pokemon faints, the replacement is healed by 1/4 of this Pokemon's max HP", }, + lighthearted: { + onModifyPriority(priority, pokemon, target, move) { + if (move?.category === 'Status') { + move.pranksterBoosted = true; + return priority + 1; + } + }, + onTryHit(target, source, move) { + if (target !== source && move.type === 'Ground') { + this.add('-immune', target, '[from] ability: Lighthearted'); + return null; + } + }, + name: "Lighthearted", + shortDesc: "Prankster + Levitate", + }, + tigerpit: { + onFoeTrapPokemon(pokemon) { + if (!this.isAdjacent(pokemon, this.effectData.target)) return; + if ((pokemon.isGrounded() || pokemon.hasAbility('Feel No Pain') || pokemon.hasAbility('Magnetic Waves') || pokemon.hasAbility('Sticky Float') || pokemon.hasAbility('Etativel') || pokemon.hasAbility('Lighthearted') || pokemon.hasAbility('Leviflame') || pokemon.hasAbility('Levitability'))) { + pokemon.tryTrap(true); + } + }, + onFoeMaybeTrapPokemon(pokemon, source) { + if (!source) source = this.effectData.target; + if (!source || !this.isAdjacent(pokemon, source)) return; + if (pokemon.isGrounded(!pokemon.knownType) || pokemon.hasAbility('Feel No Pain') || pokemon.hasAbility('Magnetic Waves') || pokemon.hasAbility('Sticky Float') || pokemon.hasAbility('Etativel') || pokemon.hasAbility('Lighthearted') || pokemon.hasAbility('Leviflame') || pokemon.hasAbility('Levitability')) { // Negate immunity if the type is unknown + pokemon.maybeTrapped = true; + } + }, + onSourceModifyAccuracyPriority: 7, + onSourceModifyAccuracy(accuracy, target, source, move) { + if ((target.isGrounded() || target.hasAbility('Feel No Pain') || target.hasAbility('Magnetic Waves') || target.hasAbility('Sticky Float') || target.hasAbility('Etativel') || target.hasAbility('Lighthearted') || target.hasAbility('Leviflame') || target.hasAbility('Levitability'))) { + return accuracy * 0.8; + } + }, + name: "Tiger Pit", + shortDesc: "Prevents grounded foes from switching. 0.8x Accuracy against airborne foes.", + }, + vengefulshift: { + onResidualOrder: 5, + onResidualSubOrder: 4, + onResidual(pokemon, source) { + if (pokemon.status) { + if (!source || source === pokemon) return; + this.add('-activate', pokemon, 'ability: Vengeful Shift'); + this.useMove("Psycho Shift", pokemon); + } + }, + name: "Vengeful Shift", + shortDesc: "If statused by a foe, this Pokemon attempts to transfer its status to a foe at the end of each turn.", + }, + toughskin: { + onDamagingHitOrder: 1, + onDamagingHit(damage, target, source, move) { + if (move.flags['contact']) { + this.damage(source.baseMaxhp / 8, source, target); + } + }, + onBasePowerPriority: 21, + onBasePower(basePower, attacker, defender, move) { + if (move.flags['contact']) { + return this.chainModify(1.2); + } + }, + name: "Tough Skin", + shortDesc: "Foes making contact with this Pokemon lose 1/8 of their max HP. This Pokemon's contact moves have 1.2x power.", + }, + hydraulicpress: { + onModifyWeight(weighthg) { + return this.trunc(weighthg / 2); + }, + onModifyMove(move, pokemon) { + if (move.secondaries) { + delete move.secondaries; + // Technically not a secondary effect, but it is negated + delete move.self; + if (move.id === 'clangoroussoulblaze') delete move.selfBoost; + // Actual negation of `AfterMoveSecondary` effects implemented in scripts.js + move.hasSheerForce = true; + } + }, + onBasePowerPriority: 21, + onBasePower(basePower, pokemon, target, move) { + if (move.hasSheerForce) return this.chainModify([0x14CD, 0x1000]); + }, + name: "Hydraulic Press", + shortDesc: "Sheer Force + Light Metal.", + }, + parroting: { + // implemented in runMove in scripts.js + name: "Parroting", + shortDesc: "(Not coded) After another Pokemon uses a status move, this Pokemon uses the same move.", + }, }; diff --git a/data/mods/feuu/formats-data.ts b/data/mods/feuu/formats-data.ts index 04fb94bc5f..d8bb918078 100644 --- a/data/mods/feuu/formats-data.ts +++ b/data/mods/feuu/formats-data.ts @@ -1039,7 +1039,56 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { randomBattleMoves: ["glare", "hex", "strengthsap", "leechseed", "knockoff", "shadowball", "willowisp"], randomBattleLevel: 79, }, - + azekrow: { + tier: "FERU", + doublesTier: "DUU", + randomBattleMoves: ["nastyplot", "darkpulse", "fireblast", "icebeam"], + randomBattleLevel: 79, + }, + trapeino: { + tier: "FERU", + doublesTier: "DUU", + randomBattleMoves: ["earthquake", "crunch", "firstimpression", "quickattack"], + randomBattleLevel: 79, + }, + rhybite: { + tier: "FERU", + doublesTier: "DUU", + randomBattleMoves: ["stealthrock", "highhorsepower", "dragonclaw", "stoneedge"], + randomBattleLevel: 79, + }, + oricolyphsensu: { + tier: "FERU", + doublesTier: "DUU", + randomBattleMoves: ["hurricane", "shadowball", "heatwave", "uturn"], + randomBattleLevel: 79, + }, + goodevoir: { + tier: "Uncoded", + doublesTier: "DUU", + randomBattleMoves: ["moonblast", "dracometeor", "trick", "mysticalfire"], + randomBattleLevel: 79, + }, + goodevoirmega: { + tier: "FEUUber", + doublesTier: "DUUber", + randomBattleMoves: ["moonblast", "sludgewave", "calmmind", "mysticalfire"], + randomBattleLevel: 75, + requiredItem: "Gardevoirite", + }, + duramaw: { + tier: "FERU", + doublesTier: "DUU", + randomBattleMoves: ["ironhead", "playrough", "fireblast", "stealthrock"], + randomBattleLevel: 79, + }, + duramawmega: { + tier: "FEUUber", + doublesTier: "DUUber", + randomBattleMoves: ["ironhead", "playrough", "suckerpunch", "swordsdance"], + randomBattleLevel: 75, + requiredItem: "Mawilite", + }, //Silvino Nightmare Hours //on god whose fucking idea was this diff --git a/data/mods/feuu/items.ts b/data/mods/feuu/items.ts index 5bd147a752..e11d4dcd49 100644 --- a/data/mods/feuu/items.ts +++ b/data/mods/feuu/items.ts @@ -104,10 +104,7 @@ export const Items: {[itemid: string]: ModdedItemData} = { megaStone: "Pincurchitar-Mega", megaEvolves: "Pincurchitar", itemUser: ["Pincurchitar"], - onTakeItem(item, source) { - if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; - return true; - }, + onTakeItem: false, num: 669, desc: "If held by a Pincurchitar or Goatitar, this item allows it to Mega Evolve in battle.", }, @@ -130,10 +127,7 @@ export const Items: {[itemid: string]: ModdedItemData} = { megaStone: "Sableior-Mega", megaEvolves: "Sableior", itemUser: ["Sableior"], - onTakeItem(item, source) { - if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; - return true; - }, + onTakeItem: false, num: 754, desc: "If held by a Sableior or an Absable, this item allows it to Mega Evolve in battle.", }, @@ -187,7 +181,7 @@ export const Items: {[itemid: string]: ModdedItemData} = { return true; }, num: 657, - desc: "If held by a Kokovoir, this item allows it to Mega Evolve in battle.", + desc: "If held by a Kokovoir or Goodevoir, this item allows it to Mega Evolve in battle.", }, scizorite: { name: "Scizorite", @@ -383,4 +377,17 @@ export const Items: {[itemid: string]: ModdedItemData} = { num: 752, desc: "If held by a Swampflora, this item allows it to Mega Evolve in battle.", }, + mawilite: { + name: "Mawilite", + spritenum: 598, + megaStone: "Duramaw-Mega", + megaEvolves: "Duramaw", + itemUser: ["Duramaw"], + onTakeItem(item, source) { + if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; + return true; + }, + num: 681, + desc: "If held by a Duramaw, this item allows it to Mega Evolve in battle.", + }, }; diff --git a/data/mods/feuu/moves.ts b/data/mods/feuu/moves.ts index 7d803c4e97..2a5efa1fa7 100644 --- a/data/mods/feuu/moves.ts +++ b/data/mods/feuu/moves.ts @@ -15,6 +15,10 @@ export const Moves: {[moveid: string]: MoveData} = { inherit: true, isNonstandard: null, }, + revelationdance: { + inherit: true, + isNonstandard: null, + }, smackdown: { num: 479, diff --git a/data/mods/feuu/pokedex.ts b/data/mods/feuu/pokedex.ts index 8c6f93ee0a..3df75d3a55 100644 --- a/data/mods/feuu/pokedex.ts +++ b/data/mods/feuu/pokedex.ts @@ -2028,4 +2028,88 @@ export const Pokedex: {[k: string]: ModdedSpeciesData} = { abilities: {0: "Self Sacrifice"}, weightkg: 39, }, + +// RU Slate 2 + azekrow: { + fusion: ['Azelf', 'Murkrow'], + num: 121, + name: "Azekrow", + types: ["Psychic", "Dark"], + baseStats: {hp: 75, atk: 105, def: 65, spa: 105, spd: 65, spe: 104}, + abilities: {0: "Lighthearted"}, + weightkg: 1.2, + }, + trapeino: { + fusion: ['Trapinch', 'Deino'], + num: 122, + name: "Trapeino", + types: ["Ground", "Dark"], + baseStats: {hp: 50, atk: 100, def: 50, spa: 45, spd: 50, spe: 25}, + abilities: {0: "Tiger Pit"}, + weightkg: 16.2, + evos: ["Vibrava", "Zweilous"], + }, + goodevoir: { + fusion: ['Sliggoo', 'Gardevoir'], + num: 123, + name: "Goodevoir", + types: ["Dragon", "Fairy"], + baseStats: {hp: 78, atk: 70, def: 59, spa: 124, spd: 114, spe: 80}, + abilities: {0: "Vengeful Shift"}, + weightkg: 33, + }, + goodevoirmega: { + fusion: ['Sliggoo', 'Gardevoir'], + num: 123, + name: "Goodevoir-Mega", + baseSpecies: "Goodevoir", + forme: "Mega", + types: ["Dragon", "Fairy"], + baseStats: {hp: 78, atk: 90, def: 59, spa: 164, spd: 134, spe: 100}, + abilities: {0: "Pixilate"}, + weightkg: 33, + requiredItem: "Gardevoirite", + battleOnly: "Goodevoir", + }, + duramaw: { + fusion: ['Duraludon', 'Mawile'], + num: 125, + name: "Duramaw", + types: ["Steel", "Fairy"], + baseStats: {hp: 70, atk: 90, def: 115, spa: 90, spd: 55, spe: 75}, + abilities: {0: "Hydraulic Press"}, + weightkg: 25.6, + }, + duramawmega: { + fusion: ['Duraludon', 'Mawile'], + num: 125, + name: "Duramaw-Mega", + baseSpecies: "Duramaw", + forme: "Mega", + types: ["Steel", "Fairy"], + baseStats: {hp: 70, atk: 110, def: 155, spa: 90, spd: 95, spe: 75}, + abilities: {0: "Huge Power"}, + weightkg: 37.6, + requiredItem: "Mawilite", + battleOnly: "Duramaw", + }, + rhybite: { + fusion: ['Rhydon', 'Gabite'], + num: 124, + name: "Rhybite", + types: ["Rock", "Dragon"], + baseStats: {hp: 105, atk: 110, def: 95, spa: 50, spd: 65, spe: 61}, + abilities: {0: "Tough Skin"}, + weightkg: 88, + evos: ["Rhyperior", "Garchomp"], + }, + oricolyphsensu: { + fusion: ['Oricorio', 'Sigilyph'], + num: 126, + name: "Oricolyph-Sensu", + types: ["Flying", "Ghost"], + baseStats: {hp: 80, atk: 64, def: 85, spa: 100, spd: 85, spe: 108}, + abilities: {0: "Parroting"}, + weightkg: 8.7, + }, }; diff --git a/data/mods/feuu/scripts.ts b/data/mods/feuu/scripts.ts index 2643fcd6ea..6bbc6f0dc1 100644 --- a/data/mods/feuu/scripts.ts +++ b/data/mods/feuu/scripts.ts @@ -113,9 +113,131 @@ export const Scripts: {[k: string]: ModdedBattleScriptsData} = { return "Goatitar-Mega"; } + if (item.name === "Mawilite" && pokemon.baseSpecies.name === "Duramaw") { + return "Duramaw-Mega"; + } + + if (item.name === "Gardevoirite" && pokemon.baseSpecies.name === "Goodevoir") { + return "Goodevoir-Mega"; + } + return item.megaStone; }, + runMove(moveOrMoveName, pokemon, targetLoc, sourceEffect, zMove, externalMove, maxMove, originalTarget) { + pokemon.activeMoveActions++; + let target = this.getTarget(pokemon, maxMove || zMove || moveOrMoveName, targetLoc, originalTarget); + let baseMove = this.dex.getActiveMove(moveOrMoveName); + const pranksterBoosted = baseMove.pranksterBoosted; + if (baseMove.id !== 'struggle' && !zMove && !maxMove && !externalMove) { + const changedMove = this.runEvent('OverrideAction', pokemon, target, baseMove); + if (changedMove && changedMove !== true) { + baseMove = this.dex.getActiveMove(changedMove); + if (pranksterBoosted) baseMove.pranksterBoosted = pranksterBoosted; + target = this.getRandomTarget(pokemon, baseMove); + } + } + let move = baseMove; + if (zMove) { + move = this.getActiveZMove(baseMove, pokemon); + } else if (maxMove) { + move = this.getActiveMaxMove(baseMove, pokemon); + } + + move.isExternal = externalMove; + + this.setActiveMove(move, pokemon, target); + + /* if (pokemon.moveThisTurn) { + // THIS IS PURELY A SANITY CHECK + // DO NOT TAKE ADVANTAGE OF THIS TO PREVENT A POKEMON FROM MOVING; + // USE this.queue.cancelMove INSTEAD + this.debug('' + pokemon.id + ' INCONSISTENT STATE, ALREADY MOVED: ' + pokemon.moveThisTurn); + this.clearActiveMove(true); + return; + } */ + const willTryMove = this.runEvent('BeforeMove', pokemon, target, move); + if (!willTryMove) { + this.runEvent('MoveAborted', pokemon, target, move); + this.clearActiveMove(true); + // The event 'BeforeMove' could have returned false or null + // false indicates that this counts as a move failing for the purpose of calculating Stomping Tantrum's base power + // null indicates the opposite, as the Pokemon didn't have an option to choose anything + pokemon.moveThisTurnResult = willTryMove; + return; + } + if (move.beforeMoveCallback) { + if (move.beforeMoveCallback.call(this, pokemon, target, move)) { + this.clearActiveMove(true); + pokemon.moveThisTurnResult = false; + return; + } + } + pokemon.lastDamage = 0; + let lockedMove; + if (!externalMove) { + lockedMove = this.runEvent('LockMove', pokemon); + if (lockedMove === true) lockedMove = false; + if (!lockedMove) { + if (!pokemon.deductPP(baseMove, null, target) && (move.id !== 'struggle')) { + this.add('cant', pokemon, 'nopp', move); + const gameConsole = [ + null, 'Game Boy', 'Game Boy Color', 'Game Boy Advance', 'DS', 'DS', '3DS', '3DS', + ][this.gen] || 'Switch'; + this.hint(`This is not a bug, this is really how it works on the ${gameConsole}; try it yourself if you don't believe us.`); + this.clearActiveMove(true); + pokemon.moveThisTurnResult = false; + return; + } + } else { + sourceEffect = this.dex.getEffect('lockedmove'); + } + pokemon.moveUsed(move, targetLoc); + } + + // Dancer Petal Dance hack + // TODO: implement properly + const noLock = externalMove && !pokemon.volatiles['lockedmove']; + + if (zMove) { + if (pokemon.illusion) { + this.singleEvent('End', this.dex.getAbility('Illusion'), pokemon.abilityData, pokemon); + } + this.add('-zpower', pokemon); + pokemon.side.zMoveUsed = true; + } + const moveDidSomething = this.useMove(baseMove, pokemon, target, sourceEffect, zMove, maxMove); + this.lastSuccessfulMoveThisTurn = moveDidSomething ? this.activeMove && this.activeMove.id : null; + if (this.activeMove) move = this.activeMove; + this.singleEvent('AfterMove', move, null, pokemon, target, move); + this.runEvent('AfterMove', pokemon, target, move); + + // Dancer's activation order is completely different from any other event, so it's handled separately + if (moveDidSomething && !move.isExternal) { + const dancers = []; + for (const currentPoke of this.getAllActive()) { + if (pokemon === currentPoke) continue; + if (!currentPoke.isSemiInvulnerable() && (move.flags['dance'] && currentPoke.hasAbility('dancer')) || (move.category === 'Status' && currentPoke.hasAbility('parroting'))) { + dancers.push(currentPoke); + } + } + // Dancer activates in order of lowest speed stat to highest + // Note that the speed stat used is after any volatile replacements like Speed Swap, + // but before any multipliers like Agility or Choice Scarf + // Ties go to whichever Pokemon has had the ability for the least amount of time + dancers.sort( + (a, b) => -(b.storedStats['spe'] - a.storedStats['spe']) || b.abilityOrder - a.abilityOrder + ); + for (const dancer of dancers) { + if (this.faintMessages()) break; + if (dancer.fainted) continue; + const dancersTarget = target!.side !== dancer.side && pokemon.side === dancer.side ? target! : pokemon; + this.runMove(move.id, dancer, this.getTargetLoc(dancersTarget, dancer), this.dex.getAbility(dancer.ability), undefined, true); + } + } + if (noLock && pokemon.volatiles['lockedmove']) delete pokemon.volatiles['lockedmove']; + }, + pokemon: { //Included for abilities that make the user non-grounded: //Levitate is checked for when running groundedness (ground immunity, iron ball, etc) @@ -147,6 +269,8 @@ export const Scripts: {[k: string]: ModdedBattleScriptsData} = { this.battle.add('-immune', this, '[from] ability: Sticky Float'); } else if (this.hasAbility('etativel')) { this.battle.add('-immune', this, '[from] ability: Etativel'); + } else if (this.hasAbility('lighthearted')) { + this.battle.add('-immune', this, '[from] ability: Lighthearted'); } else { this.battle.add('-immune', this, '[from] ability: Levitate'); } @@ -207,6 +331,72 @@ export const Scripts: {[k: string]: ModdedBattleScriptsData} = { !this.getAbility().isPermanent ) ); + }, + + setStatus( + status: string | Condition, + source: Pokemon | null = null, + sourceEffect: Effect | null = null, + ignoreImmunities = false + ) { + if (!this.hp) return false; + status = this.battle.dex.getEffect(status); + if (this.battle.event) { + if (!source) source = this.battle.event.source; + if (!sourceEffect) sourceEffect = this.battle.effect; + } + if (!source) source = this; + + if (this.status === status.id) { + if ((sourceEffect as Move)?.status === this.status) { + this.battle.add('-fail', this, this.status); + } else if ((sourceEffect as Move)?.status) { + this.battle.add('-fail', source); + this.battle.attrLastMove('[still]'); + } + return false; + } + + if (!ignoreImmunities && status.id && + !(source?.hasAbility(['corrosion', 'toxicplay']) && ['tox', 'psn'].includes(status.id))) { + // the game currently never ignores immunities + if (!this.runStatusImmunity(status.id === 'tox' ? 'psn' : status.id)) { + this.battle.debug('immune to status'); + if ((sourceEffect as Move)?.status) { + this.battle.add('-immune', this); + } + return false; + } + } + const prevStatus = this.status; + const prevStatusData = this.statusData; + if (status.id) { + const result: boolean = this.battle.runEvent('SetStatus', this, source, sourceEffect, status); + if (!result) { + this.battle.debug('set status [' + status.id + '] interrupted'); + return result; + } + } + + this.status = status.id; + this.statusData = {id: status.id, target: this}; + if (source) this.statusData.source = source; + if (status.duration) this.statusData.duration = status.duration; + if (status.durationCallback) { + this.statusData.duration = status.durationCallback.call(this.battle, this, source, sourceEffect); + } + + if (status.id && !this.battle.singleEvent('Start', status, this.statusData, this, source, sourceEffect)) { + this.battle.debug('status start [' + status.id + '] interrupted'); + // cancel the setstatus + this.status = prevStatus; + this.statusData = prevStatusData; + return false; + } + if (status.id && !this.battle.runEvent('AfterSetStatus', this, source, sourceEffect, status)) { + return false; + } + return true; } }, @@ -445,7 +635,7 @@ export const Scripts: {[k: string]: ModdedBattleScriptsData} = { return false; } //Right here - if (!move.negateSecondary && !(move.hasSheerForce && (pokemon.hasAbility('terrorizer') || pokemon.hasAbility('monarchyenforcement')))) { + if (!move.negateSecondary && !(move.hasSheerForce && (pokemon.hasAbility('terrorizer') || pokemon.hasAbility('monarchyenforcement') || pokemon.hasAbility('hydraulicpress')))) { const originalHp = pokemon.hp; this.singleEvent('AfterMoveSecondarySelf', move, null, pokemon, target, move); this.runEvent('AfterMoveSecondarySelf', pokemon, target, move); @@ -460,7 +650,7 @@ export const Scripts: {[k: string]: ModdedBattleScriptsData} = { }, afterMoveSecondaryEvent(targets, pokemon, move) { // console.log(`${targets}, ${pokemon}, ${move}`) - if (!move.negateSecondary && !(move.hasSheerForce && (pokemon.hasAbility('terrorizer') || pokemon.hasAbility('monarchyenforcement')))) { + if (!move.negateSecondary && !(move.hasSheerForce && (pokemon.hasAbility('terrorizer') || pokemon.hasAbility('monarchyenforcement') || pokemon.hasAbility('hydraulicpress')))) { this.singleEvent('AfterMoveSecondary', move, null, targets[0], pokemon, move); this.runEvent('AfterMoveSecondary', targets, pokemon, move); } @@ -646,7 +836,7 @@ export const Scripts: {[k: string]: ModdedBattleScriptsData} = { } else if (!this.singleEvent('TryImmunity', move, {}, target, pokemon, move)) { this.add('-immune', target); hitResults[i] = false; - } else if (this.gen >= 7 && move.pranksterBoosted && (pokemon.hasAbility('prankster') || pokemon.hasAbility('notfunny') || pokemon.hasAbility('darkhumour') || pokemon.hasAbility('flashyjokes')) && + } else if (this.gen >= 7 && move.pranksterBoosted && (pokemon.hasAbility('prankster') || pokemon.hasAbility('notfunny') || pokemon.hasAbility('darkhumour') || pokemon.hasAbility('flashyjokes') || pokemon.hasAbility('lighthearted')) && targets[i].side !== pokemon.side && !this.dex.getImmunity('prankster', target)) { this.debug('natural prankster immunity'); if (!target.illusion) this.hint("Since gen 7, Dark is immune to Prankster moves."); @@ -658,71 +848,4 @@ export const Scripts: {[k: string]: ModdedBattleScriptsData} = { } return hitResults; }, - pokemon: { - setStatus( - status: string | Condition, - source: Pokemon | null = null, - sourceEffect: Effect | null = null, - ignoreImmunities = false - ) { - if (!this.hp) return false; - status = this.battle.dex.getEffect(status); - if (this.battle.event) { - if (!source) source = this.battle.event.source; - if (!sourceEffect) sourceEffect = this.battle.effect; - } - if (!source) source = this; - - if (this.status === status.id) { - if ((sourceEffect as Move)?.status === this.status) { - this.battle.add('-fail', this, this.status); - } else if ((sourceEffect as Move)?.status) { - this.battle.add('-fail', source); - this.battle.attrLastMove('[still]'); - } - return false; - } - - if (!ignoreImmunities && status.id && - !(source?.hasAbility(['corrosion', 'toxicplay']) && ['tox', 'psn'].includes(status.id))) { - // the game currently never ignores immunities - if (!this.runStatusImmunity(status.id === 'tox' ? 'psn' : status.id)) { - this.battle.debug('immune to status'); - if ((sourceEffect as Move)?.status) { - this.battle.add('-immune', this); - } - return false; - } - } - const prevStatus = this.status; - const prevStatusData = this.statusData; - if (status.id) { - const result: boolean = this.battle.runEvent('SetStatus', this, source, sourceEffect, status); - if (!result) { - this.battle.debug('set status [' + status.id + '] interrupted'); - return result; - } - } - - this.status = status.id; - this.statusData = {id: status.id, target: this}; - if (source) this.statusData.source = source; - if (status.duration) this.statusData.duration = status.duration; - if (status.durationCallback) { - this.statusData.duration = status.durationCallback.call(this.battle, this, source, sourceEffect); - } - - if (status.id && !this.battle.singleEvent('Start', status, this.statusData, this, source, sourceEffect)) { - this.battle.debug('status start [' + status.id + '] interrupted'); - // cancel the setstatus - this.status = prevStatus; - this.statusData = prevStatusData; - return false; - } - if (status.id && !this.battle.runEvent('AfterSetStatus', this, source, sourceEffect, status)) { - return false; - } - return true; - } - }, }; diff --git a/data/mods/feuu/sprites/front-shiny/azekrow.png b/data/mods/feuu/sprites/front-shiny/azekrow.png new file mode 100644 index 0000000000..2bc6cb7383 Binary files /dev/null and b/data/mods/feuu/sprites/front-shiny/azekrow.png differ diff --git a/data/mods/feuu/sprites/front-shiny/duramaw.png b/data/mods/feuu/sprites/front-shiny/duramaw.png new file mode 100644 index 0000000000..d64b083de2 Binary files /dev/null and b/data/mods/feuu/sprites/front-shiny/duramaw.png differ diff --git a/data/mods/feuu/sprites/front-shiny/duramawmega.png b/data/mods/feuu/sprites/front-shiny/duramawmega.png new file mode 100644 index 0000000000..007b9f5521 Binary files /dev/null and b/data/mods/feuu/sprites/front-shiny/duramawmega.png differ diff --git a/data/mods/feuu/sprites/front-shiny/goodevoir.png b/data/mods/feuu/sprites/front-shiny/goodevoir.png new file mode 100644 index 0000000000..9a263abbb5 Binary files /dev/null and b/data/mods/feuu/sprites/front-shiny/goodevoir.png differ diff --git a/data/mods/feuu/sprites/front-shiny/goodevoirmega.png b/data/mods/feuu/sprites/front-shiny/goodevoirmega.png new file mode 100644 index 0000000000..8ba6c63962 Binary files /dev/null and b/data/mods/feuu/sprites/front-shiny/goodevoirmega.png differ diff --git a/data/mods/feuu/sprites/front-shiny/oricolyphsensu.png b/data/mods/feuu/sprites/front-shiny/oricolyphsensu.png new file mode 100644 index 0000000000..33a19a0b90 Binary files /dev/null and b/data/mods/feuu/sprites/front-shiny/oricolyphsensu.png differ diff --git a/data/mods/feuu/sprites/front-shiny/rhybite.png b/data/mods/feuu/sprites/front-shiny/rhybite.png new file mode 100644 index 0000000000..3833922413 Binary files /dev/null and b/data/mods/feuu/sprites/front-shiny/rhybite.png differ diff --git a/data/mods/feuu/sprites/front-shiny/trapeino.png b/data/mods/feuu/sprites/front-shiny/trapeino.png new file mode 100644 index 0000000000..b840deed7e Binary files /dev/null and b/data/mods/feuu/sprites/front-shiny/trapeino.png differ diff --git a/data/mods/feuu/sprites/front/azekrow.png b/data/mods/feuu/sprites/front/azekrow.png new file mode 100644 index 0000000000..3ab1aa815e Binary files /dev/null and b/data/mods/feuu/sprites/front/azekrow.png differ diff --git a/data/mods/feuu/sprites/front/duramaw.png b/data/mods/feuu/sprites/front/duramaw.png new file mode 100644 index 0000000000..a26080c0ed Binary files /dev/null and b/data/mods/feuu/sprites/front/duramaw.png differ diff --git a/data/mods/feuu/sprites/front/duramawmega.png b/data/mods/feuu/sprites/front/duramawmega.png new file mode 100644 index 0000000000..6e4ba5703e Binary files /dev/null and b/data/mods/feuu/sprites/front/duramawmega.png differ diff --git a/data/mods/feuu/sprites/front/goodevoir.png b/data/mods/feuu/sprites/front/goodevoir.png new file mode 100644 index 0000000000..097f22a553 Binary files /dev/null and b/data/mods/feuu/sprites/front/goodevoir.png differ diff --git a/data/mods/feuu/sprites/front/goodevoirmega.png b/data/mods/feuu/sprites/front/goodevoirmega.png new file mode 100644 index 0000000000..40e59ecd12 Binary files /dev/null and b/data/mods/feuu/sprites/front/goodevoirmega.png differ diff --git a/data/mods/feuu/sprites/front/oricolyphsensu.png b/data/mods/feuu/sprites/front/oricolyphsensu.png new file mode 100644 index 0000000000..f08dd7d4e4 Binary files /dev/null and b/data/mods/feuu/sprites/front/oricolyphsensu.png differ diff --git a/data/mods/feuu/sprites/front/rhybite.png b/data/mods/feuu/sprites/front/rhybite.png new file mode 100644 index 0000000000..5fb7a0d165 Binary files /dev/null and b/data/mods/feuu/sprites/front/rhybite.png differ diff --git a/data/mods/feuu/sprites/front/trapeino.png b/data/mods/feuu/sprites/front/trapeino.png new file mode 100644 index 0000000000..05ade61496 Binary files /dev/null and b/data/mods/feuu/sprites/front/trapeino.png differ diff --git a/data/mods/feuu/sprites/icons/azekrow.png b/data/mods/feuu/sprites/icons/azekrow.png new file mode 100644 index 0000000000..7b643878d8 Binary files /dev/null and b/data/mods/feuu/sprites/icons/azekrow.png differ diff --git a/data/mods/feuu/sprites/icons/duramaw.png b/data/mods/feuu/sprites/icons/duramaw.png new file mode 100644 index 0000000000..d6c06d300b Binary files /dev/null and b/data/mods/feuu/sprites/icons/duramaw.png differ diff --git a/data/mods/feuu/sprites/icons/duramawmega.png b/data/mods/feuu/sprites/icons/duramawmega.png new file mode 100644 index 0000000000..1b565e39e3 Binary files /dev/null and b/data/mods/feuu/sprites/icons/duramawmega.png differ diff --git a/data/mods/feuu/sprites/icons/goodevoir.png b/data/mods/feuu/sprites/icons/goodevoir.png new file mode 100644 index 0000000000..f9ef70760b Binary files /dev/null and b/data/mods/feuu/sprites/icons/goodevoir.png differ diff --git a/data/mods/feuu/sprites/icons/goodevoirmega.png b/data/mods/feuu/sprites/icons/goodevoirmega.png new file mode 100644 index 0000000000..a6bfe0d285 Binary files /dev/null and b/data/mods/feuu/sprites/icons/goodevoirmega.png differ diff --git a/data/mods/feuu/sprites/icons/oricolyphsensu.png b/data/mods/feuu/sprites/icons/oricolyphsensu.png new file mode 100644 index 0000000000..dba424dae5 Binary files /dev/null and b/data/mods/feuu/sprites/icons/oricolyphsensu.png differ diff --git a/data/mods/feuu/sprites/icons/rhybite.png b/data/mods/feuu/sprites/icons/rhybite.png new file mode 100644 index 0000000000..a4fc7b77ad Binary files /dev/null and b/data/mods/feuu/sprites/icons/rhybite.png differ diff --git a/data/mods/feuu/sprites/icons/trapeino.png b/data/mods/feuu/sprites/icons/trapeino.png new file mode 100644 index 0000000000..3fe0152911 Binary files /dev/null and b/data/mods/feuu/sprites/icons/trapeino.png differ diff --git a/data/mods/pkmnybv2/formats-data.ts b/data/mods/pkmnybv2/formats-data.ts index f7b1e9338a..0d378ece16 100644 --- a/data/mods/pkmnybv2/formats-data.ts +++ b/data/mods/pkmnybv2/formats-data.ts @@ -216,6 +216,14 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "YB", doublesTier: "DYB", }, + sompuer: { + tier: "YB", + doublesTier: "DYB", + }, + thermodo: { + tier: "YB", + doublesTier: "DYB", + }, // New Megas butterfreemega: { diff --git a/data/mods/pkmnybv2/items.ts b/data/mods/pkmnybv2/items.ts index 20d0c294e0..2514286bb2 100644 --- a/data/mods/pkmnybv2/items.ts +++ b/data/mods/pkmnybv2/items.ts @@ -125,6 +125,100 @@ export const Items: {[k: string]: ModdedItemData} = { gen: 8, desc: "Attempts to paralyze holder at the end of every turn.", }, + lunarwing: { + name: "Lunar Wing", + spritenum: 180, + fling: { + basePower: 10, + }, + onResidualOrder: 5, + onResidualSubOrder: 5, + onResidual(pokemon) { + if (this.field.isTerrain('grassyterrain')) return; + if (pokemon.baseSpecies.name === 'Sompuer') { + this.heal(pokemon.baseMaxhp / 8); + } + }, + onTerrain(pokemon) { + if (!this.field.isTerrain('grassyterrain')) return; + if (pokemon.baseSpecies.name === 'Sompuer') { + this.heal(pokemon.baseMaxhp / 8); + } + }, + onTakeItem(item, pokemon, source) { + if ((source && source.baseSpecies.num === 9053) || pokemon.baseSpecies.num === 9053) { + return false; + } + return true; + }, + itemUser: ["Sompuer"], + num: -1047, + gen: 8, + desc: "If the holder is Sompuer, this Pokemon heals 12.5% of its max HP every turn.", + }, + enigmaticwing: { + name: "Enigmatic Wing", + spritenum: 180, + fling: { + basePower: 10, + }, + onModifySpAPriority: 1, + onModifySpA(spa, pokemon) { + if (pokemon.baseSpecies.name === 'Sompuer') { + return this.chainModify(1.3); + } + }, + onModifyAtkPriority: 1, + onModifyAtk(atk, pokemon) { + if (pokemon.baseSpecies.name === 'Sompuer') { + return this.chainModify(1.3); + } + }, + onTakeItem(item, pokemon, source) { + if ((source && source.baseSpecies.num === 9053) || pokemon.baseSpecies.num === 9053) { + return false; + } + return true; + }, + itemUser: ["Sompuer"], + num: -1048, + gen: 8, + desc: "If the holder is Sompuer, this Pokemon's attacks deal 1.3x damage.", + }, + deepseascale: { + name: "Deep Sea Scale", + spritenum: 93, + onTakeItem: false, + fling: { + basePower: 30, + }, + onModifySpDPriority: 2, + onModifySpD(spd, pokemon) { + if (pokemon.baseSpecies.name === 'Clamperl') { + return this.chainModify(2); + } + }, + itemUser: ["Clamperl"], + num: 227, + gen: 3, + }, + deepseatooth: { + name: "Deep Sea Tooth", + spritenum: 94, + onTakeItem: false, + fling: { + basePower: 90, + }, + onModifySpAPriority: 1, + onModifySpA(spa, pokemon) { + if (pokemon.baseSpecies.name === 'Clamperl') { + return this.chainModify(2); + } + }, + itemUser: ["Clamperl"], + num: 226, + gen: 3, + }, // Z-Crystals rhyperiumz: { diff --git a/data/mods/pkmnybv2/learnsets.ts b/data/mods/pkmnybv2/learnsets.ts index a6056ab470..e04ac361aa 100644 --- a/data/mods/pkmnybv2/learnsets.ts +++ b/data/mods/pkmnybv2/learnsets.ts @@ -3076,6 +3076,133 @@ export const Learnsets: {[speciesid: string]: LearnsetData} = { reflect: ["8L1"], }, }, + thermodo: { + learnset: { + flamethrower: ["8L1"], + fireblast: ["8L1"], + flareblitz: ["8L1"], + flamecharge: ["8L1"], + incinerate: ["8L1"], + heatwave: ["8L1"], + overheat: ["8L1"], + willowisp: ["8L1"], + sunnyday: ["8L1"], + firespin: ["8L1"], + hail: ["8L1"], + icebeam: ["8L1"], + blizzard: ["8L1"], + icywind: ["8L1"], + burningjealousy: ["8L1"], + icefang: ["8L1"], + iciclespear: ["8L1"], + haze: ["8L1"], + mist: ["8L1"], + chillout: ["8L1"], + scald: ["8L1"], + waterpulse: ["8L1"], + lifedew: ["8L1"], + dragonpulse: ["8L1"], + scaleshot: ["8L1"], + calmmind: ["8L1"], + morningsun: ["8L1"], + raindance: ["8L1"], + hex: ["8L1"], + dazzlinggleam: ["8L1"], + workup: ["8L1"], + playrough: ["8L1"], + irontail: ["8L1"], + stealthrock: ["8L1"], + weatherball: ["8L1"], + powergem: ["8L1"], + rockslide: ["8L1"], + stoneedge: ["8L1"], + stompingtantrum: ["8L1"], + attract: ["8L1"], + bide: ["8L1"], + captivate: ["8L1"], + confide: ["8L1"], + curse: ["8L1"], + doubleteam: ["8L1"], + doubleedge: ["8L1"], + endure: ["8L1"], + facade: ["8L1"], + frustration: ["8L1"], + hiddenpower: ["8L1"], + mimic: ["8L1"], + naturalgift: ["8L1"], + protect: ["8L1"], + rage: ["8L1"], + rest: ["8L1"], + return: ["8L1"], + round: ["8L1"], + secretpower: ["8L1"], + sleeptalk: ["8L1"], + snore: ["8L1"], + substitute: ["8L1"], + swagger: ["8L1"], + takedown: ["8L1"], + toxic: ["8L1"], + gigaimpact: ["8L1"], + hyperbeam: ["8L1"], + }, + }, + sompuer: { + learnset: { + hypnosis: ["8L1"], + lastresort: ["8L1"], + nightshade: ["8L1"], + mudslap: ["8L1"], + wonderroom: ["8L1"], + aurorabeam: ["8L1"], + bodyslam: ["8L1"], + confusion: ["8L1"], + furycutter: ["8L1"], + grassknot: ["8L1"], + gravity: ["8L1"], + moonlight: ["8L1"], + psyshock: ["8L1"], + recycle: ["8L1"], + shockwave: ["8L1"], + trickroom: ["8L1"], + dazzlinggleam: ["8L1"], + moonblast: ["8L1"], + magicroom: ["8L1"], + triattack: ["8L1"], + calmmind: ["8L1"], + chargebeam: ["8L1"], + confide: ["8L1"], + doubleteam: ["8L1"], + dreameater: ["8L1"], + endure: ["8L1"], + facade: ["8L1"], + flash: ["8L1"], + frustration: ["8L1"], + haze: ["8L1"], + headbutt: ["8L1"], + hiddenpower: ["8L1"], + icebeam: ["8L1"], + icywind: ["8L1"], + naturalgift: ["8L1"], + protect: ["8L1"], + psychic: ["8L1"], + psychup: ["8L1"], + raindance: ["8L1"], + rest: ["8L1"], + return: ["8L1"], + round: ["8L1"], + secretpower: ["8L1"], + shadowball: ["8L1"], + sleeptalk: ["8L1"], + snore: ["8L1"], + substitute: ["8L1"], + sunnyday: ["8L1"], + swagger: ["8L1"], + swift: ["8L1"], + thunderwave: ["8L1"], + toxic: ["8L1"], + trick: ["8L1"], + }, + }, // Rotoms rotomheat: { diff --git a/data/mods/pkmnybv2/pokedex.ts b/data/mods/pkmnybv2/pokedex.ts index 6fe9cc13ef..5be815a8fa 100644 --- a/data/mods/pkmnybv2/pokedex.ts +++ b/data/mods/pkmnybv2/pokedex.ts @@ -2236,4 +2236,33 @@ export const Pokedex: {[k: string]: ModdedSpeciesData} = { abilities: {0: "Atom Smasher"}, weightkg: 200, }, + thermodo: { + num: 9052, + name: "Thermodo", + types: ["Fire", "Ice"], + baseStats: {hp: 73, atk: 99, def: 73, spa: 109, spd: 73, spe: 100}, + abilities: {0: "Flame Body", 1: "Ice Body", H: "Mold Breaker"}, + weightkg: 100, + }, + sompuer: { + num: 9053, + name: "Sompuer", + types: ["Fairy"], + baseStats: {hp: 70, atk: 55, def: 80, spa: 80, spd: 85, spe: 80}, + abilities: {0: "Comatose"}, + weightkg: 9, + evos: ["Darkrai", "Cresselia"], + }, + darkrai: { + inherit: true, + prevo: "Sompuer", + evoType: "levelFriendship", + evoCondition: "during the night", + }, + cresselia: { + inherit: true, + prevo: "Sompuer", + evoType: "levelFriendship", + evoCondition: "during the day", + }, };