A little while back, NetHack finally released version 3.6.0, after more than 10 years with no updates. As a part of this release, the C source calculating the prices of items in shops changed slightly, resulting in all existing Price ID calculators online to cease to function.
In an effort to fill this need, and as an excuse to learn Python, I wrote this little script, as well as a PHP front-end so that it can be accessed online rather than locally. This is dizzyprice.
I host this at my website (this link may be down for a while), so you can see it in action.
When calling dizzyprice from the command line, it should be fairly flexible.
For details on all available options, run it with the argument -h
to see
the help screen.
If you were buying a ring, say, and the shopkeeper was charging you 400 gold and you have a charisma of 15, You might run this:
$ ./dizzyprice.py -b -c 15 ring 400
Base Price1 Price2 Item
300 300 400 ring of conflict
300 300 400 ring of teleport control
300 300 400 ring of polymorph
300 300 400 ring of polymorph control
The default charisma is 10/11 (they are the same in NetHack calculations), so you can leave off that argument if you have that happy medium.
NetHack has two prices that can be calculated, which varies based on the object number that the executable uses for a generated item, a 1 in 4 chance existing that Price2 is the offered price. Let's say the shopkeeper was offering you 75 gold for a potion; what could it be?
$ ./dizzyprice.py -sc 8 potion 75
Base Price1 Price2 Item
150 75 56 potion of blindness
200 100 75 potion of speed
200 100 75 potion of levitation
150 75 56 potion of invisibility
200 100 75 potion of enlightenment
150 75 56 potion of monster detection
150 75 56 potion of object detection
150 75 56 potion of gain energy
200 100 75 potion of full healing
200 100 75 potion of polymorph
For armor and weapons, you can type an arbitrary string as part of the query, operating as a filter. For example:
$ ./dizzyprice.py -s weapon da 17
Base Price1 Price2 Item
34 17 13 +3 dagger
44 22 17 +4 dagger
34 17 13 +3 elven dagger
44 22 17 +4 elven dagger
34 17 13 +3 orcish dagger
44 22 17 +4 orcish dagger
In fact, for weapons and armor, you can omit the "weapon" or "armor" bit entirely, and just go for the grep. A tourist shelling out 66 gold for a pair of boots might do:
$ ./dizzyprice.py -b -t boots 66
Base Price1 Price2 Item
28 50 66 +2 low boots
28 50 66 +2 elven boots
28 50 66 +2 kicking boots
Check the README.md file in the web
folder for information on setting up
the front-end.
This program is licensed under the Affero GPLv3+, so if you put it online, be sure to link to the source. :) This page will do.