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