Then I read the article and saw that this project went to absolutely insane lengths to work around the "nondeterministic" and "hidden information" parts.
The bumping into a wall to advance the RNG state without changing the game time is a really neat trick that I would otherwise have been completely unaware of, and I have played Nethack for many years and done some source diving myself.
Truly a great feat of engineering here.
Initially thought just to probably be some numerical instability when the next actions are all equally likely (I.e. there’s nothing for it to do) but what was actually happening is the pseudo RNG was partially fed by controller input, and certain patterns of controller input would make random rewards more likely to spawn.
I always thought it was cool how these exploits get discovered by the deep nets
I was under the impression that machine learning is only good at learning things that can be approximated by continuous functions.
A RNG is almost the complete opposite of that. It's everywhere discontinuous!
Some games were worse, far worse. Doom used a list of 256 random numbers that it looped through.
Pokemon is another game where the RNG function is extensively mapped, and even used in combination with bugs to generate Mew events, something that should never ever happen.
You see a lot of TAS of old games, especially popular ones, that abuse the RNG generator where feasible.
Here's the link for anyone interested: http://www.roguelikeradio.com/2016/06/episode-122-nethack-to...
A very niche topic on an already niche podcast, but probably will get some decent overlap on HN.
(Also I'm assuming this is the same team? It's hard to tell.)
I'm not sure about the exact terminology. Is an ascension by a bot (like https://www.youtube.com/watch?v=unCQHAbGsAA) also as a TAS?
Although you are right that the group that tried to do a TAS for NetHack (not sure what's their status) chose the MS-DOS port of 3.4.3 for ease of manipulating the RNG in memory and so getting rid of the "hidden information" part.
Edit: also in a game like NetHack, there is potential for an automated tool to help the player. InterHack (https://taeb.github.io/interhack/) was an interface layer for 3.4.3 that added lots of useful stuff, e.g. automatic price identification or wand id from engraving. Most of that has since been incorporated in vanilla NetHack or at least forks.
They seem straightforward to implement even for nethack.
The problem with it is that it's less efficient than exploring on your own.
I usually don't care about that. You learn fast when to autoexplore and when not to, to not miss particular places you value higher than the program. When playing on a tablet, it's tremendously useful and a real time saver.
 Since it had license headers, this is probably okay. https://xorhash.bitbucket.io/nh/nethack_rng_tools-0.2.3.tar....
Curious if bitbucket.io is serving different SSL certificates based on the web agent?
Also note that when you move the cursor in a direction that it can't move (e.g. off the top of the menu) the cursor freezes for an exact number of frames. So if you e.g. hit "up" then "right" the cursor will always move right after a specific frame delay. They use that in order to get frame exact timings that would otherwise be impossible (the "Command?" message also has a different delay, so they can combine the two to get to the frame they need).
The memory is impressive, but belies the massive amount of trial and error that was needed to find the correct combinations.
Thriving in the dungeons though... that's something that's always been elusive.
c!oGL = cursed potion of gain level
This is generally very disappointing because an opportunity for your character to become more powerful was effectively squandered due to the curse. But magically moving upward quickly through the dungeon can be very useful if you need to escape from a dangerous monster quickly—or at the end of the game when you need to escape from the dungeon as a whole. The latter is what this speedrun used in order to avoid having to walk through the dungeon and take the stairs.
Most normal characters wouldn't be close to having enough potions of this kind to get entirely out of the dungeon by this means (also because of a certain complicating factor that prevents characters who can't control the RNG from knowing in advance exactly how many they'll need!). Although it's been done before by different forms of grinding, this is a whole other matter because the potions were obtained almost instantly with a preposterously lucky series of wishes.
I can't help thinking of Phil in Groundhog Day coming up with new challenges as he spends eternity in Punxsutawney PA.
This game's been around for 30 years, and is still under development. Some would assume that security patches on any 30 year old piece of software would have found nearly every bug or account for unexpected usages.
There's also a big assumption that random states on remote systems can't be determined. Our assumptions around what's "good enough" keep getting broken. 32-bit states, MD5, SHA-1, etc... Now clearly (until quantum computers go mainstream) some problem spaces are just too big to reasonably brute force or find collisions.
Could/will we find critical bugs that allow us to do similar types of attacks for modern computing systems that aren't games?
I’ve never ascended on Nethack though despite all my time invested. I’m probably playing it wrong but I don’t care it’s still fun as hell.
I try to explain my friends how fiendishly hard NetHack is but they always say stuff like 'Well I've won in Dark Souls so I know about hard games'. It's not even in the same league imho.
It's like dark souls if there were way more monsters and items with interactions that can one shot you if you aren't knowledgeable and careful, but you don't know what they do right away, and when you die you have to start from the beginning with a totally different level layout, starting loadout and pickup RNG, AND you forget what all the items do.
But yeah... I've seen some fake amulets, but I've never gotten the real one...
Find non-magic fountain next to a wall (manually) 90 wishes. Eyes to phase-jump through walls. 60 c!oGL. ~+100 MB Genocide LcPUn (due to lazy bot code ;)) Tele Vlad, phase-jump tower, get candelabrum. h-strats to provoke Rodney (who is not allowed to return by RNG) Wait for quest Level-tele to jumping distance from quest leader (save realtime over landing next to). Go to end Land jumping distance from square Phase-jump to priest c!oGL to top (Mysterious force not allowed. Lovely.) Hallu for RNG manip without walls (just press space) Force portals relatively close on Earth, Air, Fire. Ascend.
I recently stumbled across the concept of splittable RNGs, which works around this very problem.
Once seeded, you can either "hand in" the generator to get a random number, or you can split it into two (or more) new generators that themselves can be handed in or split.
From a single seed generator, you would split off multiple generators for things like map generation and monster behavior, which then split their generators in turn to generate the level or move monsters.
As a consequence, if you change some monster behavior that uses the RNG, that does not cause the level generation to change, because that was split off earlier and is thus on an independent chain of random numbers.
so neat -- i love that the RNG space fits into 100GB (all nethack games that ever will be).
The other thing is that two instances of the same game diverge quickly when the player doesn't take exactly the same actions, because monster generation and dungeon level generation will use the current state of the RNG. So although the RNG will produce the same series of values, the millionth RNG value for one player might be used for the success probability of the player's attempt to hit a kobold, and for another player might be used for some aspect of generating a new dungeon level.
And of course this would all be shot to hell if Nethack went to a 64 bit seed.
that being said, wouldn't map information be sufficient for the remainder of the classes? so using starting equipment is really just an optimization available for this class?
Check out the information at the very end of this page.
Thanks for the laugh
So if you grind long enough, every high score is possible and overflowing the score counter with pudding farming was quite easy on 3.4.3 on 32 bit systems (the score counter is a long).
What players have done is a MAX_INT game or ascension. That needs some preparation and the MAX_INT game is easier to do than the ascension, as the ascension gives you additional score points, so you have to anticipate this.
There are even 64 bit MAX_INT ascensions, although those are done of course with exploiting some bugs.
I didn't watch the TTYREC but I am seriously puzzled by that. Anyone has insight into this?
> The fountain is required for wishes. The wall is required to be able to offset the random state without advancing the game state – every time the character attempts to walk into a wall, it calls random() without wasting any in-game time. From the fountain, the bot ascends completely on her own.
On the other hand DCSS's game design is pretty stellar in my experience. It's better balanced than Nethack and relies less on arcane knowledge to get through the game. I've always ended up being frustrated while playing Nethack blindly because it feels unfair, meanwhile when I started reading spoilers I felt like I was cheating. DCSS handles that a lot better I think.
And I would suggest it not just for gamers but for programmers as well. There is a lot one can learn about user interfaces, shells, coding, architecture, data management (items, races etc are all data) with the additional motivation to learn it while playing.
Aye, good times...
I think it took me a couple years to ascend without cheating, I don't know whether to cry or laugh at my former self :)
Btw, I think modern nethack playing is quite different from the old times, because of the amount of easy to find information (i.e. wiki,guides etc).
Playing without spoilers is more interesting but can become frustrating much faster.
You just need time and imagination.
It is two guys, the player is starting from almost no knowledge and there is a "leader" who is a veteran leading him through the game (or watching him die). It's very entertaining and also acts as a tutorial.
Also - any good tower defense suggestions?