Hello RBYers. We’ve recently had a cart accurate implementation of the FIGHT button on our sim, which is helping our battles be closer to original mechanics. I want to start by thanking Hydrametr0nice for the work on this implementation and bingingem for helping me understand these changes. Please correct me if I messed anything up here.
As a result, we’re discovering new bits about how this interacts with other gen 1 specialties, like sleep/pt/counter. Particularly, there’s a condition that prevents sleep from burning during pt, as well as a new major desync condition (also counter related).
The goal of this post is twofold: 1) to update everyone on the changes, and 2) to open a discussion on how far we want to take desync clause. I’m just going to post the info to the best of my knowledge, give my brief opinion, then leave it for others more engaged in the community to decide how to proceed.
Summary 1: Infinite sleep during partial trapping.
If you are trapped (by wrap or other) and select the FIGHT button, your last move used is set to a variable called CANNOT_MOVE. This variable overrides any sleep checks, so if you then switch a sleeping mon, you will not be able to burn turns nor wake at any point.
This only occurs if you switch to a sleeping mon after clicking FIGHT while being trapped (T3 or later of wrap). If you switch to a sleeping mon immediately after being wrapped (T2 of wrap), the above variable is not set and everything is fine.
As far as I know, the only way to clear this condition is to switch out, wait for a new wrap cycle / other move selection. The opponent can even switch Pokémon and start attacking, and you’re still locked (shown in this replay here https://replay.pokemonshowdown.com/gen1ou-2577504641-29sthgvqhu4dyuepm8j01nim8e7am7dpw)
This one is more straightforward. Everything works, just be aware of the change and status. There’s even an implemented tooltip to explain it now.
Summary 2: Priority desync during sleep following counter/quick-attack.
To quote Hydra directly “Basically, when a Pokémon in asleep or frozen, its owner sees it with the same priority as the last move used by their team, but the opponent sees that Pokémon with the priority of the first move in its moveset.”
So this would trigger if you select a priority changing move (counter or quick-attack, idt there’s others?), then switch to a sleeping/frozen mon. Now, you see things with priority of counter (ie -1, so you always go second), but your opponent sees things “normally.” If you were to wake/thaw on that turn while your opponent used a status move, that would trigger a battle desync and crash. (Not actually sure if thaw is relevant because that situation is impossible with thawing; we have to look into that)
Worth noting, devs are still figuring out how to exactly implement this desync, so currently games just move forward with the speed change occurring for both players, but that isn’t accurate.
We noticed this in an example during rbywc yesterday in Peasounay vs Suikyo, so let’s take that as an example here. Start at T10, we see Suikyo’s (AsmiRedx) Snorlax use Counter. T11, Suikyo goes Jynx vs Victreebel. Now, the game calls priority for Suikyo based on last move move (counter), so it has priority -1 and is slower. On actual cart, Peas would’ve seen priority based on Jynx’s first move in slot (assume Lovely Kiss), so jynx would be faster. Here would cause the desync. I’m not too sure on exactly how desyncs work, but I don’t think the game would crash yet. However, on T12 it would: Vic uses Sleep Powder. On cart, from Peas’ perspective, Jynx would wake and then take Sleep Powder and be slept; but from Suikyo’s perspective, Jynx is slower, so Sleep Powder would miss, Jynx would then wake and be awake to do stuff (as happened in the replay). Now we have a difference in game state and the desync is fully catastrophic.
This is the core of the discussion: we either need to expand desync clause to handle this someway, or just ban counter (unfortunately quick-attack would have to be banned as well).
The way I see it, we have 3 options, but option 2 isn’t viable imo:
As a result, we’re discovering new bits about how this interacts with other gen 1 specialties, like sleep/pt/counter. Particularly, there’s a condition that prevents sleep from burning during pt, as well as a new major desync condition (also counter related).
The goal of this post is twofold: 1) to update everyone on the changes, and 2) to open a discussion on how far we want to take desync clause. I’m just going to post the info to the best of my knowledge, give my brief opinion, then leave it for others more engaged in the community to decide how to proceed.
Summary 1: Infinite sleep during partial trapping.
If you are trapped (by wrap or other) and select the FIGHT button, your last move used is set to a variable called CANNOT_MOVE. This variable overrides any sleep checks, so if you then switch a sleeping mon, you will not be able to burn turns nor wake at any point.
This only occurs if you switch to a sleeping mon after clicking FIGHT while being trapped (T3 or later of wrap). If you switch to a sleeping mon immediately after being wrapped (T2 of wrap), the above variable is not set and everything is fine.
As far as I know, the only way to clear this condition is to switch out, wait for a new wrap cycle / other move selection. The opponent can even switch Pokémon and start attacking, and you’re still locked (shown in this replay here https://replay.pokemonshowdown.com/gen1ou-2577504641-29sthgvqhu4dyuepm8j01nim8e7am7dpw)
This one is more straightforward. Everything works, just be aware of the change and status. There’s even an implemented tooltip to explain it now.
Explanation from Hyddra:
I recorded two videos on actual international cart (red vs blue) on a link battle (sorry for the shit quality). In video one you see things working “properly” with an immediate switch to a sleeping mon upon being wrapped. In this case, FIGHT is not selected while under pt (by the awake mon), so CANNOT_MOVE is never set, and the sleeping Pokémon can burn turns normally. In video 2, we see the Beedrill select FIGHT after being trapped (which sets CANNOT_MOVE), then switch to sleeping Parasect, and Parasect never gets the animation of sleep turns burning. Around 45sec we see a new instance of wrap being initiated, and the condition persists. I tested this multiple times, ftr.
I recorded two videos on actual international cart (red vs blue) on a link battle (sorry for the shit quality). In video one you see things working “properly” with an immediate switch to a sleeping mon upon being wrapped. In this case, FIGHT is not selected while under pt (by the awake mon), so CANNOT_MOVE is never set, and the sleeping Pokémon can burn turns normally. In video 2, we see the Beedrill select FIGHT after being trapped (which sets CANNOT_MOVE), then switch to sleeping Parasect, and Parasect never gets the animation of sleep turns burning. Around 45sec we see a new instance of wrap being initiated, and the condition persists. I tested this multiple times, ftr.
Summary 2: Priority desync during sleep following counter/quick-attack.
To quote Hydra directly “Basically, when a Pokémon in asleep or frozen, its owner sees it with the same priority as the last move used by their team, but the opponent sees that Pokémon with the priority of the first move in its moveset.”
So this would trigger if you select a priority changing move (counter or quick-attack, idt there’s others?), then switch to a sleeping/frozen mon. Now, you see things with priority of counter (ie -1, so you always go second), but your opponent sees things “normally.” If you were to wake/thaw on that turn while your opponent used a status move, that would trigger a battle desync and crash. (Not actually sure if thaw is relevant because that situation is impossible with thawing; we have to look into that)
Worth noting, devs are still figuring out how to exactly implement this desync, so currently games just move forward with the speed change occurring for both players, but that isn’t accurate.
We noticed this in an example during rbywc yesterday in Peasounay vs Suikyo, so let’s take that as an example here. Start at T10, we see Suikyo’s (AsmiRedx) Snorlax use Counter. T11, Suikyo goes Jynx vs Victreebel. Now, the game calls priority for Suikyo based on last move move (counter), so it has priority -1 and is slower. On actual cart, Peas would’ve seen priority based on Jynx’s first move in slot (assume Lovely Kiss), so jynx would be faster. Here would cause the desync. I’m not too sure on exactly how desyncs work, but I don’t think the game would crash yet. However, on T12 it would: Vic uses Sleep Powder. On cart, from Peas’ perspective, Jynx would wake and then take Sleep Powder and be slept; but from Suikyo’s perspective, Jynx is slower, so Sleep Powder would miss, Jynx would then wake and be awake to do stuff (as happened in the replay). Now we have a difference in game state and the desync is fully catastrophic.
This is the core of the discussion: we either need to expand desync clause to handle this someway, or just ban counter (unfortunately quick-attack would have to be banned as well).
The way I see it, we have 3 options, but option 2 isn’t viable imo:
- Expand desync to account for this situation in some way by manually fixing the priority. Devs are working on this but haven’t quite figured out the best way to do it.
- Ignore it. Let it play out as happened in the above game.
- Ban priority changing moves (counter and quick attack)









