Movie Goals
- Emulator used: FCEUX 2.2.3
- Beat the game as fast as possible
- Terrorize the other judges
Target categories
- Takes damage to save time
- Uses death to save time
- Heavy luck manipulation
- Unlicensed game
- Genre: RPG
About the game
I present you Pokémon White Jade, the game you never heard about! The game was produced by an unlicensed Chinese company known as Jncota, and it's currently available in Chinese language only. Despite anything you may think from a first look, this is mostly a bootlegged NES backport of Pokémon Gold/Silver, from which the Kanto Map was copied. Graphics mostly come from Gen II and III games, while the Pokémon species are taken from Gen IV games. On top of all that, there were introduced a bunch of arbitrary differences in about every aspect of the game itself. Don't worry, below I will explain everything you need to know.
If you think that a NES backport of a Pokémon game sounds like an unique thing, think about it again. I discovered the existence of a total of
13 unique NES Pokémon backports, not counting alternate title screen versions! The real fun has only just begun!
About the run
In this game, nothing is what it seems. In order to translate stuff, I had to use an optical character recognition software, and I still had to draw many characters by hand into the Google Translate engine. This helped with understanding how to progress through the story events, but I still had to figure out by myself the actual effect of some moves and items present in the game. Most notably, each badge is required for being able to use a key item that allows to progress through the Kanto region.
It turns out the programmers were total jerks. Many moves have no actual effect at all. There are no Repel items, while the wild encounters are unavoidable. But most importantly, the Ether item doesn't recover 10 PPs like in the original Pokémon games, but instead it recovers half of the max PPs. Rounded down. Imagine discovering this when you're 90% into the TAS production. But on the bright side, this motivated me into writing a bot, namely DankBot, which resulted in a roughly ~1 minute faster run.
The route I developed required a lot of luck manipulation, which would make it impossible to follow the same choices in a real-time attempt. It takes in account every quirk of the game engine, which also makes it much different than what a regular Pokémon game speedrun looks like. Most notably, there are many less mandatory fights, and the player's Pokémon grow much slower, so it's always faster to catch a stronger Pokémon at certain points through the run, even in a real-time attempt. For the rest, you're forced to follow a very linear event line until the end.
About DankBot
For optimizing RNG manipulation across the whole run, I wrote a Lua bot specifically for this game (and other Jncota Pokémon backports :) ). You can download it by clicking
there. All you need to do is to play the game until the beginning of the first fight (the sailor), and start the script from there. It doesn't matter the exact moment when you launch it, as long as it's after start talking with the sailor and before that the battle menu is fully loaded, as the bot automatically proceeds through dialogues and loading times. Then, if you enable the unthrottled emulation speed and wait 3 days straight, you'll get the same movie file that I submitted here.
The bot tries a different delay for each fight turn and creates a new savestate for each successful attempt of getting a desired outcome. It gradually replaces the savestates that resulted in getting the same result slower. After enough attempts of optimizinh the current fight turn, it proceeds to the next turn and does attempt different delays as well, and it will also start from each of the savestates stored during the previous fight turn. In other words, the bot creates and manages savestate branches from which each subsequent attempt will be attempted as well. Or if you prefer, it's a brute forcing approach to micro routing.
The RNG engine
RNG in this game is stored at addresses 0x5F and 0x5A, both 1-byte. The first value is just a frame counter that wraps around after 255, while the other is a random number that changes every time RNG is used for determing the outcome of something. RNG affects moves damage, fails, critical hits, Pokémon capture success, and wild Pokémon species and level. The moveset of a wild Pokémon is not predetermined, but it's affected by both RNG and the position of the map tile you where you encountered it.
In this game, RNG can be manipulated by waiting before executing certain actions:
- When starting a fight (except some which won't affect RNG)
- When you confirm a move to use in a fight turn
- The move you choose affects dialogue lenght and thus cause different RNG changes
- When you access an overworld location that features wild Pokémon encounters, also gym 7 for some reason
- When you begin walking after loading an above mentioned location, but more than 1 frame of delay doesn't make difference
- If you didn't wait before starting moving, you'll also get a different RNG change whatever your first step is straight or it's a turnaround
Locations data
Note that the ID value corresponds to the Pokédex entry number, which is different than any official Pokémon game.
Route 6
ID | Pokémon | Level
|
---|
10 | Murkrow | 2-5
|
13 | Happiny | 2-5
|
39 | Budew | 2-5
|
67 | Dialga | 4-7
|
Route 7
ID | Pokémon | Level
|
---|
10 | Murkrow | 8-12
|
13 | Happiny | 8-12
|
42 | Machop | 8-12
|
Route 16
ID | Pokémon | Level
|
---|
13 | Happiny | 15-20
|
42 | Machop | 15-20
|
43 | Combee | 15-20
|
Route 17
ID | Pokémon | Level
|
---|
22 | Medicham | 20-25
|
42 | Machop | 20-25
|
43 | Combee | 20-25
|
45 | Meditite | 20-25
|
37 | Wingull | 20-25
|
Route 18
ID | Pokémon | Level
|
---|
43 | Combee | 23-27
|
45 | Meditite | 23-27
|
47 | Pichu | 23-27
|
Route 15
ID | Pokémon | Level
|
---|
42 | Machop | 29-31
|
43 | Combee | 29-31
|
45 | Meditite | 29-31
|
51 | Charnivine | 29-31
|
Route 14
ID | Pokémon | Level
|
---|
17 | Roselia | 29-31
|
43 | Combee | 29-31
|
45 | Meditite | 29-31
|
51 | Charnivine | 29-31
|
Route 12
ID | Pokémon | Level
|
---|
76 | Tentacool | 31-34
|
14 | Marril | 31-34
|
23 | Wooper | 31-34
|
37 | Wingull | 31-34
|
Route 11
ID | Pokémon | Level
|
---|
11 | Vespequeen | 31-34
|
15 | Cherrim | 31-34
|
18 | Clefairy | 31-34
|
26 | Cherubi | 31-34
|
Route 8
ID | Pokémon | Level
|
---|
75 | Uxie | 46-48
|
78 | Mime Jr. | 46-48
|
Rock Cave
ID | Pokémon | Level
|
---|
20 | Mistribas | 34-36
|
28 | Chatot | 34-36
|
31 | Gible | 34-36
|
34 | Bonsly | 34-36
|
Route 9
ID | Pokémon | Level
|
---|
39 | Budew | 35-38
|
44 | Hippopotas | 35-38
|
53 | Octillery | 35-38
|
70 | Gastrodon | 35-38
|
46 | Skorupi | 35-38
|
Power Plant
ID | Pokémon | Level
|
---|
82 | Ponyta | 34-37
|
40 | Pikachu | 34-37
|
44 | Hippopotas | 34-37
|
49 | Feebas | 34-37
|
53 | Octillery | 34-37
|
Route 5
ID | Pokémon | Level
|
---|
48 | Machamp | 40-43
|
52 | Abomasnow | 40-43
|
Route 24
ID | Pokémon | Level
|
---|
46 | Skorupi | 36-39
|
84 | Machamp | 36-39
|
53 | Octillery | 36-39
|
70 | Gastrodon | 36-39
|
Route 25
ID | Pokémon | Level
|
---|
70 | Gastrodon | 37-39
|
14 | Marril | 37-39
|
37 | Sudowoodo | 37-39
|
39 | Budew | 37-39
|
Diglett Cave
ID | Pokémon | Level
|
---|
21 | Machoke | 44-46
|
29 | Drapion | 44-46
|
32 | Riolu | 44-46
|
35 | Bronzong | 44-46
|
Route 2
ID | Pokémon | Level
|
---|
55 | Cleffa | 45-47
|
59 | Chansey | 45-47
|
66 | Hoothoot | 45-47
|
68 | Munchlax | 45-47
|
Route 4
ID | Pokémon | Level
|
---|
52 | Abomasnow | 43-45
|
55 | Cleffa | 43-45
|
14 | Marril | 43-45
|
24 | Whishcash | 43-45
|
Route 1
ID | Pokémon | Level
|
---|
85 | Azurill | 47-49
|
87 | Honchkrow | 47-49
|
12 | Noctowl | 47-49
|
16 | Gabite | 47-49
|
Route 21
ID | Pokémon | Level
|
---|
16 | Gabite | 50-51
|
19 | Raichu | 50-51
|
27 | Stuntank | 50-51
|
38 | Quagsire | 50-51
|
49 | Feebas | 50-51
|
54 | Azumarill | 50-51
|
71 | Lumineon | 50-51
|
Route 20
ID | Pokémon | Level
|
---|
54 | Azumarill | 50-51
|
71 | Lumineon | 50-51
|
72 | Finneon | 50-51
|
Route 19
ID | Pokémon | Level
|
---|
50 | Remoraid | 55-58
|
72 | Finneon | 55-58
|
73 | Tentacruel | 55-58
|
89 | Garchop | 55-58
|
Route 22
ID | Pokémon | Level
|
---|
50 | Remoraid | 47-49
|
84 | Girafarig | 47-49
|
85 | Azurill | 47-49
|
86 | Unown | 47-49
|
38 | Quagsire | 47-49
|
Victory Road
ID | Pokémon | Level
|
---|
36 | Sudowoodo | 55-58
|
57 | Blissey | 55-58
|
61 | Croagnuk | 55-58
|
64 | Heracross | 55-58
|
Route 26
ID | Pokémon | Level
|
---|
41 | Roserade | 58-60
|
56 | Mr. Mime | 58-60
|
60 | Snorlax | 58-60
|
61 | Croagnuk | 58-60
|
64 | Heracross | 58-60
|
89 | Garchop | 58-60
|
67 | Dialga | 58-60
|
Route 27
ID | Pokémon | Level
|
---|
69 | Clefable | 58-60
|
77 | Toxicroak | 58-60
|
79 | Mesprit | 58-60
|
50 | Remoraid | 58-60
|
64 | Heracross | 58-60
|
Route 28
ID | Pokémon | Level
|
---|
81 | Azelf | 58-60
|
83 | Ponyta | 58-60
|
88 | Hippowdon | 58-60
|
71 | Lumineon | 58-60
|
72 | Finneon | 58-60
|
73 | Tentacruel | 58-60
|
54 | Azumarill | 58-60
|
92 | Mantine | 58-60
|
93 | Snover | 58-60
|
Mt. Silver
ID | Pokémon | Level
|
---|
50 | Remoraid | 60-62
|
62 | Weawile | 60-62
|
63 | Lucario | 60-62
|
73 | Tentacruel | 60-62
|
89 | Garchop | 60-62
|
90 | Palkia | 60-62
|
65 | Spiritomb | 60-62
|
91 | Milotic | 60-62
|
S.S. Acqua -> S.S. Acqua
Vermilion City -> Vermilion City
Route 6 -> Vermilion City
Diglet Cave -> Vermilion City
Route 7 -> Saffron City
Saffron City -> Saffron City
Celadon City -> Celadon City
Route 16 -> Celadon City
Route 17 -> Celadon City
Route 18 -> Celadon City
Route 11 -> Fuchsia City
Route 12 -> Fuchsia City
Route 13 -> Fuchsia City
Route 14 -> Fuchsia City
Route 15 -> Fuchsia City
Route 19 -> Fuchsia City
Fuchsia City -> Fuchsia City
Route 8 -> Lavender Town
Route 10 -> Lavender Town
Rock Cave -> Lavender Town
Route 9 -> Route 9
Power Plant -> Route 9
Route 25 -> Cerulean City
Route 24 -> Cerulean City
Route 4 -> Cerulean City
Route 5 -> Cerulean City
Pewter City -> Pewter City
Mt. Moon -> Pewter City
Route 2 -> Pewter City
Route 3 -> Pewter City
Route 1 -> Viridian City
Route 22 -> Viridian City
Victory Road -> Viridian City
Route 26 -> Viridian City
Route 21 -> Pallet Town
Route 20 -> Cinnabar Island
Route 21 -> Cinnabar Island
Seafoam Islands -> Cinnabar Island
Indigo Plateau -> Indigo Plateau
Route 28 -> Mt. Silver (outide)
Mt. Silver (outide) -> Mt. Silver (outide)
Mt. Silver (inside) -> Mt. Silver (outide)
Route 27 -> New Bark Town
This is were I'll explain why of every action I've executed in this play, and since there are literally no documentations of this game in the whole internet, the judge will have to confirm every of my statements. :)
The begin
We skip the developer logo, the title screen, start a new game, meet prof. Rowan, wtalk mom, go to the Pokémon laboratory. Pretty cliché so far, even though the general ambiance may not look too much familiar.
We have to choose between one of the three Gen IV starters. The mandatory choice is Piplup, because it starts with the move Leer. Which it doesn't lower the adversary defense, but instead it raises our own Attack. By two stages. Like every other stat-affecting move in the game.
The prof's assistant will give us two Potions, which happens to be indispensable for the success of our second fight.
S.S. Acqua
The same events as Pokémon Gold/Silver. We go directly to the lower floor of the ship, just to talk to the sailor which won't let us pass through. Then we get back to the higher floor and enter the cabin where another sailor spawned. We challenge him to a fight for the story to proceed.
The fight is pretty simple. We build attack stat with Leer (wow it still sounds dumb) and we attack with Tackle, while manipulating our Pokémon to strike critical hits, and the opponent to either fail or use a non-damaging move. Simple, no? Of course I did take in account any other possible choice. By the way, leveling up resets our stat changes, so we have to build attack stat again after each level up.
Lt. Surge
Right after arriving to Vermilion City, we go straight for the first gym. No worries about the double hidden switch, as the programmers didn't bother to code it in. Nor did they bother to code the collisions of the trash bins at all. So we just "overfly" the bins and the trainers... Right, because this isn't an Electric type gym, but a Flying type one!
We directly challenge Lt. Surge. We can already notice how quick the enemy levels are raising. Defeating Honchkrow is the first actual challenge in this TASing project. This opponent Pokémon has a much high level, and it only has a damaging move. With 100% accuracy. So we have to manipulate the damage to the minimum, and also consume both of our Potions. When we finally take it down, we have only 1 HP left. With a bit more of manipulation we could keep 1 more HP, but that wouldn't be necessary.
Sabrina
After getting our well deserved badge, we head North, for Saffron City. Along the way, in Route 6, we have to talk with an NPC, placed in the upper left. Due to how doors work, we have to first enter in the building, and then exit. This is necessary for being able to get through the narrow way for reaching this NPC, which will give us HM Cut, a mandatory key item for accessing certain places. We'll also get HM Rock Smash in Saffron City from another NPC, which also allows use to pass through certain overworld obstacles.
We get to the second gym and skillyfully dodge the stare of the gym trainers in our way. The timing of their turning around is determined by a frame rule or two, I didn't care to look into it too much, as I've implemented a bunch of additional checkpoints in my bot for manipulating them optimally anyway.
Sabrina is very challenging, as her last two Pokémon don't feature any non-damaging move, so we'll have to manipulate them to fail, while also striking critical hits. You'll be able to notice much longer waitings before selecting our move.
Now we can use HM Rock Smash to smash rocks that block our way. HMs can't be taught, and there is no need to, as they're used directly in the overworld. Because the programmers didn't care.
Catching Medicham
After getting our second badge, we aim for Celadon City. We could get here a couple of seconds faster if we abused an intentional game over, but that would make we lost precious money that are necessary for our upcoming shopping. Before challenging the gym we have to buy 3 Poké Balls and 2 Ethers. Then we go to Route 17 to catch a Medicham, as our Piplup has become completely useless already.
When we catch a new Pokémon, we manipulate RNG in order to get it at the highest level possible, while also having a favorable moveset, which is critical. Our Medicham needs to have Fire Punch, High Jump Kick, and Tri Attack, which are the most powerful attacks available when capturing it in this Route. We also want to have Fire Punch at the first move slot, because it's the move we're going to use the most, and moving the move selection cursor consumes about 10 frames.
Weakening a wild Pokémon increases the capture chances, but it's unnecessary if we can just manipulate RNG for a quick success anyway.
Erika
There are a lot of mandatory fights in this gym, but worry not! Medicham, with her strong Fire Punch, will beat the chlorophyll out of these foul plants. We let Piplup go KO because it's faster than removing it from our party.
Janine
With some neat movements, I'll sneak through two gym trainers. Such a ninja I am, differently from Janine, who's not using "Ninja" type Pokémon here... but "Cute" type instead. Which our supereffective High Jump Kick will erase from existence.
Route 15
Since the wild Pokémon encounters run on a step count that it's decided when the location is loaded, we can't walk in the grass too much. But at the same time, we have to avoid getting caught by the stare of the trainers, and that's why we're walking this weird way. It's optimal.
Whishcash
It's worth noting that in Route 13 we'll face our second RNG-mupulation-intensive fight: the fisherman with three Wishcash. These are so much strong that our Medicham can barely beat them. The first two are level 35, and require at least 4 hits in order to be taken down, all crits of course. Since we have one spare High Jump Kick to use, I've implemented in my bot the ability to automatically figure out to which out of the two use it, since the time save is purely situational to RNG. The third an last Wishcash is level 34, and we can barely bring it KO with three High Jump Kicks, and lots of RNG manipulation.
You may have noticed that we also took some damage, don't worry, that didn't waste time, as this fight is so hard that the bot wasn't able to avoid getting hit, which is something that it's usually faster. Actually, the fact that we took some damage it's actually a good thing, as we're going to get an intentional game over later.
Right after winning this painful fight, we get into the house placed to the close North, in order to get HM Surf. Remember that HMs are not taught, but used directly on the spot? Well, in this case the programmers didn't even care to code a dialogue when using it, so we can directly swim on water just by moving towards it.
Rock Tunnel
Wild Pokémon encounters are unavoidable. All we can do is just manipulate the step count in order to limit their amount slightly. With a good manipulation, we can avoid at least one encounter for each room. It's also worth mentioning that different Pokémon species will result in a slightly different loading time, and of course I took this in consideration when coding my bot.
Power Plant
We have to first talk with chief for being made aware that a Machine Part has been stolen. Then we head to Cerulean City to retrieve it, in the fifth gym. Returning back to the Power Plant will force us to face a trainer, but instead we're going straight to challenge the closest trainer available, in order to get an intentional game over. Getting knocked out in one hit requires to manipulate a specific attack from the opponent Pokémon, on top of being a critical hit. We'll deathwarp in front of the Pokémon Center placed at the entrance of Rock Tunnel, because that's how deathwarp points work in this game: there is a predetermined place depending on the location where you got defeated. This allowed us to save some walking time, as well as avoiding the unavoidable trainer that I've already mentioned, which will never get the chance to annoy us.
We return the Machine Part and we get... a Poké Flute. And we can't use it before getting the fifth badge.
Catching Machamp
Since Medicham became obsolete, we go get a new Pokémon. Route 5 features only two Pokémon: Abromasnow and Machamp. The former can't have any decent move, while the latter can turn out with some very good ones. Again, we manipulate RNG in order to get the highest level possible, 43. The moves we want instead are Rock Slide, Cross Chop, Mega Kick. The order doesn't matter in this case.
Misty
We head to Route 25 and win some mandatory battles in order to meet Misty, so that she gets back to her gym and becomes available for getting rekt. After getting to the gym, we directly challenge her and her stacked team of overpowered Water type Pokémon... or are they? Yeah, they're Water type, but they're no threat. At all.
Brock
We get back to Vermilion City through a shortcut, and we wake up Snorlax with our Poké Flute... and there is no fight because the programmers didn't care to program it. Then we pass through Diglet Cave by encountering only two wild Pokémon, which requires very tight manipulation due to the required amount of steps. Note that when you begin walking on the first possible frame, the encounter step counter will be initialized after your first step, which effectively means you a chance of having an extra free step. We have to get it three times in a row, in order to pass through with encountering only two wild Pokémon.
We beat both Brock and the other gym trainer by consuming all PPs left. This required some planning, and it was necessary to take in consideration all the possible moves that Machamp could have.
Garchomp
After beating Brock, the path to Emerald Town opened, so we walk and swim all the way to Route 21, where we can find a surprising Pokémon at a surprising level. A Garchomp, level 58! Both stats and moveset are overpowered. We manipulate the moveset to be Take Down, Cross Chop, Hyper Beam, and... Ice Ball, which will also be necessary at a certain point. Anyway, we want Hyper Beam to be at the top, since we're going to use it extensively, with the aid of the two Ethers we bought way back after getting the second badge. Garchomp is strong, but our adversaries are going to be as well.
The reason why I've entered and exited the 7th gym was for resetting the encounter steps counter. This allowed to avoid one wild encounter in Route 20, and saving about 45 frames.
Blaine
Before challenging Blaine, we defeat a wild Pokémon on the way. This will save time later, since the experience bar grows very slowly when you defeat the first Pokémon after leveling up. This also happens to save time after the next level up, as so it happens to have another weak Pokémon right after the next level up.
Take Down is relatively powerful and has lots of PPs, making it a mandatory choice for the moveset of our Garchomp. It's enough to blast Blaine away.
Right after getting out of the "gym", some mysterious person speaks to us. Who could he be???
Blue
It was him. The overworld sprites used surely make no sense. Anyway, it must be mentioned that he has a Spiritomb... which is immune to both Normal and Fighting moves. It looks like the programmers get to be faithful to original series only for giving us more annoyances... Guess which is the only non-Normal and non-Fighting move that Garchomp can have? That's right, it's Ice Ball. And guess which move doesn't have any side effect, just like all other moves in this game? That's right, it's Ice Ball. This means the move power will always be 30. For these reasons, our cool Garchomp has to deliver 6 hits in order to take down this cursed ghost... all of them critical hits, of course.
Pokémon League
First, we get again to Pallet Town, where we have to meet Oak in order to get the Certificate will grant us access to Victory Road. Thanks to that, we can get to the Pokémon League, where we'll fight the Elite Four and the Champion.
Right after arriving to the League, we deposit all our Pokemon except Garchomp. You'd think that it's for saving time at the Hall of Fame, but that's not the case. It's actually just for making the next deathwarp much quicker.
For the rest, the only remark I have about the fights there, is that we're going to use both Ethers on Hyper Beam, in two different moments. In order to save time, we do that outside of battles.
After beating the Champion, we get acknowledged as the new Champion... with just a short dialogue.
We're warped back at the entrance of the League, from which we head back to Victory Road just for getting a quick deathwarp. Since the city before Victory Road is Emerald City, that's where the game is programmed to warp us. Note that the guy at left gives HM Waterfall, but we literally don't need it. It only allows to pick a couple of items from ground, found inside Mt. Silver.
Red
We can now get to Mt. Silver, as the guard blocking the passage has gone after that we beat the League. In in the second screen, before entering Mt. Silver, we walk in a weird zig-zagging way in order to walk as few steps as possible in the grass, barely avoiding an encounter. Differently than from the original series, turning your sprite around does consume time, but we can't really avoid any more turning here, I swear.
Surprise! Red TALKS. There isn't anything particularly broken about this fight, but his whole team is overall strong.
After beating him, he will automatically start a short dialogue. That's the very last story event. Nothing else happens after that. No credits roll. Not even a crappy congratulations screen. This is the ending point of the game, but I must admit that I hope I'm wrong. Please, anyone check if there is anything else left to do...
We could get back to New Bark Town through Route 28, but there isn't anything of interest to find. So my last input is just for closing the textbox of Red's dialogue.
Considerations
Working on this TAS was great! It took me weeks to figure out the game mechanics, and more weeks to figure out an optimal route, and more weeks to develop the DankBot, but it has been a lot of fun. Despite the fact that the game lacks a lot of features that you'd expect to be there, there are also a lot of unique aspects that made it interesting and challenging to work with. Maybe it's just me being entusiast about bootleg games for being obscure and exotic, but I really think that it was really worth it. It also happened to a be chance to test my limits and improve my TASing skills, and after finishing this project I feel that my possibilities in that regard have widened.
Noxxa: Claiming for judgment.
Noxxa: Quality of the run seems quite good. While the game does not appear to have a definite end, defeating Red and clearing his final dialogue looks like an appropriate ending point. And while it is a rather obscure bootleg, the game itself appears quite decent, with some odd quirks but nothing really game-breaking. It's definitely higher quality than many other bootleg games that have been accepted in the past.
In terms of viewer experience, it's a rather typical Pokémon-like speed playthrough, which generally isn't that notable. The facts that it isn't a known game and that it is all in Chinese make it significantly less appealing to the majority of our viewerbase; if not for the author commentary subtitles, there would be very little to follow at all.
Accepting for the Vault.
Noxxa: Also, cleared the rerecord count from the submission file (in order to be consistent with eliminating excessive bot rerecords from movie statistics). The original listed rerecord count was 6051845.
Noxxa: Replaced movie file with a fixed non-bot rerecord count and subtitle fixes.
Spikestuff: I don't have a witty bootleg joke on this one... Publishing.
Changed the title to
Pocket Monsters: White Jade Version as there's no official western release of this bootleg. And the naming convention chosen by this Chinese bootleg follows the Japanese title.