Submission #6694: anonymous user's GBC Pokémon Trading Card Game in 16:42.69

System Game Boy Color Emulator BizHawk 2.4.1
Game Version USA Frame Count 61687
ROM Filename Pokemon Trading Card Game (USA).gbc Frame Rate 61.52150714577785
Branch Rerecord Count 3614
Unknown Authors
(Additionally: anonymous user)
Game Pokémon: Trading Card Game
Submitted by TASVideoAgent on 4/1/2020 3:04:12 AM

Submission Comments

Pokémon Trading Card Game

(The horrendous tutorial is now five minutes shorter. You probably don’t have to skip it. Incredibly massive thanks to TiKevin83 for his work on console verification of Game Boy games and insane pixel-perfect capture quality!)
This is an updated version of [3485] GBC Pokémon: Trading Card Game by anonymous user in 21:30.96, aiming for Moons tier, as ACE has made it not valid for Vault. Its entertainment value has been increased substantially (in my opinion) by using the new Duel Escape Glitch to skip the tutorial duel. It chooses not to use that glitch for any future duels, as a speed/entertainment trade-off. (Insane RNG manipulation is entertaining, I think.)
Aside from the tutorial time save, it also managed to save a few seconds through an input optimization, and heavy lag optimization.

Game objectives

  • Technically doesn’t aim for fastest time, because pressing the Beat-a-Game Button every duel isn’t interesting
  • Uses U+D/L+R (but not in a weird way)
  • Heavy luck manipulation
  • Emulator used: BizHawk 2.4.1 (syncs on console!)
The RNG manipulation has not been changed, so refer to the previous submission notes for details about that. Aside from the tutorial skip, there was some input improvement made throughout this run by being able to ‘press’ Up/Down/Left on consecutive frames, as well as applying brute-force lag reduction.

Scripts / tasproj’s

I’ve uploaded all my April 1st scripts and such here:

Faster up/down/left menuing

In the making of the ACE TAS, gifvex discovered that Up and Down can be input every frame instead of every other frame, if you combine it with Left or Right. I guess I had too much faith in this game’s code to try such a thing…
This saves a few frames inside deck editing and hand menuing whenever I need to go up or down twice or more in a row. It even saves lag frames in the hand, because the cursor moves so fast that interim card pictures cannot load:
Essentially, there’s a hierarchy of executing Up->Down->Left->Right, but it executes if ANY of the four have been ‘pressed’ this frame. So, pressing Left+Right can also get consecutive Left inputs. Up+Down would also execute Up, but this is irrelevant since Up+Left/Up+Right already allows pressing Up infinitely.
Pressing Up+Left/Right can also be used to get two consecutive Left/Right inputs when switching between types in a deck edit. Normally the Up takes precedence over Left/Right, but the Up does nothing and is ignored in that case.

Thoroughly checking the beginning

I am extremely satisfied with the old run’s duel order, duels, and deck edits. I know that, past the Lightning Club, I was thorough in checking my options. But, I did want to double check the “Deck Edit #0” options, especially as the tutorial skip means a few less RNG advancements at the start (13, to be exact).
Beating a duel without a deck edit basically requires us to have our one Machop out, with a Fighting Energy, against an opponent with one Fighting-weak 30/40 HP Basic out, and winning the coin flip. It’s a very rare situation. It could also be Machop or Rattata, with a PlusPower in hand, against a 30 HP Basic (or Machop vs. 50 HP Fighting-weak Basic), but that’s even rarer, but still worth checking.
The duels we can win like this are Heather, Brittany and Michael in the Grass Club, everyone in the Lightning Club, Jessica in the Fire Club and Chris in the Rock Club. Also, talking to Mitch in the Fighting Club can be delayed if necessary, giving extra RNG options. The most important thing to try to get out of this is Colosseum booster packs, and I didn’t want extra world map travel. I didn’t bother with Jessica or Chris as they’re WAY out of the way and add extra trips. I tried going to the Grass Club and Lightning Club before or after the Fighting Club, but it didn’t work out.
I had a promising new option: a 3-frame wait on Brandon (inaccessible in the old run). This leads into the same Nicholas I used before, then I’d deck edit before Jennifer. The key thing I was hoping would improve from this is having an earlier PlusPower from Brandon’s Colosseum packs. But there’s one major problem: no Jennifer Mystery packs means no Double Colorless Energy, and Ponyta+DCE is essential for beating the Grass Club on Deck Edit #1. There’s no way one extra PlusPower could make up for that. It’s unfortunate Jennifer didn’t have any zero-edit options after Brandon or Nicholas; if I could have beaten all three of them, THAT would have serious potential to save time. That leaves only one way to improve this run...

Testing technically equal input variants for lag reduction

OK, this may have been a bit overkill. The only avenue I have to lag reduce in this game, aside from purposely losing non-lag frames, is changing the order of my input in spots where I can. An easy example of this (and the one that affects lag the greatest) is which map tile I pause on for the 4 pauses in the run. But resyncing a change in lag frames is absolute hell, and a reduction in lag frames at the pause might just result in more lag frames later, so I can’t even know if it’s worth resyncing. Brute force time!
I wrote a Lua script that essentially takes my entire movie file, minus lag frames. A giant list of meaningful inputs. It’ll then modify that list in specific ways, and loop through each possibility for all those ways, resyncing the run in its entirety to see what the input end is.
I don’t think a similar script has been made before, and I thought it would be pretty fun to make and would certainly get this run to the next level of optimization. I also feel like such a script could help someone else out as well, if they have a logical way to try to lag reduce, but want to make sure it actually saves frames off input end.
I made a diary of sorts of the past few weeks, if you’d like to really read about the decisions I made in restricting my brute force criteria to check a large variety of possibilities in time. TL;DR: I minimized lag by simulating 5000+ runs for which gets the least lag. And I realized a few more U+D/L+R optimizations along the way.
If you think this Lag Tester script can be helpful for your game, I am probably willing to try to help you get it working! I’m in the TASVideos Discord!

Possible improvements

There is far more depth one could go into when it comes to testing technically identical inputs for a reduction in lag. For example, every time I wait on the final textbox of a trainer for RNG, those wait frames could have been waited on an earlier textbox (or world map) since the previous duel. This change instantly makes the number of possible runs have to be in scientific notation. It would take a logical cycle-level (as opposed to brute-force frame-level) method to effectively reduce lag in this manner.
There’s also the possibility of purposely delaying actions a frame in duels/edits (aka non-RNG-advancing time) to hopefully reduce lag later down the line. I didn’t pursue that, both because of complexity and because I’m generally against the idea of making less optimized input for lag reduction.
And there’s also many ways to have more thoroughly done my brute-forcing, as the unpredictable nature of the lag means my cutoff points (like applying new options only to 6172x input ends) could mean I missed something faster that branched off from something slower.
So here’s the main permutations I would check if I had infinite time:
  • Trying “blank, Down+A” and “Down, A” whenever I use Card 2 (same for Card 6) (definitely changes lag)
  • Alternate tile paths that don’t lose time (including routes that step extra tiles, and just delay 8/16/etc less frames before the next duel)
  • Spreading out my RNG delay frames among multiple text boxes
  • Trying “blank, B, A” instead of “A, blank, A” when closing the start-of-turn draw then opening hand (does this change lag long-term?)
  • Starting text box advancements with A instead of B (I’ve seen this add/lose a lag frame before)
  • Randomly delaying every single input in the run in case it saves lag (haha sure)


Huge thank you to TiKevin83 for console-verifying this run for the ‘encode’.
I hope you enjoy the movie and watching all these duelists get destroyed so thoroughly! Personally, now that the tutorial is bearable, I think it is as entertaining if not more so than similar main series Pokemon runs; though harder to follow because of the insane speed, that just makes it more impressive.
Thumbnail suggestion: 20936
There will likely be another TCG1 ACE submission, as I found an input improvement in the deck edit, and would like to apply this brute force technique to it as well, while at the same time having the final product be console-verified. That should be the last one...


I've had some gripes about the palettes used in previous TCG encodes, because they kinda just look wrong. I am used to Vivid, a basic RGB5->RGB8 conversion that ends up way too saturated, and was not at all pleased with the palettes that attempt to mimic a real GBC screen, which turn out way too dark. Maybe the new libretro palette, which is lighter and more washed out, can be used for this? Though it kind of turns red into pink too much... GBC palettes really are a mess.
Discussion for that is here: Forum/Topics/21768

ThunderAxe31: Judging...
ThunderAxe31: File replaced for a corrected CycleCount value.
ThunderAxe31: I really appreciate the fact that this submission attempts to restore a branch that allows to showcase actual card duel gameplay for this game, as the current game end glitch movie obsoleted that. Since this submission is not applicable for Vault, it needs to be considered for its entertaining value, as well as featuring differing contents from the existing branches, and defying a sensible goal.
This submission also needs to be faster than the movie that it's trying to obsolete, of course. I want to remind that beside having overall shorter movie length than its precedessor, we still demand that there aren't any obvious mistakes in gameplay execution. For this reason, I've compared the two movies after disregarding the difference made by skipping the tutorial duel. And while the rest of the movie appeared overall slower in this submission, it was actually just due to difference of emulation. This submission used a more recent BizHawk version that features improvements of accuracy for Game Boy emulation, such that this movie could be played back on real hardware. So, in the end, if we also disregard differences of emulation, this submission results more optimized than its precedessor.
Regarding the entertaining value, I see that the audience response wasn't very strong, maybe due to the recent sheer mass of the submission queue overshadowing it. But on the other hand I couldn't notice any disagreement, nor anything else that could make me suppose that. It's clear how superhuman the gameplay is from watching this movie, as well as the amount of RNG manipulation and routing through the whole run.
Regarding the movie contents, I think that this is a great idea for an extra Moons branch, as both fastest-completion and full-completion branches will never feature duel play again, as that would be an unacceptable speed tradeoff for Vault movies, since the discover of the duel escape glitch.
Lastly, the movie goal needs to be objectively defined, in order for TASing competition to be fair, as well as making the movie goal enough understandable for the average audience. It must be noted that the submitted movie is the result of a compromise that allowed to achieve both entertaining and technical TASing quality. For that reason, the author decided to make use of the recently discovered duel escape glitch in order to skip only the tutorial duel, while leaving the rest of the gameplay basically free of glitch usage. Maybe this could apparently seem as an arbitrary decision to some, but if we look closely it makes sense. The tutorial duel is just a scripted interaction that is completely unaffected from any kind of choice from the player or input timing; on the other hand, all other duels in the game are affected by deck preparation, RNG, and duel choices. This means that the tutorial duel is completely devoid of any TASing challenge, as well as resulting as the most boring and slow-paced section of the game. Since we can make a clear distinction between the mechanics of the tutorial duel and rest of the duels in the game, to me it seems meaningful to apply the duel escape glitch only to the former, while forgoing so for the latter duels as a form of speed/entertainment tradeoff.
For the reasons expressed above, I think it's ok to allow at least this extra branch for this game (and maybe also for its sequel, but I'm not promising anything).
Regarding the GBCinGBA mode, I have to note that we don't have any restriction for its usage, so it's allowed in any case for GBC games. However, whether the encoding palette chosen will be for GBC or GBA appearance, it's entirely up to the publishing policy, not to the judging system.
With all that said, accepting this submission for Moons and obsoleting [3485] GBC Pokémon: Trading Card Game by anonymous user in 21:30.96.
Spikestuff: Published.

Last Edited by on 1/1/2022 6:13 PM
Page History Latest diff