1 /* header.h Larn is copyrighted 1986 by Noah Morgan. */ 2 3 #define MAXLEVEL 11 4 /* max # levels in the dungeon */ 5 #define MAXVLEVEL 3 6 /* max # of levels in the temple of the luran */ 7 #define MAXX 67 8 #define MAXY 17 9 10 #define SCORESIZE 10 11 /* this is the number of people on a scoreboard max */ 12 #define MAXPLEVEL 100 13 /* maximum player level allowed */ 14 #define MAXMONST 56 15 /* maximum # monsters in the dungeon */ 16 #define SPNUM 38 17 /* maximum number of spells in existance */ 18 #define MAXSCROLL 28 19 /* maximum number of scrolls that are possible */ 20 #define MAXPOTION 35 21 /* maximum number of potions that are possible */ 22 #define TIMELIMIT 30000 23 /* the maximum number of moves before the game is called */ 24 #define TAXRATE 1/20 25 /* the tax rate for the LRS */ 26 #define MAXOBJ 93 27 /* the maximum number of objects n < MAXOBJ */ 28 29 /* this is the structure definition of the monster data */ 30 struct monst 31 { 32 char *name; 33 char level; 34 short armorclass; 35 char damage; 36 char attack; 37 char defense; 38 char genocided; 39 char intelligence; /* monsters intelligence -- used to choose movement */ 40 short gold; 41 short hitpoints; 42 unsigned long experience; 43 }; 44 45 /* this is the structure definition for the items in the dnd store */ 46 struct _itm 47 { 48 short price; 49 char **mem; 50 char obj; 51 char arg; 52 char qty; 53 }; 54 55 /* this is the structure that holds the entire dungeon specifications */ 56 struct cel 57 { 58 short hitp; /* monster's hit points */ 59 char mitem; /* the monster ID */ 60 char item; /* the object's ID */ 61 short iarg; /* the object's argument */ 62 char know; /* have we been here before*/ 63 }; 64 65 /* this is the structure for maintaining & moving the spheres of annihilation */ 66 struct sphere 67 { 68 struct sphere *p; /* pointer to next structure */ 69 char x,y,lev; /* location of the sphere */ 70 char dir; /* direction sphere is going in */ 71 char lifetime; /* duration of the sphere */ 72 }; 73 74 /* defines for the character attribute array c[] */ 75 #define STRENGTH 0 /* characters physical strength not due to objects */ 76 #define INTELLIGENCE 1 77 #define WISDOM 2 78 #define CONSTITUTION 3 79 #define DEXTERITY 4 80 #define CHARISMA 5 81 #define HPMAX 6 82 #define HP 7 83 #define GOLD 8 84 #define EXPERIENCE 9 85 #define LEVEL 10 86 #define REGEN 11 87 #define WCLASS 12 88 #define AC 13 89 #define BANKACCOUNT 14 90 #define SPELLMAX 15 91 #define SPELLS 16 92 #define ENERGY 17 93 #define ECOUNTER 18 94 #define MOREDEFENSES 19 95 #define WEAR 20 96 #define PROTECTIONTIME 21 97 #define WIELD 22 98 #define AMULET 23 99 #define REGENCOUNTER 24 100 #define MOREDAM 25 101 #define DEXCOUNT 26 102 #define STRCOUNT 27 103 #define BLINDCOUNT 28 104 #define CAVELEVEL 29 105 #define CONFUSE 30 106 #define ALTPRO 31 107 #define HERO 32 108 #define CHARMCOUNT 33 109 #define INVISIBILITY 34 110 #define CANCELLATION 35 111 #define HASTESELF 36 112 #define EYEOFLARN 37 113 #define AGGRAVATE 38 114 #define GLOBE 39 115 #define TELEFLAG 40 116 #define SLAYING 41 117 #define NEGATESPIRIT 42 118 #define SCAREMONST 43 119 #define AWARENESS 44 120 #define HOLDMONST 45 121 #define TIMESTOP 46 122 #define HASTEMONST 47 123 #define CUBEofUNDEAD 48 124 #define GIANTSTR 49 125 #define FIRERESISTANCE 50 126 #define BESSMANN 51 127 #define NOTHEFT 52 128 #define HARDGAME 53 129 #define CPUTIME 54 130 #define BYTESIN 55 131 #define BYTESOUT 56 132 #define MOVESMADE 57 133 #define MONSTKILLED 58 134 #define SPELLSCAST 59 135 #define LANCEDEATH 60 136 #define SPIRITPRO 61 137 #define UNDEADPRO 62 138 #define SHIELD 63 139 #define STEALTH 64 140 #define ITCHING 65 141 #define LAUGHING 66 142 #define DRAINSTRENGTH 67 143 #define CLUMSINESS 68 144 #define INFEEBLEMENT 69 145 #define HALFDAM 70 146 #define SEEINVISIBLE 71 147 #define FILLROOM 72 148 #define RANDOMWALK 73 149 #define SPHCAST 74 /* nz if an active sphere of annihilation */ 150 #define WTW 75 /* walk through walls */ 151 #define STREXTRA 76 /* character strength due to objects or enchantments */ 152 #define TMP 77 /* misc scratch space */ 153 #define LIFEPROT 78 /* life protection counter */ 154 155 /* defines for the objects in the game */ 156 157 #define OALTAR 1 158 #define OTHRONE 2 159 #define OORB 3 160 #define OPIT 4 161 #define OSTAIRSUP 5 162 #define OELEVATORUP 6 163 #define OFOUNTAIN 7 164 #define OSTATUE 8 165 #define OTELEPORTER 9 166 #define OSCHOOL 10 167 #define OMIRROR 11 168 #define ODNDSTORE 12 169 #define OSTAIRSDOWN 13 170 #define OELEVATORDOWN 14 171 #define OBANK2 15 172 #define OBANK 16 173 #define ODEADFOUNTAIN 17 174 #define OMAXGOLD 70 175 #define OGOLDPILE 18 176 #define OOPENDOOR 19 177 #define OCLOSEDDOOR 20 178 #define OWALL 21 179 #define OTRAPARROW 66 180 #define OTRAPARROWIV 67 181 182 #define OLARNEYE 22 183 184 #define OPLATE 23 185 #define OCHAIN 24 186 #define OLEATHER 25 187 #define ORING 60 188 #define OSTUDLEATHER 61 189 #define OSPLINT 62 190 #define OPLATEARMOR 63 191 #define OSSPLATE 64 192 #define OSHIELD 68 193 #define OELVENCHAIN 92 194 195 #define OSWORDofSLASHING 26 196 #define OHAMMER 27 197 #define OSWORD 28 198 #define O2SWORD 29 199 #define OSPEAR 30 200 #define ODAGGER 31 201 #define OBATTLEAXE 57 202 #define OLONGSWORD 58 203 #define OFLAIL 59 204 #define OLANCE 65 205 #define OVORPAL 90 206 #define OSLAYER 91 207 208 #define ORINGOFEXTRA 32 209 #define OREGENRING 33 210 #define OPROTRING 34 211 #define OENERGYRING 35 212 #define ODEXRING 36 213 #define OSTRRING 37 214 #define OCLEVERRING 38 215 #define ODAMRING 39 216 217 #define OBELT 40 218 219 #define OSCROLL 41 220 #define OPOTION 42 221 #define OBOOK 43 222 #define OCHEST 44 223 #define OAMULET 45 224 225 #define OORBOFDRAGON 46 226 #define OSPIRITSCARAB 47 227 #define OCUBEofUNDEAD 48 228 #define ONOTHEFT 49 229 230 #define ODIAMOND 50 231 #define ORUBY 51 232 #define OEMERALD 52 233 #define OSAPPHIRE 53 234 235 #define OENTRANCE 54 236 #define OVOLDOWN 55 237 #define OVOLUP 56 238 #define OHOME 69 239 240 #define OKGOLD 71 241 #define ODGOLD 72 242 #define OIVDARTRAP 73 243 #define ODARTRAP 74 244 #define OTRAPDOOR 75 245 #define OIVTRAPDOOR 76 246 #define OTRADEPOST 77 247 #define OIVTELETRAP 78 248 #define ODEADTHRONE 79 249 #define OANNIHILATION 80 /* sphere of annihilation */ 250 #define OTHRONE2 81 251 #define OLRS 82 /* Larn Revenue Service */ 252 #define OCOOKIE 83 253 #define OURN 84 254 #define OBRASSLAMP 85 255 #define OHANDofFEAR 86 /* hand of fear */ 256 #define OSPHTAILSMAN 87 /* tailsman of the sphere */ 257 #define OWWAND 88 /* wand of wonder */ 258 #define OPSTAFF 89 /* staff of power */ 259 /* used up to 92 */ 260 261 /* defines for the monsters as objects */ 262 263 #define BAT 1 264 #define GNOME 2 265 #define HOBGOBLIN 3 266 #define JACKAL 4 267 #define KOBOLD 5 268 #define ORC 6 269 #define SNAKE 7 270 #define CENTIPEDE 8 271 #define JACULI 9 272 #define TROGLODYTE 10 273 #define ANT 11 274 #define EYE 12 275 #define LEPRECHAUN 13 276 #define NYMPH 14 277 #define QUASIT 15 278 #define RUSTMONSTER 16 279 #define ZOMBIE 17 280 #define ASSASSINBUG 18 281 #define BUGBEAR 19 282 #define HELLHOUND 20 283 #define ICELIZARD 21 284 #define CENTAUR 22 285 #define TROLL 23 286 #define YETI 24 287 #define WHITEDRAGON 25 288 #define ELF 26 289 #define CUBE 27 290 #define METAMORPH 28 291 #define VORTEX 29 292 #define ZILLER 30 293 #define VIOLETFUNGI 31 294 #define WRAITH 32 295 #define FORVALAKA 33 296 #define LAMANOBE 34 297 #define OSEQUIP 35 298 #define ROTHE 36 299 #define XORN 37 300 #define VAMPIRE 38 301 #define INVISIBLESTALKER 39 302 #define POLTERGEIST 40 303 #define DISENCHANTRESS 41 304 #define SHAMBLINGMOUND 42 305 #define YELLOWMOLD 43 306 #define UMBERHULK 44 307 #define GNOMEKING 45 308 #define MIMIC 46 309 #define WATERLORD 47 310 #define BRONZEDRAGON 48 311 #define GREENDRAGON 49 312 #define PURPLEWORM 50 313 #define XVART 51 314 #define SPIRITNAGA 52 315 #define SILVERDRAGON 53 316 #define PLATINUMDRAGON 54 317 #define GREENURCHIN 55 318 #define REDDRAGON 56 319 #define DEMONLORD 57 320 #define DEMONPRINCE 64 321 322 #define NULL 0 323 #define BUFBIG 4096 /* size of the output buffer */ 324 #define MAXIBUF 4096 /* size of the input buffer */ 325 #define LOGNAMESIZE 40 /* max size of the players name */ 326 #define PSNAMESIZE 40 /* max size of the process name */ 327 328 #ifndef NODEFS 329 extern char VERSION,SUBVERSION; 330 extern char aborted[],alpha[],beenhere[],boldon,cheat,ckpfile[],ckpflag; 331 extern char *class[],course[],diagfile[],fortfile[],helpfile[]; 332 extern char *inbuffer,is_alpha[],is_digit[]; 333 extern char item[MAXX][MAXY],iven[],know[MAXX][MAXY],larnlevels[],lastmonst[]; 334 extern char level,*levelname[],logfile[],loginname[],logname[],*lpbuf,*lpend; 335 extern char *lpnt,moved[MAXX][MAXY],mitem[MAXX][MAXY],monstlevel[]; 336 extern char monstnamelist[],nch[],ndgg[],nlpts[],nomove,nosignal,nowelcome; 337 extern char nplt[],nsw[],*objectname[]; 338 extern char objnamelist[],optsfile[],*potionname[],playerids[],potprob[]; 339 extern char predostuff,psname[],restorflag,savefilename[],scorefile[],scprob[]; 340 extern char screen[MAXX][MAXY],*scrollname[],sex,*spelcode[],*speldescript[]; 341 extern char spelknow[],*spelname[],*spelmes[],spelweird[MAXMONST+8][SPNUM]; 342 extern char splev[],stealth[MAXX][MAXY],to_lower[],to_upper[],wizard; 343 extern short diroffx[],diroffy[],hitflag,hit2flag,hit3flag,hitp[MAXX][MAXY]; 344 extern short iarg[MAXX][MAXY],ivenarg[],lasthx,lasthy,lastnum,lastpx,lastpy; 345 extern short nobeep,oldx,oldy,playerx,playery; 346 extern int dayplay,enable_scroll,srcount,yrepcount,userid,wisid,lfd,fd; 347 extern long initialtime,outstanding_taxes,skill[],gtime,c[],cbak[]; 348 extern unsigned long randx; 349 extern struct cel *cell; 350 extern struct monst monster[]; 351 extern struct sphere *spheres; 352 extern struct _itm itm[]; 353 354 char *fortune(),*getenv(),*getlogin(),*lgetw(),*lgetl(),*ctime(); 355 char *tmcapcnv(),*tgetstr(),*tgoto(); 356 long paytaxes(),lgetc(),lrint(),time(); 357 unsigned long readnum(); 358 void *malloc(); 359 360 /* macro to create scroll #'s with probability of occurrence */ 361 #define newscroll() (scprob[rund(81)]) 362 /* macro to return a potion # created with probability of occurrence */ 363 #define newpotion() (potprob[rund(41)]) 364 /* macro to return the + points on created leather armor */ 365 #define newleather() (nlpts[rund(c[HARDGAME]?13:15)]) 366 /* macro to return the + points on chain armor */ 367 #define newchain() (nch[rund(10)]) 368 /* macro to return + points on plate armor */ 369 #define newplate() (nplt[rund(c[HARDGAME]?4:12)]) 370 /* macro to return + points on new daggers */ 371 #define newdagger() (ndgg[rund(13)]) 372 /* macro to return + points on new swords */ 373 #define newsword() (nsw[rund(c[HARDGAME]?6:13)]) 374 /* macro to destroy object at present location */ 375 #define forget() (item[playerx][playery]=know[playerx][playery]=0) 376 /* macro to wipe out a monster at a location */ 377 #define disappear(x,y) (mitem[x][y]=know[x][y]=0) 378 379 #ifdef VT100 380 /* macro to turn on bold display for the terminal */ 381 #define setbold() (lprcat(boldon?"\33[1m":"\33[7m")) 382 /* macro to turn off bold display for the terminal */ 383 #define resetbold() (lprcat("\33[m")) 384 /* macro to setup the scrolling region for the terminal */ 385 #define setscroll() (lprcat("\33[20;24r")) 386 /* macro to clear the scrolling region for the terminal */ 387 #define resetscroll() (lprcat("\33[;24r")) 388 /* macro to clear the screen and home the cursor */ 389 #define clear() (lprcat("\33[2J\33[f"), cbak[SPELLS]= -50) 390 #define cltoeoln() lprcat("\33[K") 391 #else VT100 392 /* defines below are for use in the termcap mode only */ 393 #define ST_START 1 394 #define ST_END 2 395 #define BOLD 3 396 #define END_BOLD 4 397 #define CLEAR 5 398 #define CL_LINE 6 399 #define CL_DOWN 14 400 #define CURSOR 15 401 /* macro to turn on bold display for the terminal */ 402 #define setbold() (*lpnt++ = ST_START) 403 /* macro to turn off bold display for the terminal */ 404 #define resetbold() (*lpnt++ = ST_END) 405 /* macro to setup the scrolling region for the terminal */ 406 #define setscroll() enable_scroll=1 407 /* macro to clear the scrolling region for the terminal */ 408 #define resetscroll() enable_scroll=0 409 /* macro to clear the screen and home the cursor */ 410 #define clear() (*lpnt++ =CLEAR, cbak[SPELLS]= -50) 411 /* macro to clear to end of line */ 412 #define cltoeoln() (*lpnt++ = CL_LINE) 413 #endif VT100 414 415 /* macro to output one byte to the output buffer */ 416 #define lprc(ch) ((lpnt>=lpend)?(*lpnt++ =(ch), lflush()):(*lpnt++ =(ch))) 417 418 /* macro to seed the random number generator */ 419 #define srand(x) (randx=x) 420 #ifdef MACRORND 421 /* macros to generate random numbers 1<=rnd(N)<=N 0<=rund(N)<=N-1 */ 422 #define rnd(x) ((((randx=randx*1103515245+12345)>>7)%(x))+1) 423 #define rund(x) ((((randx=randx*1103515245+12345)>>7)%(x)) ) 424 #endif MACRORND 425 /* macros for miscellaneous data conversion */ 426 #define min(x,y) (((x)>(y))?(y):(x)) 427 #define max(x,y) (((x)>(y))?(x):(y)) 428 #define isalpha(x) (is_alpha[x]) 429 #define isdigit(x) (is_digit[x]) 430 #define tolower(x) (to_lower[x]) 431 #define toupper(x) (to_upper[x]) 432 #define lcc(x) (to_lower[x]) 433 #define ucc(x) (to_upper[x]) 434 #endif NODEFS 435 436