1 2 3 4 5 6
18 19
Post subject: Re: Interesting DOS NetHack random seeds list
Editor, Player (44)
Joined: 7/11/2010
Posts: 1022
dwangoAC wrote:
After discussions in #tasvideos about brute-forcing random seeds for the DOS version of NetHack I offered to volunteer some CPU time to brute-force seeds using an expect script that ais523 hacked together which looks for a character that "starts with IDed leather; we need unIDed GoP" and also looks for one cream pie and gloves in the starting inventory (correct me if I'm wrong on this).
No, I'm looking for a cream pie and gloves on a character who doesn't start with leather gloves (because they can't possibly be the gauntlets of power I need, and it creates far too many false positives).
I started four executions at a time between a couple of different systems and came up with 5 seeds that matched: Start seed of 107121391 found 107743635 Start seed of 109000000 found 109073336 Start seed of 112000000 found 112781909 Start seed of 115000000 found 115168678, 116323878
Unfortunately, as I feared in IRC earlier, this really is affected by the phase of the moon, and there's a full moon at the moment. (It ends on Saturday in whatever timezone the brute-forcer happens to be running in.) So although 116323878 is would almost be a perfect seed, it's one that only works on a full moon, and it happens not to be a full moon at the time that produces that seed.
It looks like I've been brute-forcing seeds in the distant past based on the fact that my starting digits are one lower than ais523's, possibly as an accident in cut-and-paste from IRC. I'm going to re-start with a more current random seed of 1071026631 and let it keep going from there as it'd be a bit nicer if we found a seed that is after 1070719677 (6 December 2003, the date given for NetHack 3.4.3 in its changelog) but before today's date, which I believe is somewhere in the range of 1282848486.
Indeed, it seems that way. Hopefully the more current seed will produce a result with the correct sort of moon sometime soon; and there's certainly a large enough space to search in. (The fact that two of the seeds dwangoAC posted above work is heartening, as it implies that the events I need aren't so ridiculously unlikely we can't find them.) The desired items are for a glitchrun, by the way; gauntlets of power produce the longest item names in the game (thus making buffer overflows easier and faster), and the cream pie is by far the simplest way to trigger the glitch in the first place (there are others, but they require both more realtime and more gametime to pull off, not to mention rarer items).
Post subject: Re: Interesting DOS NetHack random seeds list
Joined: 1/3/2010
Posts: 16
dwangoAC wrote:
I offered to volunteer some CPU time to brute-force seeds
If more brute-forcing is required, maybe I could help? I'm offering CPU time on an intel i7, liquid-cooled and 6 Gb RAM. Though I don't really know much about emulating DOS and thus would require help on teamviewer. But I would love to help. :)
Patashu
He/Him
Joined: 10/2/2005
Posts: 4016
Could you improve the search slightly by making it look at every object in the room to see if they're cream pies/etc? I think there's a command that cycles through every object in the room.
My Chiptune music, made in Famitracker: http://soundcloud.com/patashu My twitch. I stream mostly shmups & rhythm games http://twitch.tv/patashu My youtube, again shmups and rhythm games and misc stuff: http://youtube.com/user/patashu
Editor, Player (44)
Joined: 7/11/2010
Posts: 1022
Patashu wrote:
Could you improve the search slightly by making it look at every object in the room to see if they're cream pies/etc? I think there's a command that cycles through every object in the room.
The issue is that such seeds would necessarily lead to a suboptimal TAS, on the basis of needing to walk around the rooms to pick an item up. Given that it seems possible to find a seed that works perfectly with a day or so of bruteforcing, why not?
Editor, Player (44)
Joined: 7/11/2010
Posts: 1022
Hmm, I've started trying to do a glitch-TAS now, but the memory allocation routines aren't cooperating and I don't know why; I can't even find malloc's internal tables in memory. It does seem that the glitch is possible, in that it's relatively easy to maintain the glitch item slot as free even over multiple in-game turns; the issue is that other slots the same length seem to free too, making it hard to get data of our choice into the glitched memory block.
Editor, Player (44)
Joined: 7/11/2010
Posts: 1022
Here's some info on DOS NetHack's internals, because dwangoAC asked. I'll use the seed 1223790555 as an example, as it's the one I'm using for my testrun (it may not be the very best seed for the glitch, but it's definitely pretty close, and I'll need to know exactly what to look for to find one better). Objects take up 60 bytes or more in memory, generated using malloc. Here's an annotated dump of the gauntlets of power in memory, that are autopickedup on turn 1 with the seed given (note that a number like 12 34 56 78 is actually 0x78563412 due to the endianness of the x86 processor): GoP (at physical address 00C390B0): 00 00 00 00 nobj The next object on the object chain. This is what the game uses to iterate through inventory, etc.. A glitch object isn't actually on any object chain, so this won't be checked when doing the glitch. This is, however, why you can't (for instance) make a glitch object into a real one by fumble-dropping it; it isn't in the inventory object chain (you'd need to glitch a different part of memory to do that), so the game panics as it can't find an object that ought to be in inventory. 00 00 00 00 vptrs A backreference from the object to the next object on the same floor location, the container that contains it, or the monster that carries it. Never checked for a glitch object. 00 00 00 00 cobj If this object is a container, its contents (an object chain). Doesn't matter otherwise. 1C 00 00 00 o_id An arbitrary number, different from every object, used to see if two objects are the same or not. 1D ox 04 oy The location of the object, last time it mattered. (Probably when it was last on the floor.) Doesn't matter for objects in inventory, and thus glitch objects. 8A 00 otyp A code representing what sort of object the object is (0x008A = gauntlets of power). 1E 00 00 00 owt The weight of the object in game-internal units. Doesn't matter for any commands you can actually give on a glitch object. 01 00 00 00 quan The stack size of the object. Most objects, like gloves, don't stack. 00 spe The magical qualities of the object; this is what's set to 0 by cancellation. For a weapon or armour, this is the object's enchantment. (If trying to cause a buffer overflow, you'd want to set this to a 3-digit number like +100, to get a bit of extra length.) 03 oclass The general group of items that this item falls into (autopickup group, screen symbol); 03 is '[', armour. Note: the 3 or 4 bytes from here onwards are the best things to look for if trying to memory-search for a particular object; it's how I found the GoP in memory for the first place. 6F invlet The letter that this object has in inventory, or had last time it was there. 6F is ASCII for 'o', the letter which the GoP gained in inventory immediately after being picked up. The game also uses this as a flag to see if an item has ever been in inventory (relevant when training pets, etc., although not for a glitch object). 00 oartifact This object's artifact code. Used to distinguish Excalibur from a longsword that happens to be named Excalibur, etc.. (It's a common urban myth in the NetHack community that this isn't tracked by the game, because it prevents you naming an item to clash with an artifact name anyway, part of a well-known realtime exploit for determining the true identity of an item; but it really is tracked separately.) 00 means it isn't an artifact. 03 where Where the game currently thinks the item is; 03 means inventory. Glitch objects tend to have 03 in this field (unless manipulated by the player), even though they aren't actually on the inventory chain. 00 timed The number of in-game timers on this object, used to track when it, say, hatches or burns out. (The timers themselves are stored elsewhere.) Will generally be 0 for most objects. 20 bitfield1 00 bitfield2 00 bitfield3 00 bitfield4 32 bits which have separate meanings of their own. In order: cursed, blessed, on a shop bill, in a shop but not owned by it, formally identified, viewed while not blind, blessing/curse known, rustproofing level known, [2 bits] rust/fire/dilution damage level (also used for "blecch!"ing food), [2 bits] corrosion/rot damage level (also used for unreviving corpses), erodeproofing level, locked, trapped/poisoned, [3 bits] recharge count, lit (for lamps, etc.), greased, [2 bits] object refers to a monster (for tracking dead pets, etc), currently being used by game internals, immune to spells (used temporarily to stop items being affected twice by the same spell). This is likely the most useful field for a TAS; in particular, "viewed while not blind" can be altered simply by pressing ) to view the object's name, changing a 00 in that location to a 20, as seen here. My current plan is to use this to overwrite a trailing NUL at the end of a string to a space, although it might require several memory allocations to pull off. There are other potential uses too, such as setting as many of the user-visible flags as possible to create a really long object name. ignored padding: 00 00 00 00 00 00 corpsenm An object-type-specific flag: the monster class number of the monster this item is a corpse of (if it's a corpse), the monster ID of the pet leashed to this item (if a leash), the number of times a spellbook has been read, or 1 for an unbottled potion coming from a sink rather than a bottle. 00 00 00 00 oeaten For partially eaten food, how much is left to eat. 01 00 00 00 age Gametime when this object was created. (This is responsible for the unfortunately unexploitable crash when you drop 0 gold pieces onto another stack of 0 gold pieces; averaging out the ages gives a division by zero.) 00 onamelth The length of the user-specific name for this item (used to reallocate the item if the name is made longer). ignored padding: 00 00 00 oxlth The offset from the end of the object to its name. Nearly always 0 in actual play (except in weird cases like named pet corpses, where the info is put in between the end of the object and its name); however, if this is changed via glitch, the object will take its name from an unexpected place in memory, which might help to gain unusually long names. (It's a signed 16-bit number, so you can even take names from earlier in memory than the object itself.) 00 00 00 00 wornmask The parts of the body on which this item is currently being worn; redundant to things like the uwep pointer. This ends up out of synch with reality when the glitch is performed, stating that an item that isn't even in inventory is held in the hands. 00... oextra Other things tacked onto the object, like its name or information on a monster that was converted into an item somehow. The number of bytes allocated here may vary; NetHack uses the "struct hack" famous among C programmers. The memory allocation algorithm used by NetHack is DJGPP's standard algorithm: memory is looked for in this order: - space left over in a block after it had to be split to allocate a small space from a large block (only one of these spaces is tracked at a time); - freed blocks whose size is large enough to fit the requested size, and less than 5/4 the requested size, and has the same number of bits in its size (the most recently freed block is checked first); - freed blocks which are large enough to fit the requested size (checked in order of number of bits in their size, and from most recently to least recently freed in order); - memory requested from the OS. When a block is freed, it's merged with other adjacent freed blocks (two blocks are adjacent if the distance between them is equal to the size of the first plus 8) into a larger block; if a block is allocated but has more than 64 bytes spare, the spare area is put into the "space left over" variable, and the old value of that variable is just marked as free, as normal. For memory watching purposes: while a block of memory is allocated, the 4 bytes preceding it hold its size, and the 4 bytes following it also hold its size (so that blocks can be traversed forwards or backwards), and that's the only tracked metadata. While a block is deallocated, the sizes are still there (but with their low bit set to 1 to mark it as free); also, its first 4 bytes hold a pointer to the next block, its next 4 bytes cache the number of bits in its size (0 means 2 bits as in 2 or 3 bytes, 1 means 3 bits as in 4-7 bytes, 2 means 4 bits as in 8-15 bytes, and so on). (Allocated sizes are rounded up to a multiple of 8 so that the info in question fits.)
Post subject: Thoughts so far regarding the glitchless route planning
Joined: 3/31/2010
Posts: 24
Because of NetHack's weird rules regarding alignment, there's no way to gain access to the quest - and, consequently, to the Bell of Opening - before turn 2000, when the maximum alignment becomes 20 (the minimum required for the quest leader to let you in the quest); this leads to a weird situation in which we have 2000 turns to "waste" before being able to enter the quest. This forces us to think about route planning backwards, because - given the large amount of "free" time we'll use for setup - we must first focus on what happens after the OK from the quest leader: from the assumptions we make regarding the post-quest game, we can then think about the best way to gather the items we need and to set up some weird situations in the first 2000 turns. Basic assumptions:
  • the fastest way to travel is self-polymorph to an air elemental, hasted (with the "haste self" spell, or with potions of speed; the former requires pw and enough skill - and to get enough pw, we'll need either the Eye (which will be locked until the quest if we're a wizard) or a lot of gain energy potions, while the latter just requires the potions) - this gives us 42 plus a chance of 6 movement points each turn; of course we can manipulate the rng to always give us the extra movement points when we need them, so that rounds up to 4 actions each turn - alternated with jumping (the jumping spell at the expert skill - reserved for wizards only - gives us the greatest range), that makes the turncount roll over to the start of the next turn; using the spell on the last action of the turn gives us the fastest way to act, thus we'll be "stuck" as a hasted airE for most of the time after T:2000 - since air elementals are intrinsically blind, we're going to need the eyes of the overworld to see and jump
  • the preferred role is probably wizard, given the expert jumping "restriction", but that prevents us from getting the Eye early, which would help by giving us extra Pw and branchporting while setting up - this can be worked around of course, with levelporting (either with the Orb of Fate or with cursed scrolls of teleportation), and the branchporting will be useful to get out of the quest really quickly even as a wizard anyway
  • A shorter dungeon is of course preferrable, and the shallowest possible dlvl for the Sanctum is dlvl45 - thus, we need to find a seed that gives us dlvl45 for the sanctum during the dungeon generation
What happens at T:2000 and onwards:
  • T:2000 - we kill something, and we wait for the quest leader to notice us - a hasted Neferet the Green has speed 16, so we have at least 2 actions before she does something - and grant us access to the quest NOTE: using speed monster on her makes her angry in the process, so we probably have to find another way; we have one more action so we levelport to the quest goal, appearing next to the D1.
  • T:2001 - we kill the D1, then walk over his remains, autopickupping the Bell and the Eye (we already have BotD and candelabrum from before, so now we're good), we branchport to the VotD and then we levelport down to the VS level, randomly appearing on the vibrating square
  • T:2002 - the candelabrum was lit from before, so we apply the bell (1 action) and then we read the book (1 action), then we teleport down, landing near the HPoM, and something instakills him (bounced wand of death? vorpal blade?), we then walk over his cadaver, autopickupping the AoY
  • T:2003 to T:2013: quaff cursed gain level, 'nuff said (44 potions, we're on dlvl1), or alternate quaffing and going upstairs (assuming the potions make you land on the upstair - this requires less resources but *way* more luck manipulation)
According to this schedule, we're on dlvl1 at the beginning of T:2014, but i don't have time now to lay down the route we came up for the planes - anyway, this for now tells us that we need the eyes of the overworld, at least a couple potions of speed, 22+ cursed potions of gain level, the candelabrum of invocation and the book of the dead before T:2000
Editor
Joined: 3/10/2010
Posts: 899
Location: Sweden
So, 2000 turns to kill, what should be done to spend the time? My suggestion is to arrange items to spell out a word. Like for example, TASVIDEOS. There is aparently some ideas how to get such a varied bunch of items. One is to use hallucination to mess up the display. Another is to use a shop, since they have a lot of items. What other things should be done? Solving sokoban is a rather obvious thing to do. And visiting some special rooms (behives, lepriconnests, vaults and so on) is also easy to think off. But those things doesn't look unusual, it's stuff that happens .
Post subject: Re: Thoughts so far regarding the glitchless route planning
Editor, Player (44)
Joined: 7/11/2010
Posts: 1022
Kerio wrote:
Basic assumptions:
  • the fastest way to travel is self-polymorph to an air elemental, hasted (with the "haste self" spell, or with potions of speed; the former requires pw and enough skill - and to get enough pw, we'll need either the Eye (which will be locked until the quest if we're a wizard) or a lot of gain energy potions, while the latter just requires the potions) - this gives us 42 plus a chance of 6 movement points each turn; of course we can manipulate the rng to always give us the extra movement points when we need them, so that rounds up to 4 actions each turn - alternated with jumping (the jumping spell at the expert skill - reserved for wizards only - gives us the greatest range), that makes the turncount roll over to the start of the next turn; using the spell on the last action of the turn gives us the fastest way to act, thus we'll be "stuck" as a hasted airE for most of the time after T:2000 - since air elementals are intrinsically blind, we're going to need the eyes of the overworld to see and jump
As a punished unicorn, you actually have slightly more horizontal movement (you have, with luck manipulation, enough movement points for 3 actions a turn; you can throw the ball, autopick it up, then jump, with 3 actions, and cover a larger horizontal distance than an air elemental could). It's slower for actions other than horizontal movement, though, so is likely only useful on Earth and Astral, if that. Additionally, don't the Eyes only have a range of 3 (or is that only through walls)? That would prevent jumping 4 spaces, if it is indeed the case. I think it might be possible to save 1 turn on the way up via sequence-breaking, but I'm not sure. (There are various methods to use the magical portal into Rodney's, then break out of the tower via getting rid of the Amulet somehow and levporting twice; you can use teleport or Rodney to get the Amulet out of the tower.)
Joined: 5/13/2009
Posts: 141
I'm just going to chime in here for a second and say 'good luck,' I'm REALLY looking forward to this run and checking out your discussion has been enlightening to say the least.
Editor, Player (44)
Joined: 7/11/2010
Posts: 1022
ais523 wrote:
For the other Planes, it's less obvious. The "stuck" major trouble plus prayer is one potential way to do Astral, if there's some optimal way to get trapped behind boulders (wishing would work but is slow); I'm not sure if it's faster than the "traditional" jumping+teleport enemies mechanism. (I need to check if prayer takes five actions, or five turns; there'd be quite a difference in a minimum-turns speedrun, although not in a minimum-keystrokes speedrun.) On the planes of Earth and Fire, it'll be a matter of manipulating the portal as near to the starting location as possible, and travelling there as fast as possible (possibly via jumping, which would require being a Wizard). Air I'm not sure about, though; the game forces the player and the portal to start at opposite ends of the map, and thus finding a sequence-break to get from one end of the map to the other would probably be a lot faster than having to walk all the way across, without even the opportunity to jump!
Sequence break found for Air (and improved slightly with kerio's help): you can't use safe_teleds or anything like that, due to a teleport restriction (it's a no-teleport level, but additionally, no form of teleportation, even the ones that work on no-teleport levels, can cross from one third of the level into another), but it's possible to move very fast: if you throw a very heavy object (presumably gained on the spot via wishing) to the left, you hurtle to the right. Normally, at this point the game unresistably paralyzes you for a length of time equal to the distance you moved, in order to prevent you gaining time here, but you can cancel the paralysis early by running out of monster-form hitpoints and turning back into human (or other player race) form. I'm not entirely sure what the best movement rate possible is under these circumstances (given the temporary burdening that's likely to be involved, and the large range of possible polymorph forms involved), but it's almost certainly better than trying to do Air the intended way.
Post subject: Re: Thoughts so far regarding the glitchless route planning
Joined: 3/11/2008
Posts: 583
Location: USA
Kerio wrote:
  • T:2000 - we kill something, and we wait for the quest leader to notice us - a hasted Neferet the Green has speed 16, so we have at least 2 actions before she does something - and grant us access to the quest NOTE: using speed monster on her makes her angry in the process, so we probably have to find another way; we have one more action so we levelport to the quest goal, appearing next to the D1.
  • T:2001 - we kill the D1, then walk over his remains, autopickupping the Bell and the Eye (we already have BotD and candelabrum from before, so now we're good), we branchport to the VotD and then we levelport down to the VS level, randomly appearing on the vibrating square
Two things. One, can't you #chat to your Leader to make them notice you? Two, does levelporting actually allow landing on the VS? (I expect it does, as normal teleporting does not have an exception for it, unlike trap squares.)
Kerio wrote:
According to this schedule, we're on dlvl1 at the beginning of T:2014, but i don't have time now to lay down the route we came up for the planes - anyway, this for now tells us that we need the eyes of the overworld, at least a couple potions of speed, 22+ cursed potions of gain level, the candelabrum of invocation and the book of the dead before T:2000
Three, you need to be careful about burden with that potion stack. Even with maxed str/con you only have 1k weight to play with, which would be 50 potions. I don't recall what stats AirE would have. So, you might manipulate C!oGL to appear on several levels (in stacks if possible) and land on them (+autopickup) as you're going up. If you want to save hair-pulling then you manipulate their appearance on the way down or with spare time, or just deploy wished-up ones.
Post subject: Re: Thoughts so far regarding the glitchless route planning
Editor, Player (44)
Joined: 7/11/2010
Posts: 1022
eternaljwh wrote:
Two things. One, can't you #chat to your Leader to make them notice you?
Yes, but that costs one of our turns. We want to do things on the monster's turns as much as possible, as there's less pressure on those than on our own turns. (Everything we don't have to do ourselves saves one action.)
eternaljwh wrote:
Two, does levelporting actually allow landing on the VS? (I expect it does, as normal teleporting does not have an exception for it, unlike trap squares.)
I'm not completely certain, but I think it does.
eternaljwh wrote:
Three, you need to be careful about burden with that potion stack. Even with maxed str/con you only have 1k weight to play with, which would be 50 potions. I don't recall what stats AirE would have. So, you might manipulate C!oGL to appear on several levels (in stacks if possible) and land on them (+autopickup) as you're going up. If you want to save hair-pulling then you manipulate their appearance on the way down or with spare time, or just deploy wished-up ones.
Simplest method's to gain a stack in the time before T:2000, then drop smaller stacks through Gehennom, to be autopickedup on the way up. (Some luck manipulation would be needed to land on the stacks, at a chance of around 1 in 800; better if the RNG sequence was planned in advance, because then we could just drop the stacks on the squares we knew we'd land on.)
Joined: 1/26/2009
Posts: 558
Location: Canada - Québec
Could you post an unoptimized wip or test run with the best option to start the run, also are your going to edith the option in the movie(with the nethack menu or DOS command)? Later I might try to familliar myself with lua or try some random stuff, so getting right Disk ID with the correct setting is certainly going to help.
Editor, Player (44)
Joined: 7/11/2010
Posts: 1022
The issue is that the game's mostly about route planning and luck manipulation. I could certainly post an unoptimised run, but it would just be a realtime run, effectively. Most of the strategies we've been discussing really need heavy luck manipulation to have any chance of them working. Really, I'd like to get the plan worked out before even starting, although something I may do as a route-planning test is to create a TAS in debug mode that gives the character a bunch of items and stats, warps to the end game, and completes it as fast as possible from there; in NetHack, you pretty much want to plan from the end backwards, so a WIP of the end of the game, even if it needs debug mode/hacking to get there, would be useful (with the final TAS played without debug mode or hacking). As for options editing, a glitched run shouldn't need that (it'd take longer to change the options than to do the glitch, assuming I can find a way to get it to work...), a glitchless run will likely change options (via the ingame options menu) to do things like remove timeconsuming animations.
Editor, Player (44)
Joined: 7/11/2010
Posts: 1022
Time for route planning for a (memory-corruption-)glitchless turncount run! Which order do people think the following absolutely essential pre-turn-2000 tasks, listed in the order I thought of them, should be done in? ESSENTIAL TO COMPLETE THE GAME A. Get to level 14. (Required to unlock the Quest.) B. Get the Candelabrum from Vlad the Impaler. (Required to unlock the Sanctum.) C. Get the Book of the Dead from the Wizard of Yendor. (Required to unlock the Sanctum.) D. Get 7 candles, of any type. (Required to complete the Candelabrum so that it can unlock the Sanctum.) E. Attach the candles and the candelabrum. ESSENTIAL TO GET MINIMUM TURNCOUNT F. Get at or near 19 alignment. (20 alignment is required to unlock the Quest but you can't get the 20th point before turn 2000; we don't want to waste time getting the other points afterwards.) G. Get controlled polymorphitis. (Necessary to shift between polymorph forms without wasting action; pretty much all speed tricks require specific polymorph forms.) H. Obtain sufficiently many cursed potions of gain level. (I'm not sure of the exact amount, it's around 40, probably a bit more, less with luck manipulation on the way up; necessary as they're the fastest method of vertical travel with the Amulet, barring sequence breaks.) I. Create a storage system for the potions of gain level that allows them to be picked up on the way up without losing time. (Because we can't carry them all at once without slowing down due to the weight; suggestions for an optimal storage system are welcome, although just placing them on selected downstairs would work with sufficient luck manipulation, I think.) J. Set up the sequence break in the Wizard's Tower. K. Set up pets for the purpose of killing the Dark One on a monster's turn. (Perhaps not possible, although I hope it is.) L. Set up pets for the purpose of killing the High Priest of Moloch on a monster's turn. (Ditto.) M. Accumulate enough turns of timeouted speed (via potion or spell) to last to the end of the game. (Obviously saves time.) N. Acquire any items necessary for sequence breaks (wands of wishing for Air, etc.) Also, what isn't listed here that needs to be? I've almost certainly missed some things.
Post subject: Starting seed and luck manipulation planning
Moderator, Senior Ambassador, Experienced player (898)
Joined: 9/14/2008
Posts: 1007
Between ais523 and myself we've determined that the very first thing to do with the seed we're testing (1447373582) is to immediately teleport to the > (down staircase) and subsequently create a Dlvl 2 that contains a ring shop. This is non-trivial but there are a few interesting things about the seed we found that make it easier. First, the seed 1447373582 (Fri, 13 Nov 2015 00:13:02 GMT) was chosen because it starts at the hardest possible difficulty level the game offers - 13 minutes after midnight on a new moon on Friday the 13th. The above seed was found with the expect script at http://pastey.net/142883 which was used to find a seed that started as a Wizard / Elf / Male character with wizard1 at level 36, fakewiz1 at level 43, and sanctum at level 45 and edible rings of polymorph and polymorph control (the ring of teleport control is not edible but the ring of conflict is). This seed also starts with a Dlvl that starts with the character next to a wall and has the down stairs > next to a wall meaning we can wallwalk for luck manipulation purposes and even starts with a scroll of teleport and a potion of object detection - this seed is ideal for what we want to do. The first step in the run is to luck manipulate reading the scroll of teleport into landing us on the > stairs. The second step is to manipulate the generation of the second level to contain a ring shop - we'll test this by taking advantage of the potion of object detection we started with to detect a bunch of = characters (rings). After discussions in IRC ais523 and I have decided to use Python and Pexpect as this gives us a better way to manage luck manipulation than using pure expect scripts. Update: I've created a Python script which uses pexpect. It starts with the aforementioned seed and characteristics and presses 2 on the numpad various times before attempting to teleport and go down the stairs. If it can't go down the stairs it gives up, quits the game, restarts, and tries again by pressing down / 2 even more times to advance the RNG. The script worked beautifully - it takes walking into the wall 408 times to generate a teleport directly onto the downstairs > icon. The next step is to luck manipulate the layout of Dlvl:2 by walking into the wall next to the > before going down the stairs. The only point here is that as we get further into the game each luck manipulation attempt will become longer. It currently takes approximately 2 seconds per attempt but this will grow. It also takes a LOT of pexpect code to progress through the game. I'm hoping something else can be done to introduce "savestates" external to NetHack into this process so we don't have to always start from the beginning but we can work with the current system if we have to. With that said, next up is ringshop hunting. I hope they have one in pearl. A.C. ******
I was laid off in May 2023 and could use support via Patreon or onetime donations as I work on TASBot Re: and TASBot HD. I'm dwangoAC, part of the senior staff of TASVideos as the Senior Ambassador and BDFL of the TASBot community; I post TAS content on YouTube.com/dwangoAC based on livestreams from Twitch.tv/dwangoAC.
Joined: 7/2/2007
Posts: 3960
Man, NetHack has some weird strategies. I was thinking about what an optimal run of modern Angband would look like (modern versions are far different from the original). It'd probably look something like this: * Roll up a ranger (closest thing to easy mode available). Race should probably be something with good Dexterity to make hit rolls easier. Hobbit or Gnome, say. Low XP penalty to make grinding to level 40 go faster. * Kill a townsperson. They drop a dagger with a high-level ego attribute (e.g. Holy Avenger). ID and sell the dagger. Buy a stack of 50 Scrolls of Deep Descent from the black market (each reading sends you down 2 dungeon levels). This requires significant luck manipulation, assuming it's possible at all (otherwise, buy as many as possible, and manipulate dungeon levels to spawn more). * Read scrolls down to dlvl 99. * Pick up a Heavy Crossbow of the Haradrim (x5 multiplier, +1 extra shot), some Bolts of Acid, two stacks of Bolts of Slay Evil, and a big Ring of Speed (theoretically unlimited modifier; in practice, +18 or so seems the best bet) off the ground. * Shoot down something big like a greater demon for levels (ranger gets +1 shots at levels 20 and 40). * Shoot Sauron to death. Naturally he never casts anything. Bolts of Acid should deal 8 * (4d5 + ~40) = up to 480 damage/shot; Sauron has 10500HP so 22 bolts are needed to kill him. * Read scroll of Deep Descent * Shoot Morgoth to death. Naturally he never casts anything. Morgy has 20k hitpoints and we can only do up to 420 damage/round since he's immune to acid (have to use Slay Evil instead, which has a worse multiplier), so we need to shoot him 48 times. Our speed when shooting is effectively multiplied by 4, so we're much faster than Morgoth even with just the Ring of Speed. Not very interesting compared to NetHack. It'd be a much harder TAS if the scrolls of Deep Descent weren't available, though, since you'd have to descend the dungeon "manually". Using something other than a ranger would also be harder because of the lack of extra shots, which are ridiculously powerful.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Joined: 3/11/2008
Posts: 583
Location: USA
ais523 wrote:
Time for route planning for a (memory-corruption-)glitchless turncount run! (snip) Also, what isn't listed here that needs to be? I've almost certainly missed some things.
Light the candelabrum. Probably one of the last things you do before turn 2k, but still, you want to beforehand to be optimal. Have sufficient food eaten to last to the end of the game. Unfortunately, as you're going to be eating rings, you won't be able to ascend foodless. Maybegets: Get teleportitis. Optionally, get teleport control, depending on how much luck-manipulation you want. (It won't be useful in a turns-TAS, as you'll have zero times after Quest you want to teleport that you couldn't have manipulated on your level change, optimally. But it will help if luck-manipulating your ascent landing locations is too slow for a time-TAS) To ease luck-manipulation, get massive intrinsic protection. To ease luck-manipulation, get a wand of teleport (mainly for Astral path-clearing) Intrinsic conflict might save time, but mind your food.
What're you doing about Pw regeneration? It's ungodly slow for the most part, and the fastest methods (Mitre of Holiness, confused ? of Charging) aren't that convenient-luckmanipulating the Mitre's timeout seems like it would be best timewise, unless you can get convenient Umber Hulks and the like so you get a 1-move confusion just for reading that scroll to get your Pw back. So, getting the Mitre of Holiness, the Eye of the Aethiopica, and/or the Orb of WeightFate (you will probably drop this prior to turn 2000)
Joined: 2/19/2010
Posts: 248
eternaljwh wrote:
Get teleportitis. Optionally, get teleport control, depending on how much luck-manipulation you want. (It won't be useful in a turns-TAS, as you'll have zero times after Quest you want to teleport that you couldn't have manipulated on your level change, optimally. But it will help if luck-manipulating your ascent landing locations is too slow for a time-TAS)
Actually, it could help for going upstairs (rather than c!oGL). Something like: c!oGL out of sanctum, land on upstairs; climb stairs, teleport to upstairs; climb stairs, c!oGL. etc etc. This reduces the number of c!oGL needed (but only the spontaneous teleports help; using ^T uses up an extra turn.)
To ease luck-manipulation, get massive intrinsic protection.
What's the best way of doing this? Traditionally, one goes to ludios and loots it for all it's worth, but ludios is probably boring and time-consuming in realtime (all those messages) and turns. I think it's a choice between an early-game protection racket, eating rings of protection, or both.
Intrinsic conflict might save time, but mind your food.
conflict from the invoked sceptre of might doesn't give conflict hunger (I think). So wish for that, invoke it, then bin it. alternatively, given the short time between turn 2000 and the end of the game, just eat enough food to cope with the extra hunger.
So, getting the Mitre of Holiness, the Eye of the Aethiopica, and/or the Orb of WeightFate (you will probably drop this prior to turn 2000)
The eye is the wizard's quest artifact, so no getting that before turn 2000.
Editor, Player (44)
Joined: 7/11/2010
Posts: 1022
eternaljwh wrote:
ais523 wrote:
Time for route planning for a (memory-corruption-)glitchless turncount run! (snip) Also, what isn't listed here that needs to be? I've almost certainly missed some things.
Light the candelabrum. Probably one of the last things you do before turn 2k, but still, you want to beforehand to be optimal.
How on earth did I forget that one? (You can attach a wax candle first to have it last a bit longer).
Have sufficient food eaten to last to the end of the game. Unfortunately, as you're going to be eating rings, you won't be able to ascend foodless.
Standard trick here is to use fruit juice, which can end up getting above the typical maximums for nutrition. On the other hand, we won't actually need that because we're going so quickly; a huge chunk of meat would probably do.
Maybegets: Get teleportitis. Optionally, get teleport control, depending on how much luck-manipulation you want. (It won't be useful in a turns-TAS, as you'll have zero times after Quest you want to teleport that you couldn't have manipulated on your level change, optimally. But it will help if luck-manipulating your ascent landing locations is too slow for a time-TAS)
Actually, I think you have this backwards. I don't see how teleportitis would help, because all the levels post-2000 where we'd want to move horizontally are no-teleport (apart from possibly fakewiz1, and that has a restriction on where you can teleport to). On the other hand, teleport control is needed to levport down more than 3 levels at a time, e.g. from the Valley to the Vibrating Square level.
To ease luck-manipulation, get massive intrinsic protection.
I'm less clear on this one; most of the time, if we're even in a position to be hit, it's because we want to be hit to pull off hurtle-movement. Ideally, we'd pick a value that let us manipulate hits or misses easily.
To ease luck-manipulation, get a wand of teleport (mainly for Astral path-clearing) Intrinsic conflict might save time, but mind your food.
These both factor into Astral strategy, and I'm still unsure what to do there yet.

What're you doing about Pw regeneration? It's ungodly slow for the most part, and the fastest methods (Mitre of Holiness, confused ? of Charging) aren't that convenient-luckmanipulating the Mitre's timeout seems like it would be best timewise, unless you can get convenient Umber Hulks and the like so you get a 1-move confusion just for reading that scroll to get your Pw back.
We aren't spending it much :). The only spell I foresee needing to cast post-turn-2000 is jumping, maybe not even that. If we do need massive amounts of Pw, we can pull off the failed-polyself glitch to get all the Pw we need (see any game on NAO which ends with more than 100,000 max HP or so, it produces similar amounts of Pw).
Joined: 3/11/2008
Posts: 583
Location: USA
rhebus wrote:
To ease luck-manipulation, get massive intrinsic protection.
What's the best way of doing this? Traditionally, one goes to ludios and loots it for all it's worth, but ludios is probably boring and time-consuming in realtime (all those messages) and turns. I think it's a choice between an early-game protection racket, eating rings of protection, or both.
Since you're going to be grabbing a huge stack of rings from a ringshop, =oProt are likely going to be faster. It occurs to me that you can pick up a (near) full set of resistances this way too. Restful sleep might save you some actions in the first 2000 turns (for a low-actions run, reducing it below 2000) but would require an air-elemental taxi or similar to not lose them back going through the Planes. T-itis and vaults for a protection run work fine too.
So, getting the Mitre of Holiness, the Eye of the Aethiopica, and/or the Orb of WeightFate (you will probably drop this prior to turn 2000)
The eye is the wizard's quest artifact, so no getting that before turn 2000.
I was being general in case of other roles.
Editor, Player (44)
Joined: 7/11/2010
Posts: 1022
eternaljwh wrote:
rhebus wrote:
To ease luck-manipulation, get massive intrinsic protection.
What's the best way of doing this? Traditionally, one goes to ludios and loots it for all it's worth, but ludios is probably boring and time-consuming in realtime (all those messages) and turns. I think it's a choice between an early-game protection racket, eating rings of protection, or both.
Since you're going to be grabbing a huge stack of rings from a ringshop, =oProt are likely going to be faster. It occurs to me that you can pick up a (near) full set of resistances this way too. Restful sleep might save you some actions in the first 2000 turns (for a low-actions run, reducing it below 2000) but would require an air-elemental taxi or similar to not lose them back going through the Planes. T-itis and vaults for a protection run work fine too.
Actually, I think it's probably easiest to use the polyself glitch to get hundreds of thousands of HP and not worry about AC at all. Who cares about getting hit when it does minimal damage? Meanwhile, I've started on a WIP, using a set of "TASing" tools mostly written by dwangoAC (they let me savestate and loadstate NetHack games on Linux, but don't sync well enough to emulate most other games; I hacked Linux NetHack to sync with the DOS version). So far, we teleport straight from dlvl 1 to the downstairs on dlvl 2, go downstairs, walk to a massive ring shop, and pick up the rings that are really needed early (polymorph, polycontrol, telecontrol), although I'll have to redo the last bit because I saw a way to save a turn. With polymorph and polycontrol, it's trivial to kill the shopkeeper; the current plan's to luck-manipulate the shopkeeper to deathdrop a cursed scroll of teleport and use it to get all the way down to the Castle, skipping the entire early- and mid-game. (This isn't quite a sequence break because I'm pretty sure it's deliberate that you can do that.)
Joined: 3/11/2008
Posts: 583
Location: USA
ais523 wrote:
cursed scroll of teleport and use it to get all the way down to the Castle, skipping the entire early- and mid-game. (This isn't quite a sequence break because I'm pretty sure it's deliberate that you can do that.)
Since they did code two exceptions, stopping you at the Valley of the Dead and the Vibrating Square level, it's very sure that straight-to-Castle should be possible. You have watched some of maud's (and nht's) ttyrecs on nethack.alt.org, right? The ones finishing in the 2100-2400 range? Should be instructive in some tactics. Incidentally, I thought of a reason to want to get hit over not- "hits!" and "hits." are both shorter than "misses." This will, in combat-heavy situations, potentially lead to times where you can avoid a more-prompt. On the flip side, you can probably avoid any and all more-prompts by playing with very large terminal size, and being hit or missed presumably affects RNG usage by whether damage is calculated. (I have not looked at the source for this, so this last is mere conjecture.)
Restful sleep would not be the most efficient way to not-act during turns, either. Cursory examination looks like bouncing sleep rays (wands/spell) is best with maximum potential of 300 turns. (Properly figuring out the Wis<12 duration of floating eyes would be good, as well as sleep-wand explosions,)
Emulator Coder, Skilled player (1141)
Joined: 5/1/2010
Posts: 1217
eternaljwh wrote:
On the flip side, you can probably avoid any and all more-prompts by playing with very large terminal size, and being hit or missed presumably affects RNG usage by whether damage is calculated. (I have not looked at the source for this, so this last is mere conjecture.)
It needs to play back with the DOS version, and AFAIK, it is not possible to alter terminal size (at least for width) in that one, it is always 80x25.
1 2 3 4 5 6
18 19