Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- mailversion:
- 1.42
- nhversion:
- 3.4.3
- nhfrom:
- Our 3.4.3 source release, unmodified
- hardware:
- Probably irrelevant, but it's a Toshiba Satellite netbook with 3
- GB memory and 4 GB swap, and an Intel U2700 1.3GHz processor.
- software:
- Ubuntu Lucid, running Linux 2.6.32, using a NetHack binary compiled
- from unmodified (apart from config.h/unixconf.h and makefiles)
- official NetHack 3.4.3 sources compiled for Unix-like systems using
- gcc 4.4.3
- comments:
- There are several weird quirks in the way the system tracks turns
- and timing. Most of these wouldn't be noticed by someone playing the
- game normally, but I was trying to calculate the minimum possible
- turncount to win the game (is ascension the only ending considered a
- win, btw? the comment /* super big win */ makes me wonder if there's
- another), and there were several small but noticeable problems:
- - Saving and restoring the game, whilst it restores stethoscope uses
- (bug C343-371), also resets youmonst.movement to 12 (NORMAL_SPEED);
- when in a polymorph form with many actions a turn, this can cause a
- huge loss of time, and means that saving tends to be a bad idea. (I'm
- not sure if this can be fixed without breaking save compatibility,
- but after this long, people are unlikely to be surprised if save
- compatibility has to be broken for a new version.)
- - Upon polymorphing, the number of actions (to be precise,
- youmonst.movement) you have left in the turn stays the same until
- the start of the next turn. This is why you can polymorph into a
- blue jelly and have enough time to put on an amulet of unchanging,
- for instance (this tends to be a bad idea, incidentally). It
- also enables abuses like polymorphing into a useful but slow form
- (such as a rock piercer or trapper), taking one or two actions,
- then changing back to a fast form like an air elemental; although
- costly in MP or polymorph charges, it enables very slow forms to take
- actions faster than natural form would without repeated polymorphing.
- - "moves" and "monstermoves" always have exactly the same value;
- the comment in src/decl.c, line 188, that says /* These diverge
- when player is Fast */ is lying. This is a good thing too, as
- some things in the game seem to use them interchangeably; for
- instance, edog->whistletime is measured in "moves" in src/mon.c and
- "monstermoves" in src/dogmove.c. (In a patch I'm working on, I have
- monstermoves start at a very high value to catch cases like this.)
- - Lifesaving has a very weird interaction with command repeat. In
- particular, if you die on your own turn using a timeconsuming action
- (zapping a wand of death at yourself is the easiest way to test
- this), the action takes no time and you end up back on your turn,
- with no monster movements in between and no message /if/, and only
- if, you are repeating a command at the time (e.g. n2za.). Otherwise,
- it leaves you helpless until the end of the turn, and you get "You
- survived that attempt on your life." at the end of the turn. (There's
- at least one reported case on nethack.alt.org of this causing the
- survived-that-attempt-on-your-life message to appear much later in
- the game, in a context apparently unrelated to lifesaving. However,
- we couldn't reproduce it or figure out exactly what caused it.) In
- the code, this seems to be intentional (you check the value of multi
- to decide whether to set it to 0 or -1), but I can't figure out why.
- - Another abuse related to the above: if you schedule a delayed
- instadeath (such as food poisoning) to occur while hurtling from
- throwing a heavy object while levitating, and have lifesaving,
- you can move up to nine squares in one action, at the cost of an
- amulet of life saving, as the lifesaving cancels the nine-turn
- timeout into a rest-of-the-turn timeout. I'm not sure if this is
- deliberate. Because you can perform other actions in the rest of the
- turn, including putting on amulets of lifesaving, you can go very,
- very fast with this glitch (such as clearing Air in three turns).
- - Jumping takes the rest of the turn, for reasons I don't fully
- understand; this means that the fastest form of movement without
- abusing the above bug is, while punished and in a polymorph form
- capable of 36 movement a turn (say an extrinsically fast unicorn),
- to throw the iron ball (1 action), pick it up again with autopickup
- (1 action), and jump (rest of the turn), moving a total of nine
- squares. It seems very wrong that jumping can be much faster if
- used at the end of a turn than at the start.
- - The speed boost from galloping (after kicking a steed) checks
- to see if any of the moves in the previous turn were movement,
- and if command repeat is being used at the turn boundary, which
- is a rather unintuitive and abusable check. (The fastest way to
- perform actions while mounted is to shift-move into a wall at each
- turn boundary, moving one square as a result. I don't think this
- makes much sense; you'd expect horses to be faster if they weren't
- repeatedly running into walls.) This is, incidentally, the only
- way to get five arbitrary actions in a turn.
- That's more or less all I've found so far. Perhaps other time
- system abuses will turn up as a result of people doing this sort
- of calculation.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement