Posts for ais523

Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1034
At some point, it may be fun to create a collection of "navigation rooms entered at times you aren't supposed to be able to enter them", partly to show off how the game reacts, partly to show off how breakable the game would be if it didn't have such a tendency to softlock. (I'm also secretly hoping that one of the combinations will have nonterminated text or something exploitable like that.)
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1034
Right, the problem is that you need to set up the gallop twice more to gain an extra action (basically for subpixel-related reasons). That puts a large restriction on what gains you can get from it.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1034
It wouldn't help unless riding, and that requires 2020 actions to train up to a state where it doesn't conflict with like half the ascension run. Even with all appropriate speed modifiers in place, that's going to take up an appreciable portion of the setup and wouldn't be very fun to watch. So we want to avoid it unless possible. (Also it costs a "oLS, and finishing reading the Book loses the storage.) I'm not sure what you're trying to achieve with this.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1034
Hurtling on Fire would require a source of levitation (which we can't have earlier because it would prevent us autopicking up the Amulet as part of the fast Amulet transport glitch), and would run into polyform trouble (air elementals can't kick). Also, you can't double-store hurtle cancels; you can only store one item at a time in the "taking_off" variable, which is how the storage works. (Because of the reason storage glitches happen – values left in variables that should have been reset – you normally can't store two of the same type of storage at once. This is true for games generally, not just NetHack.)
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1034
Two more discoveries, both to do with the very start of the turn 2000 unlock. One is that it's possible to gain alignment on a turn boundary, after the cap increases, thus saving a portion of an action on turn 2000 (no time saving yet as we'd need to find some way to do the quest unlock in zero time, but encouraging). The first method I found via which to do this is via the "You feel that Thoth is well-pleased" prayer result (which happens as the last thing during turn boundary), but this is mutually exclusive with galloping on turn 1999 (as we'd be busy praying). Looking at the code, stinking clouds probably also work, and have the advantage that they don't conflict with anything. Another is that it's possible to get storage for the farmove state. (I should really look for more storage glitches; it seems like a fruitful direction to go in.) One method is to die to a delayed instadeath during a farmove command (and because this can happen before turn 2000, the "oLS it costs is no big deal; we can just put on another). This gives us much more flexibility in how we do gallop refresh actions. This probably doesn't save time even on a riding-based strategy, though, because it's cancelled by any multiturn action at the end of the action (notably, reading the Book), and by various other things, the most notable being wallwalking (!). As such, if this is practically useful, it's almost certainly just to provide more flexibility for turn 1999.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1034
OK, so it's impossible to cancel a gallop speed boost maintenance action without spending time (strangely, even a "oLS seems not to help). However, my guess about the beartrap was correct; it is one of several methods that allows you to do such an action without losing storage. The trick is to enter a farmove command in a direction that isn't towards a wall. This leaves you stuck in a multiturn action at the turn boundary, which normally you'd need a wallwalk to cancel, but it gets automatically lookaround-cancelled at the start of the next turn, which I didn't realise was a game mechanic until I started writing this post. I think this might be enough to hit the 2003. We set up storage on turn 1999 (entering a bear trap before doing so, and with the new gallop maintain action afterwards). Everything then follows the previous plan until action 4 (which is "oLS-cancelled) and the previous action 8, now 7, which we use to re-equip the "oLS. Then we just follow the previous plan up until what was action 13 (now 12), and spend one action manually polymorphing, which solves the polyform problem without disturbing the rest of the plan. I'd need to run through this to make sure that the changed turn boundaries don't throw anything off, though (such as monster charges).
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1034
I don't mean "doing it as a monster action wouldn't save time". I mean "it is not possible to do this as a monster action; there is no setup with which a monster action would cause this to happen". In other words, it's a case of "it's impossible" rather than "it's not helpful". However, I've just noticed that the farmove flag (used by galloping) gets set even with invalid movement commands into walls! The problem is that it gets cleared immediately afterwards. I'm going to try to find a way to cancel a gallop speed boost maintenance action without spending time or a "oLS; that would probably save one action, possibly two.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1034
Neither of those is possible as a monster action; the whole reason we can't do fast amulet transport directly from the sanctum is that there's no way to leave it on a monster turn, and reaching Earth requires either use of the stairs or a c!oGL, it can't be done via levporting (or we'd just go there directly). (Also, exiting the sanctum as a monster action wouldn't help because changing level on a monster action prevents anything further being accomplished on that action.) EDIT: (editing your posts so much makes them very hard to respond to because they keep changing while I'm trying to reply to them) Setting up a hurtle cancel only costs one action, so there's no point in sacrificing an action just to be able to skip that part of things; you only break even.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1034
I mean, downwards to get to Quest Goal. The regular entrance portal won't help there. Cancel 4, replace on 9 doesn't work because 9's scheduled action is a levport, and levporting on a monster action is a full stop that prevents you going any further. I think you probably meant cancel 4, replace on 8? This actually looks really promising. The problem is that we need action 8 for the hurtle cancel setup in the current plan. Perhaps there's some other way to a) do the setup or b) maintain the setup from turn 1999, though. (At the moment, the setup gets cancelled by the last action of turn 1999 because we have to be galloping into a wall at turn boundary to get the full five actions. Now I'm wondering what happens if we don't move during the gallop due to a bear trap or something; perhaps we could make it work.)
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1034
Turns always start with a player action (unless the player is depleted on movement points, which is clearly suboptimal in this situation), and the alignment gain needs to happen before anything else. The only thing that happens beforehand is the turn boundary. If we could somehow find a way to gain alignment on the turn boundary, we'd run into the problem that #chat (the action required to gain acceptance to the quest on a player action) is not "oLS-cancellable. Also, I'm not 100% convinced that it's possible to leave Quest Home on a monster action; I don't think it generates levport traps and I'm pretty sure you can't dig a hole there.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1034
So the basic situation here is, we have some time periods where we're capped by player actions, and some where we're just capped by actions total (which implies level changing, as in non-level-change situations, we can just use more monsters to get more actions). "oLS-cancelling a player action gives us two actions in a row (assuming that the first can be cancelled; not all can be), at the cost of a player action later. That action would have to be immediately after a monster-action level change, and in a situation where we benefit from a monster action immediately afterwards. A "oLS-cancel is severely limited in what it can do, though. In the current plan, turn 2000 action 1 looks like this: gain alignment (player), get accepted to quest (monster) Action 2 looks like this: go to quest goal level (player), get eye/bell (monster; requires several monsters but it's doable); leaving the level via monster would cost no additional time Using a "oLS-cancel doesn't help on these actions (and I agree with you that they're the most promising); if we cancel the gain of alignment we don't get accepted to the quest (as you don't get a monster action after a "oLS-cancelled action), if we cancel the visit to the quest goal level we're now on the level but don't save any time because we don't have the eye/bell.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1034
If you "oLS-cancel an action, there isn't a monster action after it, and I think this means that there's no action we can cancel to save time (this isn't inherent in "oLS-cancels, just that there happens not to be one on which it would help). Good idea otherwise, though; I hadn't considered leaving the quest the intended way because it's so much slower. There's also the problem of somehow getting the Bell with a single player action. I'm not sure if that's possible; I guess we might be able to steal it. (We don't need the Eye in this scenario, and in fact it would be simpler not to pick it up; how's that for an unintuitive strategy?) I'm not convinced that this sort of idea doesn't help, but haven't found a place at which it's useful.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1034
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: 1034
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: 1034
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: 1034
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: 1034
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: 1034
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: 1034
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: 1034
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: 1034
"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: 1034
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: 1034
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: 1034
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: 1034
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.