1This 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 3changes, ver must be bumped. This is why the next release of Larn is 12.0 4and not 11.1. This is used in the savefile routines to check for out-of-date 5save files). This list was mainly meant to be a record of what changed, 6for my own sanity. It's included for your benefit (Warning: SPOILER!): 7 80. 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 121. 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 182. The version number of the program is now selectable from the Makefile. 19 see the symbols VER and SUBVER. 20 213. 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 264. 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 315. 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 366. 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 407. 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 458. The mechanism to manage spheres of annihilation has been reworked to provide 46 a cleaner design and to eliminate some possible problems. 47 489. The spell gen (genocide monsters) has been implemented. 49 5010. 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 5611. larn -h will now print out a list of all available command line options. 57 5812. 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 6113. 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 6514. 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 7815. 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 8616. 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 9317. Added the scroll of life protection. 94 9518. 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 10019. 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 10420. 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 11021. 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 13022. 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 13623. 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 14224. 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 14625. 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 15226. "vt125" has been added to the acceptable terminal list 153 (checked only if compiled with -DVT100). 154 15527. 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 16128. The option "no-beep" has been added to the .larnopts file. When specified, 162 beeping is inhibited at the terminal. 163 16429. When becoming wizard, no longer to you wear the ring of protection, and 165 null scrolls and potions are no longer created. 166 16730. 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 17131. 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 17732. 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 18133. 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 18734. 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 19735. 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 20236. 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 20637. 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 21038. 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 21439. Items like cookies, books, chests, swords of slashing, and Bessmann's 215 flailing hammer can now be sold at the trading post. 216 217