Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!seismo!caip!clyde!cbatt!cbosgd!ucbvax!ucdavis!deneb!u566393908ea From: u566393908ea@ucdavis.UUCP (u566393908ea) Newsgroups: net.sources.games Subject: VMS Larn 12.0 is here! (part 4 of 6) Message-ID: <497@ucdavis.UUCP> Date: Sat, 30-Aug-86 18:05:16 EDT Article-I.D.: ucdavis.497 Posted: Sat Aug 30 18:05:16 1986 Date-Received: Sun, 31-Aug-86 09:46:06 EDT Distribution: net Organization: University of California, Davis Lines: 1879 Hello all! This is a port of Larn v12.0 to VAX/VMS. Now everyone can save his/her daughter!! Just unpack using /bin/sh and read readme.txt. - Mark Nagel P.S. Thanks to Lord Kahless for letting me post this! -------------------------------cut here------------------------------------- #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # larn12.hlp # larn12.maz # larn12.opt # make.com # moreobj.c # movem.c # nap.c # readme.txt # This archive created: Sat Aug 30 14:51:08 1986 export PATH; PATH=/bin:$PATH echo shar: extracting "'larn12.hlp'" '(6275 characters)' if test -f 'larn12.hlp' then echo shar: will not over-write existing file "'larn12.hlp'" else cat << \SHAR_EOF > 'larn12.hlp' 5 Welcome to the game of Larn. At this moment, you face a great problem. Your daughter has contracted a strange disease, and none of your home remedies seem to have any effect. You sense that she is in mortal danger, and you must try to save her. Time ago you heard of a land of great danger and opportunity. Perhaps here is the solution you need. It has been said that there once was a great magician who called himself Polinneaus. Many years ago, after having many miraculous successes, Polinneaus retired to the caverns of Larn, where he devoted most of his time to the creation of magic. Rumors have it that one day Polinneaus set out to dispel an attacking army in a forest some distance to the north. It is believed that here he met his demise. The caverns of Larn, it is thought, must be magnificent in design, and contain much magic and treasure. One option you have is to undertake a journey into these caverns. Good Luck! You're going to need it! [4mHelp File for The Caverns of Larn[m h move to the left H run left . stay here j move down J run down Z teleport yourself k move up K run up c cast a spell l move to the right L run right r read a scroll y move northwest Y run northwest q quaff a potion u move northeast U run northeast W wear armor b move southwest B run southwest T take off armor n move southeast N run southeast w wield a weapon ^ identify a trap g give present pack weight P give tax status d drop an item i inventory your pockets Q quit the game v print program version S save the game D list all items found ? this help screen A create diagnostic file e eat something (wizards only) larn ++ restore checkpointed game larn -s list the scoreboard larn -i list scores with inventories larn -n suppress welcome message when beginning a game larn -h print out all the command line options larn - specify difficulty of the game (may be used with -n) larn -o specify the .larnopts file to be used larn -c create new scoreboards -- prompts for a password [7mSpecial Notes[m When [7mdropping gold[m, if you type '*' as your amount, all your gold gets dropped. In general, typing in '*' means all of what your interested in. This is true when visiting the bank, or when contributing at altars. Larn may need a [7mVT100[m to operate. A check is made of the environment variable [7m"TERM"[m and it must be equal to [7m"vt100"[m. This only applies if the game has been compiled with "VT100" defined in the Makefile. If compiled to use [7mtermcap[m, there are no terminal restrictions, save needing cm, ce, & cl termcap entries. When in the store, trading post, school, or home, an [7m[m will get you out. larn -l print out the larn log file When casting a spell, if you need a list of spells you can cast, type '[7mD[m' as the first letter of your spell. The available list of spells will be shown, after which you may enter the spell code. This only works on the 1st letter of the spell you are casting. The Author of Larn is Noah Morgan (1982-3), Copying for Profit is Prohibited Copyright 1986 by Noah Morgan, All Rights Reserved. [7mBackground Information for Larn[m Welcome to the game of Larn. At this moment, you face a great problem. Your daughter has contracted a strange disease, and none of your home remedies seem to have any effect. You sense that she is in mortal danger, and you must try to save her. Time ago you heard of a land of great danger and opportunity. Perhaps here is the solution you need. It has been said that there once was a great magician who called himself Polinneaus. Many years ago, after having many miraculous successes, Polinneaus retired to the caverns of Larn, where he devoted most of his time to the creation of magic. Rumors have it that one day Polinneaus set out to dispel an attacking army in a forest some distance to the north. It is believed that here he met his demise. The caverns of Larn, it is thought, must be magnificent in design, and contain much magic and treasure. One option you have is to undertake a journey into these caverns. Good Luck! You're going to need it! [7mHow to use the .larnopts option file[m The file ".larnopts", if used, should be in your home directory (see -o). A sequence of words terminated by whitespace is used to specify options. Word Meaning bold-objects select bold display of objects inverse-objects select inverse video display of objects no-introduction do not display intro message enable-checkpointing turn on periodic checkpointing no-beep disable beeping of the terminal male choose your sex to be a man female choose your sex to be a woman name: "your name" choose your playing name monster: "monst name" choose a name for a monster savefile: "save-file-name" define what the savegame filename will be Your name and monster names must be enclosed in double quotation marks and may be up to 34 characters long. Longer names are truncated. Anything enclosed in quotation marks is considered one word, and must be separated from other words by whitespace. [7mExplanation of the Larn scoreboard facility[m Larn supports TWO scoreboards, one for winners, and one for deceased characters. Each player (by userid or playerid, see UIDSCORE in Makefile) is allowed one slot on each scoreboard, if the score is in the top ten for that scoreboard. This design helps insure that frequent players of Larn do not hog the scoreboard, and gives more players a chance for glory. Level of difficulty is also noted on the scoreboards, and this takes precedence over score for determining what entry is on the scoreboard. For example: if "Yar, the Bug Slayer" has a score of 128003 on the scoreboard at diff 0, then his game at diff 1 and a score of 4112 would replace his previous entry on the scoreboard. Note that when a player dies, his inventory is stored in the scoreboard so that everyone can see what items the player had at the time of his death. SHAR_EOF echo shar: 24 control characters may be missing from "'larn12.hlp'" if test 6275 -ne "`wc -c < 'larn12.hlp'`" then echo shar: error transmitting "'larn12.hlp'" '(should have been 6275 characters)' fi fi # end of overwriting check echo shar: extracting "'larn12.maz'" '(18513 characters)' if test -f 'larn12.maz' then echo shar: will not over-write existing file "'larn12.maz'" else cat << \SHAR_EOF > 'larn12.maz' @################################################################### # # . # # # # # . # # D D . . D . # ###D########################################## # # ###D### # -# #. # # ################ . .# # ####### ######## ############ D #### # # # # ... #.# # # # . # # # #### # ############ # ###D### # #.# # # ## # # # ############ #### # #- # # # #. # # . # # # # ## #- # # # - D #### # # . D # #.# # ... # # # #.# # # # # # . . # # # # # # #-# # ~.! # ###D### ### #######D## # ############ ###### ########## ### ####### # # @ .# # ..... ...# ###D###########################################################D### # . #.....# # # # -# # # # # # # ..... . D D D D. # # #.....# # # # # # .# # # # ################################################################### ################################################################### #.. . D # . # #- # ############# ######### # ## ### ##### ## #### ###### ####### ### # #.#!#~# # # .-# # #- # # # # -# # # # # # #.# . # ####### # # # # # # # # # ##### # # ..# ##### # # # #### # ## ## ## # ###### ####### # # # - ..D # D # . D # # # #.##### ## ## # #. #.# #..# # ### # ####### ####### ### # # # # # # D # D D #..D # # #- # # # #### # ###### # ## # #. # #..# ##### ### #######################- # # # ###################### # # # ... # . #..# ### # - .. . #. ### # # # # # ### #################### # # # # ### # ################################################################# # #- D ### # # # # # . # # # D # ################################################################### ################################################################### # .. # # ############## ############################################## # # # # # # # .. # # # # #D## # # ############D################# ########### # # # ######### #- # # # #- D # # ~ # # # # # # # # # # # # # # ### # # # D - # # ####### # # # # # .... # #### # # # #!# # # ###### .. #.# # # # # # # # .... # # # # ### # # # # #########D#### # ### # # # # # # .... ######## # # D # #- # #.. # ...#.# # #.# # # # # # # # # ### # #### #.- D - #.# #.#.# # # # # # #####DD## ######## # # D D. # # # #...# # # # # # # # ..# # # # ############################## # ##### # # # # # # ......# # # # # # # # # # # ####### ###### ################################ ######### # ### # # .D. # # ################################################################### ################################################################### # ## ## ### ## # # ##### ## ..- ## ##.## ## # # # ! ## ## . ## ## .## .. ## # # #....###### ## ## ## . ## ## # # # - # ## ##D# ## . ## ## # # #####D ~ ####### ###........ ## ... ## ## # # # # ## ## .... ## . ## ## # # #. ######## ## ## . - ####D#### - # # #.- #...## ## ... ## ### ...... ## ## # # #. #..## ## ######### ## ... ## ### ## .. # # #.. #.## ## ## - ## . #### ## ## ##### ## # # #####D## ## ## ###### ## ## ####### ## # # D -.## #### ######## ##DD## ######## #D # # ###### ... ## ########## ## # #### . . ### ################################################################### ################################################################### # # # ####.########################################## ## ########## # # #.#.#.# #.. #. # # # ####### # # # # # ##### #! # ########### # ### # # # # # # # # ##...## # # # # # #-# # # ..- D # # # # # ## . ## ####D##### .. ### # # # # # # # # ##. ~ .## # # ### # # ##### # # ############ # # # # ## . . .## #...# .. #.# # # # # # .. .# # # # # ## - ## # # D.D # ######### # # . D # # # # ##.......## ####D#####.# # # # - . # # # # # ## ## # . # ### ########### # ############ #.#.# # ###D### # . #....# # # # # #-# D .. # .# ###....## ##-### # #### ########################################## ###### ### # # . # ################################################################### ################################################################### # # # ###########################D####### ## # # ####################### # ##...... ## ## # # ########D###### # # !##.... ## ## # # ############ ## ## ... # # #...## ~ ## ###### # # # # # # ...... # # # .. ##### ## # # # - .. # # # ########### # # . ######### ## # # ##### ##### # # # # #... ## ## # # # # ########## ######## ########DD#### ####### # # # # .... # # # # # ## ## # # ##### # # ....# # ######### # # ##### ## # # #- ######D##########..# # ######### # - #.. ## ## # # ##### # # # #... #.....## # # # ################### ###############... #### # ###### # # # ################################################################### ################################################################### # # ########### ##### ##### #####D#### ##### ###### # #.. # #-..D ###### ## # ## # ## ..## ### #### # # #### ### ##### # ## # ##### # ## ### ## # # # # # # # # # ##### # ## # # #### # #..##### - ### # # # # ####### ### #...# # ######## # # #~. .... # # # # # # #...# # # ######### ############## # # # ###### ####### # ### ### # .. # # # # # - # #-#####!# # # #### ## #### # # # ###### # ########## #.. ....# # ######## # # # ## ## # # -.# ##### ####...## # . .# #..# # ## # # # #### ###### #.### #####.#### #### ### ## # # # #- #######....#### ...... #.# . # ## # # # ####### ##### ###########.############### ### # # . # ################################################################### ################################################################### # # #- . # # # # # # # # # # # # #####.##### # # # # # # # # # # ###########D########### # # # ##### # # ### # # # # # # # # # ### #.... # # # # # # # # # # # # # # # # # # #.!. -.. #.##.# # # # # . - # # ####### # # # # # # # # # ########## ## # # #.####### # # D # . # # # #. -# ################################################### # # ##### D. . # # # ### ###D### ### ### ###D### ### ### ###D### ###.### # # # ###### ### .# .# #. # # # # # # # # . # # # ### # -# ### .#. - .# # # #...- # # .. # # -..# # . # # # # # ### #. ~ .# # # # # # # # .. .# # # # #.###### # ### # # #.....# # # # # # # # # # # # ####### ####### ####### ####### ####### ####### ####### # # # ... .. # ################################################################### ################################################################### # # . # ### # # # # . # # D D . # . D . # ############################################### # # ###D### # -# #. # # ################ . .# # #######D######## ############ # #### # # # # ... #. # #!~ . # # # #--# # ############ #####D### # #.# # # ## # # # ############ #--# # #- # # # #. # # . # #-# # ## #- # # # - D ## # # # . D #### #.# # ... # # # #-# # # # # # . . # # # # # # #-# # -.- # ###D### ### ####### ## # ############ ###### ########## ### ###D### # # @ . ..... ...# ##################################### ###############D### # . #.....# # # # -# # # # # # ..... . D D D D. # # #.....# # # # # .# # # # ################################################################### ################################################################### #.. . # D . #- # ### ######### ######### # ## ### ##### ## ########### ####### ### # #.# # # # .-# # #- # # # # -# # # # # # #.# . # ####### # # # # # # # # # ##### # # ..####### # # # #### # ## ## ##!# ###### ####### # # # - ..D # D # . D # # # #.##### ## ## # #. #.# #..# # ### # ####### ####### ### # # # # # # D # D D #..D # # #- # # # #### # ###### # ## # #. # #..# ##### ### #######################- # # # ###################### # # # ... # . #..# ### # - .. . #. ### # # # # # #-# #################### # # # # # -# # ################################-################################ # #-..... # ####D ### # # # # #~..... # # # # D # ################################################################### ################################################################### # .. # # ############## ############################################## # # # # # # # .. # # # # #D## # # ############D################# ########### # # # ######### #- # # # #- D # #.!..# # # # # # # # # # # # # # # ### ## # #....D - # # ####### # # # # # .... # #### # # # #~# # # ###### .. #.# # # # # # # ###....## # # # ###.# # # #########D## # # ### # # # # # # .... ######## # # D .# #- # .. # ...#.# # #.# # # # # # # # ## # ### .# #### .- D - #.# #.#.# # # # # # #####DD## ######## #... .# . # # # #.#. # # # # # # # ..# # # ############################## # # ##### # # # # # ......# # # # # # # # # # # # ####### ###### ################################D# ######### ### # # .D. #-.-# ################################################################### ################################################################### # ## ## ## ## ## # # ############## ## ..- ## ## . ## ## # # # # ## ## . ## ## . ##.. ## # # #....###### ## ## ######## ####### . ## ## # # # - # ## ## ##D# ## . ## ## # # # D###### ###........ ## ... ## ###### # # # # ## ## .... ## . ## ## - # # # #. ######## ## ## . - ####D####.. D # # #.- #...## ## ... ## ### ...... ## ##### # # #. #..## ## ######### ## ... ## ### ## .. # # #.. #.## ## ## - ## . #### ## ## ##### ## # # #####D####### # ## ## ##..## ## ## ## ## ## # # D -.## # # #### ##.-.-## ##DD## ### #### ## # # ######. ...# #### ## #### ##### ## ##D# ####~!.... D . . # ################################################################### ################################################################### # # # ####.########################################## ## ########## # # #.#.#.# #.. . # # # ####### # # # # # ############# # ########### # ### # # # # # # # # --##...##-- # # # # #-# # # ..- D # # # # # #-## . ##-# ####D##### .. ### # # # # # # # # ###. .### # ~ # ### ### ##### # # ############ # # # # ## . . .## #...# .. #.# # # # .. .# # # # # ## - ## # # D. # ######### # # . D # # # # ###.......### ####D#####.# # # # - . # # # # # -## ##- # . ### ########### # ############ #.#.# # ######D###### # . ....# # # # #!#-# # .. # . ###....## ##-### # #### ############################## ########## ###### ### # # D . # ################################################################### ################################################################### # # # ###############D####################D# # # ####################### # ##...... # # # ########D###### # # ##.... # # # ############### ## ## ... # # #...## ##### # # # ~ # # #!...... # # # .. ##### # # # # - .. # # # ########### # # . ######### # # # ##### ######## # # # # # #... ## # # # # # # ########## ######## ########D #### ###### # # # # ....# # # # # # ## # # # ##### # ###### # ....# # ######### # # #####D# # # #- ## # #######..# # ######### # - #.. # # ##### # # # #... #..... # # # ################### ###############... #### ###### # # # ################################################################### ################################################################### # # # ########### ##### # #####D#### ##### ###### # #.. # #~..D ###### ## # ## # ## ..## ### #### # # #### ### ##### # ## # ##### # ## ### ## # # # # # # # # # ##### # ## # # #### # #..##### - ### # # # # ####### ### #...# # ######## # # #!. .... # # # # # # #...# # # ######### ############## # # # ###### ####### # ### ### # .. # # # # # - # #- # # # ######## #### # # # # # ########## #.. ....# # ######## # ## ## # # # -. ##### ####...## # . .# .. # # # # # ###### ##### #####.#### ####### # # # # - #######....#### ...... #.# . # ## # # # ######### ##### ###########.############### ### # # . # ################################################################### ################################################################### # D D #-..........# # # # # # #D#D# #####.#####.# # # # # # #############D########### # # # ##### #.#~###.# # # # # # ### .... # # # # #D# # #.......# # # # # # # . . -.. #. #.# # # # # . - # #.####### # # # # # ################## # # #D####### #. # D # . # # # #. D D -# ################################################### # # ###### . . # # # D ### ###D### ####### ###D### ####### ###D### ####### # # # ###### # # .# .# #. # # # # # # # # . # # # ### -# # # .#. - .# # # #...- # # .. # # -..# # . # # #DD# # # # #. .# # # # # # # # .. .# # # # #.###### # # # # #.....# # # # # # ! # # # # # # ####### ####### ### ### ####### ### ### ####### ### ### # # # ... .. # ################################################################### SHAR_EOF if test 18513 -ne "`wc -c < 'larn12.maz'`" then echo shar: error transmitting "'larn12.maz'" '(should have been 18513 characters)' fi fi # end of overwriting check echo shar: extracting "'larn12.opt'" '(253 characters)' if test -f 'larn12.opt' then echo shar: will not over-write existing file "'larn12.opt'" else cat << \SHAR_EOF > 'larn12.opt' process-name: "Winnie-the-Pooh" enable-checkpointing bold-objects male play-day-play no-introduction name: "King of the Realm" monster: "abominable snowman" monster: "tooth fairy" monster: "Yaccerous Lexicous" savefile: "/save/noah/games/Larn12.0.sav" SHAR_EOF if test 253 -ne "`wc -c < 'larn12.opt'`" then echo shar: error transmitting "'larn12.opt'" '(should have been 253 characters)' fi fi # end of overwriting check echo shar: extracting "'make.com'" '(5478 characters)' if test -f 'make.com' then echo shar: will not over-write existing file "'make.com'" else cat << \SHAR_EOF > 'make.com' $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! Available compile time options: $! WIZID=xxx - this is the userid (or playerid) of the wizard. Default is $! zero (superuser), which disables all wizard functions. $! Players must have this userid (or playerid) in order to $! become the non-scoring wizard player. Definition of WIZID $! to non-zero will enable the special wizard debugging $! commands. For root to become wizard, use WIZID= -1. $! EXTRA - incorporates code to gather additional performance statistics $! TIMECHECK - incorporates code to disable play during working hours (8-5) $! SAVEINHOME - put save files in users HOME instead of LARNHOME the as default $! VER - This is the version of the software, example: 12 $! SUBVER - This is the revision of the software, example: 1 $! MACRORND $! - Define to use macro version of rnd() and rund() (fast & big) $! UIDSCORE $! - Define to use user id's to manage scoreboard. Leaving this $! out will cause player id's from the file "LARN12.IDS" to be $! used instead. (LARN12.IDS is created upon demand). Only one $! entry per id # is allowed in each scoreboard (winning & $! non-winning). $! VT100 - Compile for using vt100 family of terminals. Omission of this $! define will cause larn to use termcap, but it will be MUCH $! slower due to an extra layer of output interpretation. $! Also, only VT100 mode allows 2 different standout modes, $! inverse video, and bold video. And only in VT100 mode is $! the scrolling region of the terminal used (much nicer than $! insert/delete line sequences to simulate it, if VT100 is $! omitted). $! NONAP - This causes napms() to return immediately instead of delaying $! n milliseconds. This define may be needed on some systems $! if the nap stuff does not work correctly (possible hang). $! nap() is primarilly used to delay for effect when casting $! missile type spells. $! $! End of configurable make options $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $! $! $! WIZID = (0101<<16) | 02 ([101,2]) $! $ $! You must define LARNHOME in LARN.C before executing this command file. $ $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ DEF = " /DEF=(SAVEINHOME,WIZZARD,WIZID=4259842,EXTRA,VT100,VER=12,SUBVER=0,MACRORND)" $!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $ $ SET DEFAULT [MARK.SRC.GAMES.LARN.TMP] ! change to suit your needs $ $!-------------------------------------------- $! Make command file for VMS Larn version 12.0 $!-------------------------------------------- $ $ ON ERROR THEN GOTO ERROR_HANDLER $! $! If we are making a debug version, define options appropriately. $! $ C_OPTS = "/NOLIST /NOOPT" $ L_OPTS = "/NOMAP" $ IF P1 .NES. "DEBUG" THEN GOTO NO_DEBUG $ C_OPTS = C_OPTS + " /DEBUG" $ L_OPTS = L_OPTS + " /DEBUG" $ NO_DEBUG: $ C_OPTS = C_OPTS + "'DEF'" $! $! Define the module library $! $ LIB = "LARNLIB.OLB" $ $ IF F$SEARCH("''LIB'") .EQS. "" THEN - LIBRARY/CREATE 'LIB'/OBJ ! CREATE THE LIBRARY IF IT DOESN'T EXIST $! $! Main module doesn't go in the library $! $ CC 'C_OPTS' LARN $ $! $! Everything else does $! $ CC 'C_OPTS' BILL $ LIBRARY 'LIB'/OBJ BILL $ DELETE BILL.OBJ; $ CC 'C_OPTS' CREATE $ LIBRARY 'LIB'/OBJ CREATE $ DELETE CREATE.OBJ; $ CC 'C_OPTS' DATA $ LIBRARY 'LIB'/OBJ DATA $ DELETE DATA.OBJ; $ CC 'C_OPTS' DIAG $ LIBRARY 'LIB'/OBJ DIAG $ DELETE DIAG.OBJ; $ CC 'C_OPTS' DISPLAY $ LIBRARY 'LIB'/OBJ DISPLAY $ DELETE DISPLAY.OBJ; $ CC 'C_OPTS' FORTUNE $ LIBRARY 'LIB'/OBJ FORTUNE $ DELETE FORTUNE.OBJ; $ CC 'C_OPTS' GLOBAL $ LIBRARY 'LIB'/OBJ GLOBAL $ DELETE GLOBAL.OBJ; $ CC 'C_OPTS' HELP $ LIBRARY 'LIB'/OBJ HELP $ DELETE HELP.OBJ; $ CC 'C_OPTS' IO $ LIBRARY 'LIB'/OBJ IO $ DELETE IO.OBJ; $ CC 'C_OPTS' KEYSENSE $ LIBRARY 'LIB'/OBJ KEYSENSE $ DELETE KEYSENSE.OBJ; $ CC 'C_OPTS' MONSTER $ LIBRARY 'LIB'/OBJ MONSTER $ DELETE MONSTER.OBJ; $ CC 'C_OPTS' MOREOBJ $ LIBRARY 'LIB'/OBJ MOREOBJ $ DELETE MOREOBJ.OBJ; $ CC 'C_OPTS' MOVEM $ LIBRARY 'LIB'/OBJ MOVEM $ DELETE MOVEM.OBJ; $ CC 'C_OPTS' NAP $ LIBRARY 'LIB'/OBJ NAP $ DELETE NAP.OBJ; $ CC 'C_OPTS' OBJECT $ LIBRARY 'LIB'/OBJ OBJECT $ DELETE OBJECT.OBJ; $ CC 'C_OPTS' REGEN $ LIBRARY 'LIB'/OBJ REGEN $ DELETE REGEN.OBJ; $ CC 'C_OPTS' SAVELEV $ LIBRARY 'LIB'/OBJ SAVELEV $ DELETE SAVELEV.OBJ; $ CC 'C_OPTS' SCORES $ LIBRARY 'LIB'/OBJ SCORES $ DELETE SCORES.OBJ; $ CC 'C_OPTS' SIGNAL $ LIBRARY 'LIB'/OBJ SIGNAL $ DELETE SIGNAL.OBJ; $ CC 'C_OPTS' STORE $ LIBRARY 'LIB'/OBJ STORE $ DELETE STORE.OBJ; $ CC 'C_OPTS' TOK $ LIBRARY 'LIB'/OBJ TOK $ DELETE TOK.OBJ; $! $! now link 'em up $! $ LINK 'L_OPTS' LARN,'LIB'/LIB,SYS$LIBRARY:VAXCRTL/LIB $ $ EXIT $ $ ERROR_HANDLER: $ WRITE SYS$OUTPUT "Fatal error has occurred. See ya!" SHAR_EOF echo shar: a missing newline was added to "'make.com'" echo shar: 485 control characters may be missing from "'make.com'" if test 5478 -ne "`wc -c < 'make.com'`" then echo shar: error transmitting "'make.com'" '(should have been 5478 characters)' fi fi # end of overwriting check echo shar: extracting "'moreobj.c'" '(9411 characters)' if test -f 'moreobj.c' then echo shar: will not over-write existing file "'moreobj.c'" else cat << \SHAR_EOF > 'moreobj.c' /* moreobj.c Larn is copyrighted 1986 by Noah Morgan. * * Routines in this file: * * oaltar() * othrone() * ochest() * ofountain() */ #include "header.h" /* * ****** * OALTAR * ****** * * subroutine to process an altar object */ oaltar() { unsigned long k; lprcat("\nDo you (p) pray or (d) desecrate"); iopts(); while (1) { while (1) switch(readchar()) { case 'p': lprcat(" pray\nDo you (m) give money or (j) just pray? "); while (1) switch(readchar()) { case 'j': if (rnd(100) < 75) lprcat("\nnothing happens"); else if (rnd(13) < 4) ohear(); else if (rnd(43) == 10) { if (c[WEAR]) lprcat("\nYou feel your armor vibrate for a moment"); enchantarmor(); return; } else if (rnd(43) == 10) { if (c[WIELD]) lprcat("\nYou feel your weapon vibrate for a moment"); enchweapon(); return; } else createmonster(makemonst(level + 1)); return; case 'm': lprcat("\n\n"); cursor(1, 24); cltoeoln(); cursor(1, 23); cltoeoln(); lprcat("How much do you donate? "); k = readnum((long) c[GOLD]); if (c[GOLD] < k) { lprcat("\nYou don't have that much!"); return; } c[GOLD] -= k; if (k < c[GOLD] / 10 || k < rnd(50)) { createmonster(makemonst(level + 1)); c[AGGRAVATE] += 200; } else if (rnd(101) > 50) { ohear(); return; } else if (rnd(43) == 5) { if (c[WEAR]) lprcat("\nYou feel your armor vibrate for a moment"); enchantarmor(); return; } else if (rnd(43) == 8) { if (c[WIELD]) lprcat("\nYou feel your weapon vibrate for a moment"); enchweapon(); return; } else lprcat("\nThank You."); bottomline(); return; case '\33': return; }; case 'd': lprcat(" desecrate"); if (rnd(100) < 60) { createmonster(makemonst(level + 2) + 8); c[AGGRAVATE] += 2500; } else if (rnd(101) < 30) { lprcat("\nThe altar crumbles into a pile of dust before your eyes"); forget(); /* remember to destroy the altar */ } else lprcat("\nnothing happens"); return; case 'i': case '\33': ignore(); if (rnd(100) < 30) { createmonster(makemonst(level + 1)); c[AGGRAVATE] += rnd(450); } else lprcat("\nnothing happens"); return; }; } } /* function to cast a +3 protection on the player */ static ohear() { lprcat("\nYou have been heard!"); if (c[ALTPRO] == 0) c[MOREDEFENSES] += 3; c[ALTPRO] += 500; /* protection field */ bottomline(); } /* ******* OTHRONE ******* subroutine to process a throne object */ othrone(arg) int arg; { register int i,k; lprcat("\nDo you (p) pry off jewels or (s) sit down"); iopts(); while (1) { while (1) switch(readchar()) { case 'p': lprcat(" pry off"); k = rnd(101); if (k < 25) { for (i = 0; i < rnd(4); i++) creategem();/* gems pop off the throne */ item[playerx][playery] = ODEADTHRONE; know[playerx][playery] = 0; } else if (k < 40 && arg == 0) { createmonster(GNOMEKING); item[playerx][playery] = OTHRONE2; know[playerx][playery] = 0; } else lprcat("\nnothing happens"); return; case 's': lprcat(" sit down"); k = rnd(101); if (k < 30 && arg == 0) { createmonster(GNOMEKING); item[playerx][playery] = OTHRONE2; know[playerx][playery] = 0; } else if (k < 35) { lprcat("\nZaaaappp! You've been teleported!\n"); beep(); oteleport(0); } else lprcat("\nnothing happens"); return; case 'i': case '\33': ignore(); return; }; } } odeadthrone() { register int k; lprcat("\nDo you (s) sit down"); iopts(); while (1) { while (1) switch(readchar()) { case 's': lprcat(" sit down"); k = rnd(101); if (k < 35) { lprcat("\nZaaaappp! You've been teleported!\n"); beep(); oteleport(0); } else lprcat("\nnothing happens"); return; case 'i': case '\33': ignore(); return; }; } } /* ****** OCHEST ****** subroutine to process a throne object */ ochest() { register int i,k; lprcat("\nDo you (t) take it or (o) try to open it"); iopts(); while (1) { while (1) switch(readchar()) { case 'o': lprcat(" open it"); k = rnd(101); if (k < 40) { lprcat("\nThe chest explodes as you open it"); beep(); i = rnd(10); lastnum = 281;/* in case he dies */ lprintf("\nYou suffer %d hit points damage!",(long) i); checkloss(i); switch(rnd(10)) {/* see if he gets a curse */ case 1: c[ITCHING] += rnd(1000) + 100; lprcat("\nYou feel an irritation spread over your skin!"); beep(); break; case 2: c[CLUMSINESS] += rnd(1600) + 200; lprcat("\nYou begin to lose hand to eye coordination!"); beep(); break; case 3: c[HALFDAM] += rnd(1600) + 200; beep(); lprcat("\nA sickness engulfs you!"); break; }; item[playerx][playery] = know[playerx][playery] = 0; if (rnd(100) < 69) creategem();/* gems from the chest */ dropgold(rnd(110 * iarg[playerx][playery] + 200)); for (i = 0; i < rnd(4); i++) something(iarg[playerx][playery] + 2); } else lprcat("\nnothing happens"); return; case 't': lprcat(" take"); if (take(OCHEST, iarg[playerx][playery]) == 0) item[playerx][playery] = know[playerx][playery] = 0; return; case 'i': case '\33': ignore(); return; }; } } /* ********* OFOUNTAIN ********* */ ofountain() { register int x; cursors(); lprcat("\nDo you (d) drink or (w) wash yourself"); iopts(); while (1) switch(readchar()) { case 'd': lprcat("drink"); if (rnd(1501) < 2) { lprcat("\nOops! You seem to have caught the dreadful sleep!"); beep(); lflush(); sleep(3); died(280); return; } x = rnd(100); if (x < 7) { c[HALFDAM] += 200 + rnd(200); lprcat("\nYou feel a sickness coming on"); } else if (x < 13) quaffpotion(23);/* see invisible */ else if (x < 45) lprcat("\nnothing seems to have happened"); else if (rnd(3) != 2) fntchange(1); /* change char levels upward */ else fntchange(-1); /* change char levels downward */ if (rnd(12) < 3) { lprcat("\nThe fountains bubbling slowly quiets"); item[playerx][playery] = ODEADFOUNTAIN;/* dead fountain */ know[playerx][playery] = 0; } return; case '\33': case 'i': ignore(); return; case 'w': lprcat("wash yourself"); if (rnd(100) < 11) { x = rnd((level << 2) + 2); lprintf("\nOh no! The water was foul! You suffer %d hit points!",(long) x); lastnum = 273; losehp(x); bottomline(); cursors(); } else if (rnd(100) < 29) lprcat("\nYou got the dirt off!"); else if (rnd(100) < 31) lprcat("\nThis water seems to be hard water! The dirt didn't come off!"); else if (rnd(100) < 34) createmonster(WATERLORD); /* make water lord */ else lprcat("\nnothing seems to have happened"); return; } } /* a subroutine to raise or lower character levels if x > 0 they are raised if x < 0 they are lowered */ fntchange(how) int how; { register long j; lprc('\n'); switch(rnd(9)) { case 1: lprcat("Your strength"); fch(how, &c[0]); break; case 2: lprcat("Your intelligence"); fch(how, &c[1]); break; case 3: lprcat("Your wisdom"); fch(how, &c[2]); break; case 4: lprcat("Your constitution"); fch(how, &c[3]); break; case 5: lprcat("Your dexterity"); fch(how, &c[4]); break; case 6: lprcat("Your charm"); fch(how, &c[5]); break; case 7: j = rnd(level + 1); if (how < 0) { lprintf("You lose %d hit point",(long) j); if (j > 1) lprcat("s!"); else lprc('!'); losemhp((int) j); } else { lprintf("You gain %d hit point",(long) j); if (j > 1) lprcat("s!"); else lprc('!'); raisemhp((int) j); } bottomline(); break; case 8: j = rnd(level + 1); if (how > 0) { lprintf("You just gained %d spell",(long) j); raisemspells((int) j); if (j > 1) lprcat("s!"); else lprc('!'); } else { lprintf("You just lost %d spell",(long) j); losemspells((int) j); if (j > 1) lprcat("s!"); else lprc('!'); } bottomline(); break; case 9: j = 5 * rnd((level + 1) *(level + 1)); if (how < 0) { lprintf("You just lost %d experience point",(long) j); if (j > 1) lprcat("s!"); else lprc('!'); loseexperience((long) j); } else { lprintf("You just gained %d experience point",(long) j); if (j > 1) lprcat("s!"); else lprc('!'); raiseexperience((long) j); } break; } cursors(); } /* *** FCH *** subroutine to process an up/down of a character attribute for ofountain */ static fch(how, x) int how; long *x; { if (how < 0) { lprcat(" went down by one!"); --(*x); } else { lprcat(" went up by one!"); (*x)++; } bottomline(); } SHAR_EOF if test 9411 -ne "`wc -c < 'moreobj.c'`" then echo shar: error transmitting "'moreobj.c'" '(should have been 9411 characters)' fi fi # end of overwriting check echo shar: extracting "'movem.c'" '(11581 characters)' if test -f 'movem.c' then echo shar: will not over-write existing file "'movem.c'" else cat << \SHAR_EOF > 'movem.c' /* * movem.c (move monster) Larn is copyrighted 1986 by Noah Morgan. * * Here are the functions in this file: * * movemonst() Routine to move the monsters toward the player * movemt(x,y) Function to move a monster at (x,y) -- must determine where * mmove(x,y,xd,yd) Function to actually perform the monster movement * movsphere() Function to look for and move spheres of annihilation */ #include "header.h" /* * movemonst() Routine to move the monsters toward the player * * This routine has the responsibility to determine which monsters are to * move, and call movemt() to do the move. * Returns no value. */ static short w1[9], w1x[9], w1y[9]; static int tmp1, tmp2, tmp3, tmp4, distance; movemonst () { register int i, j; if (c[TIMESTOP]) return; /* no action if time is stopped */ if (c[HASTESELF]) if ((c[HASTESELF] & 1) == 0) return; if (spheres) movsphere (); /* move the spheres of annihilation if any */ if (c[HOLDMONST]) return; /* no action if monsters are held */ if (c[AGGRAVATE]) { /* determine window of monsters to move */ tmp1 = playery - 5; tmp2 = playery + 6; tmp3 = playerx - 10; tmp4 = playerx + 11; distance = 40; /* depth of intelligent monster movement */ } else { tmp1 = playery - 3; tmp2 = playery + 4; tmp3 = playerx - 5; tmp4 = playerx + 6; distance = 17; /* depth of intelligent monster movement */ } if (level == 0) { /* if on outside level monsters can move in perimeter */ if (tmp1 < 0) tmp1 = 0; if (tmp2 > MAXY) tmp2 = MAXY; if (tmp3 < 0) tmp3 = 0; if (tmp4 > MAXX) tmp4 = MAXX; } else { /* if in a dungeon monsters can't be on the perimeter (wall there) */ if (tmp1 < 1) tmp1 = 1; if (tmp2 > MAXY - 1) tmp2 = MAXY - 1; if (tmp3 < 1) tmp3 = 1; if (tmp4 > MAXX - 1) tmp4 = MAXX - 1; } for (j = tmp1; j < tmp2; j++)/* now reset monster moved flags */ for (i = tmp3; i < tmp4; i++) moved[i][j] = 0; moved[lasthx][lasthy] = 0; if (c[AGGRAVATE] || !c[STEALTH]) {/* who gets moved? split for efficiency */ for (j = tmp1; j < tmp2; j++)/* look thru all locations in window */ for (i = tmp3; i < tmp4; i++) if (mitem[i][j])/* if there is a monster to move */ if (moved[i][j] == 0)/* if it has not already been moved */ movemt (i, j);/* go and move the monster */ } else { /* not aggravated and not stealth */ for (j = tmp1; j < tmp2; j++)/* look thru all locations in window */ for (i = tmp3; i < tmp4; i++) if (mitem[i][j])/* if there is a monster to move */ if (moved[i][j] == 0)/* if it has not already been moved */ if (stealth[i][j])/* if it is asleep due to stealth */ movemt (i, j);/* go and move the monster */ } if (mitem[lasthx][lasthy]) {/* now move monster last hit by player if not already moved */ if (moved[lasthx][lasthy] == 0) {/* if it has not already been moved */ movemt (lasthx, lasthy); lasthx = w1x[0]; lasthy = w1y[0]; } } } /* * movemt(x,y) Function to move a monster at (x,y) -- must determine where * int x,y; * * This routine is responsible for determining where one monster at (x,y) will * move to. Enter with the monsters coordinates in (x,y). * Returns no value. */ static int tmpitem, xl, xh, yl, yh; movemt (i, j) int i, j; { register int k, m, z, tmp, xtmp, ytmp, monst; switch (monst = mitem[i][j]) {/* for half speed monsters */ case TROGLODYTE: case HOBGOBLIN: case METAMORPH: case XVART: case INVISIBLESTALKER: case ICELIZARD: if ((gtime & 1) == 1) return; }; if (c[SCAREMONST]) { /* choose destination randomly if scared */ if ((xl = i + rnd (3) - 2) < 0) xl = 0; if (xl >= MAXX) xl = MAXX - 1; if ((yl = j + rnd (3) - 2) < 0) yl = 0; if (yl >= MAXY) yl = MAXY - 1; if ((tmp = item[xl][yl]) != OWALL) if (mitem[xl][yl] == 0) if ((mitem[i][j] != VAMPIRE) || (tmpitem != OMIRROR)) if (tmp != OCLOSEDDOOR) mmove (i, j, xl, yl); return; } if (monster[monst].intelligence > 10 - c[HARDGAME]) {/* if smart monster */ /* intelligent movement here -- first setup screen array */ xl = tmp3 - 2; yl = tmp1 - 2; xh = tmp4 + 2; yh = tmp2 + 2; vxy (&xl, &yl); vxy (&xh, &yh); for (k = yl; k < yh; k++) for (m = xl; m < xh; m++) { switch (item[m][k]) { case OWALL: case OPIT: case OTRAPARROW: case ODARTRAP: case OCLOSEDDOOR: case OTRAPDOOR: case OTELEPORTER: smm: screen[m][k] = 127; break; case OMIRROR: if (mitem[m][k] == VAMPIRE) goto smm; default: screen[m][k] = 0; break; }; } screen[playerx][playery] = 1; /* now perform proximity ripple from playerx,playery to monster */ xl = tmp3 - 1; yl = tmp1 - 1; xh = tmp4 + 1; yh = tmp2 + 1; vxy (&xl, &yl); vxy (&xh, &yh); for (tmp = 1; tmp < distance; tmp++)/* only up to 20 squares away */ for (k = yl; k < yh; k++) for (m = xl; m < xh; m++) if (screen[m][k] == tmp)/* if find proximity n advance it */ for (z = 1; z < 9; z++) {/* go around in a circle */ if (screen[xtmp = m + diroffx[z]][ytmp = k + diroffy[z]] == 0) screen[xtmp][ytmp] = tmp + 1; if (xtmp == i && ytmp == j) goto out; } out: if (tmp < distance) /* did find connectivity */ /* now select lowest value around playerx,playery */ for (z = 1; z < 9; z++)/* go around in a circle */ if (screen[xl = i + diroffx[z]][yl = j + diroffy[z]] == tmp) if (!mitem[xl][yl]) { mmove (i, j, w1x[0] = xl, w1y[0] = yl); return; } } /* dumb monsters move here */ xl = i - 1; yl = j - 1; xh = i + 2; yh = j + 2; if (i < playerx) xl++; else if (i > playerx) --xh; if (j < playery) yl++; else if (j > playery) --yh; for (k = 0; k < 9; k++) w1[k] = 10000; for (k = xl; k < xh; k++) for (m = yl; m < yh; m++) {/* for each square compute distance to player */ tmp = k - i + 4 + 3 * (m - j); tmpitem = item[k][m]; if (tmpitem != OWALL || (k == playerx && m == playery)) if (mitem[k][m] == 0) if ((mitem[i][j] != VAMPIRE) || (tmpitem != OMIRROR)) if (tmpitem != OCLOSEDDOOR) { w1[tmp] = (playerx - k) * (playerx - k) + (playery - m) * (playery - m); w1x[tmp] = k; w1y[tmp] = m; } } tmp = 0; for (k = 1; k < 9; k++) if (w1[tmp] > w1[k]) tmp = k; if (w1[tmp] < 10000) if ((i != w1x[tmp]) || (j != w1y[tmp])) mmove (i, j, w1x[tmp], w1y[tmp]); } /* * mmove(x,y,xd,yd) Function to actually perform the monster movement * int x,y,xd,yd; * * Enter with the from coordinates in (x,y) and the destination coordinates * in (xd,yd). */ mmove (aa, bb, cc, dd) int aa, bb, cc, dd; { register int tmp, i, flag; char *who, *p; flag = 0; /* set to 1 if monster hit by arrow trap */ if ((cc == playerx) && (dd == playery)) { hitplayer (aa, bb); moved[aa][bb] = 1; return; } i = item[cc][dd]; if ((i == OPIT) || (i == OTRAPDOOR)) switch (mitem[aa][bb]) { case SPIRITNAGA: case PLATINUMDRAGON: case WRAITH: case VAMPIRE: case SILVERDRAGON: case POLTERGEIST: case DEMONLORD: case DEMONLORD + 1: case DEMONLORD + 2: case DEMONLORD + 3: case DEMONLORD + 4: case DEMONLORD + 5: case DEMONLORD + 6: case DEMONPRINCE: break; default: mitem[aa][bb] = 0;/* fell in a pit or trapdoor */ }; tmp = mitem[cc][dd] = mitem[aa][bb]; if (i == OANNIHILATION) { if (tmp >= DEMONLORD + 3) {/* demons dispel spheres */ cursors (); lprintf ("\nThe %s dispels the sphere!", monster[tmp].name); rmsphere (cc, dd); /* delete the sphere */ } else i = tmp = mitem[cc][dd] = 0; } stealth[cc][dd] = 1; if ((hitp[cc][dd] = hitp[aa][bb]) < 0) hitp[cc][dd] = 1; mitem[aa][bb] = 0; moved[cc][dd] = 1; if (tmp == LEPRECHAUN) switch (i) { case OGOLDPILE: case OMAXGOLD: case OKGOLD: case ODGOLD: case ODIAMOND: case ORUBY: case OEMERALD: case OSAPPHIRE: item[cc][dd] = 0;/* leprechaun takes gold */ }; if (tmp == TROLL) /* if a troll regenerate him */ if ((gtime & 1) == 0) if (monster[tmp].hitpoints > hitp[cc][dd]) hitp[cc][dd]++; if (i == OTRAPARROW) { /* arrow hits monster */ who = "An arrow"; if ((hitp[cc][dd] -= rnd (10) + level) <= 0) { mitem[cc][dd] = 0; flag = 2; } else flag = 1; } if (i == ODARTRAP) { /* dart hits monster */ who = "A dart"; if ((hitp[cc][dd] -= rnd (6)) <= 0) { mitem[cc][dd] = 0; flag = 2; } else flag = 1; } if (i == OTELEPORTER) { /* monster hits teleport trap */ flag = 3; fillmonst (mitem[cc][dd]); mitem[cc][dd] = 0; } if (c[BLINDCOUNT]) return; /* if blind don't show where monsters are */ if (know[cc][dd] & 1) { p = 0; if (flag) cursors (); switch (flag) { case 1: p = "\n%s hits the %s"; break; case 2: p = "\n%s hits and kills the %s"; break; case 3: p = "\nThe %s%s gets teleported"; who = ""; break; }; if (p) { lprintf (p, who, monster[tmp].name); beep (); } } /* if (yrepcount>1) { know[aa][bb] &= 2; know[cc][dd] &= 2; return; } */ if (know[aa][bb] & 1) show1cell (aa, bb); if (know[cc][dd] & 1) show1cell (cc, dd); } /* * movsphere() Function to look for and move spheres of annihilation * * This function works on the sphere linked list, first duplicating the list * (the act of moving changes the list), then processing each sphere in order * to move it. They eat anything in their way, including stairs, volcanic * shafts, potions, etc, except for upper level demons, who can dispel * spheres. * No value is returned. */ #define SPHMAX 20 /* maximum number of spheres movsphere can handle */ movsphere () { register int x, y, dir, len; register struct sphere *sp, *sp2; struct sphere sph[SPHMAX]; /* first duplicate sphere list */ for (sp = 0, x = 0, sp2 = spheres; sp2; sp2 = sp2 -> p)/* look through sphere list */ if (sp2 -> lev == level) {/* only if this level */ sph[x] = *sp2; sph[x++].p = 0; /* copy the struct */ if (x > 1) sph[x - 2].p = &sph[x - 1];/* link pointers */ } if (x) sp = sph; /* if any spheres, point to them */ else return; /* no spheres */ for (sp = sph; sp; sp = sp -> p) {/* look through sphere list */ x = sp -> x; y = sp -> y; if (item[x][y] != OANNIHILATION) continue; /* not really there */ if (--(sp -> lifetime) < 0) {/* has sphere run out of gas? */ rmsphere (x, y); /* delete sphere */ continue; } switch (rnd ((int) max (7, c[INTELLIGENCE] >> 1))) {/* time to move the sphere */ case 1: case 2: /* change direction to a random one */ sp -> dir = rnd (8); default: /* move in normal direction */ dir = sp -> dir; len = sp -> lifetime; rmsphere (x, y); newsphere (x + diroffx[dir], y + diroffy[dir], dir, len); }; } } SHAR_EOF if test 11581 -ne "`wc -c < 'movem.c'`" then echo shar: error transmitting "'movem.c'" '(should have been 11581 characters)' fi fi # end of overwriting check echo shar: extracting "'nap.c'" '(938 characters)' if test -f 'nap.c' then echo shar: will not over-write existing file "'nap.c'" else cat << \SHAR_EOF > 'nap.c' /* nap.c Larn is copyrighted 1986 by Noah Morgan. */ #include /* * routine to take a nap for n milliseconds */ nap (x) register int x; { if (x <= 0) return; /* eliminate chance for infinite loop */ lflush (); if (x > 999) sleep (x / 1000); else napms (x); } #ifdef NONAP napms (x) /* do nothing */ int x; { } #else NONAP /* napms - sleep for time milliseconds - uses times() * This assumes that times returns a relative time in 100ths of a * second. This will do horrible things if your times() returns * seconds! */ napms (time) int time; { long matchclock,times (); struct tms stats; if (time <= 0) time = 1; /* eliminate chance for infinite loop */ times(&stats); /* 10ms/tic is 1000 ms/sec / 100 tics/sec */ matchclock = stats.tms_utime + (time/10); while (1) { times(&stats); if (matchclock < stats.tms_utime) break; } } #endif NONAP SHAR_EOF if test 938 -ne "`wc -c < 'nap.c'`" then echo shar: error transmitting "'nap.c'" '(should have been 938 characters)' fi fi # end of overwriting check echo shar: extracting "'readme.txt'" '(8418 characters)' if test -f 'readme.txt' then echo shar: will not over-write existing file "'readme.txt'" else cat << \SHAR_EOF > 'readme.txt' ****************************************************************************** PREFACE FOR VMS PORT OF LARN 12.0 After hacking away at this thing, I have finally gotten it to work on VMS 4.2 using the VAX-11 C 2.1 compiler. I have not tested it completely, but it seems to function correctly. I left the termcap stuff in because it works fine on VMS if you have a termcap database, but the VT100 *is* incredibly faster. You can adjust the compile time options in the DEF line of MAKE.COM (except for LARNHOME; you will have to change that inside of LARN.C). I removed a few obviously anti-VMS options, but everything else seems OK. Anyway, to compile this baby just MAKE.COM after you have edited the options and LARN.C. NOTE: Since does not have a *real* fork(), you should *not* enable checkpoints in option file unless your system is pretty unreliable. It slows the game a lot. Have fun! To compile: 1) Edit MAKE.COM to reflect your needs. a) If you choose to use the playerid option, make sure you have whoever is to be wizard play first. Otherwise you must set WISID to be 65536*GID+UID. Note that the GID and UID come from [GID,UID] account numbers (the displayed values are in OCTAL). So the WISID for [101,3] is 101(octal) * 65536 + 3(octal). b) You will have to modify the symbol LARNHOME in the LARN.C file since I couldn't figure out how to /DEFINE=(LARNHOME="whatever") in the MAKE.COM file. All LARN12.* files should also go in this directory (LARNHOME) before sexecuting. c) Execute MAKE.COM (you will have to edit the default directory in this command file). d) Move the executable (LARN.EXE) and all LARN12.* files to LARNHOME and set LARN as a foreign command (LARN :== $LARNHOME:LARN). - Mark Nagel ..!{ucbvax,dual,lll-crg}!ucdavis!{u557676751ea,u572112244ea,donovan} ******************************************************************************* ******************************************************************************* Larn is a dungeon type game program. Larn is a adventure/action game similar in concept to rogue or hack, but with a much different feel. Try it, you'll like it! You will have to edit the Makefile to reflect your configuration. Define LARNHOME as the place where the larn auxiliary files will reside, and BINDIR as the place where the larn executable should be placed. Type "make" to compile, or "make all" to compile and install ("make install" does just the install). Here's a list of what is in each of the various source files: CHANGES.TXT this is a list of the things that were changed since ver 11.0 1MAKEFILE. makefile script to compile the program README.TXT this is what you are now reading BILL.C code for the letters of praise if player wins /* moved to LARN.C MDN */ CONFIG.C data definitions for the installation dependent data -- savefilenames, where the scorefiles are, etc. CREATE.C code to create the dungeon and all objects DATA.C data definitions for the game -- no code here DIAG.C code to produce diagnostic data for wizards, & savegame stuff DISPLAY.C code to update the display on the screen FORTUNE.C code for the fortune cookies GLOBAL.C code for globally used functions that are specific to larn HEADER.H constant and structure definitions HELP.C code for the help screens in the game of larn LARN12.HDY data file which lists upcoming holidays IO.C code to handle file and terminal i/o /* added this module -- MDN */ KEYSENSE.C code to handle single key reading, dcl spawning LARN.C code for the main command control and parsing LARN12.MAZ data file for pre-made mazes LARN12.OPT a sample .larnopts option data file LARN12.FTN data file which contains the hints MONSTER.C code to handle attack and defense modes with monsters MOREOBJ.C code for the fountains, altars, thrones MOVEM.C code to move the monsters around the dungeon NAP.C code to sleep for less than a second OBJECT.C code to handle objects in the dungeon REGEN.C code to regenerate the player and advance game time SAVELEV.C code to get/put a level from level storage into working level memory SCORES.C code to process and manage the scoreboard SIGNAL.C code to handle signals that are trapped STORE.C code for the larn thrift shoppe, bank, trading post, lrs TOK.C code for the input front end and options file processing To find out how to play the game, run it and type in a '?' to get the help screens. By the way, the wizards password is "pvnert(x)" and to become wizard type in an underscore, you are then prompted for the password. Wizards are non-scoring characters that get enlightenment, everlasting expanded awareness, and one of every object in the game. They help the author to debug the game. Note regarding the wizard id: If you are using userid's, then WIZID must be set to the userid of the person who can become wizard. If you are using player id's, WIZID must be set to the playerid (edit file .playerids if needed) of the player who can become wizard. You may want to clear out the scoreboard. The command "larn -c" will make a new scoreboard. It will prompt you for the wizards password. BUGS & FIXES: James McNamara has volunteered to maintain the latest sources, and provide latest bug fixes to anyone who asks. Both James and I will field requests for sources, for those who ask. ___ Prince of Gems (alias Noah Morgan) /. \ USENET: panda!condor!noah \ / at GenRad Inc. Bolton MA \ / v Below is some additional info about the installation of larn: Install: Notes on the game LARN installation. Larn is copyrighted 1986 by Noah Morgan. This file (below) originally by James D. McNamara, last update 7/27/86 by nm THIS DISTRIBUTION: You should receive six (6) shar files, which are: larn.part-1 larn.part-2 larn.part-3 larn.part-4 larn.part-5 larn.part-6 I. Use /bin/sh (or your system equivalent) to "unravel" shar files larn.part-1, ..., larn.part-6. I suggest you do this directly into $LARNHOME (See Section III.). Notable files: README - The author's how-to. MANIFEST - Files you should have. III. Edit a copy of "Makefile" and leave the edited version in $LARNHOME. All the "configuration" options are tidily near the top of the "Makefile." Here are the ones you probably will want to edit: LARNHOME I specified (literally) the directory, with path from root, where "larn" will reside. This included where I put the *.c files, it is where the *.o files ended up, as well as all data and *.h files. i suspect the *.c and intallation-documentation files can be moved off, but the data and bits must all remain here for execution. BINDIR I specified (literally) the directory, with path from root, where the executable "larn" will reside. The "Makefile" will dump the "a.out", named "larn", in this directory. My BINDIR was not my LARNHOME, so $BINDIR/larn was the ONLY file dumed here. You'll probably have to chmod it for public execute, etc. OPTIONS This is how *I* specified them... they are documented in-line: OPTIONS = -DWIZZARD -DWIZID=157 -DEXTRA -DBSD -DSAVEINHOME IV. Compile the bugger. Read "README" before you do. You have a couple of options here: make - will not install, suspect good for updates. make all - compile (and) intall make install - just install I did "make" and then "make install" -- seems to work "ok", but "make all" probably safer, if I had known. Note that "Makefile" is the default file for "make." V. Execute and have fun. If wizard code "ok", larn -c will refresh the scoreboard. Play and win (or get killed) to put somebody on the scoreboard. VI. BUGS and FIXES. Please forward any bug-fixes in these regards to me (or Noah), so I may compile a fix-list for other installers. Thanks. Regards, =============================================================================== James D. McNamara CSNET: jim@bu-cs ARPANET: jim%bu-cs@csnet-relay UUCP: ...harvard!bu-cs!jim BITNET: jim%bu-cs%csnet-relay.arpa@wiscvm =============================================================================== SHAR_EOF if test 8418 -ne "`wc -c < 'readme.txt'`" then echo shar: error transmitting "'readme.txt'" '(should have been 8418 characters)' fi fi # end of overwriting check # End of shell archive exit 0