A GB TAS can't be converted to an SGB TAS, at least not for pokemon red/blue. When the game changes palettes there is a pause, basically the game telling the gameboy what to change everything to then resuming, and during the pause RNG continues to change.
I recall that MrWint wanted to do his Pokemon R/B TASes on SGB but couldn't because there was no suitable emulator for his needs.
Ok, I looked into it now. The text box ID is stored in $cf13, and this is what is played when you trigger the trainer-fly encounter. For Viridian Forest, it has 14 valid text IDs (including NPCs, Items, Signs, ...), and the old man text is 0xf, i.e. out of bounds. There are a few other OOB values you can get in Pallet and Viridian (so far I found 0x0f, 0x1f, 0x20, 0x21, 0x24, 0x3f, 0x40, 0x42), but I found none of them to be useful, as they're all pointing to ROM addresses and execute random text commands, which output some random text or (in case of 0x3f) crash the game by overwriting your RAM.
There are, however, useful indices (like 0x10, 0x16, 0x1c and a few others) which put you in a convenient location in RAM (like $d7f3), which, combined with the fact that text commands support inline asm (command 08), could very well lead to arbitrary code execution. Unfortunately, I have not yet found a way to get a "good" value before Viridian Forest. There are some in Pewter, but I also havn't found a way to skip the mandatory bug catcher first and use him for trainer-fly later (There is a way to skip him by fighting two trainers at one and therefore corrupting the map script index, but I don't know yet how to reverse the process. Also, the other two trainers can't be used for trainer-fly, there is no grass patch to get an encounter in).
So for now it seems that arbitrary code execution from a text box in Viridian Forest is in theory possible, but our luck with the existing text ID numbers is out. Maybe there is a way to get a good text ID value or bypass the mandatory bug catcher that I havn't seen yet.
And you can't get this in Mt. Moon, because the same address $cf13 is used while checking for trainers you ran into, which resets the value to 0 constantly. Some maps don't do this check (becasue they have no trainers, mostly the starting areas, town and indoor maps). You can't enter Mt. Moon without resetting the value, so getting something else than the start menu won't work.
The Caterpie and Weedle lines are in the Medium Fast Experience Group, not Medium Slow, despite being a 3-Stage Evolutionary line. Ironically, the Medium Fast Group takes longer to grow from Level 1 to 68 than the Medium Slow group does.
You're right about the Speed and Special Stats. Generation 1 keeps getting me confused about stat order.
Also, I was wondering if using a wild encounter for the arbitrary code would be faster than using Charmander, because after fighting all mandatory trainers and a Pidgey/Rattata before the first Bug Catcher (the small exp. from Pidgey allows to jump from Level 6 to 8 after the first Bug Catcher), Charmander is 121 short from 566 (0x0236). Would it be faster to use a different Pokemon as the boxed Pokemon, so Charmander's DVs could be manipulated to be higher? Having 54 (0x0036) for the special EV can be easily achieved by fighting two Paras and switching out to split the special EV into 27.
I guess I read the exp values wrong.
Since it isn't possible to defeat the Bug Catcher anymore, the EV spread Charmander goes through would be (first number is amount given in each fight, , second amount is the amount Charmander has right now:
Da Jerk Rival: 50|50
Level 2 Rattata: 25|75 (Fighting a wild Pokemon before the Weedle Fight allows you to jump from Level 6 to 8, which allows you to get ember one level earlier. Level 2's are easier to defeat, and Rattata is required for the correct EVs)
Weedle Bug Catcher (Weedle): 20|95
First Bug Catcher on Route 3 (Caterpie, Weedle, Caterpie): 20, 20, 20 (60)|155
Shorts Guy (Rattata, Wraphax Ekans): 25, 40 (65)|220
Lass (Rattata, Nidoran-M): 25, 40 (65)|285
Done Like Dinner Bug Catcher (Caterpie, Metapod): 20, 25 (45)|330
Level 5 Spearow (Needed for its odd Special Value of 31): 31|361
Paras x2 (Again for their special value): 110|471
Rocket in Ether room (Zubat, Ekans): 40, 40 (80)|551
Half a Geodude (Switch out from Charmander to Mew and use Water Gun): 15|566
The Route would look something like this:
1. Use the same route until after delivering Oak's Parcel.
2. Defeat a Rattata for Exp. and Special EV.
3. Defeat Weedle Guy.
4. Buy one Poke Ball (For Mew)
5. Fight the First Bug Catcher, get Ember one Level Earlier.
6. Defeat all mandatory trainers and fight the Lass instead of the Bug Catcher. The special EV of Charmander should be 330.
7. Defeat a Level 5 Spearow for Special EV.
8. Pick up TM12 and Blackout Trainer Fly on the Bug Catcher. It should be a Level 10 Zubat with 0 DV Speed (so Charmander can hit itself in confusion first).
9. Defeat 2 Paras to increase Special DV.
10. Defeat Rocket in Ether Room and pick up Ether. Special EV increases.
11. Encounter a Level 12 Clefairy with 21 Special, and run away.
12. Catch Mew
12.5. Teach Mew Water Gun.
13. Encounter a Geodude, switch to Mew, use Water Gun.
14. Walk to the green ladder here
15. Swap Mew with Charmander and defeat 3 Geodudes. Mew should be Level 10 by then.
16. Fight the closest Rocket, use Transform, Raticate uses Hyper Fang but doesn't defeat Mew.
17. Swap Tackle with Hyper Fang, have Raticate make Mew faint, switch in Charmander, have Raticate make Charmander faint, death warp to Poke Center.
18. Deposit Charmander and walk back into Mt. Moon.
19. Win.
Or another route, with these minor changes.
- In Pewter Poke Mart, buy a Poke Ball and an Escape Rope
- Don't pick up TM12
- After you get Mew, switch Mew to the front, encounter a level 8 Geodude in B1F, switch out to Charmander and defeat it with Ember.
- Defeat 3 Level 12 Zubats.
- Escape rope out.
- Deposit Charmander
- Fight the Clefairy Lass, use Transform, swap first and third move.
- Defeat Clefairy.
- Use Cooltrainer move.
- Win.
If anyone knows any possible route improvements (other than these), don't hesitate to suggest.
I havn't routed this myself, yet, but you seem to require a lot of wild encounters to boost your EVs. Maybe going for Special EV of 0x136 instead of 0x236 is faster (ways to save EV are e.g. catching a wild as EV drain and/or losing to rival).
Other smaller route variants are probably not that important for now, first you need to make sure the code execution works at all. There are so many things that may screw up your code execution, some of which I didn't even mention in my submission text (like the position on the map is not arbitrary). At least you'll likely need a different means of manipulating register h than me, the name I chose to do it was dependent on the register values and they are probably different. When you have the conditions for the code execution figured out, then you can start routing with these constraints in mind. Also, my way of getting the byte where I wanted it is surely by no means the only one, maybe looking for a different code execution approach (maybe with less setup time) is worth while.
I may start looking into alternative code execution strategies myself in the near future, now that there is a good reason to go back working on this game, but first I want to try a bit more on the arbitrary code execution in Viridian Forest. If it's possible to make that work, it's way faster and figuring out this route may become obsolete. I managed to get the PC into RAM ($d808) now, but it seems impossible to avoid crashes on a 0xFF byte down the line.
Then you would fight a wild Weedle, a Pidgey later, and catch a Clefairy to deal with the Rocket you need to fight. It may be faster, but I don't count on it. Switching also takes too long.
I was thinking that it may be would be faster to directly execute the Hall of Fame. I may look into it.
i'm not sure which topic to choose to ask this but here it goes:
Is it possible to ditto glitch with special 251,capture the glitch monster and send it to GSC to get a celebi?
I want all good TAS inside TASvideos, it's my motto.
TAS i'm interested:
Megaman series, specially the RPGs! Where is the mmbn1 all chips TAS we deserve? Where is the Command Mission TAS?
i'm slowly moving away from TASing fighting games for speed, maybe it's time to start finding some entertainment value in TASing.
Joined: 5/9/2007
Posts: 93
Location: The Netherlands
Hey guys,
After spending god knows how much time to try and figure out a good way to finish Pokémon fast. I've tried different stuff like JACRED and I was also able to use the Super Glitch to trigger the glitched menu, but then MrWint's Item Underflow TAS was published and I had to change my plans lol. I had already started a segmented run but luckily I was still stuck on catching an Ivysaur in Viridian Forest so I only had to change my strat a little to include Nidoking and go from there.
A few days ago, I finally finished the run and I'm in the progress of writing up the comments so that I can send it to SDA. The run has some mistakes here and there, a few because of stuff found later (after I had already done said segment) and some because honestly, I was a bit lazy and it was only a second lost (I'm guessing I lost at max like 5-6 seconds total). I finished in 0:39:xx.
But while all that is going on, I've frequently wondered wether the newest published run is possible for a segmented, non-TAS run. Or even a run like you guys are mentioning right now.
I have a Mega Memory Card so redoing segments wouldn't be too difficult. Aside from the rediculous luck required, would it actually be possible if you saved inbetween?
My (edited) run btw, which is basically a tweaked TAS route lol:
http://www.youtube.com/watch?v=6OL1sOvFgN0
Joined: 5/9/2007
Posts: 93
Location: The Netherlands
Don't you mean non-TAS? =P
It would be very annoying yes, but not undoable. =P I'm not too worried about that. I'm more worried about the rest being possible.
With the Mega Memory card, I can even reset for Charmander's DV's while keeping the correct Trainer ID. Before I decide to do all this though, I have to be sure that what I'm doing is actually possible. Testing on the emulator would be easy though, but I'm not sure how well that would translate to the real cart.
^Actually wersterlobe cracked out a 42:44.
http://www.youtube.com/watch?v=47dksDoavWw&list=UUO_0coJ_V8PFPaXRtLlHNhw
However he didn't submit it to the site because he doesn't believe it to be an official category. He only made the run because he was pissed off with people using a subpar route.
Joined: 5/9/2007
Posts: 93
Location: The Netherlands
Well, he was right though, the other runs were pretty bad. The only thing I dislike is that it seems I copied his route or something, while I had routed the game long before that. Oh well, nothing to do about that. My fault for not finishing the run I suppose, although running segmented takes so much more time in comparison.
Question:
According to the Pokemon Speedruns Wiki, in Gen I, the Thunder Badge raises Defense while the Soul Badge raises Speed; this is the opposite of what almost everywhere else (including the game itself) claims (link). The page explicitly mentions that "the game is wrong".
I'm sure this game has been disassembled to the ends of the earth by now, so can anyone verify this (with actual disassembly if possible)?
On a side note, the same page states that being hit by a stat-lowering move causes any Badge boosts that might apply to other stats to stack; this has been verified directly. My question is, according to this very reputable site, if the Badge boost stacking is true, then burn and paralysis drops should also stack. That is, if a Pokemon is burned (cutting its Attack in half) and its Defense is then lowered, the burn drop should stack causing Attack to be halved again. Can someone verify this part?