Posts for MrWint


1 2
5 6 7
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
Alright, I cancelled the submission, stay tuned for the new version coming in about 1-2 weeks. Hopefully it will last longer than this one ;)
grassini wrote:
silver version this time?
Indeed, but probably not for the reason you'd expect.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
Quick update: I started working on a new version that incorporates some possible improvements FractalFusion showed off in his run (and some others as well). The route is mostly done, the expected time gain over FractalFusion's run is ~10-15s (will create a detailed analysis in the new submission text). I made progress on it faster than I expected: unless something unexpected screws my run over, I anticipate to be able to finish it next week or at least the week after that. That raises the question regarding what to do with this submission, since it's still pending. I'm considering just cancelling this submission to spare the judges from spending time evaluating and publishing a run that is going to be obsoleted within a week. I'd like to have a site staff's opinion on this though, I'm not sure whether this is the correct course of action.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
Having created a run of this myself, I feel I can appreciate many small things you did in this run that may go unnoticed otherwise. I especially like how your bootstrapping program works, I thought so hard about how to build an ending condition into the loop in my program when the answer is you just overwrite it. It may be possible to create an even shorter one though, e.g. the "or a" at $d8c8 seems to be unnecessary to me.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
I was away for a few days, and I totally mised that. I guess the good thing is this submission fulfilled its purpose, the bad thing is it's outdated already. Having none of the runs published would be a rather unsatisfying position, though. I guess there's work to be done, seems I get to come back to this game sooner than I hoped I would... Not in this submission, though, the additional research necessary would drag this submission out for an unreasonable amount of time (I'm not planning on rushing a prospective new submission for this game). I'll leave it to the jury to publish this run or reject it and wait for some better version.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
ALAKTORN wrote:
thatguy wrote:
What's happening to this submission? It seems to be in limbo while improvements are being discussed.
well it certainly shouldn’t be published considering FractalFusion’s run is faster… I don’t know if MrWint is working on improving it, he hasn’t said anything about it I think
I'm not working on this submission anymore, I consider the updated version I provided the final one (for this submission anyway). I guess I havn't stated that explicitly, I'm sorry for the confusion. Also, I'm not sure which run of FractalFusion you are referring to, the last thing I heard is that he planned on doing a TAS of this game and is doing some test runs. I'm sure this won't be the end of the line for this game, anyone is welcome to TAS it theirselves, or bring in ideas on how to improve the route (in a way that was part of the point making it, giving the game more attention).
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
Sanqui wrote:
I don't really have any comments about this run, but I think a route which would pass on naming the boxes and do some extreme RNG manipulation to get down DVs and a trainer ID which would spell out a bootstrap would be faster.
It might be possible to do it soley using the Pokémon's stats, but I doubt it would be faster. Changing the box names costs less time than catching an additional Pokémon, and with only 2 Pokémon (and an egg), there seems to be not enough manipulation potential, especially that early in the game, to spell out some useful program (without losing too much time).
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
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.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
luckytyphlosion wrote:
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.
I'm not sure what your conclusion is here, but my values are definitely correct, I checked the RAM after beating the trainer.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
Chamale wrote:
I did get the game to do something unusual with an invalid text ID, but I'm not sure it can be used for arbitrary code execution. Here is the .bkm file that gets to that point. I'm not sure why the stored text ID isn't working in Mount Moon, but I was able to use it for other dialogue in Viridian Forest. It appears that the anomalous dialogue won't come up even if I return directly to Mount Moon, maybe something is resetting the value to 0 on its own. I'll do some testing and try to find a way to use this bug to pick up a Rare Candy.
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.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
luckytyphlosion wrote:
Since the new TAS won't reach RED (Rival) in Cerulean, I've decided to break down the data of the level 9 Metapod. (4th Pokemon of one of the Bug Catchers) Index No. - 7C Current HP value - 00 00 ??? - ?? (It doesn't say on datacrystal) Status Effect - 00 Type 1 - 07 (Bug) Type 2 - 07 (Bug) Catch Rate - 78 Move 1 - 6A (Harden) Move 2 - 00 (None) Move 3 - 00 (None) Move 4 - 00 (None) Trainer ID - 2E 5E Total Experience - 00 01 A3 HP EV - 00 00 Attack EV - 00 00 Defense EV - 00 00 Speed EV - 00 00 Special EV - 00 00 Attack/Defense IV (Combined as one byte) - 98 Speed/Special IV (Combined as one byte) - 88 PP of Move 1 - 1E PP of Move 2 - 00 PP of Move 3 - 00 PP of Move 4 - 00 Level - 09 Total HP - 00 1D Attack - 00 0A Defense - 00 10 Speed - 00 0A Special - 00 0B As raw data: 7C 00 00 ?? 00 07 07 78 6A 00 00 00 2E 5E 00 01 A3 00 00 00 00 00 00 00 00 00 00 98 88 1E 00 00 00 09 00 1D 00 0A 00 10 00 0A 00 0B
You miscalculated slightly, the correct values are 7C 00 00 00 00 07 07 78 6A 00 00 00 2E 5E 00 02 D9 00 00 00 00 00 00 00 00 00 00 98 88 1E 00 00 00 09 00 1D 00 0A 00 10 00 0B 00 0A There is a problematic D9 (reti) byte, seems the trainer must be avoided.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
luckytyphlosion wrote:
FractalFusion wrote:
A wild Pokemon that can poison the player. Weedle (Silver, day time), or Spinarak (Gold, night time).
Death warping will be interesting, but the only place I can think of is from Falkner's Gym to the Violet Pokemon Center.
There are other opportunities, like during the Mystery Egg errand. Not sure what the game does when you try to death-warp past the Cherrygrove rival directly back to New Bark. (EDIT: tested it, it drops you off in Cherrygrove, would save time nonetheless, just not for this direction)
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
Zeupar wrote:
I'm curious about one thing, though: Why did you delete the following sentences from the submission text when they still apply? - "Contains speed-entertainment tradeoffs" - "Also, using names other than "A" costs some frames, but naming everything in the run the same does not exactly add to the overall entertainment value."
While the naming tradeoff still applies, I deemed it not worth mentioning anymore, the only reason I mentioned it in the first place was because I had a Speed-entertainment tradeoff paragraph anyway. On its own, it costs no more than 10 frames throughout the run, which is insignificant.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
Chamale wrote:
against the Scyther, you 2HKO it without crits, doesn’t that mean that you could OHKO with a crit, considering crit is 2× damage? or does the boosted Rage attack not activate on the first turn, but only in the second, so in the first turn you can’t do as much damage as in 2 turns?
In Gen 1 and Gen 2 crit is slightly less than 2x damage, so I don't think it would be possible to get the OHKO with a crit there.
The crit mechanics in Gen I and II are different, while Gen I doubles your level for a crit, Gen II doubles your damage during the calculation. However, after considering the crit, 2 is added to the the final resulting damage, that means max crits are 2 damage less than double the amount of max non-crits. Additionally, You get a badge boost of 9/8 after beating Falkner, which only applies to non-crit damage (crits always use the original, unmodified stat for calculations). In the Bugsy fight, a max Rage crit is 40HP, while a max non-crit is 25, and Scyther has 50 HP. Zubat's case is similar.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
I finished the updatd version of this movie: http://tasvideos.org/userfiles/info/13184606113877724 It seems I can't update the submission file myself, I'd be great if someone can do that. I'll be updating the submission text to reflect the changes, though.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
I won't change to Silver in this submission, because I simply don't want to risk delaying it even more. I'm reasonably certain that the key features I need as well as the mechanics and the memory addresses are the same in Gold and Silver, but if anything goes wrong, because of a version difference I didn't anticipate (whether it is a good or a bad one), it could break my program and I would need to investigate and change it to cope with it, which could cost a lot of time. If I ever make another run of it, and I have more time to investigate and tinker around, I'll definitely look into using Silver, but at the moment I'm just trying to get an updated version going.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
Correct, the 3 second delay is used in make the in-game time jump from 25 (0x19) min to 26 (0x1A) min. 0x19 is ADD HL,DE, which would corrupt my values, whereas 0x1A is LD A,(DE), which is totally fine. If you look at $DA43, you can see it changes right when the move effect is executed. I can't tell you what is going wrong with your code execution, it could be many things. The easiest way to find out is to look at the assembly that is actually executed (BizHawk's Trace Logger does a nice job), and track down why it doesn't go as expected. You can compare with the trace log I attached to my submission text for reference (though your setup will likely be different, many of the things I did were specific to my setup, like the trainer name).
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
Chamale wrote:
I did a quick test and thought it was a couple frames faster from the top, I guess I was mistaken.
Or maybe I was just wrong (it wouldn't be the first time lately (><)), I guess Werster had a reason to believe talking from behind is faster, it needs more extensive tests to be able to tell conclusively. About the text boxes: I'm answering from memory here, and I never seriously looked into that feature of Trainer-Fly, so don't rely on this too heavily, but the way it works is basically that it stores the text box to play when engaging a trainer, to play it when he finally walked up to you (not sure what the address was, but it should be reasonably easy to find it). When trainer-flying, you overwrite the value when fighting other trainers or do stuff like talking to NPCs. After a battle the value is reset to 0, which opens the main menu instead. If you want any specific text box, you would need to manipulate that byte to be the text you want. If you're adventurous, you might even try to get an invalid text ID in to setup arbitrary code execution, but that's just an idea (I might acutally look into some time), it will probably not work that way.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
My currently published TAS uses this strat, I even pointed it out in the submission text. Talking to oak from the side is even faster than from behind, I believe it was 2 frames, but not exactly sure anymore. Also, it saves only about 15 frames compared to talking to Oak from below (3 extra steps, but 2 less steps from the rival). Also, grats to Werster.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
luckytyphlosion wrote:
I've noticed this effect of the Blackout-Trainer Fly glitch. If you perform a Blackout Trainer fly when you haven't fought a trainer yet, then a (glitch) trainer identical to the one you performed a trainer fly on. If you have, then a glitch trainer won't pop up and the effects of a trainer fly (except a and start button) will still be present.
That's not exactly correct. The important factor is whether the trainer needs to walk up to you or not. If he does, then you get the usual Trainer-Fly effects (incidentally, using a normal trainer fly the trainer must always walk up to you). If he doesn't, then you can't enter the area again without starting the fight, and if you havn't fought any Pokemon inbetween, you will fight the exact trainer to ran into. The fact that you can walk into a trainer-fly area without triggering the encounter right away is due to the fact that the game thinks you are still in the "trainer walks up to you" sequence. If there is no sequence, it won't work properly. I only learned this by tinkering around with it now. I knew about this kind of trainer-fly when I created my movie, but I found it unusable because it seemed to always start the fight right away, so I couldn't reach the lower floor to encounter a clefairy (which is the first chance of getting the right DVs for Mew). With the new knowledge, it is definitely possible to beat the game already in Mt. Moon, which should be a few minutes of time saved.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
FractalFusion wrote:
I forgot to mention. There is no rule that Rival's Chikorita has to use Growl first and Tackle second. Chikorita could use and miss Tackle both times. It also seems that a Tackle miss is maybe 3 or so frames faster than a Growl hit. But I could be wrong.
I know, the rival can use any move at any time. I used the same moves to be able to compare in this example. Also, Growl hit seems to be a frame or two faster than Tackle miss to me. Anyway, I guess it doesn't matter between those two, whatever is faster will depend on the situation. But they're much faster than Growl miss or Tackle hit in any case. The Cherrygrove Rival fight in the updated movie will use 3 crits (7HP) instead of 2 crits and a non-crit btw. The necessary luck manipulation to get 2 max crits and and a max non-crit plus two enemy tackle misses (or growl hits, but then you are committed on the order of your own attacks) was too much and taking the additional crit text box turned out to be a couple of frames faster overall. It's hard to decide to go for it, since you can theoretically do the firght faster, just not from the position I was in. It's still 26 frames faster than the original fight.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
Ok, I did an actual comparison now, not by calculating the frames for one move (which I failed miserably the first time), but in a real-world example by using the Cherrygrove Rival with different possible hit/miss combinations:
    - Growl miss, Tackle miss: 19208 (current strategy, reference) - Growl miss, Tackle hit: 19242 (+34 frames, e.g. way slower) - Growl hit, Tackle miss: 19194 (-14 frames, e.g. faster) - Growl hit, Tackle hit: 19230 (+22 frames, more or less the difference)
These results are dependent on the length of the move animation of course (i.e. the type of screen jitter), so they may differ slightly for other moves, and the actual numbers might be off by 1 or 2 frames because of luck manipulation, but the differences are significant. That means I will reconfigure the fight goals and generate a new run. Of course I will fix the other two silly mistakes as well while I'm at it. This might take a few days to compute, so it would be great if the judgment of this submission could be delayed until I can provide an updated version. The route shouldn't change at all because of this.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
Mr. Pwnage wrote:
If you taught Cut to Bellsprout instead (since it has vacant move slots), does Croconaw still have the Grimers down in 1 with its other moves? That could be another minor saver, overcoming the 8-12 frames from longer attack names.
Have I mentioned yet that I'm an idiot? I looked at my damage calculation sheet and it says that Grimer has 41 HP and a max crit Water Gun does 39 dmg, so it won't kill and I decided I need Cut to kill. When I was doing the actual fight, though, I realized I forgot to change the Trainer DVs back (the rival has better DVs than the Super Nerd) and Water Gun does in fact OHKO, but instead of reverting my decision to use Cut on Croconaw, I just used Cut anyway because "hey, it's faster than Water Gun"... Luckily it's an easy fix, but I can't take care of it right now, probably later today. Anyway, thank you very much for pointing it out!
FractalFusion wrote:
As for goal choices or "speed/entertainment tradeoff", the only thing that I think is of issue is aiming not to be hit at certain times. I should mention that being hit by status moves is some number of frames (~20) faster than not being hit.
I wouldn't be too surprised considering how badly I apparently screwed up my calculations on it. If it turns out to be true, I will consider doing the whole run over (which would probably take about 2.-4 days of computation), I will also check that later today.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
You're right, the goal requirements are arbitrary, that's essentially what I tried to say in the paragraph of the submission text, but so would be any other set of rules. Also, the loss of time is not that important, as soon as the arbitrary code execution is set up you can basically consider any goal done. If you define a different set of rules, all it takes it to change the written code accordingly. It might be easier to see the arbitrary code execution itself as the goal of the run, everything after that can be achieved in mere seconds. It just so happens that using arbitrary code execution is currently the fastest means of beating the game. About the speed-entertainment tradeoffs: My primary goal is entertainment, and in my (subjective) point of view, perceived optimality is therefore way more important than the actual frame count. Taking hits for example does not make the movie look more optimized, you won't see the difference at all, the impressiveness of not taking hits weighs way more than that for me. Of course if the difference is any noticable (like in the Bugsy fight), all bets are off. That is also why my blunder messing up talking to the assistant and losing 7 frames is way worse for me than losing a frame here and there due to suboptimal luck manipulation (a.k.a. "maybe letting the bot grind for 5 more hours will shave another frame off..."), since this mistake is actually perceivable when watching the movie. EDIT EDIT: I posted an actual comparison for hitting vs. missing a few posts below.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
It actually isn't. I also noticed that, sadly only way too late when I re-watched the complete movie. When I noticed it, I did a comparison, It costs 7 frames (the assistant moves at double speed, and you need to turn in place in order to talk to him from the side which costs frames), and I decided it's not worth doing it all over just for it, as 7 frames can easily be lost in luck manipulation. It did bug me a lot, though, thanks for pointing it out, I guess I missed it in the submission text.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
Sorry about that. I wasn't exactly working on this regularily, and I even made a break for 2 months, so I wasn't sure whether I will finish it anyway and I didn't want to get anyone's hopes up or stop them from working on this game theirselves. You can see this movie as some sort of reference for your TAS if you like ;)
1 2
5 6 7