Proposal Update Endless Battle Clause

Tea Guzzler

forever searching for a 10p freddo
is a Site Content Manageris a Social Media Contributoris a Forum Moderatoris a Top Community Contributoris a Metagame Resource Contributoris a Tiering Contributoris a Top Contributoris a Smogon Media Contributor
(first PR post so apologies if it reads a bit shit)

TL;DR Current Endless Battle Clause isn't comprehensive enough, and endless battles can occur in spite of it. Also an additional discussion on whether cases that technically aren't infinite but are also not "gameplay" should be included in the clause.

EBC is a bit outdated. Yes it stops your standard Funbro and Heal Pulse setups, but it's not really designed to handle more complex cases that nonetheless cause endless battles.

Here are the current mechanics (summarized from https://dex.pokemonshowdown.com/articles/battlerules):
  • A Pokemon becomes Stale if it's hit by Entrainment, Skill Swap, Heal Pulse, Floral Healing, or has its HP/PP restored by a Berry it didn't start the battle with (this includes Recycled / Harvested berries). Note that being hit by one of these ability-changing moves after you've already used one doesn't make you Stale.
  • If all Pokemon on the field are Stale, at least one can't switch, at least one was made Stale by the opponent, and it's past turn 100, the clause activates and either draws a Tie or makes the person who has a Pokemon with the means to endlessly regenerate Berries lose.
Problem 1: The to-fix list (Endless Battle setups that the clause misses)
The clause simply blanks these cases due to not fitting all of the criteria. Mostly, this is one of the Pokemon never becoming Stale.
Case 1: Leppa + Recycle/Protect/Recover vs Poison Heal
This can occur if a Poison Heal user heals off Struggle recoil in 2 turns (the easiest way to get this amount is ensuring that the Poison Heal user's HP is perfectly divisible by 16). By Protecting every second turn, the Poison Heal user will perpetually remain at the HP they started with. This works as the Poison Heal user never becomes Stale (it already has the ability it needs for the setup to work, so it never needs to get hit by Skill Swap or Entrainment). https://replay.pokemonshowdown.com/gen9purehackmons-2124854496-b42o0duil2ny8p29eh2zgbkx7kw65a7pw

Case 2: Leppa + Recycle/Recover/Attack vs ___ Absorb + Leftovers
This works similarly to the above in that the target already has the desired ability for the setup, so the target never becomes Stale and the clause never trips. The attack vs ___ Absorb (Water, Volt, Earth Eater) always keeps it at the same HP level, and Leftovers is required to heal off the damage from turns spent using Recycle or Recover. https://replay.pokemonshowdown.com/gen9ou-2130969460-cs56ppkz242zj03hyww7yw9wcaka3b4pw

Case 3: Double Leppa + Recycle
Perhaps the simplest of all cases, as neither player's Staleness is inflicted by the opponent. This setup can be extended to something like Comatose + Leppa + Sleep Talk/Revival Blessing/Recover/Recycle, which still doesn't fit the Staling criteria but allows for easy access to infinite revives (Sleep Talk is usable without the sleep restriction thanks to Comatose, and Revival Blessing gets called with Sleep Talk's PP). https://replay.pokemonshowdown.com/gen9balancedhackmons-2143394126-5i4e4qtcslug2ayajlbo17pwlyvckdopw

Case 4: Gens 2/3 Struggle + Leftovers
Struggle's mechanics in these gens are different to the rest; it deals 1/4 of the damage as recoil rather than 1/4 of the user's max HP. This means that two Pokemon that outheal Struggle via Leftovers (and don't have to put up with potential Sand chip) will Struggle forever if they're the last Pokemon on either side. It's essentially the same principle as Leftovers Wobbuffet but with more strict requirements. https://replay.pokemonshowdown.com/gen3ubers-2143401664-hbkyb0ao8dx0lxmcy05u5xc0i60svcspw
Just going based off of the examples above, there are a few things to note:
  • Leppa + Restoration is required on at least one Pokemon in all cases (spare Gen 2/3 Struggle).
  • The requirement of a Pokemon being made Stale by an opponent is never satisfied.
Something I also looked at is when the clause goes off (specifically how the Tie vs Loss condition works). It seems to hand out results based on whether at least one Pokemon on either side can do Berry restoration, absent of any context. In short, this means that you could bring Harvest + Sitrus Exeggutor and you'd be punished for running into a Funbro by your EBC win becoming a tie; these ties will even occur if said Pokemon haven't even been sent out. This is obviously a bit silly.
https://replay.pokemonshowdown.com/gen9nationaldex-2143415570-3h7nvj0p7g1ax43ov6unembor1kuz2vpw (Harvest + Sitrus Exeggutor simply exists on the Gyarados side's team, causing an EBC tie even though Exeggutor never switches in)
https://replay.pokemonshowdown.com/gen9nationaldex-2143417952-15rqxi1wvgbb5a0frzs7un08y3j52fzpw (Exeggutor now has AV; the Slowbro side loses, as there is no single Pokemon on the Gyarados side that can restore Berries by itself)
Also note that, in the above 2 battles, the situation can clearly end due to there being a +6 Double-Edge Gyarados, but EBC steps in before it runs out of every other move and has to start attacking.

Fixing this is a difficult issue due to how many scenarios need to be accounted for, and it'd either involve updating the mechanics around Staling (almost definitely involving a Struggling Pokemon becoming Stale + something like tracking net HP loss over xyz turns rather than being made Stale by an opponent) or just rebuilding the entire clause to check for exact sequences. In my opinion, adjusting the Staling criteria is probably easier to maintain long-term and quicker to fix in the case of new EBC causes, but it's also more likely to give false positives.

Problem 2: Technically isn't infinite, but should it still go
This is probably more of a debate topic. It involves cases where, while the game isn't technically infinite, multiple hundreds of turns of non-gameplay are required to reach a resolution. This can contain cases similar to the above (where one player forces the other to play an endless game) or when it's in both players' interest to play the infinite.
Case 1: Regenerator Loops
This is probably the single post important one here. If neither player has a good way of making progress against the other (such as a stall mirror for example), then the best option for both sides to not lose can be to switch endlessly between the Regenerator users to shut off any progress. It's technically possible for a player to lose from this interaction, but this involves just throwing the game. I'd be hesitant to say that this needs clausing, as generally only players that understand the loop would find themselves in one (and thus have the foresight to offer tie), it'd require a specific code exception that'll probably find a way to be abused, and it'd also need to account for Regen + MG/Boots and every combination of the three, but it's one I've seen limited discussion on before, so I thought i'd bring it up.
(IMPORTANT: this isn't just "can these two bastards stop using their regen pokemon", it's specifically cases like
this where the only viable option is switching between regen mons)

Case 2: Poison Heal setup with incorrect HP
If the Poison Heal user has a slightly dodgy amount of HP (doesn't heal off Struggle over 2 turns), then the setup can technically end when the Poison Heal user gets to ~25% HP and KOes itself from recoil. I didn't test every number, but the lowest I got was 2 HP every 2 turns; this would take a 31 IV / 0 EV Arceus ~286 turns to KO itself from full HP + no PP.

Case 3: Anything with Leppa + Harvest
Simply put, Harvest is a 50% chance, so it's entirely possible for any Harvest-related EBC setup to fail by just not recovering any Berries. It borders on phenomenally unlikely (a 1/1024 chance to offset a single Berry's worth of PP), but is still at least worth considering.

Case 4: Gen 2/3 Trapping vs Leftovers
Very niche option that again has to do with Gen 2/3 Struggle, this time the 100% accuracy rather than the --% of later gens (meaning it can miss after accuracy/evasion modifiers) in addition to the recoil. By repeatedly swapping between Arena Trap / Shadow Tag users that have Leftovers, a Struggle user (that itself holds Leftovers) can be forever trapped in if it misses enough and deals little enough such that Leftovers on the trapper team can heal it off. It's technically possible that the Pokemon being trapped simply hits every time and lands every crit, but it is definitely unrealistic. I'm assuming this can happen in Gen 2 (given the Pokemon being trapped is the last alive), but I haven't confirmed. https://replay.pokemonshowdown.com/gen3ou-2141693301?p2
The main question here is whether each situation (both players' interest is to play forever, "Endless" battle setups taking hundreds of turns to end but still having either a defined end or a chance for one) should be claused or not. An additional question, at least for the first type, would be on the amount of pressure put on the players to resolve it by a tie rather than having the clause (or admin / turn 1000) do it for them.
 
some quick thoughts:
1) leppa berry should not be under consideration as a ban even though it would solve the problem. it has genuine competitive uses, most prominently with revival blessing.
2) in general any false positives would be a very bad outcome - i would rather false negatives
3) i am not clever enough to suggest a new clause, but if a new clause can be made that handles the setups presented, that's clearly great
4) I think, philosophically, situations with multiple hundreds of turns of non-gameplay are not great, but kinda have to stay if both of the players have (even pretty bad) decisions. as such i think case 1 for problem 2 is pretty clearly something not to be claused.
5) case 2 should be claused, but the ideal way to do it would be to have a clause that recognizes it and effectively fast-forwards through the turns. i don't know if this is possible or feasible. if this is not possible or feasible, i can see arguments both ways (you should have a chance even if its small/you shouldn't have to waste your time)
6) case 3 and case 4 are effectively the same case as case 2, except with a (probably?) lower probability of the loop ending.
 
Case 1: Regenerator Loops
This is probably the single post important one here. If neither player has a good way of making progress against the other (such as a stall mirror for example), then the best option for both sides to not lose can be to switch endlessly between the Regenerator users to shut off any progress. It's technically possible for a player to lose from this interaction, but this involves just throwing the game. I'd be hesitant to say that this needs clausing, as generally only players that understand the loop would find themselves in one (and thus have the foresight to offer tie), it'd require a specific code exception that'll probably find a way to be abused, and it'd also need to account for Regen + MG/Boots and every combination of the three, but it's one I've seen limited discussion on before, so I thought i'd bring it up.
(IMPORTANT: this isn't just "can these two bastards stop using their regen pokemon", it's specifically cases like
this where the only viable option is switching between regen mons)
I'm all for looking into solving the "issue" of stall games hitting points where optimal play from both players results in neither player winning, but I think that's a separate issue and probably deserves its own thread, rather than being tied specifically to Endless Battle Clause.

I don't have anything else to add for now. Sorry gamers
 
I'm all for looking into solving the "issue" of stall games hitting points where optimal play from both players results in neither player winning, but I think that's a separate issue and probably deserves its own thread, rather than being tied specifically to Endless Battle Clause.

I don't have anything else to add for now. Sorry gamers
tbh that can be solved with a hard timer and I've wanted to bring up enforcing one for awhile. It's so insane that we don't do that when timers have been baked into cart play since Gen 6(?) and it's a standard rule for like every competitive game ever.

(Yes I know it's impossible to perfectly replicate the cart timer because of varying animation lengths and whatnot, but not doing anything because of that is to fall victim to the Nirvana fallacy.)
 
Last edited:
Some past threads I found discussing EBC, and whether they deal with Problem 1 (actually endless) or Problem 2 (technically can end):
Banning Leppa Berry - a Problem 1 thread, in which Zarel comes up with increasingly complex iterations of the Endless Battle Clause to avoid a blanket Leppa Berry ban, which eventually resulted in the early "confinement counter" implementation
Endless Battle Issues - a Problem 2 thread, specifically targetting case 1 games (always switching is the dominant strategy for both players), which didn't amount to much, but had a few ideas shot around like a threefold repetition rule
Hammering out a Fifty Turn Rule proposal - an offshoot of the above thread to propose an auto-draw after N turns without some marker of progress (no KOs, no PP usage, no net HP loss, etc); devolved into discourse about offer-tie buttons
'Endless' battle clause for PS! Ladder - a Problem 2 thread, which resulted in the current 1000-turn rule
Expansion to the endless battle clause - a Problem 1 thread that proposed EBC be expanded to catch Leppa Recycle Blissey getting Leech Seeded

To help focus the discussion, let's summarize the current goals of EBC:
  • it should terminate as soon as possible a battle that at least one player cannot end except by forfeit
  • it should award a loss to the player that intentionally tried to reach an endless state
  • and, obviously, it should not interfere with non-endless play
The "Problem 1" section does a very good job at addressing how the EBC currently falls short of its goals, demonstrating both false positives and false negatives for the first point, and incorrect judgements of the second point.

I can't imagine any solution involving recording and recalling past battle states can run efficiently at PS's scale. Would love to be proven wrong, but for now I'm going to proceed assuming it's impossible and that we still have to rely on heuristics for staleness.

My ideas (not a complete list of what should be done, but things that will probably get us closer):
  • Drop "ability changed by opponent" as a condition for staleness in favor of a hardcoded property of abilities on whether or not they can potentially cause an endless battle. The actual condition should be more specific than simply having the ability, of course.
  • Redefine "external" staleness. Currently the check is "was it inflicted by the opponent", but it should really be checking "is there no way for the player to stop it". This way, starting with certain abilities (see above), as well as Leech Seed, would now count towards "at least one side is externally stale" even though they are not inflicted by the opponent. Conversely, a Pokemon that still has attacking moves that can KO the opponent shouldn't be considered stale, though it would be hard to implement this in a way that doesn't potentially leak stat spreads.
  • Only Pokemon that actually became stale should be used to determine intent to force an endless battle. This would partially solve the problem of legit Harvest strats being seen as intent to force an endless battle, but still falls short if Harvest ends up being used.
Problem 2 isn't covered by EBC at all; I think it's worth considering, but as Arcticblast said it might do better in its own thread. That said my thoughts on it are as follows:
  • Case 1: I've seen a fair bit of complaints about this in the help chat, where each player's dominant strat is to switch and never attack. It was also by far the most common case of Problem 2 that was discussed in past threads. I'm not opposed to some sort of auto-tie in this scenario; as discussed in past threads, the "offer tie" feature is nice to have but doesn't stop abuse from one player who has way more time than the other.
  • Case 2: Terminates after a finite number of turns. I don't think forcing a tie is acceptable in this scenario; having the sim skip to the end of the loop is desirable, but I'm unsure how this would be implemented.
  • Case 3: Far too unlikely considering the mon also needs not to regain the leppa before it dies to struggle. There exists a number N of turns after which the loop becomes highly likely to end, but N is far greater than 1000, so I think it's safe to consider this effectively endless.
  • Case 4: Again, probably too unlikely in 1000 turns, so just call it endless.
 
Just going based off of the examples above, there are a few things to note:
  • Leppa + Restoration is required on at least one Pokemon in all cases (spare Gen 2/3 Struggle).
  • The requirement of a Pokemon being made Stale by an opponent is never satisfied.
Fringe case, but there's a case in Hackmons metagames where an endless battle can be engineered where the first point need not be satisfied. Double moves are when multiple of the same move are ran on one Pokemon, which messes with the current implementation of EBC: crucially, PP is only deducted from the first copy of the move, meaning a Pokemon running double moves will never be forced to Struggle unless the opponent's Taunt, Disable, Imprison, etc. allows it to. Also importantly, in a roomtour or bo1 environment one could run a double moves trapper on a team that looks standard on preview, as the below replay shows (Steelix could reasonably have been Fur Coat, to deal with most Huge Power MMX).

This is the only example I have to show due to replays unfortunately having been purged, but it drives the point across. Here, the Mega Steelix is Arena Trap, and is running Defog / Defog / Acupressure / Haze, making it a double move user. The opposing Imposter Chansey, presumably unable to switch thanks to Arena Trap, would eventually be PP stalled and forced to Struggle... if double Defog weren't to prevent that from happening. Assuming neither Pokemon is running Shed Shell, in the replay both would have to click Defog until EBC activates at turn 1000. Really unnecessary for both players, when PS! could just detect an endless battle that way instead (if neither active Pokemon is unable to switch out or fully deplete their moves' PP, it'd be a QoL improvement to force a tie right there instead of having the game being played till turn 1000).

Banning double moves in Pure Hackmons, where double moves are more viable than in BH, is a nonstarter – it would be inconsistent with Pure Hackmons' premise to ban them when (to my knowledge) they're hackable as per Smogon's Hackmons definition, and they theoretically have competitive merit (I've built with double move Yveltal, for instance, to trap Prankster Zygarde-C and non-Shed Shell Baton Pass/Parting Shot Wonder Guard users). A redefinition of EBC would be ideal in this case.
 
Last edited:
I'm all for looking into solving the "issue" of stall games hitting points where optimal play from both players results in neither player winning, but I think that's a separate issue and probably deserves its own thread, rather than being tied specifically to Endless Battle Clause.

I don't have anything else to add for now. Sorry gamers
I think the best option I can think of for something like this is having something like three move repetition in chess, where if an identical gamestate (same HP, same pp, same items, everything) occurs three times, either player can call the game a draw on the turn where this comes up. (If both players want to play it out, then they can go for it, of course). This should remove some (not all) of the issues with EBC as well, since three repetitions is fairly fast, and most games have *some* form of progress -- a long game that happens to have regenerator will usually have pokemon using moves, which reduces PP, and means that the gamestate has changed.
This doesnt necessarily stop endless battles in a reasonable timespan since HP is extremely granular, so a mon with 253/255 HP is viewed as different from a mon with 254/255 HP, so it should probably be used in conjunction with other options.

I like the way EBC is currently handled though, and expanding EBC to include cases where a Pokemon is struggling as stale might be a solid option.

EDIT: looking at the 50 move thread and ideas posted above, and I think its probably a good idea to include things that make progress towards a winning endgame in the longterm, rather than just faints, similar to how chess includes pawn moves, since pawn moves are long term progress towards promotion. I think we can definitely include things like items being knocked off, and possibly include things like setting up hazards (or counting first hazard change set up after last faint, so placing stealth rock, opponent defogs it, you knock out a mon and place stealth rock again, resetting the counter).
Setting up a status should probably count as well, even though thats not irreversible. I can see something like first status on a specific mon since last faint working, although that might be complicated. (i.e. the following:
* chansey gets hit by toxic (Counter resets)
* chansey switches into machamp
* machamp is hit by toxic (Counter resets)
* chansey switches in and uses heal bell.
* chansey is hit by toxic (NO counter reset since chansey was toxicked before and no mon has fainted since)
*chansey faints, machamp is sent in (Counter resets due to faint)
*Machamp is hit by toxic (Counter resets, since its the first time Machamp has been hit by toxic since a Pokemon fainted).

EDIT 2: Since technically losing an item isn't irreversible in the case of berries, making that first time since last faint probably makes it work as well, since making things first time since last faint should be irreversible in most cases that don't involve revival blessing.
 
Last edited:
Throwing in my two cents as an avid USUM AG player:

USUM AG is a meta where endless battle clause becomes quite important because stall mirror matches almost universally end in draws, since both players enter a position where their optimal move is to switch continually and neither side can force any meaningful amount of progress. Balance games against stall, however, almost always *do* end, but generally take a long time and frequently involve chains of 4+ consecutive switches, sometimes between the same Pokemon, before either player breaks the chain. With this in mind, I think that a threefold repetition rule is a bad ideasince it would materially change the way that players would have to approach games that will end within a reasonable time frame. On the other hand, some kind of fifty-move rule is a good idea because it would enable a faster resolution to games where players would otherwise simply have to wait until turn 100 to offer a draw, while also catching weird stuff like poison heal struggle. It won’t necessarily solve every edge case, such as those where a Pokemon is losing HP too slowly for it to faint in under a thousand turns, but it would be a step forward. A reasonable fifty-move implementation could simply check if all Pokemon have the same HP, PP, and status (or lack thereof) that they had fifty moves ago.

TL;DR:
- threefold repetition bad, since it forces materially different play in winnable games

- fifty-move good, since the only situations where it’s relevant are situations that are drawn anyway and it’ll enable some games to end a little faster.

Apologies for any formatting issues - I wrote this on my phone.

e: typo
 
Last edited:
Sorry for the short post, but isn't the endless battle clause somewhat redundant with the introduction of a 1000 turn limit? Having 2 regen mons or magic guard + regen/poison heal can already result in situations where the best move is to keep switching. This lead to the initial introduction of the 1000 turn limit, why do we need special rules for rarer, less practical situations that lead to the same outcome?
 
Sorry for the short post, but isn't the endless battle clause somewhat redundant with the introduction of a 1000 turn limit? Having 2 regen mons or magic guard + regen/poison heal can already result in situations where the best move is to keep switching. This lead to the initial introduction of the 1000 turn limit, why do we need special rules for rarer, less practical situations that lead to the same outcome?
me personally, i would not like having to play games that reach 1000 turns on ladder on a somewhat consistent basis

from a ladder perspective, removing EBC will potentially incentive players to use teams that abuse the 1000 turn limit to force their opponent to either play the 1000 turns and waste a good 1-2 hours of their lives on a game that rewards 4 elo, or forfeit and lose 36 elo while risking running into the same player 1-2 ladder games later. from a tour perspective, im not really interested in watching a 1000 turn game, and can be really fishy for important tour games (eg: deciding if a team can hit playoffs or not) by just stalling out time until the opponent needs to go. not really a fun thing to do.
 
While helping to avoid eternal ties is nice, the main objective of EBC is punishing people forcing them instead of attempting to win the game, like funbro and such; EBC makes the user forcing such strategy to automatically lose instead of making the opponent have to wait 1000 turns out of their control.
 
Back
Top