1$NetBSD: Fixed.Bugs,v 1.2 1995/03/23 08:33:03 cgd Exp $
2
3This is a list of the fixes/enhancements made to larn V11.0 in Version 12.0.
4(Version numbers consist of 2 parts: ver.subver.  When the save file format
5changes, ver must be bumped.  This is why the next release of Larn is 12.0
6and not 11.1. This is used in the savefile routines to check for out-of-date
7save files).  This list was mainly meant to be a record of what changed,
8for my own sanity.  It's included for your benefit (Warning: SPOILER!):
9
100.  lprintf() in fileio.c (now called io.c) has been changed to use varargs
11          so that its variable number of arguments usage is now portable.  Pyramids
12          primarily had this problem.
13
141.        Panic handler was added to signal.c.  This routine catches fatal errors
15          like segmentation faults, bus errors, illegal instructions, etc., and
16          trys to performs a savegame() before dumping core.  This helps prevent
17          the loss of a good game due to a game malfunction.  Also, the name of the
18          signal received is printed, instead of just its number.
19
202.        The version number of the program is now selectable from the Makefile.
21          see the symbols VER and SUBVER.
22
233.        When at an altar, pray and donate 3000000000 gp. and ye used to receive
24          a whopping amount of gold due to a wraparound problem with the signed
25          ints.  This has been fixed by using unsigned longs when asking for money
26          amounts.
27
284.        It was possible that when compiled with work hours checking, checkpointing
29          enabled, and having "play-day-play" in the .larnopts file a segmentation
30          fault would occur at its first attempt to do a checkpoint.  This was due
31          to an improperly declared savefilename array in tok.c.  This has been fixed.
32
335.        on level H, casting a missile weapon (mle cld ssp bal lit) off the edge of
34          the level would mess up the display, as it didn't know when to stop.  This
35          is needless to say, fixed.  Absolute bounds are now in effect for missile
36          type spells, see godirect() in monster.c.
37
386.  The create monster routine will now create monsters in random positions
39          around the player.  Before, the 1st one would always be created to the
40          upper left.
41
427.        If you vpr or lit at a throne, it would summon a gnome king that you
43          would have to deal with.  However, as each throne has only one king with it,
44          successive vpr's should not create more gnome kings.  Presently, successive
45          vpr's will create more kings.  This has been fixed.
46
478.        The mechanism to manage spheres of annihilation has been reworked to provide
48          a cleaner design and to eliminate some possible problems.
49
509.        The spell gen (genocide monsters) has been implemented.
51
5210.       When dropping a ring of strength and having been weakened to STR=3 the
53          player might end up with a negative strength.  Strength is now stored
54          in 2 variables, real strength, and strength bonuses.  Only real strength
55          can now be weakened down to a minimum of 3, so unless you have a ring of
56          strength -3 or less, strengths below 3 should not occur.
57
5811. larn -h will now print out a list of all available command line options.
59
6012. larn -o<optsfile> now lets you specify a .larnopts file on the command
61          line.  This was necessary as part of the solution to number 14 below.
62
6313.       The "savefile:" statement has been aded to the .larnopts format to allow
64          specifying the savefilename (full path) for the savegame operation.
65          This too was needed as part of # 14 below.
66
6714. A player id facility has been added to larn.  The complaint was that
68          the game used the userid to order the scoreboard, thus only one scoreboard
69          entry was allowed for each userid.  If the compile time symbol UIDSCORE
70          is defined at compilation time (see Makefile), this will still be true.
71          However, if this define is omitted, the game will create and manage a
72          file called ".playerids" where names are taken from the specified
73          .larnopts file (now a command line option) and assigned a unique playerid.
74          playerid's will now be used to govern scoreboard entry posting.  This
75          feature makes it easy for one person to have many characters, each
76          appearing on the scoreboard.  Be kind to your fellow players!
77          The philosophy of one score per player gives more players the opportunity
78          to bask in glory for all to see!
79
8015. It is no longer required that the player be WIZID to create the scoreboard
81          or to examine the logfile.  Anyone with the correct wizard's password can
82          now use these command line options (password is only needed to create/clear
83          the scoreboard).  If you want to prevent players from zeroing the
84          scoreboard, change the wizard's password. (in config.c) By the way, wizards
85          may be alot of fun, but they are prevented from being placed on any
86          scoreboard. (for clarification)
87
8816. Monsters now have intelligence, that is some of them.  This determines if
89          the monster moves using the previously stupid movement method, or by using
90          the new IMM (intelligent monster movement) algorithm.  With IMM, monsters
91          will move around corners, avoid pits, traps, etc.  With increasing levels
92          of difficulty, more monsters will be using IMM.  Beware of IMM when
93          aggravated!  Those little beasties can really find you!
94
9517. Added the scroll of life protection.
96
9718. Larn now consults the file ".holiday" to check for holidays if the TIMECHECK
98          option (no playing during working hours) is enabled.  Before, larn knew
99          nothing about holidays.  It should now let people play if it is a holiday.
100          The format for a .holiday entry is: "mmm dd yyyy comments . . .".
101
10219. In nap() and napms() it is possible that with nap(0) or napms(0) there
103          would be an infinite loop and the game would hang.  The case of nap(0)
104          is now looked for.
105
10620. The granularity of gold piles has been increased.  iarg[] has been changed
107          from char's to short's, so instead of 255 x 10^n granularity we now have
108          32767 x 10^n granularity.  This also means more than 255000 gp can be
109          dropped in one place.  Not realistic, but it prevents a worthless
110          annoyance.  Who said games were supposed to be realistic?
111
11221. Termcap capability has been added to larn.  If the symbol VT100 is defined
113          in the makefile, the game will be compiled to use only VT100 compatible
114          terminals (Much more efficient).  If the symbol VT100 is omitted, the game
115          will be compiled to use the termcap entry for whatever terminal you are
116          using.  This involves an extra layer of output interpretation, as every
117          byte sent to the terminal must be inspected for control tokens.
118          Only 3 termcap entries need be found for the game to be functional:
119          CM (cursor movement), CE (clear to end of line), and CL (clear screen).
120          For a better display, the following are optional: AL (insert line), DL
121          (delete line), SO (Standout begin), SE (Standout end), and CD (clear to end
122          of screen).  The .larn.help file was left as is, with VT100 escape
123          sequences in it.  If the termcap version of larn reads it, it is translated
124          for the desired terminal type.  The .mail60* files have been removed, and
125          their text is now included in bill.c so it can be used with any terminal.
126          Note:  If compiled for termcap, and using a VT100, the display will act
127          a little different.  This is because the VT100 does not have insert line/
128          delete line codes, and the scrolling region must be simulated with vertical
129          wraparound instead of scrolling.  Thanks goes to Michiel Huisjes for the
130          original termcap patch.
131
13222. When playing as wizard, if you go down stairs on 10 or V3, or up stairs
133          on H, 1, or V1, etc. you would be placed in a phantom zone where the display
134          was really weird ([-1] subscripting), and would eventually lead to a
135          segmentation fault.  Stairs and volcano shafts now check for the level
136          they are being used on.
137
13823. In response to some sites having only unsigned chars (flame the
139          manufacturer), the chars that were used to store positive and negative
140          numbers have been changed to shorts.  This includes diroffx[], diroffy[],
141          iarg[][][], ivenarg[], and some others.  I believe the changes are correct,
142          but I have none of these machines to try it out on. (Volunteers?)
143
14424. The function fullhit(n) in monster.c was supposed to return the damage
145          done by n full hits on a monster.  It only returned the damage for ONE hit,
146          thus severely limiting the usefulness of the web and sle spells.
147
14825. Someone said that they were getting segmentation faults when they were
149          reading scrolls as the wizard.  I couldn't find the problem, which may
150          have had something to do with the signed char problem mentioned above.
151          However, I've added a check in read_scroll() and quaff_potion() to trap
152          any scroll or potion types that are not in the game.
153
15426. "vt125" has been added to the acceptable terminal list
155          (checked only if compiled with -DVT100).
156
15727. In savegame() and restoregame(), there was a 6 hardwired into the i/o
158          statements which assumed the size of struct cel was 6.  On some machines
159          this caused the rightmost part of each level to not be saved in a savefile.
160          These 6's have been replaced with sizeof(struct cel), and should now be
161          portable.
162
16328. The option "no-beep" has been added to the .larnopts file.  When specified,
164          beeping is inhibited at the terminal.
165
16629. When becoming wizard, no longer to you wear the ring of protection, and
167          null scrolls and potions are no longer created.
168
16930. Many spelling errors have been fixed, both in player messages, and in the
170          code itself.  A thanks goes to Mars Gralia who sent me a detailed list of
171          the mistakes.
172
17331. When a player wins a game, if getlogin() fails, a segmentation fault will
174          result, because the NULL returned from getlogin() is used as a pointer.
175          This call has been replaced (now using loginname already determined).
176          Also, the mail creation upon winning has been rewritten, mainly to allow
177          termcapping of the text.
178
17932. The Larn Revenue Service will now always appear on level H.  Before, it
180          was only created if the player had outstanding taxes.  In that multiple
181          save files per player are now more possible, this was seen as incorrect.
182
18333. Input buffer flushing is now in effect.  If the input char queue exceeds
184          5 bytes, the excess is discarded.  Also, if the player hits or gets hit
185          all input bytes are flushed (within 1).  This relieves the situation
186          where many moves have been typed ahead of the display and the player keeps
187          getting hit while the queue of moves is processed.
188
18934. When a savefile has been altered, a warning message is displayed to the
190          effect that you've cheated, and you will not be placed on the normal
191          scoreboard.  If you then save the game, and start 'er up again, memory
192          of the cheating was lost.  This has been fixed, by letting the scoreboard
193          routines consult the cheating flag.  Also, the I node number of the
194          savefile is written into the savefile, so cp'ing, etc., will avail the
195          cheater not.  If high security is needed, the game should be run suid.
196          This suid mode has not been made the default because most installations
197          do not want to install it that way.
198
19935. The sources have been run through lint, and most of lint's complaints have
200          been taken care of.  An attempt was made to adjust the code for 16 bit int
201          machines.  Many casts to long have been put in.  I don't know if it will
202          run on a 16 bitter, but it should be closer to that end.
203
20436. When larn starts up, if it can't find the scoreboard, it will now make a
205          blank one instead of complaining that there is no scoreboard.  It is not
206          necessary to do "larn -c" to initially create the scoreboard.
207
20837. When listing out the logfile (larn -l), the error message "error reading
209          from input file" has been fixed.  Also, the date & time of a player's
210          demise is now included in the logfile.
211
21238. When casting web or sle into a mirror, the game will no longer bash the
213          player.  Instead, the player will either fall asleep or get stuck in his
214          web.
215
21639. Items like cookies, books, chests, swords of slashing, and Bessmann's
217          flailing hammer can now be sold at the trading post.
218
219