Annotation of early-roguelike/arogue5/rogue.h, Revision 1.1
1.1 ! rubenllo 1: /*
! 2: * Rogue definitions and variable declarations
! 3: *
! 4: * Advanced Rogue
! 5: * Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka and AT&T
! 6: * All rights reserved.
! 7: *
! 8: * Based on "Rogue: Exploring the Dungeons of Doom"
! 9: * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
! 10: * All rights reserved.
! 11: *
! 12: * See the file LICENSE.TXT for full copyright and licensing information.
! 13: */
! 14:
! 15: #ifdef HAVE_CONFIG_H
! 16: #include "config.h"
! 17: #endif
! 18:
! 19: #define reg register /* register abbr. */
! 20: #define NOOP(x) (x += 0)
! 21: #define CCHAR(x) ( (char) (x & A_CHARTEXT) )
! 22:
! 23: /*
! 24: * Maximum number of different things
! 25: */
! 26:
! 27: #define MAXDAEMONS 10
! 28: #define MAXFUSES 20
! 29:
! 30: #define NCOLORS 32
! 31: #define NSTONES 47
! 32: #define NWOOD 24
! 33: #define NMETAL 16
! 34: #define NSYLLS 159
! 35:
! 36: #define MAXROOMS 9
! 37: #define MAXTHINGS 9
! 38: #define MAXOBJ 9
! 39: #define MAXSTATS 62 /* max total of all stats at startup */
! 40: #define MAXPACK 23
! 41: #define MAXCONTENTS 10
! 42: #define MAXENCHANT 10 /* max number of enchantments on an item */
! 43: #define MAXTREAS 15 /* number monsters/treasure in treasure room */
! 44: #define MAXTRAPS 20
! 45: #define MAXTRPTRY 8 /* attempts/level allowed for setting traps */
! 46: #define MAXDOORS 4 /* Maximum doors to a room */
! 47: #define MAXPRAYERS 15 /* Maximum number of prayers for cleric */
! 48: #define MAXSPELLS 20 /* Maximum number of spells (for magician) */
! 49: #define NUMMONST 120 /* Current number of monsters */
! 50: #define NUMUNIQUE 24 /* number of UNIQUE creatures */
! 51: #define NLEVMONS 3 /* Number of new monsters per level */
! 52: #define MAXFOODS 1
! 53: #define NUMSCORE 20 /* number of entries in score file */
! 54: #define HARDER 35 /* at this level start making things harder */
! 55: #define MAXPURCH 4 /* max purchases per trading post visit */
! 56: #define LINELEN 80 /* characters in a buffer */
! 57: #define JUG_EMPTY -1 /* signifys that the alchemy jug is empty */
! 58:
! 59: /* Movement penalties */
! 60: #define BACKPENALTY 3
! 61: #define SHOTPENALTY 2 /* In line of sight of missile */
! 62: #define DOORPENALTY 1 /* Moving out of current room */
! 63:
! 64: /*
! 65: * these defines are used in calls to get_item() to signify what
! 66: * it is we want
! 67: */
! 68: #define ALL -1
! 69: #define WEARABLE -2
! 70: #define CALLABLE -3
! 71: #define WIELDABLE -4
! 72: #define USEABLE -5
! 73: #define IDENTABLE -6
! 74: #define REMOVABLE -7
! 75: #define PROTECTABLE -8
! 76: #define ZAPPABLE -9
! 77:
! 78: /*
! 79: * stuff to do with encumberance
! 80: */
! 81: #define NORMENCB 1500 /* normal encumberance */
! 82: #define F_OKAY 0 /* have plenty of food in stomach */
! 83: #define F_HUNGRY 1 /* player is hungry */
! 84: #define F_WEAK 2 /* weak from lack of food */
! 85: #define F_FAINT 3 /* fainting from lack of food */
! 86:
! 87: /*
! 88: * return values for get functions
! 89: */
! 90: #define NORM 0 /* normal exit */
! 91: #define QUIT 1 /* quit option setting */
! 92: #define MINUS 2 /* back up one option */
! 93:
! 94: /*
! 95: * The character types
! 96: */
! 97: #define C_FIGHTER 0
! 98: #define C_MAGICIAN 1
! 99: #define C_CLERIC 2
! 100: #define C_THIEF 3
! 101: #define C_MONSTER 4
! 102:
! 103: /*
! 104: * Number of hit points for going up a level
! 105: */
! 106: #define HIT_FIGHTER 10
! 107: #define HIT_MAGICIAN 8
! 108: #define HIT_CLERIC 8
! 109: #define HIT_THIEF 6
! 110:
! 111: /*
! 112: * values for games end
! 113: */
! 114: #define UPDATE -2
! 115: #define SCOREIT -1
! 116: #define KILLED 0
! 117: #define CHICKEN 1
! 118: #define WINNER 2
! 119:
! 120: /*
! 121: * definitions for function step_ok:
! 122: * MONSTOK indicates it is OK to step on a monster -- it
! 123: * is only OK when stepping diagonally AROUND a monster
! 124: */
! 125: #define MONSTOK 1
! 126: #define NOMONST 2
! 127:
! 128: /*
! 129: * used for ring stuff
! 130: */
! 131: #define LEFT_1 0
! 132: #define LEFT_2 1
! 133: #define LEFT_3 2
! 134: #define LEFT_4 3
! 135: #define RIGHT_1 4
! 136: #define RIGHT_2 5
! 137: #define RIGHT_3 6
! 138: #define RIGHT_4 7
! 139: #define NUM_FINGERS 8
! 140:
! 141: /*
! 142: * used for micellaneous magic (MM) stuff
! 143: */
! 144: #define WEAR_BOOTS 0
! 145: #define WEAR_BRACERS 1
! 146: #define WEAR_CLOAK 2
! 147: #define WEAR_GAUNTLET 3
! 148: #define WEAR_JEWEL 4
! 149: #define WEAR_NECKLACE 5
! 150: #define NUM_MM 6
! 151:
! 152: /*
! 153: * All the fun defines
! 154: */
! 155: #define next(ptr) (*ptr).l_next
! 156: #define prev(ptr) (*ptr).l_prev
! 157: #define ldata(ptr) (*ptr).l_data
! 158: #define inroom(rp, cp) (\
! 159: (cp)->x <= (rp)->r_pos.x + ((rp)->r_max.x - 1) && (rp)->r_pos.x <= (cp)->x \
! 160: && (cp)->y <= (rp)->r_pos.y + ((rp)->r_max.y - 1) && (rp)->r_pos.y <= (cp)->y)
! 161: #define winat(y, x) (mvwinch(mw, y, x)==' '?mvwinch(stdscr, y, x):winch(mw))
! 162: #define debug if (wizard) msg
! 163: #define RN (((seed = seed*11109+13849) & 0x7fff) >> 1)
! 164: #define unc(cp) (cp).y, (cp).x
! 165: #define cmov(xy) move((xy).y, (xy).x)
! 166: #define DISTANCE(y1, x1, y2, x2) ((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1))
! 167: #define OBJPTR(what) (struct object *)((*what).l_data)
! 168: #define THINGPTR(what) (struct thing *)((*what).l_data)
! 169: #define DOORPTR(what) (coord *)((*what).l_data)
! 170: #define when break;case
! 171: #define otherwise break;default
! 172: #define until(expr) while(!(expr))
! 173: #define ce(a, b) ((a).x == (b).x && (a).y == (b).y)
! 174: #define draw(window) wrefresh(window)
! 175: #define hero player.t_pos
! 176: #define pstats player.t_stats
! 177: #define max_stats player.maxstats
! 178: #define pack player.t_pack
! 179: #define attach(a, b) _attach(&a, b)
! 180: #define detach(a, b) _detach(&a, b)
! 181: #define o_free_list(a) _o_free_list(&a)
! 182: #define t_free_list(a) _t_free_list(&a)
! 183: #undef max
! 184: #undef min
! 185: #define max(a, b) ((a) > (b) ? (a) : (b))
! 186: #define min(a, b) ((a) < (b) ? (a) : (b))
! 187: #define on(thing, flag) \
! 188: (((thing).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] & flag) != 0)
! 189: #define off(thing, flag) \
! 190: (((thing).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] & flag) == 0)
! 191: #define turn_on(thing, flag) \
! 192: ((thing).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] |= (flag & ~FLAGMASK))
! 193: #define turn_off(thing, flag) \
! 194: ((thing).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] &= ~flag)
! 195:
! 196: #undef CTRL
! 197: #define CTRL(ch) (ch & 037)
! 198:
! 199: #define ALLOC(x) calloc((unsigned int) x,1)
! 200: #define FREE(x) free((char *) x)
! 201: #define EQSTR(a, b, c) (strncmp(a, b, c) == 0)
! 202: #define EQUAL(a, b) (strcmp(a, b) == 0)
! 203: #define GOLDCALC (rnd(50 + 10 * level) + 2)
! 204: #define ISRING(h, r) (cur_ring[h] != NULL && cur_ring[h]->o_which == r)
! 205: #define ISWEARING(r) (ISRING(LEFT_1, r) || ISRING(LEFT_2, r) ||\
! 206: ISRING(LEFT_3, r) || ISRING(LEFT_4, r) ||\
! 207: ISRING(RIGHT_1, r) || ISRING(RIGHT_2, r) ||\
! 208: ISRING(RIGHT_3, r) || ISRING(RIGHT_4, r))
! 209: #define newgrp() ++group
! 210: #define o_charges o_ac
! 211: #define ISMULT(type) (type == FOOD)
! 212: #define isrock(ch) ((ch == WALL) || (ch == '-') || (ch == '|'))
! 213: #define invisible(monst) \
! 214: (((on(*monst, ISINVIS) || \
! 215: (on(*monst, ISSHADOW) && rnd(100) < 90)) && \
! 216: off(player, CANSEE)) || \
! 217: (on(*monst, CANSURPRISE) && !ISWEARING(R_ALERT)))
! 218: #define is_stealth(tp) \
! 219: (rnd(25) < (tp)->t_stats.s_dext || (tp == &player && ISWEARING(R_STEALTH)))
! 220:
! 221: #define has_light(rp) (((rp)->r_flags & HASFIRE) || ISWEARING(R_LIGHT))
! 222: #define mi_wght mi_worth
! 223:
! 224: /*
! 225: * Ways to die
! 226: */
! 227: #define D_PETRIFY -1
! 228: #define D_ARROW -2
! 229: #define D_DART -3
! 230: #define D_POISON -4
! 231: #define D_BOLT -5
! 232: #define D_SUFFOCATION -6
! 233: #define D_POTION -7
! 234: #define D_INFESTATION -8
! 235: #define D_DROWN -9
! 236: #define D_ROT -10
! 237: #define D_CONSTITUTION -11
! 238: #define D_STRENGTH -12
! 239: #define D_SIGNAL -13
! 240: #define D_CHOKE -14
! 241: #define D_STRANGLE -15
! 242: #define D_FALL -16
! 243: #define D_RELIC -17
! 244: #define DEATHNUM 17 /* number of ways to die */
! 245:
! 246: /*
! 247: * Things that appear on the screens
! 248: */
! 249: #define WALL ' '
! 250: #define PASSAGE '#'
! 251: #define DOOR '+'
! 252: #define FLOOR '.'
! 253: #define VPLAYER '@'
! 254: #define IPLAYER '_'
! 255: #define POST '^'
! 256: #define TRAPDOOR '>'
! 257: #define ARROWTRAP '{'
! 258: #define SLEEPTRAP '$'
! 259: #define BEARTRAP '}'
! 260: #define TELTRAP '~'
! 261: #define DARTTRAP '`'
! 262: #define POOL '"'
! 263: #define MAZETRAP '\''
! 264: #define SECRETDOOR '&'
! 265: #define STAIRS '%'
! 266: #define GOLD '*'
! 267: #define POTION '!'
! 268: #define SCROLL '?'
! 269: #define MAGIC '$'
! 270: #define BMAGIC '>' /* Blessed magic */
! 271: #define CMAGIC '<' /* Cursed magic */
! 272: #define FOOD ':'
! 273: #define WEAPON ')'
! 274: #define MISSILE '*' /* Magic Missile */
! 275: #define ARMOR ']'
! 276: #define MM ';'
! 277: #define RELIC ','
! 278: #define RING '='
! 279: #define STICK '/'
! 280: #define FOREST '\\'
! 281:
! 282: /*
! 283: * Various constants
! 284: */
! 285: #define PASSWD "SihQX7.LYSmbo"
! 286: #define BEARTIME 3
! 287: #define SLEEPTIME 4
! 288: #define FREEZETIME 6
! 289: #define PAINTIME (roll(1, 6))
! 290: #define HEALTIME 30
! 291: #define CHILLTIME (roll(20, 4))
! 292: #define SMELLTIME 20
! 293: #define STONETIME 8
! 294: #define HASTETIME 6
! 295: #define SICKTIME 10
! 296: #define STPOS 0
! 297: #define WANDERTIME (max(5, HARDER-rnd(vlevel)))
! 298: #define BEFORE 1
! 299: #define AFTER 2
! 300: #define HUHDURATION 20
! 301: #define SEEDURATION 850
! 302: #define CLRDURATION 15
! 303: #define GONETIME 200
! 304: #define FLYTIME 300
! 305: #define DUSTTIME (20+roll(1,10))
! 306: #define PHASEDURATION 300
! 307: #define HUNGERTIME 1300
! 308: #define MORETIME 150
! 309: #define STINKTIME 6
! 310: #define STOMACHSIZE 2000
! 311: #define ESCAPE 27
! 312: #define BOLT_LENGTH 10
! 313: #define MARKLEN 20
! 314: #define DAYLENGTH 400
! 315: #define ALCHEMYTIME (400+rnd(100))
! 316:
! 317: /*
! 318: * Save against things
! 319: */
! 320: #define VS_POISON 00
! 321: #define VS_PARALYZATION 00
! 322: #define VS_DEATH 00
! 323: #define VS_PETRIFICATION 01
! 324: #define VS_WAND 02
! 325: #define VS_BREATH 03
! 326: #define VS_MAGIC 04
! 327:
! 328: /*
! 329: * attributes for treasures in dungeon
! 330: */
! 331: #define ISCURSED 01
! 332: #define ISKNOW 02
! 333: #define ISPOST 04 /* object is in a trading post */
! 334: #define ISMETAL 010
! 335: #define ISPROT 020 /* object is protected */
! 336: #define ISBLESSED 040
! 337: #define ISMISL 020000
! 338: #define ISMANY 040000
! 339: /*
! 340: * Various flag bits
! 341: */
! 342: #define ISDARK 01
! 343: #define ISGONE 02
! 344: #define ISTREAS 04
! 345: #define ISFOUND 010
! 346: #define ISTHIEFSET 020
! 347: #define FORCEDARK 040
! 348: /*
! 349: * 1st set of creature flags (this might include player)
! 350: */
! 351: #define ISBLIND 0x00000001
! 352: #define ISINWALL 0x00000002
! 353: #define ISRUN 0x00000004
! 354: #define ISFLEE 0x00000008
! 355: #define ISINVIS 0x00000010
! 356: #define ISMEAN 0x00000020
! 357: #define ISGREED 0x00000040
! 358: #define CANSHOOT 0x00000080
! 359: #define ISHELD 0x00000100
! 360: #define ISHUH 0x00000200
! 361: #define ISREGEN 0x00000400
! 362: #define CANHUH 0x00000800
! 363: #define CANSEE 0x00001000
! 364: #define HASFIRE 0x00002000
! 365: #define ISSLOW 0x00004000
! 366: #define ISHASTE 0x00008000
! 367: #define ISCLEAR 0x00010000
! 368: #define CANINWALL 0x00020000
! 369: #define ISDISGUISE 0x00040000
! 370: #define CANBLINK 0x00080000
! 371: #define CANSNORE 0x00100000
! 372: #define HALFDAMAGE 0x00200000
! 373: #define CANSUCK 0x00400000
! 374: #define CANRUST 0x00800000
! 375: #define CANPOISON 0x01000000
! 376: #define CANDRAIN 0x02000000
! 377: #define ISUNIQUE 0x04000000
! 378: #define STEALGOLD 0x08000000
! 379: /*
! 380: * Second set of flags
! 381: */
! 382: #define STEALMAGIC 0x10000001
! 383: #define CANDISEASE 0x10000002
! 384: #define HASDISEASE 0x10000004
! 385: #define CANSUFFOCATE 0x10000008
! 386: #define DIDSUFFOCATE 0x10000010
! 387: #define BOLTDIVIDE 0x10000020
! 388: #define BLOWDIVIDE 0x10000040
! 389: #define NOCOLD 0x10000080
! 390: #define TOUCHFEAR 0x10000100
! 391: #define BMAGICHIT 0x10000200
! 392: #define NOFIRE 0x10000400
! 393: #define NOBOLT 0x10000800
! 394: #define CARRYGOLD 0x10001000
! 395: #define CANITCH 0x10002000
! 396: #define HASITCH 0x10004000
! 397: #define DIDDRAIN 0x10008000
! 398: #define WASTURNED 0x10010000
! 399: #define CANSELL 0x10020000
! 400: #define CANBLIND 0x10040000
! 401: #define NOACID 0x10080000
! 402: #define NOSLOW 0x10100000
! 403: #define NOFEAR 0x10200000
! 404: #define NOSLEEP 0x10400000
! 405: #define NOPARALYZE 0x10800000
! 406: #define NOGAS 0x11000000
! 407: #define CANMISSILE 0x12000000
! 408: #define CMAGICHIT 0x14000000
! 409: #define CANPAIN 0x18000000
! 410:
! 411: /*
! 412: * Third set of flags
! 413: */
! 414: #define CANSLOW 0x20000001
! 415: #define CANTUNNEL 0x20000002
! 416: #define TAKEWISDOM 0x20000004
! 417: #define NOMETAL 0x20000008
! 418: #define MAGICHIT 0x20000010
! 419: #define CANINFEST 0x20000020
! 420: #define HASINFEST 0x20000040
! 421: #define NOMOVE 0x20000080
! 422: #define CANSHRIEK 0x20000100
! 423: #define CANDRAW 0x20000200
! 424: #define CANSMELL 0x20000400
! 425: #define CANPARALYZE 0x20000800
! 426: #define CANROT 0x20001000
! 427: #define ISSCAVENGE 0x20002000
! 428: #define DOROT 0x20004000
! 429: #define CANSTINK 0x20008000
! 430: #define HASSTINK 0x20010000
! 431: #define ISSHADOW 0x20020000
! 432: #define CANCHILL 0x20040000
! 433: #define CANHUG 0x20080000
! 434: #define CANSURPRISE 0x20100000
! 435: #define CANFRIGHTEN 0x20200000
! 436: #define CANSUMMON 0x20400000
! 437: #define TOUCHSTONE 0x20800000
! 438: #define LOOKSTONE 0x21000000
! 439: #define CANHOLD 0x22000000
! 440: #define DIDHOLD 0x24000000
! 441: #define DOUBLEDRAIN 0x28000000
! 442:
! 443: /*
! 444: * Fourth set of flags
! 445: */
! 446: #define CANBRANDOM 0x30000001 /* Types of breath */
! 447: #define CANBACID 0x30000002 /* acid */
! 448: #define CANBFIRE 0x30000004 /* Fire */
! 449: #define CANBCGAS 0x30000008 /* confusion gas */
! 450: #define CANBBOLT 0x30000010 /* lightning bolt */
! 451: #define CANBGAS 0x30000020 /* clorine gas */
! 452: #define CANBICE 0x30000040 /* ice */
! 453: #define CANBFGAS 0x30000080 /* Fear gas */
! 454: #define CANBPGAS 0x30000100 /* Paralyze gas */
! 455: #define CANBSGAS 0x30000200 /* Sleeping gas */
! 456: #define CANBSLGAS 0x30000400 /* Slow gas */
! 457: #define CANBREATHE 0x300007ff /* Can it breathe at all? */
! 458: /*
! 459: * Fifth set of flags
! 460: */
! 461: #define ISUNDEAD 0x40000001
! 462: #define CANSONIC 0x40000002
! 463: #define TURNABLE 0x40000004
! 464: #define TAKEINTEL 0x40000008
! 465: #define NOSTAB 0x40000010
! 466: #define CANDISSOLVE 0x40000020
! 467: #define ISFLY 0x40000040 /* creature can fly */
! 468: #define CANTELEPORT 0x40000080 /* creature can teleport */
! 469: #define CANEXPLODE 0x40000100 /* creature explodes when hit */
! 470: #define CANDANCE 0x40000200 /* creature can make hero "dance" */
! 471: #define ISDANCE 0x40000400 /* creature (hero) is dancing */
! 472: #define CARRYFOOD 0x40000800
! 473: #define CARRYSCROLL 0x40001000
! 474: #define CARRYPOTION 0x40002000
! 475: #define CARRYRING 0x40004000
! 476: #define CARRYSTICK 0x40008000
! 477: #define CARRYMISC 0x40010000
! 478: #define CARRYDAGGER 0x40020000 /* Dagger of Musty */
! 479: #define CARRYCLOAK 0x40040000 /* Cloak of Emori */
! 480: #define CARRYANKH 0x40080000 /* Ankh of Heil */
! 481: #define CARRYSTAFF 0x40100000 /* Staff of Ming */
! 482: #define CARRYWAND 0x40200000 /* Wand of Orcus */
! 483: #define CARRYROD 0x40400000 /* Rod of Asmodeus */
! 484: #define CARRYAMULET 0x40800000 /* Amulet of Yendor */
! 485: #define CARRYMANDOLIN 0x41000000 /* Mandolin of Brian */
! 486: #define MISSEDDISP 0x42000000 /* Missed Cloak of Displacement */
! 487: #define CANBSTAB 0x44000000 /* Can backstab */
! 488:
! 489:
! 490: #define CARRYHORN 0x50000001 /* Horn of Geryon */
! 491: #define CARRYMSTAR 0x50000002 /* Morning Star of Hruggek */
! 492: #define CARRYFLAIL 0x50000004 /* Flail of Yeenoghu */
! 493: #define CARRYWEAPON 0x50000008 /* A generic weapon */
! 494: #define CANAGE 0x50000010 /* can age you */
! 495:
! 496: #define ISREADY 0x60000001
! 497: #define ISDEAD 0x60000002
! 498: #define ISELSEWHERE 0x60000004
! 499:
! 500: /* Masks for choosing the right flag */
! 501: #define FLAGMASK 0xf0000000
! 502: #define FLAGINDEX 0x0000000f
! 503: #define FLAGSHIFT 28
! 504: #define MAXFLAGS 25 /* max initial flags per creature */
! 505:
! 506: /*
! 507: * Mask for cancelling special abilities
! 508: * The flags listed here will be the ones left on after the
! 509: * cancellation takes place
! 510: */
! 511: #define CANC0MASK ( ISBLIND | ISINWALL | ISRUN | \
! 512: ISFLEE | ISMEAN | ISGREED | \
! 513: CANSHOOT | ISHELD | ISHUH | \
! 514: ISSLOW | ISHASTE | ISCLEAR | \
! 515: ISUNIQUE )
! 516: #define CANC1MASK ( HASDISEASE | DIDSUFFOCATE | CARRYGOLD | \
! 517: HASITCH | CANSELL | DIDDRAIN | \
! 518: WASTURNED )
! 519: #define CANC2MASK ( HASINFEST | NOMOVE | ISSCAVENGE | \
! 520: DOROT | HASSTINK | DIDHOLD )
! 521: #define CANC3MASK ( CANBREATHE )
! 522: #define CANC4MASK ( ISUNDEAD | CANSONIC | NOSTAB | \
! 523: ISFLY | CARRYFOOD | CANEXPLODE | \
! 524: ISDANCE | CARRYSCROLL | CARRYPOTION | \
! 525: CARRYRING | CARRYSTICK | CARRYMISC | \
! 526: CARRYDAGGER | CARRYCLOAK | CARRYANKH | \
! 527: CARRYSTAFF | CARRYWAND | CARRYROD | \
! 528: CARRYAMULET | CARRYMANDOLIN )
! 529: #define CANC5MASK ( CARRYHORN | CARRYMSTAR | CARRYFLAIL )
! 530:
! 531: /* types of things */
! 532: #define TYP_POTION 0
! 533: #define TYP_SCROLL 1
! 534: #define TYP_FOOD 2
! 535: #define TYP_WEAPON 3
! 536: #define TYP_ARMOR 4
! 537: #define TYP_RING 5
! 538: #define TYP_STICK 6
! 539: #define TYP_MM 7
! 540: #define TYP_RELIC 8
! 541: #define NUMTHINGS 9
! 542: /*
! 543: * Potion types
! 544: */
! 545: #define P_CLEAR 0
! 546: #define P_ABIL 1
! 547: #define P_SEEINVIS 2
! 548: #define P_HEALING 3
! 549: #define P_MFIND 4
! 550: #define P_TFIND 5
! 551: #define P_RAISE 6
! 552: #define P_HASTE 7
! 553: #define P_RESTORE 8
! 554: #define P_PHASE 9
! 555: #define P_INVIS 10
! 556: #define P_FLY 11
! 557: #define MAXPOTIONS 12
! 558: /*
! 559: * Scroll types
! 560: */
! 561: #define S_CONFUSE 0
! 562: #define S_MAP 1
! 563: #define S_LIGHT 2
! 564: #define S_HOLD 3
! 565: #define S_SLEEP 4
! 566: #define S_ALLENCH 5
! 567: #define S_IDENT 6
! 568: #define S_SCARE 7
! 569: #define S_GFIND 8
! 570: #define S_TELEP 9
! 571: #define S_CREATE 10
! 572: #define S_REMOVE 11
! 573: #define S_PETRIFY 12
! 574: #define S_GENOCIDE 13
! 575: #define S_CURING 14
! 576: #define S_MAKEIT 15
! 577: #define S_PROTECT 16
! 578: #define MAXSCROLLS 17
! 579:
! 580: /*
! 581: * Weapon types
! 582: */
! 583: #define MACE 0 /* mace */
! 584: #define SWORD 1 /* long sword */
! 585: #define BOW 2 /* short bow */
! 586: #define ARROW 3 /* arrow */
! 587: #define DAGGER 4 /* dagger */
! 588: #define ROCK 5 /* rocks */
! 589: #define TWOSWORD 6 /* two-handed sword */
! 590: #define SLING 7 /* sling */
! 591: #define DART 8 /* darts */
! 592: #define CROSSBOW 9 /* crossbow */
! 593: #define BOLT 10 /* crossbow bolt */
! 594: #define SPEAR 11 /* spear */
! 595: #define TRIDENT 12 /* trident */
! 596: #define SPETUM 13 /* spetum */
! 597: #define BARDICHE 14 /* bardiche */
! 598: #define PIKE 15 /* pike */
! 599: #define BASWORD 16 /* bastard sword */
! 600: #define HALBERD 17 /* halberd */
! 601: #define BATTLEAXE 18 /* battle axe */
! 602: #define MAXWEAPONS 19 /* types of weapons */
! 603: #define NONE 100 /* no weapon */
! 604:
! 605: /*
! 606: * Armor types
! 607: */
! 608: #define LEATHER 0
! 609: #define RING_MAIL 1
! 610: #define STUDDED_LEATHER 2
! 611: #define SCALE_MAIL 3
! 612: #define PADDED_ARMOR 4
! 613: #define CHAIN_MAIL 5
! 614: #define SPLINT_MAIL 6
! 615: #define BANDED_MAIL 7
! 616: #define PLATE_MAIL 8
! 617: #define PLATE_ARMOR 9
! 618: #define MAXARMORS 10
! 619:
! 620: /*
! 621: * Ring types
! 622: */
! 623: #define R_PROTECT 0
! 624: #define R_ADDSTR 1
! 625: #define R_SUSABILITY 2
! 626: #define R_SEARCH 3
! 627: #define R_SEEINVIS 4
! 628: #define R_ALERT 5
! 629: #define R_AGGR 6
! 630: #define R_ADDHIT 7
! 631: #define R_ADDDAM 8
! 632: #define R_REGEN 9
! 633: #define R_DIGEST 10
! 634: #define R_TELEPORT 11
! 635: #define R_STEALTH 12
! 636: #define R_ADDINTEL 13
! 637: #define R_ADDWISDOM 14
! 638: #define R_HEALTH 15
! 639: #define R_HEAVY 16
! 640: #define R_LIGHT 17
! 641: #define R_DELUSION 18
! 642: #define R_FEAR 19
! 643: #define R_HEROISM 20
! 644: #define R_FIRE 21
! 645: #define R_WARMTH 22
! 646: #define R_VAMPREGEN 23
! 647: #define MAXRINGS 24
! 648:
! 649: /*
! 650: * Rod/Wand/Staff types
! 651: */
! 652:
! 653: #define WS_LIGHT 0
! 654: #define WS_HIT 1
! 655: #define WS_ELECT 2
! 656: #define WS_FIRE 3
! 657: #define WS_COLD 4
! 658: #define WS_POLYMORPH 5
! 659: #define WS_MISSILE 6
! 660: #define WS_SLOW_M 7
! 661: #define WS_DRAIN 8
! 662: #define WS_CHARGE 9
! 663: #define WS_TELMON 10
! 664: #define WS_CANCEL 11
! 665: #define WS_CONFMON 12
! 666: #define WS_DISINTEGRATE 13
! 667: #define WS_PETRIFY 14
! 668: #define WS_PARALYZE 15
! 669: #define WS_MDEG 16
! 670: #define WS_CURING 17
! 671: #define WS_WONDER 18
! 672: #define WS_FEAR 19
! 673: #define MAXSTICKS 20
! 674:
! 675: /*
! 676: * miscellaneous magic items
! 677: */
! 678: #define MM_JUG 0
! 679: #define MM_BEAKER 1
! 680: #define MM_BOOK 2
! 681: #define MM_ELF_BOOTS 3
! 682: #define MM_BRACERS 4
! 683: #define MM_OPEN 5
! 684: #define MM_HUNGER 6
! 685: #define MM_DISP 7
! 686: #define MM_PROTECT 8
! 687: #define MM_DRUMS 9
! 688: #define MM_DISAPPEAR 10
! 689: #define MM_CHOKE 11
! 690: #define MM_G_DEXTERITY 12
! 691: #define MM_G_OGRE 13
! 692: #define MM_JEWEL 14
! 693: #define MM_KEOGHTOM 15
! 694: #define MM_R_POWERLESS 16
! 695: #define MM_FUMBLE 17
! 696: #define MM_ADAPTION 18
! 697: #define MM_STRANGLE 19
! 698: #define MM_DANCE 20
! 699: #define MM_SKILLS 21
! 700: #define MAXMM 22
! 701:
! 702: /*
! 703: * Relic types
! 704: */
! 705: #define MUSTY_DAGGER 0
! 706: #define EMORI_CLOAK 1
! 707: #define HEIL_ANKH 2
! 708: #define MING_STAFF 3
! 709: #define ORCUS_WAND 4
! 710: #define ASMO_ROD 5
! 711: #define YENDOR_AMULET 6
! 712: #define BRIAN_MANDOLIN 7
! 713: #define GERYON_HORN 8
! 714: #define HRUGGEK_MSTAR 9
! 715: #define YEENOGHU_FLAIL 10
! 716: #define MAXRELIC 11
! 717:
! 718:
! 719: #define LEVEL 600
! 720: #define vlevel max(level, turns/LEVEL + 1)
! 721: /*
! 722: * Now we define the structures and types
! 723: */
! 724:
! 725: struct delayed_action {
! 726: int d_type;
! 727: void (*d_func)();
! 728: void *d_arg;
! 729: int d_time;
! 730: };
! 731:
! 732: /*
! 733: * level types
! 734: */
! 735: typedef enum {
! 736: NORMLEV, /* normal level */
! 737: POSTLEV, /* trading post level */
! 738: MAZELEV, /* maze level */
! 739: OUTSIDE /* outside level */
! 740: } LEVTYPE;
! 741:
! 742: /*
! 743: * Help list
! 744: */
! 745:
! 746: struct h_list {
! 747: char h_ch;
! 748: char *h_desc;
! 749: };
! 750:
! 751: /*
! 752: * Coordinate data type
! 753: */
! 754: typedef struct {
! 755: int x;
! 756: int y;
! 757: } coord;
! 758:
! 759: /*
! 760: * structure for the ways to die
! 761: */
! 762: struct death_type {
! 763: int reason;
! 764: char *name;
! 765: };
! 766:
! 767:
! 768: /*
! 769: * Linked list data type
! 770: */
! 771: struct linked_list {
! 772: struct linked_list *l_next;
! 773: struct linked_list *l_prev;
! 774: char *l_data; /* Various structure pointers */
! 775: };
! 776:
! 777: /*
! 778: * Stuff about magic items
! 779: */
! 780:
! 781: struct magic_item {
! 782: char *mi_name;
! 783: int mi_prob;
! 784: int mi_worth;
! 785: int mi_curse;
! 786: int mi_bless;
! 787: };
! 788:
! 789: /*
! 790: * Room structure
! 791: */
! 792: struct room {
! 793: coord r_pos; /* Upper left corner */
! 794: coord r_max; /* Size of room */
! 795: long r_flags; /* Info about the room */
! 796: struct linked_list *r_fires; /* List of fire creatures in room */
! 797: struct linked_list *r_exit; /* Linked list of exits */
! 798: };
! 799:
! 800: /*
! 801: * Array of all traps on this level
! 802: */
! 803:
! 804: struct trap {
! 805: char tr_type; /* What kind of trap */
! 806: char tr_show; /* Where disguised trap looks like */
! 807: coord tr_pos; /* Where trap is */
! 808: long tr_flags; /* Info about trap (i.e. ISFOUND) */
! 809: };
! 810:
! 811: /*
! 812: * Structure describing a fighting being
! 813: */
! 814: struct stats {
! 815: short s_str; /* Strength */
! 816: short s_intel; /* Intelligence */
! 817: short s_wisdom; /* Wisdom */
! 818: short s_dext; /* Dexterity */
! 819: short s_const; /* Constitution */
! 820: short s_charisma; /* Charisma */
! 821: unsigned long s_exp; /* Experience */
! 822: int s_lvl; /* Level of mastery */
! 823: int s_arm; /* Armor class */
! 824: int s_hpt; /* Hit points */
! 825: int s_pack; /* current weight of his pack */
! 826: int s_carry; /* max weight he can carry */
! 827: char s_dmg[30]; /* String describing damage done */
! 828: };
! 829:
! 830: /*
! 831: * Structure describing a fighting being (monster at initialization)
! 832: */
! 833: struct mstats {
! 834: short s_str; /* Strength */
! 835: unsigned long s_exp; /* Experience */
! 836: int s_lvl; /* Level of mastery */
! 837: int s_arm; /* Armor class */
! 838: char *s_hpt; /* Hit points */
! 839: char *s_dmg; /* String describing damage done */
! 840: };
! 841:
! 842: /*
! 843: * Structure for monsters and player
! 844: */
! 845: struct thing {
! 846: bool t_turn; /* If slowed, is it a turn to move */
! 847: bool t_wasshot; /* Was character shot last round? */
! 848: char t_type; /* What it is */
! 849: char t_disguise; /* What mimic looks like */
! 850: char t_oldch; /* Character that was where it was */
! 851: short t_ctype; /* Character type */
! 852: short t_index; /* Index into monster table */
! 853: short t_no_move; /* How long the thing can't move */
! 854: short t_quiet; /* used in healing */
! 855: coord *t_doorgoal; /* What door are we heading to? */
! 856: coord t_pos; /* Position */
! 857: coord t_oldpos; /* Last position */
! 858: coord *t_dest; /* Where it is running to */
! 859: unsigned long t_flags[16]; /* State word */
! 860: struct linked_list *t_pack; /* What the thing is carrying */
! 861: struct stats t_stats; /* Physical description */
! 862: struct stats maxstats; /* maximum(or initial) stats */
! 863: int t_reserved;
! 864: int t_reserved2;
! 865: int t_reserved3;
! 866: };
! 867:
! 868: /*
! 869: * Array containing information on all the various types of monsters
! 870: */
! 871: struct monster {
! 872: const char *m_name; /* What to call the monster */
! 873: const short m_carry; /* Probability of carrying something */
! 874: bool m_normal; /* Does monster exist? */
! 875: bool m_wander; /* Does monster wander? */
! 876: const char m_appear; /* What does monster look like? */
! 877: const char *m_intel; /* Intelligence range */
! 878: const long m_flags[MAXFLAGS]; /* Things about the monster */
! 879: const char *m_typesum; /* type of creature can he summon */
! 880: short m_numsum; /* how many creatures can he summon */
! 881: const short m_add_exp; /* Added experience per hit point */
! 882: const struct mstats m_stats; /* Initial stats */
! 883: };
! 884:
! 885: /*
! 886: * Structure for a thing that the rogue can carry
! 887: */
! 888:
! 889: struct object {
! 890: int o_type; /* What kind of object it is */
! 891: coord o_pos; /* Where it lives on the screen */
! 892: char *o_text; /* What it says if you read it */
! 893: char o_launch; /* What you need to launch it */
! 894: char o_damage[8]; /* Damage if used like sword */
! 895: char o_hurldmg[8]; /* Damage if thrown */
! 896: struct linked_list *contents; /* contents of this object */
! 897: int o_count; /* Count for plural objects */
! 898: int o_which; /* Which object of a type it is */
! 899: int o_hplus; /* Plusses to hit */
! 900: int o_dplus; /* Plusses to damage */
! 901: int o_ac; /* Armor class */
! 902: long o_flags; /* Information about objects */
! 903: int o_group; /* Group number for this object */
! 904: int o_weight; /* weight of this object */
! 905: char o_mark[MARKLEN]; /* Mark the specific object */
! 906: };
! 907: /*
! 908: * weapon structure
! 909: */
! 910: struct init_weps {
! 911: char *w_name; /* name of weapon */
! 912: char *w_dam; /* hit damage */
! 913: char *w_hrl; /* hurl damage */
! 914: char w_launch; /* need to launch it */
! 915: int w_flags; /* flags */
! 916: int w_wght; /* weight of weapon */
! 917: int w_worth; /* worth of this weapon */
! 918: };
! 919:
! 920: /*
! 921: * armor structure
! 922: */
! 923: struct init_armor {
! 924: char *a_name; /* name of armor */
! 925: int a_prob; /* chance of getting armor */
! 926: int a_class; /* normal armor class */
! 927: int a_worth; /* worth of armor */
! 928: int a_wght; /* weight of armor */
! 929: };
! 930:
! 931: struct matrix {
! 932: int base; /* Base to-hit value (AC 10) */
! 933: int max_lvl; /* Maximum level for changing value */
! 934: int factor; /* Amount base changes each time */
! 935: int offset; /* What to offset level */
! 936: int range; /* Range of levels for each offset */
! 937: };
! 938:
! 939: struct spells {
! 940: short s_which; /* which scroll or potion */
! 941: short s_cost; /* cost of casting spell */
! 942: short s_type; /* scroll or potion */
! 943: int s_flag; /* is the spell blessed/cursed? */
! 944: };
! 945:
! 946: void _attach(struct linked_list **list, struct linked_list *item);
! 947: void _detach(struct linked_list **list, struct linked_list *item);
! 948: void _o_free_list(struct linked_list **ptr);
! 949: void _t_free_list(struct linked_list **ptr);
! 950: int ac_compute(void);
! 951: void activity(void);
! 952: void add_dexterity(bool cursed);
! 953: void add_intelligence(bool cursed);
! 954: bool add_pack(struct linked_list *item, bool silent,
! 955: struct linked_list **packret);
! 956: void add_slow(void);
! 957: void add_wisdom(bool cursed);
! 958: void addmsg(char *fmt, ...);
! 959: void affect(void);
! 960: void aggravate(void);
! 961: void alchemy(struct object *obj);
! 962: void appear(void);
! 963: bool attack(struct thing *mp, struct object *weapon, bool thrown);
! 964: void auto_save(int sig);
! 965: char be_trapped(struct thing *th, coord *tc);
! 966: char *blesscurse(int flags);
! 967: bool blue_light(bool blessed, bool cursed);
! 968: void bugkill(int sig);
! 969: void buy_it(void);
! 970: void byebye(int sig);
! 971: void cast(void);
! 972: bool can_blink(struct thing *tp);
! 973: coord *can_shoot(coord *er, coord *ee);
! 974: bool cansee(int y, int x);
! 975: void carry_obj(struct thing *mp, int chance);
! 976: long check_level(bool get_spells);
! 977: void check_residue(struct thing *tp);
! 978: void chg_str(int amt);
! 979: void command(void);
! 980: int const_bonus(void);
! 981: void corr_move(int dy, int dx);
! 982: struct linked_list *creat_item(void);
! 983: bool creat_mons(struct thing *person, short monster, bool report);
! 984: void create_obj(bool prompt, int which_item, int which_type);
! 985: void cur_null(struct object *op);
! 986: void cure_disease(void);
! 987: void dbotline(WINDOW *scr, char *message);
! 988: void death(short monst);
! 989: void del_pack(struct linked_list *item);
! 990: void destroy_item(struct linked_list *item);
! 991: int dex_compute(void);
! 992: int dext_prot(int dexterity);
! 993: bool diag_ok(coord *sp, coord *ep, struct thing *flgptr);
! 994: void dip_it(void);
! 995: void do_daemons(int flag);
! 996: void do_fuses(int flag);
! 997: void do_maze(void);
! 998: void do_motion(struct object *obj, int ydelta, int xdelta, struct thing *tp);
! 999: void do_move(int dy, int dx);
! 1000: void do_passages(void);
! 1001: void do_post(void);
! 1002: void do_rooms(void);
! 1003: void do_run(char ch);
! 1004: void do_terrain(int basey, int basex, int deltay, int deltax, bool fresh);
! 1005: bool do_zap(bool gotdir, int which, int flag);
! 1006: void doctor(struct thing *tp);
! 1007: void draw_room(struct room *rp);
! 1008: bool drop(struct linked_list *item);
! 1009: bool dropcheck(struct object *op);
! 1010: void dust_appear(void);
! 1011: void eat(void);
! 1012: int encread(char *start, unsigned int size, FILE *inf);
! 1013: int encwrite(char *start, unsigned int size, FILE *outf);
! 1014: void endit(int sig);
! 1015: void endmsg(void);
! 1016: void extinguish(void (*func)());
! 1017: void fall(struct linked_list *item, bool pr);
! 1018: coord *fallpos(coord *pos, bool be_clear, int range);
! 1019: void fatal(char *s);
! 1020: bool fight(coord *mp, struct object *weap, bool thrown);
! 1021: struct linked_list *find_mons(int y, int x);
! 1022: struct linked_list *find_obj(int y, int x);
! 1023: struct delayed_action *find_slot(void (*func)());
! 1024: void fix_stick(struct object *cur);
! 1025: void fumble(void);
! 1026: void fuse(void (*func)(), void *arg, int time, int type);
! 1027: void genmonsters(int least, bool treas);
! 1028: bool get_dir(void);
! 1029: struct linked_list *get_item(struct linked_list *list, char *purpose, int type);
! 1030: int get_str(char *opt, WINDOW *win);
! 1031: int get_worth(struct object *obj);
! 1032: int getbless(void);
! 1033: int getdeath(void);
! 1034: bool getdelta(char match, int *dy, int *dx);
! 1035: int grab(int y, int x);
! 1036: void gsense(void);
! 1037: bool hit_monster(int y, int x, struct object *obj, struct thing *tp);
! 1038: int hitweight(void);
! 1039: short id_monst(char monster);
! 1040: void idenpack(void);
! 1041: void init_colors(void);
! 1042: void init_materials(void);
! 1043: void init_misc(void);
! 1044: void init_names(void);
! 1045: void init_player(void);
! 1046: void init_stones(void);
! 1047: void init_terrain(void);
! 1048: void init_things(void);
! 1049: void init_weapon(struct object *weap, char type);
! 1050: char *inv_name(struct object *obj, bool drop);
! 1051: bool inventory(struct linked_list *list, int type);
! 1052: bool is_current(struct object *obj);
! 1053: bool is_magic(struct object *obj);
! 1054: bool isatrap(char ch);
! 1055: int itemweight(struct object *wh);
! 1056: void kill_daemon(void (*func)());
! 1057: void killed(struct linked_list *item, bool pr, bool points);
! 1058: void lake_check(coord *place);
! 1059: void land(void);
! 1060: void lengthen(void (*func)(), int xtime);
! 1061: void light(coord *cp);
! 1062: bool lit_room(struct room *rp);
! 1063: void look(bool wakeup, bool runend);
! 1064: void lower_level(short who);
! 1065: bool m_use_item(struct thing *monster, coord *monst_pos, coord *defend_pos);
! 1066: short makemonster(bool create);
! 1067: bool maze_view(int y, int x);
! 1068: char *misc_name(struct object *obj);
! 1069: void missile(int ydelta, int xdelta, struct linked_list *item,
! 1070: struct thing *tp);
! 1071: void msg(char *fmt, ...);
! 1072: unsigned long netread(int *error, int size, FILE *stream);
! 1073: int netwrite(unsigned long value, int size, FILE *stream);
! 1074: char *new(int size);
! 1075: struct linked_list *new_item(int size);
! 1076: void new_level(LEVTYPE ltype);
! 1077: void new_monster(struct linked_list *item, short type, coord *cp,
! 1078: bool max_monster);
! 1079: struct linked_list *new_thing(int thing_type);
! 1080: void nohaste(void);
! 1081: void noslow(void);
! 1082: char *num(int n1, int n2);
! 1083: void o_discard(struct linked_list *item);
! 1084: void option(void);
! 1085: char pack_char(struct linked_list *list, struct object *obj);
! 1086: void parse_opts(char *str);
! 1087: bool passwd(void);
! 1088: int pick_one(struct magic_item *magic, int nitems);
! 1089: void pick_up(char ch);
! 1090: void picky_inven(void);
! 1091: void playit(void);
! 1092: void pray(void);
! 1093: bool price_it(void);
! 1094: void quaff(int which, int flag, bool is_potion);
! 1095: void quit(int sig);
! 1096: void raise_level(bool get_spells);
! 1097: short randmonster(bool wander, bool no_unique);
! 1098: void read_scroll(int which, int flag, bool is_scroll);
! 1099: int readchar(void);
! 1100: void reopen_score(void);
! 1101: void res_dexterity(int howmuch);
! 1102: void res_strength(void);
! 1103: bool restore(char *file, char **envp);
! 1104: void restscr(WINDOW *scr);
! 1105: int ring_eat(int hand);
! 1106: char *ring_num(struct object *obj);
! 1107: void ring_on(struct object *obj);
! 1108: void ring_search(void);
! 1109: void ring_teleport(void);
! 1110: int ring_value(int type);
! 1111: int rnd(int range);
! 1112: void rnd_pos(struct room *rp, coord *cp);
! 1113: int rnd_room(void);
! 1114: coord *rndmove(struct thing *who);
! 1115: int roll(int number, int sides);
! 1116: void rollwand(void);
! 1117: struct room *roomin(coord *cp);
! 1118: int rs_restore_file(FILE *inf);
! 1119: int rs_save_file(FILE *savef);
! 1120: void runners(void);
! 1121: void runto(struct thing *runner, coord *spot);
! 1122: bool save(int which, struct thing *who, int adj);
! 1123: bool save_game(void);
! 1124: void score(unsigned long amount, int flags, short monst);
! 1125: void search(bool is_thief, bool door_chime);
! 1126: char secretdoor(int y, int x);
! 1127: void sell(struct thing *tp);
! 1128: void sell_it(void);
! 1129: void set_trap(struct thing *tp, int y, int x);
! 1130: void setup(void);
! 1131: bool shoot_bolt(struct thing *shooter, coord start, coord dir,
! 1132: bool get_points, short reason, char *name, int damage);
! 1133: bool shoot_ok(char ch);
! 1134: char show(int y, int x);
! 1135: void sight(void);
! 1136: struct linked_list *spec_item(int type, int which, int hit, int damage);
! 1137: void start_daemon(void (*func)(), void *arg, int type);
! 1138: void status(bool display);
! 1139: void steal(void);
! 1140: bool step_ok(int y, int x, int can_on_monst, struct thing *flgptr);
! 1141: void stomach(void);
! 1142: int str_compute(void);
! 1143: void strangle(void);
! 1144: void strucpy(char *s1, char *s2, int len);
! 1145: void suffocate(void);
! 1146: void swander(void);
! 1147: bool swing(short class, int at_lvl, int op_arm, int wplus);
! 1148: void t_discard(struct linked_list *item);
! 1149: void take_off(void);
! 1150: int teleport(void);
! 1151: void total_winner(void);
! 1152: int totalenc(void);
! 1153: char *tr_name(char ch);
! 1154: struct trap *trap_at(int y, int x);
! 1155: void trap_look(void);
! 1156: void un_itch(void);
! 1157: void unchoke(void);
! 1158: void unclrhead(void);
! 1159: void unconfuse(void);
! 1160: void undance(void);
! 1161: void unphase(void);
! 1162: void unsee(void);
! 1163: void unstink(void);
! 1164: void updpack(bool getmax);
! 1165: void use_mm(int which);
! 1166: char *vowelstr(char *str);
! 1167: void wait_for(WINDOW *win, char ch);
! 1168: struct linked_list *wake_monster(int y, int x);
! 1169: void wanderer(void);
! 1170: void waste_time(void);
! 1171: char *weap_name(struct object *obj);
! 1172: void wear(void);
! 1173: void wghtchk(void);
! 1174: void whatis(struct linked_list *what);
! 1175: void wield(void);
! 1176: void writelog(unsigned long amount, int flags, short monst);
! 1177:
! 1178: #ifdef CHECKTIME
! 1179: int checkout();
! 1180: #endif
! 1181: extern char *md_getusername(void);
! 1182: extern char *md_gethomedir(void);
! 1183: extern void md_flushinp(void);
! 1184: extern char *md_getshell(void);
! 1185: extern char *md_gethostname(void);
! 1186: extern char *md_getpass(char *prompt);
! 1187: extern char *md_crypt(char *key, char *salt);
! 1188: extern char *md_getroguedir(void);
! 1189: extern void md_init(void);
! 1190: extern FILE * md_fdopen(int fd, char *mode);
! 1191: extern int md_unlink(char *file);
! 1192: extern void md_normaluser(void);
! 1193: extern int md_getuid(void);
! 1194: extern long md_memused(void);
! 1195: extern int md_readchar(WINDOW *win);
! 1196: extern int md_shellescape(void);
! 1197: extern void md_srand(int seed);
! 1198: extern int md_rand(void);
! 1199: extern int md_erasechar(void);
! 1200: extern int md_killchar(void);
! 1201: extern unsigned int md_random_seed(void);
! 1202:
! 1203: /*
! 1204: * Now all the global variables
! 1205: */
! 1206:
! 1207: extern char outstring[]; /* string for use with msg */
! 1208: extern struct trap traps[];
! 1209: extern struct h_list helpstr[];
! 1210: extern struct h_list wiz_help[];
! 1211: extern struct room rooms[]; /* One for each room -- A level */
! 1212: extern struct room *oldrp; /* Roomin(&oldpos) */
! 1213: extern struct linked_list *mlist; /* List of monsters on the level */
! 1214: extern struct linked_list *tlist; /* list of monsters fallen down traps */
! 1215: extern struct death_type deaths[]; /* all the ways to die */
! 1216: extern struct thing player; /* The rogue */
! 1217: extern struct monster monsters[]; /* The initial monster states */
! 1218: extern struct linked_list *lvl_obj; /* List of objects on this level */
! 1219: extern struct linked_list *monst_dead; /* Indicates monster that got killed */
! 1220: extern struct object *cur_weapon; /* Which weapon he is weilding */
! 1221: extern struct object *cur_armor; /* What a well dresssed rogue wears */
! 1222: extern struct object *cur_ring[]; /* Which rings are being worn */
! 1223: extern struct object *cur_misc[]; /* which MM's are in use */
! 1224: extern struct magic_item things[]; /* Chances for each type of item */
! 1225: extern struct magic_item s_magic[]; /* Names and chances for scrolls */
! 1226: extern struct magic_item p_magic[]; /* Names and chances for potions */
! 1227: extern struct magic_item r_magic[]; /* Names and chances for rings */
! 1228: extern struct magic_item ws_magic[]; /* Names and chances for sticks */
! 1229: extern struct magic_item m_magic[]; /* Names and chances for MM */
! 1230: extern struct magic_item rel_magic[]; /* Names and chances for relics */
! 1231: extern struct spells magic_spells[]; /* spells for magic users */
! 1232: extern struct spells cleric_spells[]; /* spells for magic users */
! 1233: extern char *cnames[][11]; /* Character level names */
! 1234: extern char curpurch[]; /* name of item ready to buy */
! 1235: extern char PLAYER; /* what the player looks like */
! 1236: extern char nfloors; /* Number of floors in this dungeon */
! 1237: extern int char_type; /* what type of character is player */
! 1238: extern int foodlev; /* how fast he eats food */
! 1239: extern int level; /* What level rogue is on */
! 1240: extern int trader; /* number of purchases */
! 1241: extern int curprice; /* price of an item */
! 1242: extern int purse; /* How much gold the rogue has */
! 1243: extern int mpos; /* Where cursor is on top line */
! 1244: extern int ntraps; /* Number of traps on this level */
! 1245: extern int no_move; /* Number of turns held in place */
! 1246: extern int no_command; /* Number of turns asleep */
! 1247: extern int inpack; /* Number of things in pack */
! 1248: extern int total; /* Total dynamic memory bytes */
! 1249: extern int lastscore; /* Score before this turn */
! 1250: extern int no_food; /* Number of levels without food */
! 1251: extern int foods_this_level; /* num of foods this level */
! 1252: extern int seed; /* Random number seed */
! 1253: extern int count; /* Number of times to repeat command */
! 1254: extern int dnum; /* Dungeon number */
! 1255: extern int max_level; /* Deepest player has gone */
! 1256: extern int cur_max; /* Deepest player has gone currently */
! 1257: extern int food_left; /* Amount of food in hero's stomach */
! 1258: extern int group; /* Current group number */
! 1259: extern int hungry_state; /* How hungry is he */
! 1260: extern int infest_dam; /* Damage from parasites */
! 1261: extern int lost_str; /* Amount of strength lost */
! 1262: extern int lost_dext; /* amount of dexterity lost */
! 1263: extern int hold_count; /* Number of monsters holding player */
! 1264: extern int trap_tries; /* Number of attempts to set traps */
! 1265: extern int pray_time; /* Number of prayer points/exp level */
! 1266: extern int spell_power; /* Spell power left at this level */
! 1267: extern int turns; /* Number of turns player has taken */
! 1268: extern int quest_item; /* Item hero is looking for */
! 1269: extern int cur_relic[]; /* Current relics */
! 1270: extern char take; /* Thing the rogue is taking */
! 1271: extern char prbuf[]; /* Buffer for sprintfs */
! 1272: extern char outbuf[]; /* Output buffer for stdout */
! 1273: extern char runch; /* Direction player is running */
! 1274: extern char *s_names[]; /* Names of the scrolls */
! 1275: extern char *p_colors[]; /* Colors of the potions */
! 1276: extern char *r_stones[]; /* Stone settings of the rings */
! 1277: extern struct init_weps weaps[]; /* weapons and attributes */
! 1278: extern struct init_armor armors[]; /* armors and attributes */
! 1279: extern char *ws_made[]; /* What sticks are made of */
! 1280: extern char *release; /* Release number of rogue */
! 1281: extern char whoami[]; /* Name of player */
! 1282: extern char fruit[]; /* Favorite fruit */
! 1283: extern char huh[LINELEN]; /* The last message printed */
! 1284: extern char *s_guess[]; /* Players guess at what scroll is */
! 1285: extern char *p_guess[]; /* Players guess at what potion is */
! 1286: extern char *r_guess[]; /* Players guess at what ring is */
! 1287: extern char *ws_guess[]; /* Players guess at what wand is */
! 1288: extern char *m_guess[]; /* Players guess at what MM is */
! 1289: extern char *ws_type[]; /* Is it a wand or a staff */
! 1290: extern char file_name[]; /* Save file name */
! 1291: extern char score_file[]; /* Score file name */
! 1292: extern char home[]; /* User's home directory */
! 1293: extern WINDOW *cw; /* Window that the player sees */
! 1294: extern WINDOW *hw; /* Used for the help command */
! 1295: extern WINDOW *mw; /* Used to store mosnters */
! 1296: extern WINDOW *msgw; /* Used to display messages */
! 1297: extern bool pool_teleport; /* just teleported from a pool */
! 1298: extern bool inwhgt; /* true if from wghtchk() */
! 1299: extern bool running; /* True if player is running */
! 1300: extern bool playing; /* True until he quits */
! 1301: extern bool wizard; /* True if allows wizard commands */
! 1302: extern bool after; /* True if we want after daemons */
! 1303: extern bool notify; /* True if player wants to know */
! 1304: extern bool fight_flush; /* True if toilet input */
! 1305: extern bool terse; /* True if we should be short */
! 1306: extern bool auto_pickup; /* pick up things automatically? */
! 1307: extern bool door_stop; /* Stop running when we pass a door */
! 1308: extern bool jump; /* Show running as series of jumps */
! 1309: extern bool slow_invent; /* Inventory one line at a time */
! 1310: extern bool firstmove; /* First move after setting door_stop */
! 1311: extern bool waswizard; /* Was a wizard sometime */
! 1312: extern bool askme; /* Ask about unidentified things */
! 1313: extern bool s_know[]; /* Does he know what a scroll does */
! 1314: extern bool p_know[]; /* Does he know what a potion does */
! 1315: extern bool r_know[]; /* Does he know what a ring does */
! 1316: extern bool ws_know[]; /* Does he know what a stick does */
! 1317: extern bool m_know[]; /* Does he know what a MM does */
! 1318: extern bool in_shell; /* True if executing a shell */
! 1319: extern bool daytime; /* Indicates whether it is daytime */
! 1320: extern bool use_savedir; /* True if using systemwide save area */
! 1321: extern coord oldpos; /* Position before last look() call */
! 1322: extern coord delta; /* Change indicated to get_dir() */
! 1323: extern coord grid[]; /* used for random pos generation */
! 1324: extern char *nothing; /* "nothing happens" msg */
! 1325: extern char *spacemsg;
! 1326: extern char *morestr;
! 1327: extern char *retstr;
! 1328: extern LEVTYPE levtype;
! 1329: extern int demoncnt;
! 1330: extern int fusecnt;
! 1331: extern int between;
! 1332: extern struct delayed_action d_list[MAXDAEMONS];
! 1333: extern struct delayed_action f_list[MAXFUSES];
! 1334: extern char *rainbow[NCOLORS];
! 1335: extern char *sylls[NSYLLS];
! 1336: extern char *stones[NSTONES];
! 1337: extern char *metal[NMETAL];
! 1338: extern char *wood[NWOOD];
! 1339: extern coord ch_ret;
! 1340: extern FILE *scoreboard; /* The scorefile */
! 1341: extern FILE *logfile;
CVSweb