• Smogon Premier League is here and the team collection is now available. Support your team!

Proposal Display Gen 3 Pressure Accurately for Spectators and in Replays

Approved by goldmason

In Showdown’s Generation 3, and no other generation, the effects of the ability Pressure do not display accurately when spectating a game or watching a replay. For example, if Swampert clicks earthquake against Suicune, both of the players can see that earthquake has been deducted 2 pp, but spectators will only see 1 pp deducted. This is purportedly done because unlike in later generations, Pressure does not announce itself in game, therefore, it is argued, it is impossible for a spectator to know whether it is active or not.

In this post I will make the case that this implementation is fundamentally console inaccurate, irrelevant the vast majority of the time, and makes the quality of commentated ADV matches with Pressure considerably worse.

1. Console Accuracy

Smogon ADV OU is based on GBA to GBA link battles, specifically Emerald version. It is not based on Colosseum or XD, where Sleep Talk operates without its glitched GBA mechanics, where the exact hp stats of both Pokemon are visible to both players, and where team preview is present.

Why does this matter here?

In order to spectate a GBA to GBA link battle on console, which is what we simulate, a viewer *must* be looking at one of the two players’ GBA screens. There is no other officially supported way to spectate a game on console. As this is the case, a spectator will *always* be able to see if Pressure has deducted two pp. If we were simulating XD or Colosseum, where a spectator could be watching the television screen instead of one of the players’ GBAs, that would be one thing, but that is not the basis for Showdown ADV!

There is only one hypothetical on-console situation in which a spectator couldn’t see the effects of Pressure: if the spectator is exclusively watching the GBA of the player using the Pressure mon, i.e. not the player under the effects of Pressure. Since a spectator can always switch between both players’ perspectives (and could easily do so on console as well, revealing the information), this is, in my opinion, not worth emulating. However, in this case, we discover another inaccuracy: on console, there is no way whatsoever for a player to look at their opponent’s remaining pp, in any situation. The ability to see both players’ pp is a core feature of Showdown in all generations. I personally love this feature, as it is a great quality of life improvement and typically leads to more deliberate, thoughtful play. Displaying HP bars with percentages functions similarly, and is good for similar reasons. If we are willing to make fundamental exceptions to what the players can see, why are we bending over backwards to obscure something for spectators, something that an on console spectator would always be able to know?

2. When are the effects of Pressure ambiguous?

1770239673580.png


Out of the nine Pokemon who can have Pressure as an ability, only one has the option to run an ability that is not Pressure: Aerodactyl. As Rock Head is mandatory on its most common set, Choice Band, Pressure is not a factor in most games where Aero is used.

Here are the high ladder usage stats for January 2025:

1770239786572.png


And here are the low ladder stats for that same period:

1770239744094.png


We can see that at all skill levels, Pressure Aerodactyl is quite rare. As the damage calc will always reveal whether Aero is CB or not, this information becomes immediately apparent to players and spectators alike the first turn Aero clicks a move. Sub Liechi 3A, the second most common set, will sometimes drop Double Edge in favor of Hidden Power, but on those sets, Aero can only substitute 3-4 times, making it unlikely that PP stalling will come into play to a significant degree. HClat’s Geneva Convention is, to my knowledge, the only noteworthy team ever used in high level tournament that has made effective use of an Aero set that directly aims to pp stall the opponent (Leftovers Slide/EQ/Sub/Tect).

As it stands, the current implementation exists only to camouflage one Pokemon’s ability, on less than 10% of that Pokemon, and only for spectators. With the other 8 Pressure mons, Pressure will always be in effect every time these Pokemon hit the field. This means that in the overwhelming majority of cases where Pressure is present, the UI is misleading spectators for no reason.

3. Who does the current implementation hurt?

The current implementation (not displaying the effects of Pressure, even when a Pokemon has no other possible ability) is a nuisance for all spectators of ADV games, but is a nightmare for commentators.

I feel qualified to speak on this as I have done ADV commentary for Callous Invitational, Revival Tournaments, Replay of the Week and other significant tournaments. These matches are typically commentated as replays, at normal speed, without pausing (the Youtube commenters HATE when we pause, so it is discouraged). This means that the commentator is expected to rapidly track every time an attack or field move (e.g. rain dance) is clicked against, or not against, a Pressure Pokemon, across 6 different Pokemon and 24 moves; 12 Pokemon and 48 moves if there is a Pressure mon on both sides of the field. This is an unreasonable mental burden for commentators to have to shoulder, and attempting to do so (believe me, I’ve seriously considered it) would result in drastically worse commentary, as the amount of things a commentator has to keep track of and speak on in a game is already extremely high. The current implementation results in clumsy, ambiguous commentary in every mid or endgame where Pressure is present, as the commentator has to more or less guess at the resources both players are carefully and deliberately playing around, and cannot pause to go back and check manually. This leads to longer games being even less engaging for spectators, as resource management is often one of the most exciting elements of long games, and due to the current console inaccurate implementation, commentators straight up cannot talk about them accurately much of the time. This is a very common problem and came up in the most recent set I commentated! I found myself guessing and loosely speculating instead of accurately tracking how both players were managing their resources in a tight Pressure endgame, which was a complete waste of everyone’s time instead of a learning experience.

I know that spectators are generally an afterthought, but this issue only affects the viewers, and would not negatively impact the players in any way. It’s been like this for a long time, but please consider displaying Pressure console accurately for spectators and in replays. Thank you for reading.

Note: please read the post directly after this one for goldmason's thoughts, as they are relevant to implementation of this PR.
 
Gm everyone.

This thread above is quite late; it was floated to me back in late October but I haven't had time to sufficiently read it/talk to PS admins about it with holidays and other shit going on, so excuse anything that might seem out of date.

I approached Star about this a while back and he said he'd be fine with exploring it if Aero's unique interaction with Pressure is preserved. I agreed.

I spoke with PS Admins and the general gist is that Pressure PP counting on the client side is done by the server telling the client "This Pokemon has Pressure for PP display". The current implementation obviously has 0 way to tell, even if the mon's only ability is Pressure, and so gives you a notice saying it might be wrong if you're not one of the battlers. Generation 3 is the only generation that has this problem, as Pressure is announced on entry in Generations 4 and later.

After talking with PS Admins further, one of the only real "solutions" to this issue would be to deviate from cart mechanics, and have Pressure announce on entry for the 8 Pokemon that only have Pressure as a legal ability. We would then put an exception in for the species Aerodactyl, where Pressure would never announce, and the current implementation would be how specifically Aerodactyl would work.

Note: This does have implications for Speed checking, as faster Pokemon will activate Pressure first.

The purpose of this thread will mainly be to see if that is an acceptable compromise. I know deviation from cart mechanics is probably going to have split opinions, so happy to hear them. If you have any further questions about this PR, feel free to reach out to me @ goldmason on discord.
 
Last edited:
Just want to briefly say that announcing Pressure on entry should be a complete non-starter here. In addition to the fact that this is not at all how Pressure works in gen 3, the implications of finding out Speed EVs based on this are more tremendous than you might think, not just in OU but also in Ubers (maybe even moreso since a lot of pressure mons can face each other more often there). I don’t think this is a good thing to do just to save us from counting.

I have no opinion on another potential solution if it exists, just wanted to point out that the current one offered as the “only” one should not really seriously be considered.
 
Unfortunately, unless I'm misunderstanding, this would indeed change lead metagame interactions quite a lot. Zapdos vs Salamence announce which is faster on turn 1 with the order of the proc of their abilities, two Zapdos announce which is faster, Suicune announces whether it is faster than Tyranitar or not, the list goes on. This compromise is not worth.
 
Unfortunately, unless I'm misunderstanding, this would indeed change lead metagame interactions quite a lot. Zapdos vs Salamence announce which is faster on turn 1 with the order of the proc of their abilities, two Zapdos announce which is faster, Suicune announces whether it is faster than Tyranitar or not, the list goes on. This compromise is not worth.
That sounds good to me tbh, reward the 3 people who actually read that
 
Many players have expressed concern that adding a pressure activation message would give up valuable information about the speed stats of Pokemon with pressure. Gen 3 has Switch Priority Clause Mod, which means that faster Pokémon switch first. This also means that their abilities–such as intimidate and sand stream–are displayed in speed order.

In most cases, switch order itself already provides this information, so pressure having a message is nothing new. The two major exceptions are 1) at the start of the battle when both mons are sent out, and 2) when both mons faint, and two replacements are sent out.

This concern is extremely reasonable, and because of this, I would like to propose an alternative.

In order to track pp properly, the pressure message must proc before moves are clicked. However, it must also not be tied to the speed stat of the Pokemon with the ability pressure, as this would give away more information than is given on cart.

Therefore, I propose that in Gen 3, Pressure would proc after all other abilities, but before moves are clicked.

In cases where two Pokemon have pressure, math.random() or some other preferred solution could be employed to randomize the order in which the two Pressure activations are displayed.

On every mon, with or without pressure present in a game, the tooltip currently reads:
1770245072456.png


And in other generations, the pressure activation message reads:
1770245072472.png


What I would propose is that in Gen 3, to prevent player confusion about pressure activation not being tied to the speed of a Pokemon, a different activation message be displayed:
Go! Zapdos!
Opponent sent out Salamence!
[Salamence's Intimidate]
The opposing Zapdos's Attack fell!
[Zapdos’s Pressure]
Zapdos is exerting its pressure!
(In Gen 3, Pressure activation does not indicate the speed of either Pokemon.)

This would not require a meaningful overhaul of how Showdown interacts with Pressure, while also displaying information correctly.

Please let me know what you think and if this is a viable solution!
 
Last edited:
Hi, I think if it's possible the best way to display a message for pressure would be the following:

Swampert used Ice Beam!
[Zapdos's Pressure]
It's super effective!
(Zapdos lost 38% of its health)

This way there's no indication of speed or anything. Of course it's preferable if Aerodactyl can be excluded from this as well. If pressure can be communicated without a message showing up in chat that would be all the better, but maybe there's a way to view the data sent by the server to the client to gain a malicious advantage? I don't know.

In order to spectate a GBA to GBA link battle on console, which is what we simulate, a viewer *must* be looking at one of the two players’ GBA screens. There is no other officially supported way to spectate a game on console. As this is the case, a spectator will *always* be able to see if Pressure has deducted two pp.

This is a big stretch... I can easily say that an impartial judge (or one or both of the players themselves) is relaying me information on a turn-by-turn basis, and based on what you're saying the spectators should have full team knowledge from turn 1. I'm sure this is just an attempt to appease the cart accuracy crowd but they seem to be pretty absent from discussions about simulator conveniences these days anyway.
 
I'm not sure why it would be impossible to set a flag for gen 3 battles where it would look to see if the opposing Pokémon is in the list of Pokémon that have their ability forced to be pressure (If in later gens the client side pp tracking is already checking for the pressure in the battle log). This would fix 99% of non-aero pressure related issues, the only caveat being skill swap / transform shenanigans. The spectators do not gain any insight the players could not have. It can only deviate from what each player knows incorrectly.

For the aero issue, pp ranges could be implemented. Where the spectators can make their own deductions on whether rock head or pressure is being used.
 
Hi, I think if it's possible the best way to display a message for pressure would be the following:

Swampert used Ice Beam!
[Zapdos's Pressure]
It's super effective!
(Zapdos lost 38% of its health)

This way there's no indication of speed or anything. Of course it's preferable if Aerodactyl can be excluded from this as well. If pressure can be communicated without a message showing up in chat that would be all the better, but maybe there's a way to view the data sent by the server to the client to gain a malicious advantage? I don't know.
I think this solves aero too? If it has pressure the player activating it would see the pp loss so announcing it does not matter. Really like this implementation if its possible.
 
Hi. There is another issue. In Gen 3, using a move that targets an ally with Pressure deducts extra PP. In doubles, that information shouldn't be available to the opponent. I know this is a niche case, but it should be taken into account.

After talking with PS Admins further, one of the only real "solutions" to this issue would be to deviate from cart mechanics, and have Pressure announce on entry for the 8 Pokemon that only have Pressure as a legal ability. We would then put an exception in for the species Aerodactyl, where Pressure would never announce, and the current implementation would be how specifically Aerodactyl would work.
For Pokémon with only Pressure as an ability, we don't need to activate the ability. We only need to check whether the Pokémon has the ability and whether the format includes the Obtainable Abilities clause (to exclude OMs).
 
Last edited:
Hi. There is another issue. In Gen 3, using a move that targets an ally with Pressure deducts extra PP. In doubles, that information shouldn't be available to the opponent. I know this is a niche case, but it should be taken into account.
Since this still only applies to Aerodactyl (as far as "it could be another ability"), I guess we'd need an exception for Aero only, but it would work fine otherwise as far as I can tell.
 
Hi, I think if it's possible the best way to display a message for pressure would be the following:

Swampert used Ice Beam!
[Zapdos's Pressure]
It's super effective!
(Zapdos lost 38% of its health)

This way there's no indication of speed or anything. Of course it's preferable if Aerodactyl can be excluded from this as well. If pressure can be communicated without a message showing up in chat that would be all the better, but maybe there's a way to view the data sent by the server to the client to gain a malicious advantage? I don't know.
Is it necessary to exclude Aero in this situation? By the time we reach the next turn, both players should know whether Aerodactyl has Pressure or not. If both players know a piece of information, there is no harm in giving that information to spectators. That's why we can show the pp tracker to spectators in the first place.

I do foresee one potential issue, which is this scenario:
Snorlax used Double Edge!
[Aerodactyl's Pressure]
Aerodactyl lost 38% of its health!
Snorlax loses 10% of its health as recoil damage.
Snorlax fainted!
>Snorlax trainer needs to switch, but now they have the information that Aero is running Pressure.

I am not sure if this is actually an issue though. When you're switching on cart, can you check your fainted mon's pp in the status menu? If so, we could construct a "neutral judge" rule like this:

1. The neutral judge will keep track of each player's pp and inform the spectator of this information.
2. If a pokemon faints in between attacking Aerodactyl and the start of the next turn, the player whose pokemon fainted must check their fainted Pokemon's status screen before selecting a new Pokemon. Then, the neutral judge relays the pp information to the specator. (If there is any doubt as to whether Aero is running Pressure, this would also be the optimal thing for the player to do, btw).

Is this silly? Yeah, but the neutral judge stuff is already silly. The point is that it's possible to share this convenient information on cart without leaking information to the players. We already accept this concept for showing pp to spectators in every other situation. So if it's possible to make this work somehow, I think it's worth it. This is a very routine issue with spectating ADV games.
 
Hi. There is another issue. In Gen 3, using a move that targets an ally with Pressure deducts extra PP. In doubles, that information shouldn't be available to the opponent. I know this is a niche case, but it should be taken into account.
You are correct that this "niche case" could give a player information that they ordinarily wouldn't have.

So, let's examine exactly how niche this case is. This hypothetical only applies to one pokemon, Aerodactyl. Gen 3 Doubles, aka Orre Colosseum, doesn't have a ladder. 13 games of Orre Colosseum were played last month.

Can you produce a replay of someone attacking their own Aerodactyl? Furthermore, can you come up with a reason that someone would want to?

Doubles games are extremely fast paced. Correct me if I am misinformed on this point, but most do not cross the double digit turn threshold. PP stalling is therefore not a viable tactic and the opponent would soon become aware of Pressure's presence regardless of who happens to be targeting this hypothetical Pressure Aerodactyl first. It's quite, likely, in fact, that they would find out on the same turn. It is, even in this extremely improbable situation—the literal only situation where it could be relevant—not impactful information.

I appreciate the concern and thorough due diligence here, but I do not think this constitutes a reason to not implement a solution as elegant as the one proposed by Siglut.
 
Last edited:
I don't have a strong opinion on the matter. As a developer, one of my mottos is: "If it breaks cartridge accuracy, it should have a 'clause mod' at the beginning of the battle". Because of that, we try to avoid those situations.

Deducting PP for Pokémon with only Pressure is trivial. If I implemented it right now on the client side without this thread, it would likely be accepted. Regarding Aerodactyl, I see two options:
  1. We present the two PP possibilities on the client. And before anyone says it looks bad, we already have a 19-word sentence stating that PP might be inaccurate. This would probably be the smoothest fix.
  2. Siglut's solution: send a Pressure message after the move is used, and ignore the ally case.
The more I think about it, the more I prefer keeping this on the client side.

1770283363327.png


Something like: Giga Drain (6/8 or 7/8).
This would only appear for moves that have targeted an Aerodactyl. For other Pressure Pokémon, we would simply display the correct PP.
I'll repeat: this client-side solution doesn't need this thread—I can implement it today.
 
Last edited:
I don't have a strong opinion on the matter. As a developer, my main motto is: "If it breaks cartridge accuracy, it should have a 'clause mod' at the beginning of the battle". Because of that, we try to avoid those situations.

Deducting PP for Pokémon with only Pressure is trivial. If I implemented it right now on the client side without this thread, it would likely be accepted. Regarding Aerodactyl, I see two options:
  1. We present the two PP possibilities on the client. And before anyone says it looks bad, we already have a 19-word sentence stating that PP might be inaccurate. This would probably be the smoothest fix.
  2. Siglut's solution: send a Pressure message after the move is used, and ignore the ally niche case.
The more I think about it, the more I prefer keeping this on the client side.

View attachment 806514

Something like: Giga Drain (6/8 or 7/8).
This would only appear for moves that have targeted an Aerodactyl. For other Pressure Pokémon, we would simply display the correct PP.
I'll repeat: this client-side solution doesn't need this thread—I can implement it today.
For a doubles game where a swampert clicks earthquake into 3 pressure mons, two of which are aerodactyl, would it say (4/8) or (5/8) or (6/8)? Or how would that work?

Is implementing siglut's solution with an exception for Aero not possible?

Would wanna know what is and isn't possible and what each would look like if possible before moving forward.
 
You are correct that this "niche case" could give a player information that they ordinarily wouldn't have.

So, let's examine exactly how niche this case is. This hypothetical only applies to one pokemon, Aerodactyl. Gen 3 Doubles, aka Orre Colosseum, doesn't have a ladder. 13 games of Orre Colosseum were played last month.

Can you produce a replay of someone attacking their own Aerodactyl? Furthermore, can you come up with a reason that someone would want to?

Doubles games are extremely fast paced. Correct me if I am misinformed on this point, but most do not cross the double digit turn threshold. PP stalling is therefore not a viable tactic and the opponent would soon become aware of Pressure's presence regardless of who happens to be targeting this hypothetical Pressure Aerodactyl first. It's quite, likely, in fact, that they would find out on the same turn. It is, even in this extremely improbable situation—the literal only situation where it could be relevant—not impactful information.

I appreciate the concern and thorough due diligence here, but I do not think this constitutes a reason to not implement a solution as elegant as the one proposed by Siglut.
This is not niche at all, in fact it occurs very frequently. The main case is Earthquake (as well as Teeter Dance, Explosion, Self-Destruct and Magnitude), which will deduct additional PP for each Pressure ability on the field, including your ally. Also moves such as Helping Hand directly target only your ally and deduct PP for Pressure. Furthermore, I find it distasteful to disregard a format for being 'niche', even if that were the case I think cart accuracy is more important than QoL (that does not impact competitive play) every time.
It is also worth noting that the '13' games are from the last few hours of the spotlight ladder which ended Jan 1, in December there were over 3800 games of Orre Colosseum and Gen 3 DOU is actively played too, Aerodactyl has high usage in both formats.
Many players have expressed concern that adding a pressure activation message would give up valuable information about the speed stats of Pokemon with pressure. Gen 3 has Switch Priority Clause Mod, which means that faster Pokémon switch first. This also means that their abilities–such as intimidate and sand stream–are displayed in speed order.

In most cases, switch order itself already provides this information, so pressure having a message is nothing new. The two major exceptions are 1) at the start of the battle when both mons are sent out, and 2) when both mons faint, and two replacements are sent out.

This concern is extremely reasonable, and because of this, I would like to propose an alternative.

In order to track pp properly, the pressure message must proc before moves are clicked. However, it must also not be tied to the speed stat of the Pokemon with the ability pressure, as this would give away more information than is given on cart.

Therefore, I propose that in Gen 3, Pressure would proc after all other abilities, but before moves are clicked.

In cases where two Pokemon have pressure, math.random() or some other preferred solution could be employed to randomize the order in which the two Pressure activations are displayed.

On every mon, with or without pressure present in a game, the tooltip currently reads:
View attachment 806439

And in other generations, the pressure activation message reads:
View attachment 806440

What I would propose is that in Gen 3, to prevent player confusion about pressure activation not being tied to the speed of a Pokemon, a different activation message be displayed:


This would not require a meaningful overhaul of how Showdown interacts with Pressure, while also displaying information correctly.

Please let me know what you think and if this is a viable solution!
This information is also inaccurate to cartridge mechanics, but it is currently not correctly implemented on Showdown. In Generations 3 and 4 (all) abilities that activate on Switch in occur in a pre set order, not based first on speed but on category, i.e. in Generation 3 all Weather abilities activate, then Intimidate and then Trace. If two abilities of the same type are on the field, then on Turn 0/after replacing fainted Pokemon they will be resolved in speed order. So you actually cannot compare speed stats between e.g. Gyarados and Tyranitar based on the order of their abilities' activation, Tyranitar should always activate Sand Stream first.
(Perspective of Player 1)
For a doubles game where a swampert clicks earthquake into 3 pressure mons, two of which are aerodactyl, would it say (4/8) or (5/8) or (6/8)? Or how would that work?

Is implementing siglut's solution with an exception for Aero not possible?

Would wanna know what is and isn't possible and what each would look like if possible before moving forward.
It would deduct 1 extra PP for each Pressure ability on the field that is targetted, so 4/8 (excluding itself, so if Aerodactyl used Earthquake, then it would be 5/8).
 
Last edited:
For a doubles game where a swampert clicks earthquake into 3 pressure mons, two of which are aerodactyl, would it say (4/8) or (5/8) or (6/8)? Or how would that work?
I guess that, in the case of multiple Aerodactyl, we could show the limits (the lowest and highest possible values), since the tree of possibilities would grow exponentially with each turn.
 
I really don't see the need to even hide Pressure Aero's presence from an audience watching Gen 3 Doubles formats. It sounds like multiple Pressure owners existing on the field at once is commonplace, so a Doubles player opposite of Aero is far more likely to notice any PP discrepancy when attacking into it. If Pressure on Aero is "revealed" the audience should be told.

In Singles you could argue the PP loss is easier to miss, but I still feel like hiding that info unnecessarily complicates things for little to no benefit. A good/paranoid enough player will sus out Pressure after one attack (especially if they saw this thread lol), and the jig is up at that point.
 
Last edited:
Something like: Giga Drain (6/8 or 7/8).
This would only appear for moves that have targeted an Aerodactyl. For other Pressure Pokémon, we would simply display the correct PP.
I'll repeat: this client-side solution doesn't need this thread—I can implement it today.
This sounds awesome. For an extremely minor issue like this if there's a simple implementation I am all for it and let's not waste any more time in policy review on it.

On the aesthetic side of things I would advocate for a range (expressed as '6-7 / 8' instead of '6/8 or 7/8'). I don't know if that's more burdensome to implement, though, and if it is then stick to what you suggested because again this is an extremely minor issue.
 
This sounds awesome. For an extremely minor issue like this if there's a simple implementation I am all for it and let's not waste any more time in policy review on it.

On the aesthetic side of things I would advocate for a range (expressed as '6-7 / 8' instead of '6/8 or 7/8'). I don't know if that's more burdensome to implement, though, and if it is then stick to what you suggested because again this is an extremely minor issue.
I can implement this later today or tomorrow. Once I have something, I'll add some prints here
 
Power Point clause:
Both players agree to broadcast Power Points of all moves used during the battle.

Downside:
None, it has no effect on the players

Upside:
Spectating fans and commentators can now track PP usage in endgames, making the game easier to follow and understand.

If clauses are to be avoided, then Hydra's solution (showing the correct value for Mono-Pressure Mons and having both possible values on display for Aero) is best. :blobthumbsup:
 
After hitting Suicune with Giga Drain.
1770377891514.png


After hitting Suicune and Aerodactyl with Surf (doubles).
1770377933495.png


After hitting Suicune once and Aerodactyl 3 times with Surf (doubles).
1770378992548.png


I'll change the Pressure hint to "Pressure is not visible in Gen 3, so in certain situations, the exact amount of PP used may be unknown."

Edit:
After spamming Surf against two Aerodactyl, the lower bound should be negative by now, but it is correctly truncated to zero.
1770381194938.png


Here is the pull request: https://github.com/smogon/pokemon-showdown-client/pull/2607
 
Last edited:
Back
Top