Annotation of researchv10no/games/rogue/rogue.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Rogue definitions and variable declarations
                      3:  *
                      4:  * @(#)rogue.h 3.38 (Berkeley) 6/15/81
                      5:  */
                      6: 
                      7: 
                      8: /*
                      9:  * Maximum number of different things
                     10:  */
                     11: #define MAXROOMS 9
                     12: #define MAXTHINGS 9
                     13: #define MAXOBJ 9
                     14: #define MAXPACK 23
                     15: #define MAXTRAPS 10
                     16: #define        NUMTHINGS 7     /* number of types of things (scrolls, rings, etc.) */
                     17: 
                     18: /*
                     19:  * return values for get functions
                     20:  */
                     21: #define        NORM    0       /* normal exit */
                     22: #define        QUIT    1       /* quit option setting */
                     23: #define        MINUS   2       /* back up one option */
                     24: 
                     25: /*
                     26:  * All the fun defines
                     27:  */
                     28: #define next(ptr) (*ptr).l_next
                     29: #define prev(ptr) (*ptr).l_prev
                     30: #define ldata(ptr) (*ptr).l_data
                     31: #define inroom(rp, cp) (\
                     32:     (cp)->x <= (rp)->r_pos.x + ((rp)->r_max.x - 1) && (rp)->r_pos.x <= (cp)->x \
                     33:  && (cp)->y <= (rp)->r_pos.y + ((rp)->r_max.y - 1) && (rp)->r_pos.y <= (cp)->y)
                     34: #define winat(y, x) (mvwinch(mw,y,x)==' '?mvwinch(stdscr,y,x):winch(mw))
                     35: #define debug if (wizard) msg
                     36: #define RN (((seed = seed*11109+13849) & 0x7fff) >> 1)
                     37: #define unc(cp) (cp).y, (cp).x
                     38: #define cmov(xy) move((xy).y, (xy).x)
                     39: #define DISTANCE(y1, x1, y2, x2) ((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1))
                     40: #define when break;case
                     41: #define otherwise break;default
                     42: #define until(expr) while(!(expr))
                     43: #define ce(a, b) ((a).x == (b).x && (a).y == (b).y)
                     44: #define draw(window) wrefresh(window)
                     45: #define hero player.t_pos
                     46: #define pstats player.t_stats
                     47: #define pack player.t_pack
                     48: #define attach(a,b) _attach(&a,b)
                     49: #define detach(a,b) _detach(&a,b)
                     50: #define free_list(a) _free_list(&a)
                     51: #define max(a, b) ((a) > (b) ? (a) : (b))
                     52: #define on(thing, flag) (((thing).t_flags & flag) != 0)
                     53: #define off(thing, flag) (((thing).t_flags & flag) == 0)
                     54: #define CTRL(ch) ('ch' & 037)
                     55: #define ALLOC(x) malloc((unsigned int) x)
                     56: #define FREE(x) cfree((char *) x)
                     57: #define        EQSTR(a, b, c)  (strncmp(a, b, c) == 0)
                     58: #define GOLDCALC (rnd(50 + 10 * level) + 2)
                     59: #define ISRING(h,r) (cur_ring[h] != NULL && cur_ring[h]->o_which == r)
                     60: #define ISWEARING(r) (ISRING(LEFT, r) || ISRING(RIGHT, r))
                     61: #define newgrp() ++group
                     62: #define o_charges o_ac
                     63: #define ISMULT(type) (type == POTION || type == SCROLL || type == FOOD)
                     64: 
                     65: /*
                     66:  * Things that appear on the screens
                     67:  */
                     68: #define PASSAGE '#'
                     69: #define DOOR '+'
                     70: #define FLOOR '.'
                     71: #define PLAYER '@'
                     72: #define TRAP '^'
                     73: #define TRAPDOOR '>'
                     74: #define ARROWTRAP '{'
                     75: #define SLEEPTRAP '$'
                     76: #define BEARTRAP '}'
                     77: #define TELTRAP '~'
                     78: #define DARTTRAP '`'
                     79: #define SECRETDOOR '&'
                     80: #define STAIRS '%'
                     81: #define GOLD '*'
                     82: #define POTION '!'
                     83: #define SCROLL '?'
                     84: #define MAGIC '$'
                     85: #define FOOD ':'
                     86: #define WEAPON ')'
                     87: #define ARMOR ']'
                     88: #define AMULET ','
                     89: #define RING '='
                     90: #define STICK '/'
                     91: #define CALLABLE -1
                     92: 
                     93: /*
                     94:  * Various constants
                     95:  */
                     96: #define        PASSWD "C4u3dJWbg7RCk"
                     97: #define BEARTIME 3
                     98: #define SLEEPTIME 5
                     99: #define HEALTIME 30
                    100: #define HOLDTIME 2
                    101: #define STPOS 0
                    102: #define WANDERTIME 70
                    103: #define BEFORE 1
                    104: #define AFTER 2
                    105: #define HUHDURATION 20
                    106: #define SEEDURATION 850
                    107: #define HUNGERTIME 1300
                    108: #define MORETIME 150
                    109: #define STOMACHSIZE 2000
                    110: #define ESCAPE 27
                    111: #define LEFT 0
                    112: #define RIGHT 1
                    113: #define BOLT_LENGTH 6
                    114: 
                    115: /*
                    116:  * Save against things
                    117:  */
                    118: #define VS_POISON 00
                    119: #define VS_PARALYZATION 00
                    120: #define VS_DEATH 00
                    121: #define VS_PETRIFICATION 01
                    122: #define VS_BREATH 02
                    123: #define VS_MAGIC  03
                    124: 
                    125: /*
                    126:  * Various flag bits
                    127:  */
                    128: #define ISDARK 0000001
                    129: #define ISCURSED 000001
                    130: #define ISBLIND 0000001
                    131: #define ISGONE 0000002
                    132: #define ISKNOW  0000002
                    133: #define ISRUN  0000004
                    134: #define ISFOUND 0000010
                    135: #define ISINVIS 0000020
                    136: #define ISMEAN  0000040
                    137: #define ISGREED 0000100
                    138: #define ISBLOCK 0000200
                    139: #define ISHELD  0000400
                    140: #define ISHUH   0001000
                    141: #define ISREGEN 0002000
                    142: #define CANHUH  0004000
                    143: #define CANSEE  0010000
                    144: #define ISMISL  0020000
                    145: #define ISCANC 0020000
                    146: #define ISMANY  0040000
                    147: #define ISSLOW 0040000
                    148: #define ISHASTE 0100000
                    149: 
                    150: /*
                    151:  * Potion types
                    152:  */
                    153: #define P_CONFUSE 0
                    154: #define P_PARALYZE 1
                    155: #define P_POISON 2
                    156: #define P_STRENGTH 3
                    157: #define P_SEEINVIS 4
                    158: #define P_HEALING 5
                    159: #define P_MFIND 6
                    160: #define P_TFIND 7
                    161: #define P_RAISE 8
                    162: #define P_XHEAL 9
                    163: #define P_HASTE 10
                    164: #define P_RESTORE 11
                    165: #define P_BLIND 12
                    166: #define P_NOP 13
                    167: #define MAXPOTIONS 14
                    168: 
                    169: /*
                    170:  * Scroll types
                    171:  */
                    172: #define S_CONFUSE 0
                    173: #define S_MAP 1
                    174: #define S_LIGHT 2
                    175: #define S_HOLD 3
                    176: #define S_SLEEP 4
                    177: #define S_ARMOR 5
                    178: #define S_IDENT 6
                    179: #define S_SCARE 7
                    180: #define S_GFIND 8
                    181: #define S_TELEP 9
                    182: #define S_ENCH 10
                    183: #define S_CREATE 11
                    184: #define S_REMOVE 12
                    185: #define S_AGGR 13
                    186: #define S_NOP 14
                    187: #define S_GENOCIDE 15
                    188: #define MAXSCROLLS 16
                    189: 
                    190: /*
                    191:  * Weapon types
                    192:  */
                    193: #define MACE 0
                    194: #define SWORD 1
                    195: #define BOW 2
                    196: #define ARROW 3
                    197: #define DAGGER 4
                    198: #define ROCK 5
                    199: #define TWOSWORD 6
                    200: #define SLING 7
                    201: #define DART 8
                    202: #define CROSSBOW 9
                    203: #define BOLT 10
                    204: #define SPEAR 11
                    205: #define MAXWEAPONS 12
                    206: 
                    207: /*
                    208:  * Armor types
                    209:  */
                    210: #define LEATHER 0
                    211: #define RING_MAIL 1
                    212: #define STUDDED_LEATHER 2
                    213: #define SCALE_MAIL 3
                    214: #define CHAIN_MAIL 4
                    215: #define SPLINT_MAIL 5
                    216: #define BANDED_MAIL 6
                    217: #define PLATE_MAIL 7
                    218: #define MAXARMORS 8
                    219: 
                    220: /*
                    221:  * Ring types
                    222:  */
                    223: #define R_PROTECT 0
                    224: #define R_ADDSTR 1
                    225: #define R_SUSTSTR 2
                    226: #define R_SEARCH 3
                    227: #define R_SEEINVIS 4
                    228: #define R_NOP 5
                    229: #define R_AGGR 6
                    230: #define R_ADDHIT 7
                    231: #define R_ADDDAM 8
                    232: #define R_REGEN 9
                    233: #define R_DIGEST 10
                    234: #define R_TELEPORT 11
                    235: #define R_STEALTH 12
                    236: #define MAXRINGS 13
                    237: 
                    238: /*
                    239:  * Rod/Wand/Staff types
                    240:  */
                    241: 
                    242: #define WS_LIGHT 0
                    243: #define WS_HIT 1
                    244: #define WS_ELECT 2
                    245: #define WS_FIRE 3
                    246: #define WS_COLD 4
                    247: #define WS_POLYMORPH 5
                    248: #define WS_MISSILE 6
                    249: #define WS_HASTE_M 7
                    250: #define WS_SLOW_M 8
                    251: #define WS_DRAIN 9
                    252: #define WS_NOP 10
                    253: #define WS_TELAWAY 11
                    254: #define WS_TELTO 12
                    255: #define WS_CANCEL 13
                    256: #define MAXSTICKS 14
                    257: 
                    258: /*
                    259:  * Now we define the structures and types
                    260:  */
                    261: 
                    262: /*
                    263:  * Help list
                    264:  */
                    265: 
                    266: struct h_list {
                    267:     char h_ch;
                    268:     char *h_desc;
                    269: } helpstr[];
                    270: 
                    271: /*
                    272:  * Coordinate data type
                    273:  */
                    274: typedef struct {
                    275:     int x;
                    276:     int y;
                    277: } coord;
                    278: 
                    279: typedef struct {
                    280:     short st_str;
                    281:     short st_add;
                    282: } str_t;
                    283: 
                    284: /*
                    285:  * Linked list data type
                    286:  */
                    287: struct linked_list {
                    288:     struct linked_list *l_next;
                    289:     struct linked_list *l_prev;
                    290:     char *l_data;                      /* Various structure pointers */
                    291: };
                    292: 
                    293: /*
                    294:  * Stuff about magic items
                    295:  */
                    296: 
                    297: struct magic_item {
                    298:     char *mi_name;
                    299:     int mi_prob;
                    300:     int mi_worth;
                    301: };
                    302: 
                    303: /*
                    304:  * Room structure
                    305:  */
                    306: struct room {
                    307:     coord r_pos;                       /* Upper left corner */
                    308:     coord r_max;                       /* Size of room */
                    309:     coord r_gold;                      /* Where the gold is */
                    310:     int r_goldval;                     /* How much the gold is worth */
                    311:     int r_flags;                       /* Info about the room */
                    312:     int r_nexits;                      /* Number of exits */
                    313:     coord r_exit[4];                   /* Where the exits are */
                    314: };
                    315: 
                    316: /*
                    317:  * Array of all traps on this level
                    318:  */
                    319: struct trap {
                    320:     coord tr_pos;                      /* Where trap is */
                    321:     char tr_type;                      /* What kind of trap */
                    322:     int tr_flags;                      /* Info about trap (i.e. ISFOUND) */
                    323: } traps[MAXTRAPS];
                    324: 
                    325: /*
                    326:  * Structure describing a fighting being
                    327:  */
                    328: struct stats {
                    329:     str_t s_str;                       /* Strength */
                    330:     long s_exp;                                /* Experience */
                    331:     int s_lvl;                         /* Level of mastery */
                    332:     int s_arm;                         /* Armor class */
                    333:     int s_hpt;                         /* Hit points */
                    334:     char *s_dmg;                       /* String describing damage done */
                    335: };
                    336: 
                    337: /*
                    338:  * Structure for monsters and player
                    339:  */
                    340: struct thing {
                    341:     coord t_pos;                       /* Position */
                    342:     bool t_turn;                       /* If slowed, is it a turn to move */
                    343:     char t_type;                       /* What it is */
                    344:     char t_disguise;                   /* What mimic looks like */
                    345:     char t_oldch;                      /* Character that was where it was */
                    346:     coord *t_dest;                     /* Where it is running to */
                    347:     short t_flags;                     /* State word */
                    348:     struct stats t_stats;              /* Physical description */
                    349:     struct linked_list *t_pack;                /* What the thing is carrying */
                    350: };
                    351: 
                    352: /*
                    353:  * Array containing information on all the various types of mosnters
                    354:  */
                    355: struct monster {
                    356:     char *m_name;                      /* What to call the monster */
                    357:     short m_carry;                     /* Probability of carrying something */
                    358:     short m_flags;                     /* Things about the monster */
                    359:     struct stats m_stats;              /* Initial stats */
                    360: };
                    361: 
                    362: /*
                    363:  * Structure for a thing that the rogue can carry
                    364:  */
                    365: 
                    366: struct object {
                    367:     int o_type;                                /* What kind of object it is */
                    368:     coord o_pos;                       /* Where it lives on the screen */
                    369:     char *o_text;                      /* What it says if you read it */
                    370:     char o_launch;                     /* What you need to launch it */
                    371:     char *o_damage;                    /* Damage if used like sword */
                    372:     char *o_hurldmg;                   /* Damage if thrown */
                    373:     int o_count;                       /* Count for plural objects */
                    374:     int o_which;                       /* Which object of a type it is */
                    375:     int o_hplus;                       /* Plusses to hit */
                    376:     int o_dplus;                       /* Plusses to damage */
                    377:     int o_ac;                          /* Armor class */
                    378:     int o_flags;                       /* Information about objects */
                    379:     int o_group;                       /* Group number for this object */
                    380: };
                    381: 
                    382: /*
                    383:  * Now all the global variables
                    384:  */
                    385: 
                    386: struct room rooms[MAXROOMS];           /* One for each room -- A level */
                    387: struct room *oldrp;                    /* Roomin(&oldpos) */
                    388: struct linked_list *mlist;             /* List of monsters on the level */
                    389: struct thing player;                   /* The rogue */
                    390: struct stats max_stats;                        /* The maximum for the player */
                    391: struct monster monsters[26];           /* The initial monster states */
                    392: struct linked_list *lvl_obj;           /* List of objects on this level */
                    393: struct object *cur_weapon;             /* Which weapon he is weilding */
                    394: struct object *cur_armor;              /* What a well dresssed rogue wears */
                    395: struct object *cur_ring[2];            /* Which rings are being worn */
                    396: struct magic_item things[NUMTHINGS];   /* Chances for each type of item */
                    397: struct magic_item s_magic[MAXSCROLLS]; /* Names and chances for scrolls */
                    398: struct magic_item p_magic[MAXPOTIONS]; /* Names and chances for potions */
                    399: struct magic_item r_magic[MAXRINGS];   /* Names and chances for rings */
                    400: struct magic_item ws_magic[MAXSTICKS]; /* Names and chances for sticks */
                    401: 
                    402: int level;                             /* What level rogue is on */
                    403: int purse;                             /* How much gold the rogue has */
                    404: int mpos;                              /* Where cursor is on top line */
                    405: int ntraps;                            /* Number of traps on this level */
                    406: int no_move;                           /* Number of turns held in place */
                    407: int no_command;                                /* Number of turns asleep */
                    408: int inpack;                            /* Number of things in pack */
                    409: int max_hp;                            /* Player's max hit points */
                    410: int total;                             /* Total dynamic memory bytes */
                    411: int a_chances[MAXARMORS];              /* Probabilities for armor */
                    412: int a_class[MAXARMORS];                        /* Armor class for various armors */
                    413: int lastscore;                         /* Score before this turn */
                    414: int no_food;                           /* Number of levels without food */
                    415: int seed;                              /* Random number seed */
                    416: int count;                             /* Number of times to repeat command */
                    417: int dnum;                              /* Dungeon number */
                    418: int fung_hit;                          /* Number of time fungi has hit */
                    419: int quiet;                             /* Number of quiet turns */
                    420: int max_level;                         /* Deepest player has gone */
                    421: int food_left;                         /* Amount of food in hero's stomach */
                    422: int group;                             /* Current group number */
                    423: int hungry_state;                      /* How hungry is he */
                    424: 
                    425: char take;                             /* Thing the rogue is taking */
                    426: char prbuf[80];                                /* Buffer for sprintfs */
                    427: char outbuf[BUFSIZ];                   /* Output buffer for stdout */
                    428: char runch;                            /* Direction player is running */
                    429: char *s_names[MAXSCROLLS];             /* Names of the scrolls */
                    430: char *p_colors[MAXPOTIONS];            /* Colors of the potions */
                    431: char *r_stones[MAXRINGS];              /* Stone settings of the rings */
                    432: char *w_names[MAXWEAPONS];             /* Names of the various weapons */
                    433: char *a_names[MAXARMORS];              /* Names of armor types */
                    434: char *ws_made[MAXSTICKS];              /* What sticks are made of */
                    435: char *release;                         /* Release number of rogue */
                    436: char whoami[80];                       /* Name of player */
                    437: char fruit[80];                                /* Favorite fruit */
                    438: char huh[80];                          /* The last message printed */
                    439: char *s_guess[MAXSCROLLS];             /* Players guess at what scroll is */
                    440: char *p_guess[MAXPOTIONS];             /* Players guess at what potion is */
                    441: char *r_guess[MAXRINGS];               /* Players guess at what ring is */
                    442: char *ws_guess[MAXSTICKS];             /* Players guess at what wand is */
                    443: char *ws_type[MAXSTICKS];              /* Is it a wand or a staff */
                    444: char file_name[80];                    /* Save file name */
                    445: char home[80];                         /* User's home directory */
                    446: 
                    447: WINDOW *cw;                            /* Window that the player sees */
                    448: WINDOW *hw;                            /* Used for the help command */
                    449: WINDOW *mw;                            /* Used to store mosnters */
                    450: 
                    451: bool running;                          /* True if player is running */
                    452: bool playing;                          /* True until he quits */
                    453: bool wizard;                           /* True if allows wizard commands */
                    454: bool after;                            /* True if we want after daemons */
                    455: bool notify;                           /* True if player wants to know */
                    456: bool fight_flush;                      /* True if toilet input */
                    457: bool terse;                            /* True if we should be short */
                    458: bool door_stop;                                /* Stop running when we pass a door */
                    459: bool jump;                             /* Show running as series of jumps */
                    460: bool slow_invent;                      /* Inventory one line at a time */
                    461: bool firstmove;                                /* First move after setting door_stop */
                    462: bool waswizard;                                /* Was a wizard sometime */
                    463: bool askme;                            /* Ask about unidentified things */
                    464: bool s_know[MAXSCROLLS];               /* Does he know what a scroll does */
                    465: bool p_know[MAXPOTIONS];               /* Does he know what a potion does */
                    466: bool r_know[MAXRINGS];                 /* Does he know what a ring does */
                    467: bool ws_know[MAXSTICKS];               /* Does he know what a stick does */
                    468: bool amulet;                           /* He found the amulet */
                    469: bool in_shell;                         /* True if executing a shell */
                    470: 
                    471: coord oldpos;                          /* Position before last look() call */
                    472: coord delta;                           /* Change indicated to get_dir() */
                    473: 
                    474: struct linked_list *find_mons(), *find_obj(), *get_item(), *new_item();
                    475: struct linked_list *new_thing(), *wake_monster();
                    476: 
                    477: char *malloc(), *getenv(), *unctrl(), *tr_name(), *new(), *sprintf();
                    478: char *vowelstr(), *inv_name(), *strcpy(), *strcat(), *sbrk(), *brk();
                    479: char *ctime(), *num(), *ring_num();
                    480: 
                    481: struct room *roomin();
                    482: 
                    483: coord *rndmove();
                    484: 
                    485: int auto_save(), endit(), nohaste(), doctor(), runners(), swander();
                    486: int tstp(), unconfuse(), unsee(), rollwand(), stomach(), sight();
                    487: 
                    488: #ifdef CHECKTIME
                    489: int checkout();
                    490: #endif
                    491: 
                    492: long lseek();
                    493: 
                    494: struct trap *trap_at();
                    495: 
                    496: /* added stuff */
                    497: int cheating;
                    498: FILE *restfile;

unix.superglobalmegacorp.com

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