Posts for ais523


Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
@Spikestuff: an encode on YouTube also contains the notes, game information, author, rerecord count, and subtitles, in addition to allowing players to watch the movie. (So it doesn't contain all the things you mentioned, but it does contain most.) I can understand bundling other things with the input for convenience. However, when I work on the TAS, I'm working with a literal input file; it contains the input, and nothing else. (It doesn't even contain a savestate; the savestate contains the input file in nethack-tas-tools rather than the other way round.)
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
You need to be very careful with disconnecting controllers. It's been known to cause spurious button presses, especially of Start, which would rather ruin the effect.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
"Input file" is my favoured term, I think. Sometimes I use "recording" which is very neutral and generic, which makes it not-ideal (it isn't inaccurate but it also isn't very descriptive). I've also worked on a rerecording framework which uses the term "log" internally to describe the file in question, but that wasn't my choice and may just have been chosen to be short (I use "recording" in the UI).
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
In my opinion, password-anchored movies should require verification movies and count as a newgame+ the same way that save-anchored movies do. There's no real fundamental difference. In particular, the use of a corrupt password is not really different from using a corrupted save file that was placed directly on the cartridge with a save file editor.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
MUGG wrote:
Is something like this viable for other consoles? If yes/no, why?
The glitch requires the game to use a particular sort of controller read routine (that waits for a stable value on the controller). The NES has a glitch that makes this sort of read routine useful, so we'd expect many NES games to have the glitch. Other consoles don't have the glitch in question, so games don't have much of a reason to use the glitchy read routine; it's possible that games could use it for some other reason, but seems fairly unlikely. As such, I'd expect the glitch to be mostly NES-specific.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
SmashManiac wrote:
Am I to understand that the 2-second SMB3 TAS can't be submitted yet? Is it just because emulators are lacking sub-frame inputs or is there also an accuracy issue?
It's because emulator input file formats are incapable of representing sub-frame inputs. FCEUX can handle them if they're input via Lua (and, although quite possibly not perfectly accurate, is accurate enough to emulate the run in question); however, there's no way to specify the input in question in an input file/recording.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
JorWat25 wrote:
So, when are we going to see that Mario 3 run submitted?
It might be a while. The problem is that although it works on console (as demonstrated), it doesn't actually work on emulator the way that TASvideos sees it; you can't produce that result by replaying an input file on any emulator we accept. We may have to wait for more accurate emulators before it becomes submittable.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
I'd recommend using system call interception rather than LD_PRELOAD. I've had some experiments in this direction myself. Containers are definitely the way to go in order to get a lot of reproducibility for free. (For things like /dev/random, I suspect the simplest method is to put a FIFO there – you're in a container so you have control over the filesystem – and attach the not-an-emulator to the other end of the FIFO. You could arguably even just make it a regular file with contents determined by the TASer, most games won't notice.) More difficult is making things like the memory map reproducible. Linux actually has system calls for this (see prctl); you probably also want to look into the personality system call, that you can use to turn off ASLR. The hardest part, though, and the one that gives me the most trouble and pretty much stalled my project, is scheduling. Linux isn't very good at giving userspace control over scheduling because it's hard to know, before you try to run it, whether a system call will block or not, and you need to know that to schedule correctly; I'm actually considering trying to handle the problem with a kernel patch (I think that it'd be possible to persuade the Linux developers to accept it, because there are several different scenarios in which the patch in question would be useful). Unfortunately, you're necessarily going to end up facing multiple processes with pretty much any game because X is a separate process. Some games can run without X, but tend to be buggy without it (e.g. Battle for Wesnoth has obvious graphical glitches), so some way to simulate X is needed. I'd recommend throwing xvfb into the container rather than trying to emulate X yourself. All this does is handle half the problem of making a TASing system, that of giving you deterministic behaviour given fixed inputs. (Recording and playback is pretty easy once you have that, so I don't really count it as a major part of the problem.) The other half is handling rerecording, that is, the savestating and loadstating. There are two separate ways to do this; nethack-tas-tools (which is all about savestates and loadstates, really) uses a VM, whereas CRIU attempts to do it directly in loadstating (and is something dwangoAC is considering for the future of nethack-tas-tools).
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
A LOTAD's basically a proof of concept. You use tools, but you play much of the game in realtime; rerecording isn't used to make the run perfect, but rather to undo mistakes and bad RNG, and to ensure that you get frame-perfect glitches. Or in other words, you use the TAS tools in places that "require TASing" but not during regular gameplay. As such, the harder a section is, the more optimized it is. They're much faster to make than typical TASes are, and tend to be faster than speedruns because they can use the "TAS route". A fully optimized TAS is likely to beat their time, though.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
I haven't watched it yet (so I haven't voted yet), but based on the description, this TAS contains pretty much everything that I've been advocating people put into their TASes, and as such I am really happy with the strategy here. Things I like about it: - It's a demonstration of why emulators really need to implement subframe input correctly. - It's a checksum collision used to corrupt a save. Nice to see that used in a better-known game than Pwn Adventure Z. - It's a demonstration of how most games allow ACE via some method or another. - It contains lots of complex setup in order to cause events to happen much later down the line. The first two points go together, really; a subframe reset during a save + a checksum collision gives you a "save merge", which is something that people should really try to find in many more games (it's possible to write a game to be immune to it but many devs don't). It lets you use some values from the old save, and some values from the new save. This is most useful when you manage to split halfway through a value (e.g. taking the x coordinate from one save and the y coordinate from another). FWIW, the only reason I didn't need a subframe reset in Pwn Adventure Z was that its save code is so inefficient there was an actual frame that would work.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
TheMG2 wrote:
I'm not sure how to go about adding subtitles but I guess I could do that.
There's some sort of subtitle format that contains timestamps and corresponding subtitles. You can send it to an encoder to have softsubs or hardsubs added on an encode (in this case you'd probably want "soft subtitles" that the user can turn off), and I think you can add it as subtitles to YouTube as well. I'd suggest contacting an encoder and asking them what sort of format they want subtitles in.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
Interview about this TAS (featuring me and dwangoAC as the interviewees): http://www.roguelikeradio.com/2016/06/episode-122-nethack-tool-assisted.html Probably there isn't much here that people who follow this thread don't know already but I imagine many people here are interested, and I like to post all the TAS-related material in this forum thread so that there's somewhere central to follow it. EDIT: Also, new permanent homes for turnbyturn.txt and t2000timings.txt: http://nethack4.org/latest/nethack-tas-tools/turnbyturn.txt http://nethack4.org/latest/nethack-tas-tools/t2000timings.txt (These URLs produce the same result as cloning the git repository and looking inside it for the files manually would produce, but should be much easier to use.)
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
The previous paper along those lines contains quite a few mistakes in terms of what's possible in the games. For example, they mention a device for Metroid which relies on you not being able to enter a morph ball tunnel from the side while jumping/falling, then say it applies to Super Metroid too. Of course, given that we have techniques like the Alcatraz escape, that isn't actually the case. This invalidates the proof because it relies on there being no easy way to perform certain tasks (thus forcing you to do things a difficult way instead). However, it doesn't invalidate the result; for example, you can use pipes like the one that goes between the top and bottom of Maridia to construct crossovers instead.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
ais523 wrote:
On another subject, doing minimum-gametime or minimum-score runs (i.e. conditions that do not cap the number of actions, or the amount of realtime taken) have the issue that optimal luck manipulation would probably take years.
No updates to the TAS recently. (Sorry for getting everyone's hopes up, but I haven't forgotten it and in fact have been thinking about it a little recently.) I just wanted to quote this sentence from the first page of this thread, because it's so ironic in retrospect.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
Is the idea of skipping Varia saving time for any% or 100%? It's not obviously faster or slower in either context (of course in 100% you'd have to come back later but you need to do that in both cases due to Artifact of Wild).
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
I remember when people were trying to find a way up that shaft in order to allow a large route improvement and corresponding time save (assuming it's the one I'm thinking of; I don't have room names memorized). It was big news when it was originally found. Now, a TAS makes it go really quickly and look easy.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
creaothceann wrote:
https://en.wikipedia.org/wiki/Arithmetic_underflow (note that subtracting an integer is essentially the same as adding the integer's complement, so it's still an overflow)
When you're adding the complement, you expect it to overflow, which produces the mathematically correct result (the complement is designed to work as a subtraction after an overflow). This is a case in which doing so unexpectedly doesn't overflow, so it's distinct from the case of adding something and getting an overflow. I've seen the term "negative overflow" used for a situation like this one, as it's more like an overflow than an underflow in terms of what mathematically causes it, but on the other hand it adjusts the value in the other direction and thus is the opposite of a typical overflow.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
I think the game is designed around trying to complete everything before the meter runs out. Special attacks lower it, dying lowers it, and when it runs out, it's a game over.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
Emptying the potion shop probably won't be in the final run, because it turns out we don't need all that many potions after all. (We were going to use them for the ascension run, but we've since found multiple ways to skip that part of the ascension run.)
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
Wow, I hadn't looked at the rerecord count for a while and didn't realise it had got that high. (That said, it still feels embarrassingly low.)
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
An update on this run: it turns out that the situation with autopickup is more complicated than we thought, due to a bug I didn't know about at the time. I've edited a description of the autopickup considerations into the run description.
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
electricslide: Note that this game takes 2071 turns to ascend. It's not aiming for gametime, and could be substantially faster in gametime if that were the goal. (For example, there are some glitches that could be worked into the ascension run with minimal setup. stenno managed to pull one of them off in a non-TAS game more or less as soon as he was told about it, despite not even knowing the glitch existed throughout most of the game.) The run cannot be published as is because it uses a cheat code (apparently as the result of a typo, and I don't think it impacted the run, but I can't be sure). You'd need to at least clean that up to make the run legal. Anyway, I strongly feel that "spend the first 800+ turns setting up for a gametime run without bothering about realtime, then attempt to TAS the rest of the game in 6 hours with a mild focus on realtime but with playaround actions every now and then" is not a legitimate category, and doesn't really do justice to the game. I found it hard to distinguish the speed-TASed part of the game from unassisted play, with the exception of a few places where memory watch had clearly been used. There were lots of places which were clearly indicative of a lack of planning ahead (which is reasonable considering what a hurry it was made in), but also lots of places which where indicative of not understanding the capabilities of a TAS. (For example, when turn-burning, why not just luck-manipulate away teleportitis and polymorphitis prompts?) In terms of burning unused time, if you're going for realtime, you'd want to adjust your own speed via the use of slow polyforms so that you only just have enough time to accomplish everything you want to accomplish. EDIT: dwangoAC clearly wants the run to be judged based on the fact that it was finished in a hurry, so I've adjusted the category name to allow for this fact. Now we can have a proper debate about whether this is a legitimate category (IMO not, but some people might be entertained by it?) and whether it's a decent submission for the category (IMO it does reasonably at this, but could be done better). It's a pity I don't really have 6 hours spare, because now I'm curious as to how fast I could make a realtime run in that time (either with the existing tools, or by modifying them a little to allow for speed-TASing, e.g. disabling the Backspace key to prevent muscle-memory typo corrections). I'd probably follow the existing run up to the rings or maybe the Castle wand, but deviate from the pattern much faster and start burning turns. (I guess the "control" possibility would be to get Adeon or someone to do a realtime-oriented speedrun recorded in a TAS environment, perhaps luck-manipulating a few wishes along the way, then just use the TAS framework to spam the keystrokes in as fast as possible. I suspect that might be realtime-faster than this run is.)
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
OK, so a list of mistakes I've seen in the speed-TASed portion of the run (I also noticed a few in the gametime portion, but those will probably be redone anyway for the gametime TAS; this list may be incomplete, I got kind-of numb to all the mistakes after a while): * (robe?) * (too many potions?) * Entering invalid/incorrect commands just before the fight with Narodnaja. Entering ' ' just wastes realtime, whereas entering 'B' destroys the legitimacy of the run (it's a nethack-tas-tools cheat code for manipulating level entry positions, and something that's meant to be loadstated away each time it's used). * Killing the small mimics wasted a lot of time for no gain I'm aware of (was that for alignment-fixing? if so, killing them makes sense, but they could have been killed rather faster, and you wasted an action afterwards to trigger teleportitis, rather than wasting it in a low-lag area or via polyform). * Walking from dlvl4 to dlvl6 manually (and onwards via teleport to the stairs rather than levport) surely has to waste time. If you're looking for enemies to kill, teleport to an area with a lot (a zoo, or the like) and kill them quickly and stealthily there. * Autopicking up items you don't need (like the elf mummy's wrapping on dlvl 7) wastes realtime due to the need to print text describing what you picked up. * Given that you're moving on the "descension run" down from level 4, you should be in a slower-than-normal polyform to reduce the number of screen redraws needed compared to the number of turns before 2000 burned, unless you're having problems fitting everything in (which you shouldn't be). This looks like you're being excessively cautious and haven't planned out the rest of the run. * On dlvl 8, you're clearly using walking rather than waiting to trigger a teleport. Although I'm not 100% certain, the extra vision calculations and screen redraws imply to me that this is a more laggy option than waiting would be, and will come to the same thing. (You could also use travel + a low runmode to reduce the number of screen redraws, if you need to move for some reason; I'd be more willing to believe that this is faster than waiting, than that your current route is.) * The Wizard of Yendor fight on dlvl 11 takes much longer than it should in a TAS. You have a ton of alternatives that could oneshot the Wizard; some might be slower due to needing to enter extra text, but I find it hard to believe that all are slower than the brute force method. (For example, perhaps you should have been coming down here in cockatrice rather than jabberwock form.) * Which reminds me: why are you using jabberwock form for a descension run, given that it prints an extra message at every stairway? * Minotaur form on dlvl 14 is faster than the neutral speed of 12. This forces you to burn more turns later. * During the throne room fight, most of your actions print multiple lines of messages. When aiming for realtime, you should skip all but the first line with Esc. This is an obvious timesaver and it looks very suspicious that you aren't doing it. (I didn't skip most messages in the stretch of my input you used, but that's because I was aiming for gametime and messages don't count against that.) * An even worse case of the same thing is not pressing Esc when you get paralyzed. Getting paralyzed is reasonable from the point of view of skipping turns, but if you're not skipping messages too and thus allowing the game to run at full speed, you don't get a benefit, it just purely hurts. * You went out of your way to pick up items earlier (such as the extra leather armors), then you went out of your way to drop them on dlvl 14, and then you didn't use them. This is clearly inefficient and a waste of your time. * Killing everything in the throne room was unnecessary, there's easily enough monsters there to cap you on alignment. You should have just killed the ones that had teleportation scrolls. (Yes, I know nethack-tas-tools doesn't have a memory watch feature for that yet, but an optimized TAS would have added one rather than performing a lot of unnecessary kills, or at least experimented via savestates.) * I'm assuming you sat on the throne the first time as RNG manipulation to manipulate away some unwanted event? You could have walked towards a wall, wallwalked, and walked back, and it'd have been faster in realtime (wallwalking is faster than sitting). * The first attempted polymorph when on the throne enters an invalid polyform the first time round, presumably as a result of a typo. This synced with my script as no backspace was involved, but it's clearly ridiculously sloppy. (Invalid polyforms don't affect the RNG, so it's just completely a timewaste.) * OK, I see why you slaughtered the throne room; it's so that you could waste time on the level without being interrupted. Not that that makes more sense than waiting on an already-cleared level and then luck-manipulating the throne. (Note that the longer you wait on the same level, the laggier it gets as more monsters spawn, so even better would be to split waiting time among a range of levels.) * One of the spells you cast against the sergeants missed, to no benefit that I can see. You shouldn't be missing attacks in a TAS unless they're part of a larger sequence, if you're trying to anger a monster without hurting them, or if you're trying to hit some monsters and miss others that are in the line of fire. * Magicbane strikes me as an odd choice of weapon for TASing. It has a lot of text, and many of its specials don't seem very helpful. * "You can't go up here." You really should be loadstating away typos. * I can't see a good argument for learning identify in a TAS. You should know what everything is already (e.g. quit-ID), and identifying the wand of cancellation does not seem useful at all. This is 3.4.3, so the name-to-write glitch is available and thus there likely isn't a benefit to formal IDs for scroll writing (you'd have to do it a lot with many different types of scroll to gain back the time you spent writing the ID spellbook). * The PYEC gives MR, thus Magicbane's MR is redundant, meaning it mostly just has disadvantages (especially as you enchanted it up). You should really be using something like Greyswandir instead. * Why enter the Mines at all in a TAS? Candles are wishable and it's a lot faster. * Running around in circles on dlvl 12 confuses me a lot, given that you decided to gain speed earlier. These are basically two actions that cancel each other out and add a ton of realtime in the process. (There are other spells you can use to enhance escape.) * You should be manipulating away Magicbane's probe effect. The time spent to manipulate it is minor compared to the time it wastes printing messages. * You spend a surprising amount of time failing to open doors. This has rather more text than waiting. * You're declaring attacks on peacefuls and cancelling them when you had a wall you could walk against instead. Again, this is only really explicable as a typo. * What is the goal of this run? It started as gametime, became allegedly realtime, but the wish for the pony seems more like a playaround action than anything else (because you never use it). * Home:1 is a pretty busy place to burn turns until T:2000, especially as there are monsters moving around within view. (You could at least have unequipped the Eyes of the Overworld. It looks like you've made no attempt at lag management at all.) This also reduces the entertainment of the run somewhat as it looks like you arrived on Home:1 early to be sure of getting there in time (whereas you'd imagine most TAS categories would arrive almost at the last moment). * Dragging Rodney up with you is likely slow due to messages. (I can understand letting him spawn as it'll inevitably happen on Earth unless you let him spawn first and drag or paralyze him, but manipulating him away in Gehennom and letting him spawn on Earth is still probably faster than dragging him.) * Why use the c!oGL route for the ascension run? I can understand why you'd want to avoid the complex amuletportation glitch used in the 2003 turn route, but the amulet branchport trick used in the 2006 turn route is easy enough to set up that it was tested in a live unassisted run shortly after discovery (i.e. a run that was already at the appropriate point modified its strategy to incorporate the trick). This is another reason not to go to Minetown (you'd want to do only 1 level of the Mines). This would also let you save on potion collecting earlier. * c!oGLing into a vault with autopickup on is a bad idea. One wallwalk would probably land you somewhere with no text. * I know getting a perfect portal on Fire is hard, but that one looks a little worse than average to me. You could almost certainly have done better. (I saw some signs of luck manipulation there, but it's hard to believe that it was cost-ineffective to do more.) * If you're going to let liches hit you, why even have potions in inventory at this point? You could drop/box some or, preferably, make fewer. And if you're going to let the liches break the potions, you could at least skip the messages. * You completed the game with unused wishes, despite wasting time to get wishes at earlier points in the game. * Is there some way to stop the Angels using attacks with slow animations against you? This doesn't look like a TAS. It looks more like a realtime speedrun than anything else (and in fact, it mostly looks single-segment rather than segmented).
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
OK, so we've got an encode of this now (after a bunch of corrections, such as to the aforementioned backspaces that were desyncing it, and removal of extra input at the end). dwangoAC is hosting it here. (This is a ttyrec file, so you'll need a ttyrec player to play it. Despite Java going downhill in terms of compatibility, Jettyplay still just about works for the purpose on my system, and may work better on Windows than on Linux. Other players include ttyplay (Linux), ipbt (Linux), and termplay (Windows and Linux).)
Editor, Experienced Forum User, Published Author, Player (44)
Joined: 7/11/2010
Posts: 1022
I've been working on encoding this (I've been writing a non-IPHD-based replay script which works based on modifications to the game). I've hit something of a snag, though: there's a bug in nethack-tas-tools in which pressing the backspace key on the keyboard deletes the entire input line, rather than erasing the previous character. This TAS contains several points at which the runner makes a typo, and instead of correcting it via loadstating and continuing without the typo, presses backspace (so the typo and correction are in the input file). This looks sloppy even in a gametime run, wastes time in a realtime run, and on occasion is exploiting an emulator bug because it's used to delete more than one character. dwangoAC is apparently currently working on a fix, and may well update the link in the submission to hide the evidence, but he can't hide it from me. Mwahahaha. (In any case, this is clear evidence that the run is not optimized enough to accept.)