Resource Stadium Bug Report Thread

We discovered yet another bug in the Pokémon Stadium 1 simulator. When you get burnt your Attack gets lowered more than 6 levels! In a Nintendo Cup 99 match, which only allows level 50 pokémon, Charizard burnt Sandslash, then the latter hit the former with Rock Slide and scored a damage of 5 %. According to the Damaga Calculator, the damage should have been between 20.1 % to 23.9 %.
 

Plague von Karma

Banned deucer.
Hi, I'm here to annoy people again.

WrapSwitching Mechanics are not implemented correctly.
Here's a replay of my query.

2-player verification
In Stadium, if the user switches, the turn outright ends, disregarding the opponent's input. This gives the player using the move a completely safe switch-in. This has not been implemented at all, instead, it's using the (flawed) RBY implementation.

If the opponent switches, the game makes the user try to use Wrap again, consuming PP (I tested this after the fact). Not sure what happens if there is no PP left, but I know PP Wrapping isn't in the game. I'm assuming it either frees player choice or doesn't allow Wrap to be used at all. If anyone requests it, I'll test it with Clamp for quickness.

There is another problem. In Stadium, the opponent has the opportunity to make inputs including switching, which has been implemented weirdly. For some reason, while I can attempt Wrap on a switch like in-game mechanics...this happens? It just kinda doesn't work?

This needs a full rework.

I tested on Stad0 using a Rental Onix, and it seems the mechanical change was introduced there. While this isn't run on PS Main, I'm adding this video in for historical context.
 
Last edited:

Plague von Karma

Banned deucer.
To preface, here's the Gen 1 PS Dev Thread Post, featuring my Game Boys. This is a Stadium version of the problem there, it's an issue on both sims. I was curious about whether it was also a thing on the Stadium sim, I tested it on there, and of course, the issue is there too. So now I'm here to annoy you and show cool Stadium footage.

The reason it happens is that the sim thinks that charging for an attack is some kind of status effect. It's not, nor is it even considered an attack in RBY (but it is in Stad1 at least). As such, Haze should not affect this at all.

Here is how it should work. Haze should not delay, or stop, 2-turn charge moves. Nothing should happen here, as you can see in the video. I set up Moltres to have minimum speed so Golbat can strike first.
The Golbat Rental I generated has Fly which it can't learn, I just rushed adding moves in my editor and couldn't be arsed remembering this crap mon's movepool. It's irrelevant to the test at hand anyway, so pretend I'm super smart and know everything pls.
 

Plague von Karma

Banned deucer.
The current Stad1 Wrap implementation is just...wrong. Like, completely wrong. Both of my videos have some commentary to show my perspective and thoughts. Pls forgive my pre-trans voice, it makes me very insecure.

Partial Trapping Info Leaks / Flawed Messaging
In Pokemon Stadium, when being partially trapped, you will get no indication of when it will actually end. Unlike RBY, the fight button doesn't really do anything here, and you can click a move and such. This goes for both ends. This is important, as it comes into the issue later.

Considering this information, this replay presents an info leak that can influence your next play. When a target is freed from any partial trapping move is never given in Stadium, and that distinction is very important. Neither player should know when the partial trapping is about to end, not even the user. In addition, you should be able to click any move at any point, as once again, you literally aren't supposed to know whether it'll actually be used.


So as a result of this, both players kind of just throw moves out and pray if they intend to attack. Neither party knows when the partial trapping will actually end. As such, in PS, all moves should be available to click. If they're released from trapping, you get the attack; otherwise, the trapping keeps going.

WrapSwitching Test Results
I was also curious about how WrapSwitching truly works, as my previous test wasn't in-depth, so I did some tests on Pokemon with different speed stats. Namely, a perfect DV/Stat Exp Rapidash and the Rental Rapidash against two perfect DV/Stat Exp Magikarp. I kept with Fire Spin since I'm kind of tired and can't be bothered to edit things. Only got one miss anyway.

To sum up;
  • If either player switches out, the turn ends there and then. Wrap and friends will not continue, no attacks will be used, the turn just ends. It's as if a Pokemon fainted.
  • If both players switch out, they will both get their switches.
  • Speed does not matter at all.
From a competitive perspective, when the move is used, both players should just switch out. There's no reason for either party to stay in unless you want a pseudo-whirlwind that's completely safe for the opponent. You're kind of forcing the opponent out if you're faster anyway, since uh...they'll die if you spam it. This entire thing isn't really implemented on PS and should probably just be recoded from the ground up, honestly.

It should be noted that in some cases of switching in Stad1, Wrap is used upon a switch, but nothing happens. I don't know how or why this happens, but it shouldn't.

EDIT:
Mimic Infinite PP Glitch

This is mainly so everything I mentioned here in reference to Stadium is on the record here.

This is an issue with inheritance. In later generations, if you have the same move, the PP will be deducted from the first instance of it basically forever. However, this does not happen in RBY or Stadium, but as there hasn't been anything to say otherwise, it just inherits the mechanic.

Here's a video where I demonstrate it, as well as verify that everything else about Mimic (bar the display error from earlier) is correct.
 
Last edited:

Plague von Karma

Banned deucer.
I did some testing today, here to annoy people again.

I decided to test thawing and Counter + Substitute.

Video here:
There is a long freeze war but since it's implemented fine on PS you don't need to go through with the agony of watching. I also have a bit of commentary but it's quiet so you'll need to increase volume, tho everything written below sums it up better.

Counter + Substitute Interaction is not implemented
I remembered a conversation I had with someone from Japan that mentioned Counter+Substitute was a good set for Electabuzz in Stad1. I wondered why at first, but he mentioned that Counter works when the Substitute is damaged and/or broken. I tested it in Stad1, and it works, you can see the interaction at 2:06! However, this interaction is not on PS; Counter fails instead (T8).

This is a very important interaction, as both Counter and Substitute are extremely powerful moves in Stad1.
To note, Counter will use the damage taken by the Substitute, so I believe the stored damage will be the full amount the user would have taken.

I am like 90% sure this is problematic in RBY as well...it still fails here. However, according to Bulbapedia, failing behind Substitute was a mechanic introduced in Gen 2. zalarye has verified this.

Freezing note
When the Freeze Desync Patch is eventually implemented, there will need to be a special consideration for Stad1, since there is no desync (obviously). It's the same as modern freezing; the move selected on the turn is used. The footage is provided in my video. As far as I can see, Stad1 thawing is currently implemented correctly.

And I say "eventually implemented", because it isn't right now. See here. It just uses the Stad1 implementation...
 
Last edited:

Plague von Karma

Banned deucer.
Along with the RBY Counter patch, Stad1 Counter has been updated to only work on moves used in the current turn. However, it isn't a full fix: damage itself isn't cleared every turn, and if the same move is used, it can situationally cause Counter to still prolong stored damage. As far as I know though, Stad1 Counter will work correctly in most scenarios.

Still need Counter to work properly with Substitute in general, as well as clear stored damage every turn, but it's significant progress.
 
I decided to give the Smogon simulator the benefit of the doubt and see if Partial Trapping moves consumed an extra PP when the trapped pokémon switched out in Pokémon Stadium 1. As we all expected, they didn't, so those moves need fixing.

I also tested rollovers in Stadium 1, I used a Mewtwo with a Special of 404 for this. The first Amnesia worked and gave Mewtwo an Special of 808; the second Amnesia also worked: it gave Mewtwo an Special of 1212, which was rounded down to 999; however, there was no rollover. Finally, I used Amnesia a third time, the move didn't work but it also didn't cause a rollover. As we can see, moves like Amnesia, Growth and Swords Dance need to be fixed in the Stadium 1 sim so they work properly and don't cause rollovers.

As a bonus, I tested multihit attacks against Substitutes and found they have the same behavior as in the cartridge mechanics: they end as soon as the Substitute breaks, so don't try using a Focus Energy Jolteon with Pin Missile to hit an Exeggutor that is hiding behind a Substitute. Anyway, congratulations to Joim and the other programmers for implementing this mechanic well, I hope you can fix the others soon.

If you want me to test other mechanics in Stadium 1, give me a call chums.
 

Plague von Karma

Banned deucer.
Some bug fix updates for those not in the loop.
  • Counter is now fixed thanks to Zarel, it works correctly against Normal/Fighting attacks and all that.
    • We still don't have the Substitute interaction fixed but that's something we can work on down the road. It pains me a bit, as I think it could be a legitimately viable set for Pokemon like Chansey, but we'll have to wait for now yeah?
  • I've given Haze its "Refresh" effect, which will also recalculate stats.
  • I fixed Rest a while back; Rest will correctly remove para/brn stat drops and recalculate stats. This means Rest is now completely cartridge accurate.
This covers some of the more relevant metagame things, and now the Stadium OU Global Championship won't have Counter disasters at play like it did in Round 1! Vaporeon now actually functions as it's meant to in the sim thanks to the Rest and Haze fixes, though it isn't too good a Pokemon anyway, I suppose. I love the lil guy though, y'know?

Here's a replay showing each fix in action!
The to-do list has been updated.

On a side note that isn't particularly relevant, I put out a Pull Request for adding some RBY-centric aliases.
 
The Pokémon Stadium 1 simulator doesn't have the Self-KO Clause, this is a big difference because matches where the two last pokemon die due to Self-Destruct/Explosion end in a tie, something that doesn't happen in the real game where the user of those moves always loses. In the real game Self-KO Clause is enforced in all Versus battles (even in Anything Goes) and it can't be deactivated. The lack of Self-KO Clause can delay tournaments by forcing players to repeat the match again.

Please fix this problem when you have time chums.
 

Plague von Karma

Banned deucer.
I've added a summary of known, fixed, and false bugs to the OP. I've also added links to the Stadium and RBY articles for people to check they aren't accidentally false flagging.
 
I discovered another innacuracy of the Stadium 1 simulator. If you confuse a pokémon that is sleeping, the Confusion check takes place and the pokémon can hurt itself, it that happens, the Sleep duration is delayed one more turn! Here, watch (go to turns 17 and 18): https://replay.pokemonshowdown.com/gen1stadiumou-1384832545

In the replay above, Golem was Sleeping due to Rest, he should have woken up on turn 18, but he did not because the Cofusion damage delayed his slumber two turns. Needless to say, none of this happens in the real game.
 
Last edited:
Yesterday I tested how Evasion Moves affected One Hit KO Moves' Accuracy in Pokémon Stadium 1. Bulbapedia used to say that the Accuracy of One Hit KO Moves couldn't be raised nor lowered in Gen I; however, when I tested them on Pokémon that had used Double Team/Minimize six times, they connected only 3 of 38 times which is equal to 7.9 % (close to the theoretical value of 10 %). In Showdown I swear that those moves' Accuracy can't be altered, which is a mistake (I know because on September we had a tournament with Evasion and One Hit KO Moves allowed and the latter worked wonders against Pokémon that had used Double Team/Minimize six times).
 

Plague von Karma

Banned deucer.
Yesterday I tested how Evasion Moves affected One Hit KO Moves' Accuracy in Pokémon Stadium 1. Bulbapedia used to say that the Accuracy of One Hit KO Moves couldn't be raised nor lowered in Gen I; however, when I tested them on Pokémon that had used Double Team/Minimize six times, they connected only 3 of 38 times which is equal to 7.9 % (close to the theoretical value of 10 %). In Showdown I swear that those moves' Accuracy can't be altered, which is a mistake (I know because on September we had a tournament with Evasion and One Hit KO Moves allowed and the latter worked wonders against Pokémon that had used Double Team/Minimize six times).
This is something GSC did, not RBY or Stadium. OHKO moves in Gen 1 are basically set damage moves (for 65535) that only work if you're faster. They don't calculate the accuracy independently like in later generations, you could call this implementation in RBY their "compromise". As far as I can see, the reason Bulbapedia used to say it is because it was wrong. As far as I can see, the current page's description is correct. It used to say it could be countered for infinite damage when breaking a Substitute, and that was also wrong. There isn't a disassembly of pokestadium that has move effect details, but RBY's is detailed enough for me to see fit to cite. Stadium didn't change this at all, to my knowledge. But from what I can tell, it's the same: a 29.7% accurate move that misses against Pokemon that are faster.

Here's the disassembly's details, it's probably a load of gibberish to you, but essentially, it's just clarifying what I said;
Code:
from: https://github.com/pret/pokered/blob/master/engine/battle/move_effects/one_hit_ko.asm

OneHitKOEffect_:
    ld hl, wDamage
    xor a
    ld [hli], a
    ld [hl], a ; set the damage output to zero
    dec a
    ld [wCriticalHitOrOHKO], a
    ld hl, wBattleMonSpeed + 1
    ld de, wEnemyMonSpeed + 1
    ldh a, [hWhoseTurn]
    and a
    jr z, .compareSpeed
    ld hl, wEnemyMonSpeed + 1
    ld de, wBattleMonSpeed + 1
.compareSpeed
; set damage to 65535 and OHKO flag is the user's current speed is higher than the target's
    ld a, [de]
    dec de
    ld b, a
    ld a, [hld]
    sub b
    ld a, [de]
    ld b, a
    ld a, [hl]
    sbc b
    jr c, .userIsSlower
    ld hl, wDamage
    ld a, $ff
    ld [hli], a
    ld [hl], a
    ld a, $2
    ld [wCriticalHitOrOHKO], a
    ret
.userIsSlower
; keep damage at 0 and set move missed flag if target's current speed is higher instead
    ld a, $1
    ld [wMoveMissed], a
    ret
And the entry here will also corroborate: https://github.com/pret/pokered/blob/master/data/moves/moves.asm
 

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

Top