Annotation of 43BSDReno/games/larn/Fixed.Bugs, revision 1.1.1.1

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: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.