| 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 | |