Posts for ais523


Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
We can ring it that early, but we have to ring it personally. The spare time on action 2 is all in the monsters' part of the action.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
Most of my sporadic work on this TAS has been staring at the 2003- and 2004-turn plans; I think we're agreed that the current 2003-turn plan is unlikely to ever happen, but that doesn't rule out the possbility of a different 2003-turn plan that works. So far, though, all my attempts (that don't do a hypercharged crossing of Air, the hardest part) fall one action short. Here's a rundown of the problem. First off, a fundamental rule of NetHack is that if you change levels on a monster action, no monster actions happen when you arrive, not even ones later in the turn; either you get a player action (if you have the movement points for it), or a turn boundary (if you don't). (Incidentally, this is what causes the hypercharge glitch.) This places a hard "speed limit" on how fast we can move; we can change levels once on our action, once on the monster action, and then we have to spend another action in order to keep moving (theoretically there's the alternative of having < 12 movement points in a turn, but that's clearly suboptimal to just using an action). In 2003 turns, we have 5+4+4+4 = 17 actions (air elemental) or 5+4+5+4 = 18 actions (riding, requires grinding, also requires a "maintain gallop" player move on two specific actions that mean we only really have 16 usable player actions) in the fastest available movement forms. Thus, an "idealistic" plan that glosses over details and assumes things to be possible that probably aren't looks like this: Action 1: gain alignment; get accepted to Quest; levport to Quest goal level (STOP; we can't take three actions on our own action, thus at least one of those was a monster action and we changed level) Action 2: get Eye, Bell (…no further use for this action, using the Eye is the fastest way to leave the Quest and it can't happen on a monster turn; if a monster tried to help us out, we'd change level in the process, the action would end, and using the Eye would still be faster) Action 3: branchport to Valley or Vlad's (…no further use for this action, monsters can't cause us to leave Vlad's or change levels from the Valley, unless I'm missing something) Actions 4, 5, 6, 7: levport to Vibrating Square, ring Bell, read Book (×2) (all of these need to happen as player actions); we can enter the Sanctum on the subsequent monster action (STOP; changed level on a monster action) Action 8: retrieve Amulet (this can happen on a player or monster action, but can't happen on action 7's monster action because you don't get monster actions after a level change; and we can't leave the Sanctum on a monster action as there are no levport traps or holes there) Action 9: leave Sanctum (the fastest known glitch for fast Amulet transport cannot be done there); fast Amulet transport to Dlvl 1 (STOP; we changed level twice in an action, thus one was a monster action) Action 10: enter Earth (…no further use for this action? enexto is the current fastest method of crossing Earth and requires a player action to set up, but maybe there are others; I've considered hypercharged dig + horizontal movement but it seems to be slower) Action 11: #monster; enexto to Air (STOP; we entered Air on a monster action, because that's how the enexto glitch works) Action 12: overflow hurtle to Fire (thanks to whoever found this glitch; sadly I've forgotten who it was, but the idea is that kicking off a monster interacts in confusing but sometimes beneficial ways with antigold); hurtle recovery via equipment storage theft (this is a recent discovery of mine: if you're interrupted removing an item via A, avoid performing various actions, and then the item gets stolen, it cancels helplessness); any monster actions useful here? (Note that if you want to do more than a trivial number of monster actions, you'll have to explain how a highly charged monster ended up on Fire. This is a theoretical plan that ignores that sort of issue in case we find a way; currently it seems like it might be just barely possible to get a monster there with a charge of 1, and even that involves chameleons mimicking air elementals and polymorphing at just the right moment.) Action 13: enter Water, somehow; enter Astral, somehow (!), STOP because we changed level twice Action 14: #monster; enexto to altar Action 15: #offer It might look like we have time to spare. The problem is that some of the above steps are overly idealistic, in particular, the actions entering Water and following that. The fastest known strategy for entering Water onwards looks like this: 2002 (1 action remaining): jump into the portal to Water {requires: air-E form for the 4-action turn, wearing Eyes of the Overworld for the ability to jump as an air-E} 2003 (turn boundary): polymorph to p/t form, fill level with eggs 2003 (4 actions remaining): #monster; enexto into portal 2003 (3 actions remaining): zap turn undead, filling the level with monsters 2003 (2 actions remaining): #monster; enexto onto altar (yet to be figured out: where the trigger monster came from and how it got charged to 3; probably we'd need a second leashed monster for the purpose) 2003 (1 action remaining): #offer and win That's two actions slower than the excessively idealistic plan, bringing it up to 17. So we have to somehow make our idealistic plan into a real plan without spending any extra actions. The main blocking problem is polyform management; we need to be an air-E at each turn boundary, but an air-E can't read the Book or jump when blind, and can't use polytraps or levport traps when nonblind (because the Eyes of the Overworld give MR). Levport traps are crucial to the run (being required for the fastest version of the fast amulet transport glitch), which basically implies that we don't have the Eyes in inventory on turn 2001, and thus aren't in air-E form through most of that turn. (We can turn back in zero time, and in time for the turn 2002 boundary, via hitting a polymorph trap while being teleported around.) The problem is turn 2002; we somehow need to change from p/t form (used for the enexto on Earth) into air-E form, and also put on the Eyes (which we can't have had in inventory on turn 2001, thus can't have been wearing). One of those actions can be "oLS-cancelled, but the other looks like it has to be spent; there are no polytraps on Air or Fire. And unfortunately, that puts us one action over. We also need to find a way to set up equipment storage theft: the setup (i.e. the "storage" half) takes one player action, apparently no matter what you do ("oLS-cancelling it doesn't work, not to mention that we've run out of "oLS-cancels already). The storage is broken if you move using a movement command, get engulfed, drop an item intentionally, or change equipment (intentionally or unintentionally). Getting a 5-action turn as turn 2000 requires the use of a movement command, so we can't set it up in advance; however, we can set it up while in the Sanctum, as we have a spare player action there (we can let monsters do the Amulet retrieval). So this takes some thought, but isn't a blocker. One assumption I made above is that changing level always consumes a player action or monster action. One hope for a 2003-turn run would be that this assumption is not correct. While writing this post, I had the idea of "oLS-cancelling a levport, and found a way to do it: you can blast yourself to death with the Orb of Fate without violating any of the other restrictions on "oLS-cancelling. This also cancels the subsequent monster turn, but there are nonetheless actions (such as 4 in the above plan) that can be deleted via this method without losing time. The problem is that putting on a "oLS (amulet of life saving) costs one player action, and "oLS-cancelling saves one player action, so you can only gain time from it once; and we're already spending that gain elsewhere. Changing the timing of turn boundaries doesn't seem obviously helpful for this purpose.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
This game was run in a recent GDQ, and I noted that they used some sort of IL game mode in order to switch teams faster and have access to all teams. (Presumably it would only be available after the game was completed.) This gets me wondering about which teams would be fastest under IL restrictions. Would it change the run significantly?
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
In terms of the boss HP issue, I'd prefer to phrase it along the lines of "Do not use a higher difficulty if the only change is adding extra repetitive sections to the run.". This means that if higher boss HP adds interest to the run (e.g. forcing the player to dodge more patterns, or collect defensive items), the higher difficulty is preferred, and expands the boss HP clause to other uninteresting cases such as autoscrollers that repeat more times on higher difficulties. I should also mention An Untitled Story and I Wanna Be The Guy, as potential counterexamples for the "the highest difficulty is more entertaining" principle. The largest difference between difficulty levels in An Untitled Story is the number of hits you can take between save points. The very highest difficulty, this value is locked at 0, meaning that you can never damage boost. Seeing occasional damage boosts is probably more interesting, although you could make a case for it being less interesting as HP management becomes less important. (There are also enemies removed on lower difficulties; a TAS of An Untitled Story 100% would probably play on the second-highest difficulty.) Meanwhile, higher difficulties of I Wanna Be The Guy remove save points. There are some interesting glitches that you can use with the save points, which means that the higher the difficulty, the closer you have to stick to the intended path. The TASes of the game that I've seen tend to play on the lowest difficulty because of that (on the basis that because they never die, the difficulty level effects the run only in the ability to use glitches). This could potentially generalize to other games in which the only change in higher difficulties is restricting some of the player character's abilities.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
Hyperresonance wrote:
Here's Mad Monster Mansion! This level completely blew away my expectations.
What was going on when you hit the witch switch? You seemed to spend some time damaging yourself down (trying to lose as little time as possible), only to use a glitch to heal yourself again. Was that a cutscene skip, or is there something else going on here?
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
This game seems to respond pretty well to sequence breaks! That's typically an encouraging sign for the making of a TAS. It'd probably be better if I had more of an idea of what the game's intended sequence is, though.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
No progress for a while, sadly. The next step is probably to work out if the current endgame plans are optimized or whether it's possible to save a turn. In particular, it would be nice to know whether a) the current 2003-turn works (I fear it doesn't); and b) whether it's possible to come up with a sane 2003-turn plan (the current one isn't: it's basically impossible to manipulate and the setup for it would be extremely repetitive, tanking the entertainment value of the run).
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
MUGG wrote:
The game was very lacklustre to be enjoyable to watch, but this run changed that. Good job How did you find the screen transition bug anyway?
I was playtesting the AGDQ competition, under instructions to act as though it were the real competition run live. So although I was playing before everyone else, I was trying to create the fastest possible TAS for the game in four hours, and in particular, to create one that would beat everyone else. I decided that I wasn't good enough at TASing to be able to optimize either of the suggested routes better than the more established TASers who would (hypothetically) be competing against me, so I decided to take a high-risk option: I decided immediately that I'd spend the whole four hours lookjng for a save corruption bug. In terms of the bug itself, after a while spent looking at the save code disassembly, I realised that a checksum collision would cause the first of the three copies to be used, disregarding the other two, even if that copy was corrupted. Then it was a case of working out what the effects of resetting the console during the save would be (the answer is that the resulting save takes some bytes from the old save and some bytes from the new save, which is the most common outcome of doing that). My first thought was to go to the west of the final boss and the south of the final boss and merge the x screen-on-map coordinate of one save with the y screen-on-map coordinate of the other (this probably would have required a subframe-precision reset, but I didn't realise at the time that Bizhawk's input file format can't represent that). Unfortunately, I was stymied upon discovering that the game autosaved at every screen transition. So I tried to work out what exploitable effects you could get via merging two saves on adjacent screens. The most obvious thing to try was to load the character at the wrong side of the screen (via merging one screen's screen-on-map coordinates with the other's pixel-on-screen coordinates), and this turned out to work just fine. Even better, the huge amount of checksumming that the game does turned out to make the save corruption possible even on Bizhawk because it caused enough lag to place the writes of the two sets of coordinates we were merging on different frames from each other. (It's still possible that the run could be improved via a subframe-accuracy reset; you'd be able to manipulate some of the values we don't care about between the ones that we do care about, and that might randomly happen to make the checksum collision require waiting fewer frames.)
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
"misfeature" is a word that people use sometimes, although it's more to describe intended features that end up making the program worse, than intended features that make the game more exploitable. Perhaps we're looking for "backdoor"?
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
The problem with a game like this, that contains intentional glitches, is that it's hard to know what should count as a non-glitched movie. (On the other hand, I'm happy to see that none of the intentional glitches turned out to be useful in the end.) Hopefully we've managed to save this game from the vault; it looked like it was going there back at the time of the TAS competition, but eliminating basically the entirety of the intended gameplay is something that many players find entertaining (mostly because it stops the game overstaying its welcome).
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
TASeditor wrote:
Since this is a open problems topic, here are some problems that are in need to be solved to get my bot working. 1. Calculating the best (X;Y) positions on the analoag stick for a given angle and a given minimum radius.
This is a well-known mathematical problem called "Diophantine approximation"; you're attempting to find a Diophantine approximation of the tangent of the angle in question (for which X and Y are within the range of the analog stick). Apparently the standard solution to this is to find a continued fraction for the number you're trying to approximate, then take the first few terms and evaluate the resulting rational. The continued fraction for tangent was found in 1768; it's: a / (1 - (a**2 / (3 - (a**2 / (5 - (a**2 / (7 - and so on (where a is the angle, in radians). Unfortunately, radians are exactly the wrong unit of measurement for this (because pi is irrational), and I'm not sure what the continued fraction looks like in degrees or 1/256ths of a circle or whatever unit of measurement the game in question is using. (Probably much more complicated; maths has a tendency to be simplest in radians.) I've tried to look it up, but not got a simple answer. The whole standard solution to this is probably also flawed due to convergence speed; I fear that even the smallest continued fraction solution would have a numerator and denominator too large for the relatively small range of an analog stick. I wonder if there are other Diophantine approximation algorithms which work better for smaller results?
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
If the game's reading input but not using it, you need to have some basis with which to determine whether the game's reading input or not. A RAM address is probably the least hacky way, actually.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
The significance of the word "virus" hadn't occurred to me, but it genuinely would be: a cross-platform TASbot virus that ran on old games consoles and caused them to infect each other. That's something that I suspect journalists could really get behind. A long-shot idea I'd like to throw out there while there's potentially still enough time to make it work: this idea of using one console as a controller another made me wonder if there's any instance where you can officially use one console as a controller for another. And of course, there is: a Gameboy Advance is an official Gamecube controller (and I know that the Gamecube at least has the ability to "officially" run code on the Gameboy Advance, not sure about the other direction). You could thus get one to infect the other without even needing any sort of special cable (with no extra glitches, even, if it were the Gamecube infecting the GBA). This is quite an unfortunate console pairing, though, because neither has a really accurate emulator yet as far as I know (and I don't know if information on the controller protocol between them is public yet, although admittedly I haven't looked). The big advantage, though, is that given that the Gamecube uses separate memory cards, a save-persistent Gamecube exploit could be prepared in advance and used to infect a GBA at any time, which would make testing much easier, and also provide a huge amount of space for storing anything we need to store (we're talking about megabytes here). I also fear there might be some sort of checksum on the GBA end that prevents people feeding homebrew into it along the controller cable the intended way.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
Assuming that the run starts from a state before the glitch has been set up (and the time spent doing the swap is thus on the timer), I'd be fine with that. What's being exploited is some glitched state in the game that persists past the "new game" command, and you're still spending the time to set it up.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
Pokota wrote:
ais523: I am asking for a specific response regarding a specific case. You're giving a generic answer (and one that seems to be better suited to console gaming rather than PC gaming, which is what is in question here due to the various ways you can manipulate save files outside of the game). Would you consider speedruns of Might and Magic 6 that use the Swap Glitch to be valid?
I'd need to look at the glitch to be sure (and am at work and can't check YouTube). Even then, a video might not be clear enough. Do you have a link to a technical explanation of the glitch and how it works?
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
Actually, if you want to educate the GDQ viewers about ACE/AMC glitches, the "old" route for 6 golden coins (using the pipe glitch to AMC into the credits) is one of the clearest ways to do it. I'm not sure if there's actual ACE available via that route, but explaining how the credits warp works there is one of the clearest examples of game glitching I've seen. (ACE = arbitrary code execution, AMC = arbitrary memory corruption; the difference is that although AMC lets you corrupt RAM, there might not be any code pointers in RAM that you can trick the game into following, so you might be limited to manipulating data rather than code.)
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
I think "save-persistent" ACE is an obvious next step to use (i.e. TASbot permanently reprograms a game via putting stuff in the save file that would mean a few simple manually-entered controller inputs would re-ACE it upon load). You can definitely do this in both Pokémon and Pwn Adventure Z, so it's probably possible in quite a few games. You wouldn't have to combine this with the console chaining idea, but if you did, it'd basically mean reprogramming a console to turn it into a TASbot. Which is a pretty crazy (and fun) thought, and pretty much in line with what Warp was suggesting.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
Clearly, we need an ACE TAS where the run itself has commentary explaining what happened, output via the game.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
Pokota wrote:
To the people who aren't Warp: Would you consider speedruns using this glitch to be valid?
I consider glitches that manipulate save files to be valid in two circumstances. One is if the glitch starts from a completely clean cartridge (i.e. no save files are initially present), and any time spent setting up the extra save files counts as part of the run's time; in this case, I don't consider there to be any restrictions on what you can do with the save files. The other is if the run is classified as a new game + and the game is completed on a new or newgame+ file, rather than an existing save file and there is no use of a "copy save" or equivalent feature, including one created via a glitch, to copy onto the save file that's being created as part of the run. (In other words, in a newgame+, you have to be careful that you are in fact completing the game yourself rather than using an existing completion. I don't consider it a legitimate speedrun to load up an existing save file from just before the final boss, immediately win, and trick the game into saving the resulting game over the wrong file.)
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
So a summary for people like me that have years-old low% knowledge is that the big improvement that saved the percentage is working out how to skip Gravity Suit without taking any other items to compensate. Unsurprisingly, most of the problematic places for this are in Maridia (in particular, finding a good way to enter it).
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
ALAKTORN wrote:
Alyosha wrote:
Some RNGs are implemented as idle loops and are thus cycle dependent,
What does this mean?
To explain what it means, let me give an explanation of some background first. Most older games (including most NES games) use the following method to do their timing: they wait for "vertical blank" or "vblank" (which happens approximately 60 times a second and is normally used by both the emulator and the game as the definition of a frame), then do their calculations for that frame, then repeat. The fastest the game can run, therefore, is if all the calculations get done between one vertical blank and the next (the vblanks form a "frame rule" that causes everything to take an integral number of frames). How long the calculations take depends on the total number of clock cycles that are needed to run the instructions that form them (there's an (almost) constant number of clock cycles between vblanks). If the game is running at the fastest possible speed, i.e. all the calculations are done in less than one vblank's worth of clock cycles, we call this situation "not lagging"; otherwise, we talk about "lag frames" which are frames where the game is still busy trying to complete the calculations from the frame before. So lag is highly dependent on the total clock cycle cost of instructions, and this is something that can vary between emulators due to emulator inaccuracy. However, the total clock cycle cost per frame affects the game in other ways, too. When the game finishes its calculations for the frame, the processor doesn't just stop running; instead, it has to do something to wait. What it does while waiting for the next vblank is known as an "idle loop", and is typically a short sequence of instructions just designed to bide time. The number of times the idle loop runs is dependent on the number of clock cycles needed for the game's actual calculations, subtracted from the number of clock cycles available for the input frame (which is equal to the total number of frames, i.e. the number of lag frames + 1, that make up the input frame, multiplied by the number of clock cycles between vblanks). One thing that games sometimes choose to do with their idle loop is to update a random number generator. In this case, the random number generator is basically measuring the fractional part of lag (with actual lag frames measuring the integer part of lag). Depending on how the game works, this might well be highly chaotic and thus a good choice for randomness generation. Emulator inaccuracies in terms of cycle count measuring will be visible both as inconsistent lag behaviour, and inconsistent idle loop behaviour; thus if a game has an idle-loop-based RNG, then if two emulators emulate lag differently for that game (the integer part of (cycles for calculations) divided by (cycles per vblank), rounded down), they're definitely going to emulate randomness differently for that game (the fractional part of the same calculation).
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
Eye Of The Beholder wrote:
Ok, I got it now. Damn!!! What a shame you need blue suit!
Probably not, because it makes the resulting run much more interesting to watch for low% fans. IMO, the more crazy stuff you have to do to make it work, the better. How does this new 13% route differ from the "traditional" 14% speed route that's been known for years? It'd be helpful to have a summary for people like me who don't know the game that well but enjoy watching it.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
dwangoAC wrote:
feos wrote:
Question: do we have enough speed for data going from NES controller port to successfully and efficiently provide payload to younger consoles?
Bare minimum, we can put the first NES controller port in Multitap mode which would be four bytes per frame, or to think of it in SNES terms that would be enough to provide input for two controllers per frame. This would be a horrible minimum, however; that datarate equates to 4*60=240 bytes per second which would severely limit the kinds of downstream payloads we could send. Hopefully we can do something similar to Pokemon Plays Twitch where we polled 8 times a frame by taking control of the latch pin manually - the mechanics would be different because NES generally only reads one byte per controller rather than the SNES's two but that would still get us 4*8*60=1,920 bytes per frame, and my hope is we could get it even higher and shoot for 4*16*60=3,840 bytes per frame. I anticipate the NES payload will be low color, simple graphic blocks / tiles appearing showing what buttons are being pressed but the payload will need to scale down to fit the CPU cycles available after handling payload forwarding. Much experimentation here is still required.
The way that a NES controller port works, it sends a "ready to read" signal to the controller, then it repeatedly sends "read 1 bit" controller signals to the controller and gets single bits back in response. On an official NES controller, it reads current state of the 8 buttons followed by 1s forever. However, the signals sent, and the number of bits to read, are both fully under software control. The fastest possible data transport to a NES, therefore, is to use a controller with infinitely many buttons, and just read all of them (i.e. you keep sending "read 1 bit" signals forever and get a sequence of bits inbound). I believe this would actually work on hardware if you had a large number of official controllers and swapped which controller was in the port every few clock cycles; our hypothetical TAS superhuman might actually be able to do that. I'm not sure offhand what sort of data rate would be possible because the limiting factor would probably be how quickly you could store the bits in memory. Of course, to test this, you'd also want an emulator that can simulate subframe input with infinite-button controllers. I'm not sure we have any of those yet. Note that we could get a pretty fast data transfer the other way, from the NES to a system connected to it, via use of the "read 1 bit" and "ready to read" signals as sending a 0 and a 1 (or vice versa). If you're trying to make a NES into a programmable SNES controller or whatever, that would probably be the way to go. (One potential problem: the NES would need to be able to write the controller wires as fast as the other console was trying to read them, assuming we're not putting extra hardware in between. It might be necessary to use faster consoles to control slower ones.)
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
The debate about "fastest ACE completion" and "fastest game completion without ACE" isn't about whether they should be categories. It's about which one should be called any% (making the other one either "game end glitch" if we have the any% as non-ACE, or "no ACE" if we have the any% as ACE-allowed).
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
feos wrote:
So SMB3 total control absolutely blew people's minds, as did Pokemon Plays Twitch. What about SMW Pong? Did it really blow people's minds?
It did, especially because it was the first ACE-as-playaround to be shown at a GDQ. The vast majority of the speedrunning audience had no idea that something like that was possible when they saw it (and even most of the people who thought they knew what was coming thought it would just be a jump-to-credits glitch).