|
|
1.1 ! root 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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.