Posts for primorial_soup

1 2
10 11 12 13 14
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
TAS: * Most often plays a game from start to completion as quickly as possible. * Should be as entertaining as possible. Much of the entertainment comes from speed alone. Things that could be more entertaining are often avoided if they slow down completion time by more than a few frames. * Submissions slower than existing runs rarely, if ever, replace the existing run. Console runs: * Most often plays a game from start to completion as quickly as possible. * Should be as entertaining as possible. Much of the entertainment comes from speed alone. Things that could be more entertaining are often avoided if they slow down completion time significantly. * Submissions slower than existing runs rarely, if ever, replace the existing run. Both are speedruns, albeit fundamentally different in execution. Petitions to change either the meaning of TAS, or the name itself often remind me of the gay marriage / civil union debate. In the eyes of the court, they are exactly the same. Changing the name is merely an appeasement to a perceived majority, and doesn't change its nature, or make it simply disappear. So much to that subject. I took the time to read through the entire topic on the m2k2 forums. Surprisingly (or perhaps not surprisingly) few members there agree entirely with the original post. This was perhaps the most inspiring I read:
MonsterERB wrote:
It is undisputed that some people have viewed a tool-assisted speedrun and, not knowing any better (or being too lazy to find out), have assumed it to be a console run. It's also quite probable that some people may have viewed a skillfully done console speedrun, and wondered whether it was tool-assisted or not, due to the lack of any marker or disclaimer. ... Hopefully we (meaning ALL of us, whether you're pro-console, pro-TAS, or neutral) can agree that any instance of such confusion is something better avoided. Anyone who takes the time to download a gaming video and watch it deserves to know how the video content was made. Was it a tool-assisted emulator run? Console run? Done with Gameshark/cheat codes? Using a cracked version of the game? Single-segment, or multi-segment? And so on. In my opinion, it would cost the console speedrunning community NOTHING to produce a splash screen or short video prologue stating, "This run was made in real-time on a Nintendo Gamecube console, using no cheat codes. The player attempted each segment of the run multiple times to achieve the fastest possible completion time. Thanks for watching." Whether or not console is majority, TAS is majority, or it's dead even... immaterial. If such a message helps avoid any confusion for a few speedrun viewers, then I say some sort of marker for console runs is a positive thing.
Definitely a step in the right direction, if avoiding confusion is the goal.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
SXL wrote:
just one question : would it be possible to hit the first boss with both the player and its shadow ? would it be quicker that by the shadow only ?
Now that I think about it, if I were to jump just before the boss becomes vulnerable, I should be able to hit him a few times with the main character as well as the shadow. But afterwards, I don't think it's possible. As soon as I move, the shadow comes down to where I am, and stops dealing damage. Were I to continuously jump, I might be able to get a few hits in with both the shadow and the character, but I'm not sure it would outweigh the time when no damage was being dealt. Another big consideration is lag. The boss regularly shoots little fireballs at you, which can be destroyed with the sword. I currently have the shadow and the character placed to destroy these as soon as possible, which minimizes lag.
SXL wrote:
also, on a general matter, could you use the shadows more extensively ? ;)
I really am trying, as much as possible. In Stage 1, I think I did a fairly good job. Stage 2, on the other hand, doesn't have much action at all. I tried to spice it up by jumping ridiculously high off the branches, but there just isn't a whole lot that can be done. The boss battle is rather quick though, mainly due to having 2 shadows.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
Crazy... I've never had sync problems before, but suddenly it started desyncing for me as well. Setting the date back fixed the problem. Crazy I tell you!
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
Ouch, randomness. I'm currently trying to manipulate the explosions after the second boss. That's right, the "you just killed the boss" animation. There are a certain number of explosions that go off before the next level starts. It seems, however, that the intervals between them are completely random. It's so extreme, that doing something as simple as moving one pixel to the right before the explosions start can cause a variance of 100 frames or more. I'll need to do some experimentation to see if there is a theoretical minimum time use, and how to manipulate them. Fortunately, the first stage doesn't suffer from this, as it seems to be timed with the descent of the statue, and not just the explosions.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
A very interesting concept for a game (let's send a marine off to some island and see if he survives...), but a good run nonetheless. The edge boost trick surely saved a lot of time, and the boss battles were over ridiculously fast. "You have survived your mission. The End..." Best. Ending. Ever. Voting yes :)
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
I actually redid this stage this afternoon. I found that the pre-boss sequence wasn't optimal (I wasn't killing some of them quickly enough, and causing a delay). So I used a new strategy, which is using a powered up Sickle. I saved 87 frames from this alone, and it's quite a bit more entertaining to watch. I also saved 44 frames from the boss itself, from better placement of the shadow. The second test run, 131 frames faster than the last. I've tried to utilize the shadow as much as possible. If you go frame by frame through the section where I get the shuriken power-up, there's not a missed shot, either by me or my shadow. The new pre-boss section utilizes the shadow a lot more than the last one did as well. EDIT: The above WIP now has progress through stage 2.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
I decided to give this game a shot. In a lot of ways, it's kind of like NES Batman, except that the default weapon is a sword instead of a fist. My Stage 1 WIP can be found here. The rom I'm using was Labeled Ninja Spirit (J).gb, although I'm not really sure if it actually is Japanese, because most everything is in english. A little bit about the game. The game has seven stages, each with a boss to defeat at the end. There are four weapons: Sword, Shuriken, Bomb, and Sickle-and-Chain. Each weapon can be powered up by having the weapon selected while grabing the power-up. If the weapon it already powered up, one of the other weapons will be powered up instead. Power-ups only drop from certain enemies (in stage one, they are the flashing enemies hanging from the walls). Moreover, where they appear and which power-up they drop seems to be hard-coded (think Mario Bros. question mark bricks, in enemy form). Another power-up is a shadow ninja, which follows your path exactly and does the same moves you do. There is another powerup which destroys all enemies on the screen for about three seconds. The first part of the stage is pretty straight forward. I make sure to power-up both my Sword and my Shurikens, and to get the shadow ninja. At the end of the stage, there are enemies jumping out of well-like structures. You don't even have to kill any, just wait for a certain amount to appear. However, the game only allows 3 to be on the screen at a time. By killing at least one before a fourth wants to appear, you can make it progress a lot faster (about 300 frames faster than not killing any at all). As for the boss battle, I realize the method I'm using is rather boring, but I guarantee that it is the fastest possible. The only part of the statue that is vulnerable is the head region. I'm actually not even doing any damage, only my shadow is. Every frame the the statue is white, it is taking damage. Were I to jump, or move at all, my shadow would move down to where I am, and would stop dealing damage. Important to note, is that this is the only boss battle like this (no other bosses are stationary). I'd like to get some feedback as to whether this game is interesting enough to continue TASing. Since it's only seven stages long, I can't imagine the final movie running much over 15 minutes.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
This run shows a lot of improvement over your last run, especially the battle scenes. The leveling technique for Geodude also looks a lot cleaner now, without the switching back and forth. One detail though. Around frame 14200, you talk to Mr. Pokémon two dialogs boxes longer than you need to (the "I'm depending on you!" dialog comes up three times...). Best to catch things like that now instead of when you're further along in the run, I suppose.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
Greatly improved as well ;)
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
xebra wrote:
As far as I can tell it's only important that the last one be as near as possible.
I think you're probably right. I'll do a small analysis to confirm this when I get home. EDIT: The following is a table of when a spell was realeased, when it hit him, and the difference between the two. Release is defined as the frame it appeared on the screen, and a hit as the frame Carock turned blue.
spell  release     hit  diff
----------------------------
   1:   112858  112866     8
   2:   112907  112913     6
   3:   112956  112964     8
   4:   113005  113097    92
   5:   113054  113105    51
   6:   113103  113146    43
   7:   113152  113195    43
   8:   113201  113209     8
As you suggested, a new spell is released every 49 frames, regardless of the user's actions. I apologize for making a false assumption. However, the last spell could have been two frames faster, as demonstrated by the second (he was partially inside the spell when he blocked it), but this is hardly anything to argue about.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
Maza wrote:
Since some of us don't know much about hex(editing), maybe you could tell us what those values mean? ;)
Those are the DV values, the 'stat genes' for the pokémon. The first half byte (one hex character) is the Attack DV, then Defense, Speed, and Special (both special defense and special attack use the same DV). My advice to you, is to keep rolling until you get both max Attack and Speed. If you don't, I guarantee that you will kick yourself at least once for it (a pokémon being 1 HP outside the manipulatable damage range, being slower against a pokémon that you were faster against in a test run, etc.). Keep one savestate before you enter the building, one right before you exit, and one right before you enter the grass. This should give you a lot of opportunities to roll. Actually getting the pokémon you want to spawn is a bit trickier, as you probably noticed. I did a small analysis for my Mew run (when I had to catch Abra), which can be found here: http://tasvideos.org/forum/viewtopic.php?t=2352&p=69323#69323 You might find it useful.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
I hate to be the nay sayer, but I voted 'meh' anyway. I enjoyed Arc's run (although admittedly, I haven't watched it in a few months), and this run is faster, but somehow, it just doesn't seem optimal. The very first thing that made me scratch my head occurred less than one minute into the run. At frame 2323, you remain motionless until frame 2356, and full 33 frames, while you wait for an enemy to move to the side. Later on in the run, you manipulate the pathing countless times; could this not have been done here? Perhaps by waiting one or two frames to exit the castle? After this I began to question other things. Every time I saw you bounce backwards off of an enemy, or a breakable brick, I had to ask myself if that was really optimal, although I don't know enough about the game physics to say otherwise. Then there were boss key grabs that were visibly not optimal. The next big thing that bothered me was the Carock fight. I can understand your wanting to lessen the monotony of a battle which is more or less brainless. Jump around, dance to the music, play with the enemies. But when a spell is cast, I just don't feel that there's any good reason to be less than optimal. I very much enjoyed the rest of the boss battles, which were all insanely fast. I also enjoyed the trick to do the downward thrust multiple times to kill enemies quickly without losing momentum. The run is great, don't misunderstand me, but I think it could be better.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
Bag of Magic Food wrote:
Do you think you can shave off 12 more minutes and make it a Ninety Minute Blitz?
If someone had told me 4 months ago that 1:42 was possible, I would have called them crazy. But 1:30? No. No! At least not without a whole ton of new tricks. Because nearly every battle in the entire run is OHKO, this run is nearing a theoretical lower bound. Whole sections would need to be chopped out in order to bring this time down any more. Possible Candidates: - Find a way to glitch around Snorlax without collecting flute (or, altnatively, glitch a flute into your inventory). If this were possible, it would save around 7 minutes, because Poké Tower could be skipped entirely. - Find a way to glitch around fake barriers in Victory Road. This would only save around 2 minutes, from not having to shove rocks around. I don't see any other real opportunities.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
DK64_MASTER wrote:
I'm kind of disappointed that Mew never came up, which was one of the main selling points of the previous movie, but this movie is great too!
Mew is cute and lovable, but Gyarados is a beast! Especially when glitched to have his ending moveset at level 7. Although the previous movie could have been improved a little, it would have been no where near as fast as this one turned out to be. This run is also a lot more indicative of the capabilities of TASing. By an experienced player, a Mew can be glitched real-time without much trouble. Glitching a Gyarados, however, would be nigh impossible in real-time, regardless of skill. The reason is that one needs to be able to walk nearly 100 steps through Mt. Moon (after the battle with the Lass, all the way to the lower level, where Gyarados spawns) without encountering a single random pokémon. If one were to have a random encounter, Gyarados wouldn't spawn, but rather a different pokémon. Because no Repels can be purchased this early in the game, the odds of being able to do this are negligibly small. What makes this run so fast? As soon a Gyarados is caught, the One-Hit-KOing commences. In fact, he performs at level 7 OHKOs that a level 20 Charmander couldn't even manage. The two hit kills Charmander needed in Mt. Moon and Nugget Bridge, and all the time Mew needed getting up to level; Gyarados needs none of it. Plus, glitching him is a lot faster as well. The Trigger Trainer has two grass-type pokémon, which are trivial for Charmander (instead of two water-type pokémon in the Gym), and there's less backtracking. He doesn't need to learn any TMs either. You'll notice in the middle section I picked up 19,000 frames. This is how.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
I like this game. I was playing around unassisted, and I observed a few things: -You may only have up to two shadow clones. -Shadow clones stop moving exactly when you stop moving. This means that sometimes you can make them stop in mid-air. -Shadow clones attack exactly when you attack, even if they are stopped in mid-air. -Attacking while running causes you to stop. Attacking in mid-air does not. -Jumping multiple times does not seem to slow you down. -Some bosses are ridiculously hard to beat without taking damage. However, by using the 'bubble' weapon upgrade, and by carefully placing the shadow clones, it should be possible to attack them constantly without getting hit. Since the in general case, avoiding enemies, and even attacking enemies doesn't slow you down any, I would vote that if this game were to be done, it should be done in arcade mode.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
Bladegash wrote:
Is that time intentional? With the whole pi - 3 thing and all?
I was hoping to break 1:42, so in that regard it is... that it happened to be 1:41:59 was just coincidence.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
Yes, I am still working on this. The new WIP now has progress through the last gym, including the rival battle directly afterwards. Despite having to change a lot of things in this section, it is still 16908 frames ahead of the previously published run. Which means that I lost a total of about 870 frames since the last update, most of which were a result of the slow(er) final rival battle. For convenience, I have also included save states numbered 01-08, which correspond to the different gyms, so you don't have to watch the entire hour and a half in one segment. A few notes on this section. Bite was, as speculated, not strong enough to do Fuschia Gym immediately. The was unfortunate, because I didn't want to teach Strength without Surf, and I wanted / needed Hydro Pump for the Gym. I attempted doing the office building first, but to no success. Although I was able to get through alright, I used all of my Hydro Pumps doing so, which defeats the whole point. So, I did in fact end up having to teach Strength without Surf. To mitigate the loss a bit, I switched the Surf HM up to the top while learning Strength. This had a nice side effect. Namely, that I was able to do Blaine before Sabrina without losing menu time, because the item menu cursor was up near the top when I needed to Escape Rope out of the Mansion.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Post subject: Re: some SMB TAS ideas...
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
minglw wrote:
-- a speedrun grabs every flag pole from behind.
This would be very similar to the warpless run, only slower at each flag pole (is it even possible to grab every flag from behind?). I think the gimmick would get old pretty quick.
minglw wrote:
-- a coinless speedrun, I know this has been mentioned but I don't see any movies of it yet.
This would again be very similar to the warped run, only slower in certain places when avoiding usually unavoidable coins.
minglw wrote:
-- a speedrun that gets every coin in every level.
This actually isn't possible (because of pipes, etc.). Getting the maximum number of coins for each level might be interesting, but only if glitches could be abused to get more coins than should normally be possible.
minglw wrote:
For Super Mario Brothers 2 (Japanese version -- aka the lost levels) patched version where the extra levels are accessible: -- it would be nice to see a TAS that goes thru all levels (1-9, A-D)
This I would actually find interesting to watch, mainly because I've only played this game a few times, and haven't seen all the levels. Major question: do some of the tricks from SMB1 carry over to this game, and if so, how many and which?
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
Much more appropriate to the run as well.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
Guybrush wrote:
What's wrong with my suggestion?
Pixilation. From those suggested, I also find FODA's to be the best.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
... It's a prune.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
"At the heart of every great legend, there lies a woman." Apparently, this is even true for pinballs. Although the game itself isn't awe inspiring, it's short enough to remain interesting. I liked how you juggled the flippers up and down during pauses: enough to look cool, but yet not so much as to be repetitive. I do have one question though. After the first level, you take a break to 'steal' something. What was this section all about? EDIT: Nevermind, I should really read the entire submission text <_<;;. Voting Yes :)
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
Bag of Magic Food wrote:
FractalFusion wrote:
Note: Delete .sav file before playing.
I did, but it keeps regenerating as the movie's playing! I even deleted it right before that Rattata encounter you weren't supposed to get, and you still got it!
I found that I also had this problem... but only if I held spacebar through that section. Very strange indeed. Letting it play at normal speed seems to work fine.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
FractalFusion wrote:
It would be nice if you could you tell me where I can find the stat DV's, as well as other important variables like enemy HP.
Although the memory locations weren't exactly where there are in R/B, they were surprising close, and pretty easy to find if you know what to look for. All of the following locations are in the upper RAM (0xFF80): D0F5: DVs of current opponent. I've noticed that the DVs for the rival are DDDD, which is quite a bit higher than 9888 for all other trainers. This location is good to know when encountering wild pokémon which you wish to catch, such as Geodude. D100: Stats of current opponent. This is the main address to use while battling (as you can also see the amount of damage, as below). First is the current HP, followed by total HP, attack, defense, speed, special attack, and special defense. Each value is two bytes. D142: Amount of damage current attack is about to do. Damage is rolled directly after the entire "- used such-and-such" dialog is displayed. A very nice thing about this is, one frame before the actual damage is calculated, the maximum damage possible is also stored in this memory location, which can help you to plan attacks and to know what exactly is possible or not. DA30: Start of record of pokémon in your party. Each pokémon has 48 bytes (3 lines) worth of information. The only thing important to know is the DVs for rolling your starting pokémon, which are at DA3F and roll over to the next line DA40.
FractalFusion wrote:
By the way, what is your method for manipulating critical hits in R/B?
The goal of my method is such: never to wait more than 10 frames for any manipulation. How exactly this is done depends on a number of factors: whether I am faster or my opponent, whether I need a max (or near max) critical or if any crit will do, whether I need a max damage normal hit, etc. This is the procedure for producing a critical hit when you are faster (the base case, so to say): 1. Before the battle, keep a save state at the last dialog button press (usually, either "- wants to battle!" or "- gained so many exp. points"). 2. When selecting an attack, try the 11 possibilites waiting 0-10 frames. 3. If you didn't get a critical in those 11 attacks, return to the previous save state, and wait one frame before pressing A, and then try again (this time only waiting 0-9 frames, as not to surpass the 10 frame wait limit). Repeat these three steps until either you get a critical hit, or you've gone through all 66 possibilities. In practice, I've found that crits are about a 1/20 chance, so in most cases you will have found one. If you didn't however, how to progress further depends if you need a max (or near max) crit or not. If you do, expand this limit to 15 frames, and go back through all of the new possibilities again (once you've found a crit, you can then manipulate it for damage by changing the duration of the button press). If any crit will do, it is often possible to manipulate a normal hit into a critical by adjusting the duration of the button press. This is a very long and tedious process however, as each of the 66 generated attacks has about 20 or so active button press durations. To cut this down a bit, I usually bring it down to only waiting 5 frames (21 possibilities), then up it to seven (15 more), and then finally up to 10 (30 more, although truthfully said, I've only ever found myself in this situation once). Good luck :)
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Experienced Forum User, Published Author, Player (87)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
FractalFusion wrote:
I hope pressing ABAB... to dispose of dialog is optimal.
As long as it doesn't slow down the text (from three characters every three frames?) or otherwise cause the game to pause, it should probably be fine. A few quick questions/comments: 4930: I've noticed that initiating coversations from straight on in Red/Blue saves two frames over having to turn. You could move one step right before talking with Prof. Elm. This would also put you two steps closer to the table, which would save you ~36 more frames when you have to pick up your Totodile. 6360: It seems that starting stats are rolled before you name your pokémon instead of afterwards, which is unfortunate because it lowers your window for manipulation. The starting stats you rolled were E4FC (14/15 attack, 4/15 defense, 15/15 speed, and 12/15 special). Overall pretty good stats, but would it be worth it to trade a little speed for a higher special (if at all possible)? 7400: Would moving one step to the left before the Assistant stops you save any time? It would cost you an additional step, but it would save him two. He seems to path faster than you, so it would probably only save a few frames, if any. 17000: Battle with rival: is manipulating a growl miss faster than letting it succeed? Or doesn't G/S have the 1/256 miss chance as in Blue/Red? 23100: Assistant pathing again. 26300: The DV's of the Geodude you rolled are FCA0... great attack, but not so great speed and no special. Or doesn't this matter? 31800: No critical hits? Tail whip miss faster than landing? 39000: Only one pokémon. Is Rage the fastest choice? I must say I was quite surprised by your method to 'power-level' your geodude to level 8. Definitely a good strategy.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
1 2
10 11 12 13 14