Posts for MrWint


1 2 3 4 5 6 7
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
Ok, so as I understand it you are getting stuck because after Brock-through-Walls, you can't talk to NPCs anymore. I assume it overwrote some memory you didn't want to have overwritten while corrupting the memory. I don't really understand your Brock-through-Walls setup here: You are using the DVs to spell out the coordinates 16 36, so the PP of the first two moves will be the address that is copied from. This determines what effects you will get. It has nothing to do with the amount of HP, as far as I know. Most likely you overwrote the addresses $cd60 (the LSB of which disables any interactions) or $cd6b (which suppresses buttons presses). Both of them could cause this behavior. You need to adjust your PP to spell out a more useful address. If you don't want to do the calculations to determine which addresses do what, the easiest way is probably to use a savestate before the Brock-through-Walls and manipulate the RAM addresses (find out which ones on the page you linked) to try some values out and see what they do.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
I can't really give any meaningful comment without knowing anything about the route, how you got to the point you got stuck in. You'll need to give way more information. I can't answer your questions about getting stuck in Saffron or getting one shot by something, I'm missing all of the context. In general, I have the impression that you put too much emphasis on the execution (like you describe getting 5 or 6 dmg) and too little on the overall planning and route. I remember someone mentioned on your canceled submission that the route follows some RTA route, which I'm concerned is far from optimal since TAS and non-TAS routes usually differ quite a bit. TAS-ifying an existing RTA route is fine in principle, but you'll need understanding of how things actually work and why certain route decisions were made in order to improve on it, since in a TAS the decisions might be different. Blindly following an existing non-TAS route will likely get you rejected for too apparent suboptimality.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
Oh, I see. As I said, feel free to use any part you want. Just consider sharing some routes or WIPs before your new submission, to avoid it being rejected for some small routing mistakes.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
Kind of. Since it was faster than the any% publication, there were two possible outcomes: either it would be rejected for being suboptimal as an any% run, or it gets accepted and merges the categories. In both cases the "warp-less" category is obsoleted, at least so I thought.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
leopo89 wrote:
This can be better , MrWint if u come again on forum can i use ur start bk2 pokemon red , 4 missed growl are just awesome so hard to get this haha
Feel free to use it, but tbh if Growl misses are a problem (AI players have a 1/4 chance to fail a Growl, so it's fairly easy to manipulate compared to some other events) you should probably work on your luck manipulation strategy instead. For starters, you should try and isolate at which point each random decision is made, so you can manipulate them individually one at a time instead of all at once (e.g. the enemy attack is chosen right after you chose yours, but the hit test, damage and crit for each attack is only determined after the "X used Y" text, so you can use the text to manipulate each outcome individually).
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
thatguy wrote:
Someone was bound to make this TAS eventually. Even at the time MrWint made his previous TAS, he knew of this route... so honestly I have no idea why he did it his way.
I feel the need to rise from my slumber to explain myself: The idea behind my submission was actually to clean up the categories, instead of making them even more complicated. I realized that the distinction between the "warp-less" and the "warped" runs was purely artificial with the discovery of Brock-through-Walls, and that the argument that it "shows more of the game" is not true anymore. The main point of the submission was to demonstrate the Brock-through-Walls glitch in action (it was just "discovered" for non-J versions at this point and not used in any routes yet) and to obsolete the "warp-less" category, which didn't make any sense anymore. Imho there's no point in having it anymore, since it's now just a slower version of the any% route without any benefits in terms of the kind of gameplay that is shown. It's sad that all categories for this game got kind of samey, but that's the way it currently plays out. (I'm currently working on a submission to try and fix that) It was inevitable from the beginning that it would be beaten and I'm surprised it took so long for someone to pick this up (a secret third goal was to get more people interested in trying to TAS these games by leaving any% up for grabs with a known faster route). I haven't watched the run yet, but from what I read here there are a couple of routing mistakes. I hope this won't discourage you from fixing these, working on it some more and trying again :)
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
adelikat wrote:
On the topic of rerecords. I don't like that MrWint's movies count bot rerecords, and that the statistics page is skewed as a result [...] So while I'm tempted to try to fix the rerecord count on this movie before publication, why bother? There's already so many movies that weren't fixed. And what does fixed even mean? At best we would be guessing on the number of non-bot rerecords. And does the bot's work not matter at all?
I can give you the "non-bot" rerecord count, it's 0*. Just like for my previous submissions. Rerecords just don't mean anything, there's no "correct" way to count them, the concept itself is not working anymore. So feel free to change this number to whatever you like or exclude it entirely for this movie (and the other movies as well for that matter), if it helps with your statistics. * I did some manual rerecords at the very end in this case, but only to investigate the bug in BizHawk.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
That might hold true to some extend for manual re-records where you are working towards a specific goal, but definitely not for automated ones. It may just do endless re-records mindlessly working into the completely wrong direction, and whether it does 1000 or 1000000 re-records doesn't really make the run any more optimized, it just means you threw more CPU time at the problem. The way you approach the run and set up the computation has way more impact on the run's quality, but can't be captured in terms of a re-record number (in fact the re-record count is lower the more efficient your setup is, since less computation is needed to get to the same results). It's more of a geeky statistic at that point without any meaning, and you should probably never judge a run based on this number. I thought about not providing any number at all and treating it as not applicable, since all it does is mislead people. The problem is the re-record count is considered an integral part of a movie, it's impossible to not have one, even though the concept doesn't make sense in some circumstances.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
I just realized that the ending of this movie depends on a bug in BizHawk (I filed a report here). I also attached two versions of this run to the bug as examples, both of which are 1-2 frames faster than the submitted movie. This submitted movie should be replaced by one of them. Currently, only the 1191 frame version can be played in BizHawk successfully and avoids the bug by putting an extra empty input frame at the end of the movie. The 1190 frame version is technically the same, but can't be played back in BizHawk due to this bug. The currently submitted 1192 frame version wouldn't work without the bug, though, and should be replaced in any case.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
It's not possible to soft reset during the credits at all, since the joypad input is not read. After all your party Pokémon were shown in the HoF cutscene (and before the player is shown and the Dex is rated), the game saves the HoF data (code, l. 80), and only the HoF data. The actual save happens after the whole credits are over (code, l. 52). If you reset before the credits finish, the game will not save and you will not start again in Pallet Town (except your previous save happens to start out there of course). It's very easy to test for yourself, complete the game (or grab any TAS that does), and reset during the credits, see where it puts you.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
This is a questionable definition, since saving the HoF is done independently from saving the acutal game (which is what lets you restart in Pallet Town if you load the save). The HoF save is done during the Dex rating sequence, before the credits, and the actual save is done after the credits, before resetting the game on button press. FractalFusion's run does the HoF save (repeatedly), but never reaches the actual save. Afaik there is no strict definition on what is required to count as a valid ending. We only have what the published run does as what is allowed and what this submission does as what isn't, with a gray area inbetween. Considering the submission history, I stuck to the conservative side and do everything the published run does for a valid ending. FractalFusion's Red (J) run is in the gray area, which I considered invalid when making this run.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
FractalFusion wrote:
MrWint wrote:
I wonder if it's possible to use the rival's name (2nd and 3rd character) for the script pointer instead of the Trainer ID. The saved swap may or may not be worth the time spent naming him.
Naming the rival takes like 150 frames, doesn't it? One swap is far shorter than that, and you'd still need to get to the 26th Pokemon.
It takes about extra 65 frames in the UE version (+the naming itself), but you're probably right, the one extra swap will cost less (~57 frames in UE).
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
FractalFusion wrote:
MrWint wrote:
I'd love to see this movie of yours.
Here's the movie then: http://tasvideos.org/userfiles/info/17319790281107650
Pocket Monsters - Red Version (J) (V1.0) [S].gb
Emulator: VBA v22 Basically, it works like this: - Manipulate the trainer ID first byte (D2D8) to be D1 or F1. Then D2D7 will read 01 D1 or 01 F1, little endian for the jump into RAM where we want to execute. - Name the player よッヘマぼ . This corresponds to
D6 AC       SUB AC
CD 9D 3D    CALL 3E9D
at D11D. - Do the save and reset thing to corrupt memory. - After reloading the game, open the Pokemon menu. - Switch the 7th and 8th Pokemon. This gives a HoF end message that does not require input. - Switch the 9th and 10th Pokemon. This moves 01 D1/F1 at D2D7 to D2AB. - Switch the 15th and 26th Pokemon. This moves D2AB to D2ED, the address to an execution pointer, when closing the menu. - Close the menu. The game reads D101 (F101) off the above address and jumps there. There are 00 bytes (NOP) until D11D, which it executes, resulting in the HoF. The instructions place 0x55 into the A register (01 SUB AC -> 0x55), then jumps to 3E9D, which seems to be a warp manager that uses the A register. I don't know if such action is considered an acceptable ending for TASVideos (a more extreme version that glitches the end credits directly was rejected in the past), especially since the end is a bit glitchy. Also, I think my movie is improvable.
Thanks for sharing this. At 3E9D is the equivalent of what is called the "Predef" function in the disassembly, which is basically a jump table. Predef 0x55 is The exact predef called in the Hall of Fame code (line 28, behind some fancy macros). I worked under the assumption that this is not a valid ending (as described in the submission text). I'd say line 28 until line 59 need to be executed (which could be translated to the respective byte addresses for the different versions) in order to have a "valid" ending experience (that is: credits, saving, reset on button press). Jumping to a "proper" address is a bit harder to do, since there is no predef for it and (as I said above) one of the bytes is not directly representable. Anyway, your run is great. I wonder if it's possible to use the rival's name (2nd and 3rd character) for the script pointer instead of the Trainer ID. The saved swap may or may not be worth the time spent naming him.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
I did consider the possibilites added by the characters, but there are important bytes that can't be represented, namely the higher byte of the HoF sequence address (0x7b in Red/Green, 0x7d in Yellow, 0x7e(?) in Blue (don't quote me on that one)), which are tiles used for the framing. The only source for these bytes is the Trainer ID, which is a pain to get to the right place. I admit I haven't considered using the names as code instead, which is a great idea I can see working out. I'd love to see this movie of yours.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
Zowayix wrote:
But how come the same thing doesn't happen here? In Primo's 1h19m run, the player uses WTW to go from Route 22 to Route 23, but doesn't warp at all (looking at the map, the player stays lined up directly below the Victory Road exit warp at all times even when on Route 22). I'd have expected that the player at least "warp" a couple of steps to the left so as to match one of the Boulderbadge gatehouse exit tiles.
Because the stored warp is reset to 0xff on various occasions, including flying, teleporting, fainting and battling (basically anything that loads a map without taking a warp). If it is 0xff, the coordinates remain unchanged.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
The overworld is "seamless", but only because the game correctly determines your position on the new map based on the last position on the old map and the map connection data, under normal circumstances. On loading the map for Route 23, the game needs to decide where to put the player, and does that using the information in the map connections. It does this in this case as well, only that this position is later overwritten due to a piece of code that sets the player position to a warp position whenever the tilesets of the last and the new map don't match. I'm not exactly sure why it does this test, since it can't ever trigger under normal circumstances, but it can be exploited to set your position past all guards. If you are interested, I can look up the exact location of this piece of code for you so you can explore it for yourself. Anyway, here is the path used in this run. Going OOB on Route 2 does not save any time, I did it merely because the map connections happen to work out this way, any other path would work as well. Note that the used image does not accurately represent the dimensions of the individual maps (especially Route 23 and the Indigo Plateau), but it's sufficient in this case.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
I considered it, but I deemed it slower in the end (without exact testing to be fair). It's mostly about the moveset: Graveler has an awful moveset (Selfdestruct, Harden, Earthquake, Explosion), as have most of the other wild encounters. Onix has probably the best moves (Rock Throw, Rage and Slam), but you are way lower level and you will run out of PP and need to use Rage way too often, so I'm not entirely convinced you can hold the time advantage you have through the Elite Four. I may be totally off here though.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
thatguy wrote:
Yay, double post! Some small queries: 1) Why aren't you getting critted in the rival battle to lose faster? 2) Why are you so concerned with Charmander's DVs? I have been following real-time speedrunners recently and none of them have mentioned it being needed for Brock Through Walls. Please don't tell me those nineteen million rerecords were for nothing... 3) Couldn't Nidoking level underflow faster by doing a fight by himself? I'm pretty sure a couple of Critical Hit Thrashes would be sufficient to down a level 3 Weedle.
ad 1) Crits don't do more damage in this case, they just cost time with their additional text (Gen I crit mechanics are weird) ad 2) This run is using Charmander's DVs to set up the glitch, while RTA run use a different setup (like Pidgey), which is slower but way more doable. ad 3) 3 crits would suffice, so it's the same amount of turns, but Charmander is faster than Weedle, while Nidoking would be slower, so I save half a turn. Also, I need the Charmanders PPs to be these values for the BtW to work.
FractalFusion wrote:
MrWint, I'd like to test something. Could you generate a BKM version of your movie file? I tried to generate it from your BK2, but I was unable to get a movie that syncs. (If not able to, then "syncs on 1.1.0 - 1.6.1" is not an accurate statement. Besides, BK2 files don't work in 1.1.0-1.6.1)
Sure, here your go: User movie #17114579571944002
FractalFusion wrote:
Even though this is a run meant to show off the "Brock-through-walls" glitch (and it even fights the Elite 4), something bugs me about this run where it just seems like there is a much faster way to do this, even while staying consistent with the goal choices given.
Do you have something specific in mind to make this faster?
Patashu wrote:
How is [this] not memory corruption?
It is, I even specified it in the categories.
Chamale wrote:
MrWint, the first 6000 frames of this run are identical to the optimal route for the glitch warp run, and you perfected the most difficult luck manipulation of the run. Would it be alright if I used your input for that part of my run, and gave you coauthor credit for the upcoming any% TAS?
Sure, go ahead.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
thatguy wrote:
^I think MrWint agrees with you to be honest. He does note in the submission that this run was made partially to challenge the game's current categorisation.
Right, this is at least part of the point of this submission.
ALAKTORN wrote:
I am lost in all the categories… but isn’t this ACE? Reading the submission text it felt like it could be manipulated to do whatever you want, can someone clarify that?
Since this has become a rather touchy subject for this game in the past, I'll answer it in short: no, only memory corruption, no ACE.
Exxonym wrote:
Rerecord count: 24,572,287 o.O
I spent 19791833 of them for brute-forcing Charmander's DV's alone, which probably was total overkill, at least considering the result I ended up with.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
Chamale wrote:
There's a problem with the Pidgey route, and I'm not sure exactly why. I end up stuck in something similar to the faint Trainer-Fly glitch, where I can't talk to most NPCs and I need to use a PC to save and restart. It doesn't stop the route from working but it's a serious time waste, and I need to find a way to make the Pokemon Center work. I have all the difficult luck-manipulation out of the way, so I'll finish up this version for a demonstration, but I'm frustrated that I can't find the reason for this glitch and couldn't catch it in testing.
This is caused by setting bit 0 of $cd60 during the memory corruption, like I described in a previous post. You can get rid of it by saving&resetting or fainting, just like the Trainer-fly effect. Ideally though, you probably don't want this to happen in the first place, by choosing the address from which the path data is read more carefully. Sorry for my delayed response, haven't got much time to look into this lately. Also I won't look into the ACE possibilities right now to not undermine the work you already put into your WIP no-save-corruption TAS. I may try to stir up the categories a bit though, the submission should be done in a day or two ;)
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
I don't think you should worry about this kind of optimization quite yet, as long as the route isn't ironed out. Chances are the setup won't work out/be suboptimal in the end, or you need additional steps (like a specific Trainer ID), which will be especially true when using Cooltrainer in the end. When using the DVs to create the necessary coordinates, the PP of the first two moves is used to determine the data that is read. The PPs I used in the proof-of-concept are not ideal, since they cause the Trainer-Fly effect and require fighting a trainer or saving and resetting to get rid of it. There are probably better ways to set this up, which may or may not use the DVs, so spending time on optimizing getting these DVs may be futile in the end.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
Chamale wrote:
I'd like to test setting the trainer ID to 0x1024, does anyone know what memory address stores trainer ID? Edit: I did a manual RAM search, trainer ID appears to be a 2-byte big-endian number stored at address 1359. I did a quick test poking the ID to 1024, or decimal 04132, and the game stopped and wouldn't accept input when I talked to the Brock skip trainer from the right.
That happens when it cannot find the coordinates, it keeps looking for them forever, softlocking the game. Most trainer IDs are not in the right location to trigger this, you need to have it on an address ending in {2,6,A,E}, the Trainer ID addresses are at $d359 (master), $d177 (party), $d8b0 (opponent), $cfa4 (selected), none of which is working. Only the boxed Pokémon's Trainer ID at $daa2 (and some subsequent) will work, so you need to box (any) Pokémon to make it work. Also, the Trainer ID is followed by the experience data, which needs to have the right values for it to overwrite the memory in the right way. The first usable (if not ideal) value is 0x0004, which requires at least 1024 exp. Also, a bit more clarification on the goals of the memory corruption (i.e. the choice of the address to read the path data from): The goal is to overwrite $cd3b to mask any button that can be used for or held down while moving (B and Select work, or the directional buttons directly), while not disabling these buttons by masking them at $cd6b. The third important address is $cd60, which contains a bunch of flags that control overworld interaction: Bit 0 makes the game think you are being engaged by a trainer, which causes the same effect as Trainer-Flys do and should be avoided. Bit 1 causes the dust cloud animation, which costs some frames, but clears $cd6b and thus may allow you to move when you otherwise couldn't. The other overwritten bytes are not that interesting as far as I can see, it's mostly a buffer storing screen tiles (the same used for the Cooltrainer encounter glitch). Speaking of Cooltrainer, using the transform glitch to finish the game is likely still faster than using item underflow, but it's even harder to set up than in the current TAS, since it's even earlier in the run and you need to spend some of your manipulation potential already to make walking through walls work. I presume there will be a good amount of trickery required to execute this. I will experiment with this and see this will work out.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
This one is caused by manipulating the byte $d693, which is used in the jumping animation. Jumping over a ledge is actually a short cutscene, so the same rules as for the other glitch apply. When setting $d693 to a value of at least 7, the animation will be aborted prematurely, which causes the remaining cutscene joypad inputs to reside and not be consumed, even though the cutscene itself ended. This allows you to walk through objects as if you are still in a cutscene. In UE, the corresponding address is $d714, which is unfortunately inaccessible by the usual memory manipulation methods. It's possible to do it similar to the J version by swapping the 33rd Pokémon with any that has a speed stat of at least 7. This would require breaking the party Pokémon counter first, for which there is no good setup either afaik.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
jlun2 wrote:
Is there a list of (J) only glitches out there that can be checked?
I assume that there is, but I don't have language skills to dig them up. I'll be happy to check out how they work an test them in UE if someone manages to gather information about them.
jlun2 wrote:
Also, how many times can this be done? Would the guy appear back later?
He'll be there as long as you don't beat Brock, so you can use it multiple times.
Experienced Forum User, Published Author, Skilled player (1020)
Joined: 7/24/2013
Posts: 175
Chamale wrote:
Has anyone seen the trick used in this Youtube video? The first use is at 8:12 and it shows up repeatedly, it's a variant of the Brock glitch that gives the player the ability to walk through walls. I haven't managed to replicate it yet, I tweeted at the uploaded asking how it works. It's a very impressive run, and using that glitch to encounter Ditto sooner could shave more minutes off the possible improvement to the current TAS. It could even be used to enter Cerulean Cave and directly catch a wild Ditto, although I'm not certain that's faster than catching level 7 Mew and raising it a few levels.
I looked into it, and it's possible in the UE version as well, basically rendering all current TASes (except for the save corruption one) obsolete. I wish you would've dug this up before I did my 151 run, but oh well, at least it makes it easier to decide on potential future projects... Short explanation on how it works: For these cutscenes, the game represents the path the player will walk along as a list of simulated joypad inputs. However, it's possible to override a simulated input with specific user inputs (defined in $cd3b). Doing this pauses the execution of the cutscene for that input. Also, while the cutscene is playing, collision and encounter checks are turned off. Since you're not supposed to be able to talk to Pewter Gym guy from the right, there is no walking path defined for it, and the game searches for one beyond the actual path data. By manipulating the RAM to contain the exact coordinates of the player's position (16, 36), an invalid path is loaded that may be too long for the buffer, overflowing it and writing its data to other areas of memory, especially the aforementioned $cd3b, which sets override inputs that allow you to walk around by yourself while the cutscene stays paused, enabling you to walk through any object in the process. Note that the buffer overflow may also overwrite $cd6b, which defines a mask for joypad inputs that are discarded and can render you unable to press the needed buttons. The setup to make this work will be different in J and UE, becasue the memory addresses are shifted (mainly because of shorter text buffers). 0xwas used Rattata's party menu sprite to create the needed coordinates at $cc5c, reading path data from $1000 that happens to allow free roaming in the cutscene. In UE, this setup doesn't work since the alignment of the RAM data is different. However, it can be achieved by other means. I created a quick proof-of-concept which uses Charmander's DVs to enable free roaming. Note that the dust clouds that appear are not strictly necessary for it to work, they are most likely a side-effect caused by one of the overwritten bytes, and is useful since it sets $cd6b to 0, re-enabling all buttons that may have become disabled in the course of the memory corruption. This also raises the question whether there may be more "J only" glitches that actually are not, and just require a different setup. tl;dr: Almost all Gen I runs can be improved using this, probably by several minutes.
1 2 3 4 5 6 7