Mirror Move

Approved by The Immortal and Eevee General

Ever wish you could know what moves your opponent was running as soon as they switched in? Ever go up against a Gengar and wish you were running Shadow Ball? Well, those days are over! In Mirror Move, both you and your opponent choose two moves for each of your Pokemon. Then, in battle, the two empty slots become special mirror slots, which start with 32 PP each. When two Pokemon face each other, those slots copy the other Pokemon's moves, retaining the amount of PP those slots had. When one Pokemon is switched out, both Pokemon will have their mirror slots changed to match the other's moveset, so the movesets of active Pokemon will always be identical, aside from any differences in PP. This forces an adaptive, on-the-fly playstyle, as your last two moves are controlled by your opponent.

Rules:
Mechanic: Two of your moves are chosen in the teambuilder, and the other two moves are copied from the opponent's moves.
Clauses: Standard OU Clauses.
Bans: OU Banlist + Imprison, because all Pokemon will always share a complete moveset, and there is no way to bypass Imprison.
Unbans: None so far, and likely to be none.

Strategy:
You only get to choose two of your moves, so choose wisely. Be very cautious about running moves on Pokemon that are weak to those moves, such as a Chansey with Toxic or a Manaphy with Energy Ball. You should also be very careful about running boosting moves, especially moves that boost speed, as running those moves severely limits your coverage and allows your opponent to boost alongside you. The same goes for recovery, hazards, hazard removal, priority, phasing, etc. The safest strategy is to run moves that your Pokemon aren't hurt by, like a Heatran with dual STABs or an Amoongus with Toxic and Leech Seed, but building an entire team of such Pokemon will surely be limiting. Just about the only thing I can say for sure is that Assault Vest is probably a bad idea, because it prevents you from using your opponents status moves entirely. Oh, and please don't run Last Resort.

Q&A:
Q: Why can I only choose two moves?
A: Because when combined with the opponent's other two moves, you end up with a complete set of four moves.

Q: What happens if my opponent switches their Pokemon out? Do I still keep the moves I copied from that Pokemon?
A: Your mirror slots change to match the moves of the Pokemon they switched in. The amount of PP in those slots doesn't change, however.

Q: What if my opponent switches out on the same turn I was going to use one of the copied moves? Will my Pokemon use the old move, or the new move?
A: It uses the move you originally selected, even if that move isn't known by the Pokemon your opponent switches in. This is consistent with mechanics in-game, where if a move is replaced via level-up in a double or triple battle before the Pokemon can use the move that was replaced, it will still use the old move.

Q: What about Choice Scarf, Choice Band, and Choice Specs? If I use a mirrored move while holding one of these items, what happens if that move is replaced?
A: You'll be able to choose a new move next turn. This is also consistent with in-game mechanics.

Q: What about moves like Encore and Disable, and the ability Cursed Body?
A: I don't actually know. I haven't tested this in-game, myself, so if you want to try it out, go ahead! If you do, be sure to test it by replacing moves via level-up, as that's what all the other mechanical details are based on.

Q: What if my opponent only has one move?
A: Then you only copy that one move, and the other mirror slot becomes empty and unusable. It will still retain its PP while "empty."

Q: What happens if I use Mimic or Sketch?
A: Whether you copied one of the two from your opponent, or are running one yourself, nothing will happen; Mimic and Sketch fail if the user already knows the last move used by the target.


Resources:
Coded by Spandan and playable on Dragon Heaven!
 
Last edited:

MAMP

MAMP!
This is a really interesting concept! A strong strategy would be to run moves on your Pokemon that don't do much when used against them: for example, Will-o-Wisp on Fire-types, Water moves on Pokemon with Water Absorb, attacks that the Pokemon resists, etc. As well, you can run moves that are really only useful on the Pokemon that's using them - an example would be a move like Bullet Punch on Scizor, which gets a Technician boost when Scizor uses it, but not when its used by the opponent. Really looking forward to playing this when it gets coded!
 
Giving a Dragon or Ghost its STAB is very risky in almost all cases now. The sole exceptions are Mega Altaria, who instead has complications with its other STAB, and Sableye, who takes Ghost damage neutrally.
 

InfernapeTropius11

get on my level
Giving a Dragon or Ghost its STAB is very risky in almost all cases now. The sole exceptions are Mega Altaria, who instead has complications with its other STAB, and Sableye, who takes Ghost damage neutrally.
Actually I think MAlt will be very good in this meta. Hyper Voice or Return are normal type for the opponent (neutral on MAlt) while MAlt gets fairy stab due to pixilate. All -ate users seem pretty good due to this tbh as normal isnt exactly a stellar coverage move so it is relatively low risk.
 
Yeah, like I said in submissions, discussion on this is going to be hard/slow. At least until the meta gets coded. Perhaps get in touch with urkerab about getting this on ROM.

Anyway, to make sure my post isn't just a dumb one liner, I tried to think of mons that could be good in this and came up with the following.


Talon's cool because its main STAB move is Brave Bird meaning all offensive variants of talon don't really mind this change. Talon can go SD+BB on a Sharp Beak set, BB + Flare Blitz/U-Turn on banded sets and keep doing what it does just fine.


Serperior's a good setup sweeper here because having Contrary + Leaf Storm to setup while attacking is really great when you're restricted to two slots. In the second slot, it can use a hidden power of choice or sub. Serperior doesn't really mind the mirror moves because it does not have a lot of coverage to begin with and switchins to it could actually give it moves to use against them.


These two are kind of a core but they should be decent individually as well. Garchomp essentially goes the helmetchomp route and uses Rocks + DTail in its two slots. This allows diancie to come in on the garchomp switchin if/when it tries to use chomp's moves the next turn (obviously should not be switched into stuff that can actually kill diancie on a predicted switch like keldeo, eq lando etc) and proceed to hit something with its STAB [Moonblast/Diamond Storm] or Calm Mind up [CM/Moonblast].

I can't seem to think of a decent defensive set that hasn't taken a blow from standard, am I wrong or does full stall take a big blow?
 

sin(pi)

lucky n bad
Like imas said, you can do something akin to imposter-proofing here. Another example is dual STAB Lopunny + Ghost type - your opponent can't make use of your moves to hit your Ghost, unless they have Scrappy (and everything with Scrappy is either weak to HJK or bad).
Guts and Skill Link mons look good, too, for fairly obvious reasons.
 
I began thinking about something now, which could form a big difference between who uses what moves..
The Extra PP in the Mirror Slots
For example your opponent have a froslass with destiny bond, it has only 8 moves yet you have 32, allowing for much more mind games and bigger stall etc.
So basically low PP moves become much worse because the main user has the normal 8, yet the opponent will have a full 32 of it
 
Check out the new banner by the wonderful SpecsMegaBeedrill


Also, there's a lot of good discussion so far in the thread so far, so I'd like to add a little:
I can't seem to think of a decent defensive set that hasn't taken a blow from standard, am I wrong or does full stall take a big blow?
It seems to me that offense losing out on as much coverage as it does helps stall wall things more effectively, and there are still Pokemon that can run semi-effective stall sets, like the Amoongus I mentioned in the OP, Gliscor with Toxic/EQ, and Mega Sableye with Taunt and Will O Wisp. Of course, full stall takes a big hit in the fact that running any kind of recovery move will almost always be counter productive, as the opponent will always have one too, potentially with twice as much PP. However, Regenerator is still a powerful form of recovery that can't be copied, and Wish passing could be an effective way of healing your own team without helping the other team too much.
 
Breloom seems pretty decent in this meta, as Spore does not affect Breloom itself and Mach Punch is weaker on the opponent as they probably do not have Technician. Bullet Seed/Focus Punch can also be used.

A Stealth Rocker w/ taunt can prevent the opponent from setting their own rocks.

Any Prankster user is great, as they can use any status move the opponent may have.

Magnezones job of trapping steel types is made easier, as they are hard pressed for coverage and it resists both of its stabs.
 
Last edited:
Breloom seems pretty decent in this meta, as Spore does not affect Breloom itself and Mach Punch is weaker on the opponent as they probably do not have Technician. Bullet Seed/Focus Punch can also be used.

Machamp's niche in No Guard + Dynamic Punch is amplified here, as the opponent cannot use Dynamic Punch without a coin flip chance.

A Stealth Rocker w/ taunt can prevent the opponent from setting their own rocks.

Any Prankster user is great, as they can use any status move the opponent may have.

Magnezones job of trapping steel types is made easier, as they are hard pressed for coverage and it resists both of its stabs.
Most of this is good, but no guard affects both pokemon. Their dynamicpunches will also hit, and if you switch you still enter a 50-50+they don't keep dynamicpunch.
 
Most of this is good, but no guard affects both pokemon. Their dynamicpunches will also hit, and if you switch you still enter a 50-50+they don't keep dynamicpunch.
Thanks for catching that, I always forgets about No Guard going both ways.

So this post isn't wasted, here's a mon I just thought of.

Clefable @ Leftovers
Ability: Unaware
EVs: 248 HP / 252 Def / 8 SpD
Bold Nature
IVs: 0 Atk
- Calm Mind
- Moonblast
-

Thanks to Unaware, Clefable can Calm Mind with no worries about the opponent boosting up alongside it. Once Clefables counters are gone and there're no fairy resistances, Clefable can easily sweep.
 
Last edited:
If anything, Golurk should be your choice for Dynamic Punch shenanigans, seeing as how it's immune to the move. But then, I can't see much reason to use Golurk here anyways when there are probably better options for mons.
Thanks for catching that, I always forgets about No Guard going both ways.

So this post isn't wasted, here's a mon I just thought of.

Clefable @ Leftovers
Ability: Unaware
EVs: 248 HP / 252 Def / 8 SpD
Bold Nature
IVs: 0 Atk
- Calm Mind
- Moonblast
-

Thanks to Unaware, Clefable can Calm Mind with no worries about the opponent boosting up alongside it. Once Clefables counters are gone and there're are no fairy resistances, Clefable can easily sweep.
Except there's no guarantee you'll have any recovery moves, and Clefable is not bulky enough stat-wise to get away with that. It's basically forced out by 3HKOs now, instead of 2HKOs, and a pomeranian could 3HKO Clefable. This meta actually nixes a lot of common set-types, simply because you only have two moveslots to work with and everything else is a crapshoot. Assault Vest, setup, and hazards all become hard to use effectively, and even volt-turn can be hard if you take substantial damage from your pivot move. Stall teams can't rely on their mons having recovery AND the utility said mon is needed for AND a STAB move to not be Taunt-bait. Coordinating an offensive team to break stall shouldn't be too hard, since you control half their moveset.

The mons that thrive will be the ones that like spamming 1-2 moves most anyways, as well as things that strike a decent balance between mixed offenses, bulk, and speed -- Tornadus-Therian, for example, will rarely find itself stuck with a move that it can't move, and it can just run Hurricane + U-Turn and do most of what it really needs to do (it can just stay in if the opponent will probably U-Turn out), especially since there are few other special Flying-types. Mega Diancie can get good damage output out of most attacking moves, and you can run it alongside a Steel-type for easy pivoting... and so on.
 
Expanding on what akuemoy said about mons that only use one or two moves, choice items also seem really useful. They generally had 1 or two moves they spammed most of the time (and are pretty much guaranteed to outdamage their foe with those moves), while if they use one of their mirror moves they get the option to switch attacks at every switch/ko. Pokemon with great stabs are the same.

If you want to run stall, you are probably mostly limited to leech seeds+wish+scald+regen- which isn't terrible, but it's a big limitation.
 

canno

formerly The Reptile
Keldeo strikes me as something that is potentially really good - while you don't have the flexibility of choosing between Scald and Hydro Pump, it can simply pack a Water STAB move and Secret Sword. At worse, you don't get much which doesn't both you because you spam your STABs anyways, and at best you find yourself in a situation where you can Draco Meteor the opponent's Latias. Pretty stellar.

Heatran also seems really good - you can run the old trapper set with Magma Storm and either Toxic or Solar Beam (and Power Herb obv). Nothing you give your opponent will help them against Heatran, as you are immune (or in the case of Solar Beam, practically immune) to anything you give your opponents. Even just running dual STABs / Lava Plume and Protect or Toxic is pretty good.
 
Perhaps you could consider making it so you just mirror four moves instead? So you can have 8 move slots in total
That is way too much options, if the number of mirror moves are to increase, it should be 3 moves and then mirror 3 more moves, resulting in 6 moves. Or it could be 3 moves then mirror 1 move from the opponents first move in its moveset.
 

nv

The Lost Age
is a Community Contributor Alumnusis a Contributor Alumnusis a Smogon Media Contributor Alumnusis a Battle Simulator Staff Alumnus
I decided to build a team for this despite it not being playable yet as I feel like that is the best way to discuss the mindset behind picking two moves that can benefit the user of said Pokemon while not benefiting the opponent.


Heatran @ Leftovers
Ability: Flash Fire
EVs: 252 HP / 188 SpD / 68 Spe
Calm Nature
IVs: 0 Atk
- Lava Plume
- Stealth Rock
-

Clefable @ Leftovers
Ability: Unaware
EVs: 252 HP / 252 Def / 4 SpA
Bold Nature
IVs: 0 Atk
- Calm Mind
- Moonblast
-

Amoonguss @ Black Sludge
Ability: Regenerator
EVs: 252 HP / 136 Def / 120 SpD
Calm Nature
IVs: 0 Atk
- Spore
- Giga Drain
-

Thundurus-Therian @ Life Orb
Ability: Volt Absorb
EVs: 4 Def / 252 SpA / 252 Spe
Timid Nature
IVs: 0 Atk
- Nasty Plot
- Thunderbolt
-

Slowbro @ Leftovers
Ability: Oblivious
EVs: 252 HP / 232 Def / 24 SpD
Bold Nature
IVs: 0 Atk
- Scald
- Psyshock
-

Sableye-Mega @ Sablenite
Ability: Prankster
EVs: 252 HP / 112 Def / 144 SpD
Careful Nature
- Recover
- Knock Off
-


An In-Depth Look

Heatran @ Leftovers
Ability: Flash Fire
EVs: 252 HP / 188 SpD / 68 Spe
Calm Nature
IVs: 0 Atk
- Lava Plume
- Stealth Rock / Toxic
- Mirrored Move #1
- Mirrored Move #2

Standard SpD Heatran with Lava Plume allows you to spread burns fairly easily thanks to Heatran being immune to Lava Plume itself. Stealth Rock is there to give the team hazards and giving the opponent SR can be somewhat redundant if they decide to run their own hazards in one of the first two moveslots. Toxic is another option if you want to forgo entry hazards and works really nicely since Heatran is immune to Toxic thanks to its Steel typing.


Clefable @ Leftovers
Ability: Unaware
EVs: 252 HP / 252 Def / 4 SpA
Bold Nature
IVs: 0 Atk
- Calm Mind
- Moonblast
- Mirrored Move #1
- Mirrored Move #2

Already mentioned earlier, this Clefable set aims to beat any setup sweeper thanks to Unaware. Not having reliable recovery really stinks, but it can't really afford to forgo CM or Moonblast if Clefable want to beat other setup sweepers while it boosts up.


Amoonguss @ Black Sludge
Ability: Regenerator
EVs: 252 HP / 136 Def / 120 SpD
Calm Nature
IVs: 0 Atk
- Spore
- Giga Drain
- Mirrored Move #1
- Mirrored Move #2

Amoonguss is a really nice glue mon here as it serves as a Water switch-in while also being able to forgo its reliable recovery in Synthesis thanks to Regenerator. It also 4x resists its attacking move making it a hard stop to any of the opponent's mon who doesn't have STABs to beat it.


Thundurus-Therian @ Life Orb
Ability: Volt Absorb
EVs: 4 Def / 252 SpA / 252 Spe
Timid Nature
IVs: 0 Atk
- Nasty Plot
- Thunderbolt
- Mirrored Move #1
- Mirrored Move #2

This is a cool offensive option on more defensively inclined teams thanks to its ability. Being able to overpower the opponent while also being immune to the move you offer up to your opponent is really nice as you can become a big threat to the opponent if they lack a Ground-type or a revenge killer.


Slowbro @ Leftovers
Ability: Oblivious
EVs: 252 HP / 232 Def / 24 SpD
Bold Nature
IVs: 0 Atk
- Scald
- Psyshock / Slack Off
- Mirrored Move #1
- Mirrored Move #2

Slowbro serves as the physical wall and the second part of the Regenerator core, making this team somewhat hard to take down. The choice between Psyshock and Slack Off is dependent on the user as Psyshock means Slowbro resists the moves it is giving to the opponent while Slack Off makes Slowbro harder to take down, but also gives your opponent reliable recovery so it is a double-edged sword.


Sableye-Mega @ Sablenite
Ability: Prankster
EVs: 252 HP / 112 Def / 144 SpD
Careful Nature
- Recover
- Knock Off / Foul Play
- Mirrored Move #1
- Mirrored Move #2

Mega Sableye is the final piece of this semi-stall puzzle as it can bounce back entry hazards, status moves, and be able to either punish powerful physical attackers or get rid of their items. Sadly, Mega Sableye needs its recovery move, which means it will be mirrored by the opponent, but Knock Off and Foul Play do little damage to Mega Sableye, making them very safe options for it to use.
 
Last edited:
Okay I'm finally done
Code:
{
     name: "Mirror Move",
     desc:["&bullet; <a href=\"http://www.smogon.com/forums/threads/mirror-move.3572990/\">Mirror Move</a>"],
     section: "Other Metagames",
     ruleset: ["OU"],
     banlist: ["Imprison"],
     mod:"mirrormove",
     onBegin: function()
     {
       for(let p=1;p<=2;p++)
       {
         for(let i=0;i<this["p"+p].pokemon.length;i++)
         {
           this["p"+p].pokemon[i].om = [this["p"+p].pokemon[i].moveset[0]];
           this["p"+p].pokemon[i].obm = [this["p"+p].pokemon[i].baseMoveset[0]];
           if(this["p"+p].pokemon[i].baseMoveset[1])
           {
             this["p"+p].pokemon[i].om[1] = this["p"+p].pokemon[i].moveset[1];
             this["p"+p].pokemon[i].obm[1] = this["p"+p].pokemon[i].baseMoveset[1];
           }
         }
       }
     },
     onValidateSet(set)
     {
       if(set.moves.length>2)
         return ["You are allowed to bring only 2 moves on a Pokemon.","("+set.species+" has more than 2 moves)"]
     }
},
Code:
'use strict';

exports.BattleScripts = {
   nextTurn : function () {
     this.turn++;
     let allStale = true;
     let oneStale = false;
     for (let i = 0; i < this.sides.length; i++) {
       for (let j = 0; j < this.sides[i].active.length; j++) {
         let pokemon = this.sides[i].active[j];
         if (!pokemon) continue;
         pokemon.moveThisTurn = '';
         pokemon.usedItemThisTurn = false;
         pokemon.newlySwitched = false;

         pokemon.maybeDisabled = false;
         for (let entry of pokemon.moveset) {
           entry.disabled = false;
           entry.disabledSource = '';
         }
         this.runEvent('DisableMove', pokemon);
         if (!pokemon.ateBerry) pokemon.disableMove('belch');

         if (pokemon.lastAttackedBy) {
           if (pokemon.lastAttackedBy.pokemon.isActive) {
             pokemon.lastAttackedBy.thisTurn = false;
           } else {
             pokemon.lastAttackedBy = null;
           }
         }

         pokemon.trapped = pokemon.maybeTrapped = false;
         this.runEvent('TrapPokemon', pokemon);
         if (!pokemon.knownType || this.getImmunity('trapped', pokemon)) {
           this.runEvent('MaybeTrapPokemon', pokemon);
         }
         // Disable the faculty to cancel switches if a foe may have a trapping ability
         let foeSide = pokemon.side.foe;
         for (let k = 0; k < foeSide.active.length; ++k) {
           let source = foeSide.active[k];
           if (!source || source.fainted) continue;
           let template = (source.illusion || source).template;
           if (!template.abilities) continue;
           for (let abilitySlot in template.abilities) {
             let abilityName = template.abilities[abilitySlot];
             if (abilityName === source.ability) {
               // pokemon event was already run above so we don't need
               // to run it again.
               continue;
             }
             let banlistTable = this.getFormat().banlistTable;
             if (banlistTable && !('illegal' in banlistTable) && !this.getFormat().team) {
               // hackmons format
               continue;
             } else if (abilitySlot === 'H' && template.unreleasedHidden) {
               // unreleased hidden ability
               continue;
             }
             let ability = this.getAbility(abilityName);
             if (banlistTable && ability.id in banlistTable) continue;
             if (pokemon.knownType && !this.getImmunity('trapped', pokemon)) continue;
             this.singleEvent('FoeMaybeTrapPokemon',
               ability, {}, pokemon, source);
           }
         }

         if (pokemon.fainted) continue;
         if (pokemon.isStale < 2) {
           if (pokemon.isStaleCon >= 2) {
             if (pokemon.hp >= pokemon.isStaleHP - pokemon.maxhp / 100) {
               pokemon.isStale++;
               if (this.firstStaleWarned && pokemon.isStale < 2) {
                 switch (pokemon.isStaleSource) {
                 case 'struggle':
                   this.add('html', '<div class="broadcast-red">' + escapeHTML(pokemon.name) + ' isn\'t losing HP from Struggle. If this continues, it will be classified as being in an endless loop.</div>');
                   break;
                 case 'drag':
                   this.add('html', '<div class="broadcast-red">' + escapeHTML(pokemon.name) + ' isn\'t losing PP or HP from being forced to switch. If this continues, it will be classified as being in an endless loop.</div>');
                   break;
                 case 'switch':
                   this.add('html', '<div class="broadcast-red">' + escapeHTML(pokemon.name) + ' isn\'t losing PP or HP from repeatedly switching. If this continues, it will be classified as being in an endless loop.</div>');
                   break;
                 }
               }
             }
             pokemon.isStaleCon = 0;
             pokemon.isStalePPTurns = 0;
             pokemon.isStaleHP = pokemon.hp;
           }
           if (pokemon.isStalePPTurns >= 5) {
             if (pokemon.hp >= pokemon.isStaleHP - pokemon.maxhp / 100) {
               pokemon.isStale++;
               pokemon.isStaleSource = 'ppstall';
               if (this.firstStaleWarned && pokemon.isStale < 2) {
                 this.add('html', '<div class="broadcast-red">' + escapeHTML(pokemon.name) + ' isn\'t losing PP or HP. If it keeps on not losing PP or HP, it will be classified as being in an endless loop.</div>');
               }
             }
             pokemon.isStaleCon = 0;
             pokemon.isStalePPTurns = 0;
             pokemon.isStaleHP = pokemon.hp;
           }
         }
         if (pokemon.getMoves().length === 0) {
           pokemon.isStaleCon++;
           pokemon.isStaleSource = 'struggle';
         }
         if (pokemon.isStale < 2) {
           allStale = false;
         } else if (pokemon.isStale && !pokemon.staleWarned) {
           oneStale = pokemon;
         }
         if (!pokemon.isStalePPTurns) {
           pokemon.isStaleHP = pokemon.hp;
           if (pokemon.activeTurns) pokemon.isStaleCon = 0;
         }
         if (pokemon.activeTurns) {
           pokemon.isStalePPTurns++;
         }
         pokemon.activeTurns++;
       }
       this.sides[i].faintedLastTurn = this.sides[i].faintedThisTurn;
       this.sides[i].faintedThisTurn = false;
     }
     let banlistTable = this.getFormat().banlistTable;
     if (banlistTable && 'Rule:endlessbattleclause' in banlistTable) {
       if (oneStale) {
         let activationWarning = '<br />If all active Pok&eacute;mon go in an endless loop, Endless Battle Clause will activate.';
         if (allStale) activationWarning = '';
         let loopReason = '';
         switch (oneStale.isStaleSource) {
         case 'struggle':
           loopReason = ": it isn't losing HP from Struggle";
           break;
         case 'drag':
           loopReason = ": it isn't losing PP or HP from being forced to switch";
           break;
         case 'switch':
           loopReason = ": it isn't losing PP or HP from repeatedly switching";
           break;
         case 'getleppa':
           loopReason = ": it got a Leppa Berry it didn't start with";
           break;
         case 'useleppa':
           loopReason = ": it used a Leppa Berry it didn't start with";
           break;
         case 'ppstall':
           loopReason = ": it isn't losing PP or HP";
           break;
         case 'ppoverflow':
           loopReason = ": its PP overflowed";
           break;
         }
         this.add('html', '<div class="broadcast-red">' + escapeHTML(oneStale.name) + ' is in an endless loop' + loopReason + '.' + activationWarning + '</div>');
         oneStale.staleWarned = true;
         this.firstStaleWarned = true;
       }
       if (allStale) {
         this.add('message', "All active Pok\u00e9mon are in an endless loop. Endless Battle Clause activated!");
         let leppaPokemon = null;
         for (let i = 0; i < this.sides.length; i++) {
           for (let j = 0; j < this.sides[i].pokemon.length; j++) {
             let pokemon = this.sides[i].pokemon[j];
             if (toId(pokemon.set.item) === 'leppaberry') {
               if (leppaPokemon) {
                 leppaPokemon = null; // both sides have Leppa
                 this.add('-message', "Both sides started with a Leppa Berry.");
               } else {
                 leppaPokemon = pokemon;
               }
               break;
             }
           }
         }
         if (leppaPokemon) {
           this.add('-message', "" + leppaPokemon.side.name + "'s " + leppaPokemon.name + " started with a Leppa Berry and loses.");
           this.win(leppaPokemon.side.foe);
           return;
         }
         this.win();
         return;
       }
     } else {
       if (allStale && !this.staleWarned) {
         this.staleWarned = true;
         this.add('html', '<div class="broadcast-red">If this format had Endless Battle Clause, it would have activated.</div>');
       } else if (oneStale) {
         this.add('html', '<div class="broadcast-red">' + escapeHTML(oneStale.name) + ' is in an endless loop.</div>');
         oneStale.staleWarned = true;
       }
     }

     if (this.gameType === 'triples' && !this.sides.filter(side => side.pokemonLeft > 1).length) {
       // If both sides have one Pokemon left in triples and they are not adjacent, they are both moved to the center.
       let actives = [];
       for (let i = 0; i < this.sides.length; i++) {
         for (let j = 0; j < this.sides[i].active.length; j++) {
           if (!this.sides[i].active[j] || this.sides[i].active[j].fainted) continue;
           actives.push(this.sides[i].active[j]);
         }
       }
       if (actives.length > 1 && !this.isAdjacent(actives[0], actives[1])) {
         this.swapPosition(actives[0], 1, '[silent]');
         this.swapPosition(actives[1], 1, '[silent]');
         this.add('-center');
       }
     }
     this.add('turn', this.turn);
     for(let i=0;i<this.p1.pokemon[0].obm.length;i++)
     {
       this.p1.pokemon[0].obm[i].pp = this.p1.pokemon[0].baseMoveset[i].pp;
       this.p1.pokemon[0].om[i].pp = this.p1.pokemon[0].moveset[i].pp;
     }
     for(let i=0;i<this.p2.pokemon[0].obm.length;i++)
     {
       this.p2.pokemon[0].obm[i].pp = this.p2.pokemon[0].baseMoveset[i].pp;
       this.p2.pokemon[0].om[i].pp = this.p2.pokemon[0].moveset[i].pp;
     }
     for(let p=1;p<=2;p++)
     {
       let opp = "p"+((p==1)?2:1),om = this["p"+p].pokemon[0].om,obm=this["p"+p].pokemon[0].obm;
       this["p"+p].pokemon[0].moveset = om.concat(this[opp].pokemon[0].om);
       this["p"+p].pokemon[0].baseMoveset = obm.concat(this[opp].pokemon[0].obm);
     }
     this.makeRequest('move');
   },
};
Again, my code is shit, it might have bugs
If you find bugs pl0x lmk

Replay: http://replay.pokemonshowdown.com/dragonheaven-mirrormove-4086
Edit:Need to fix Choice Items and AV bugs
 
Last edited:

Users Who Are Viewing This Thread (Users: 1, Guests: 0)

Top