Advertisement
Guest User

Untitled

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