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