1: /* 2: * Hunt 3: * Copyright (c) 1985 Conrad C. Huang, Gregory S. Couch, Kenneth C.R.C. Arnold 4: * San Francisco, California 5: * 6: * Copyright (c) 1985 Regents of the University of California. 7: * All rights reserved. The Berkeley software License Agreement 8: * specifies the terms and conditions for redistribution. 9: */ 10: 11: # include <stdio.h> 12: # ifndef OLDIPC 13: # include <sgtty.h> 14: # include <sys/types.h> 15: # include <sys/uio.h> 16: # else OLDIPC 17: # include <sys/localopts.h> 18: # include <sys/types.h> 19: # include <sys/netltoshort.h> 20: # endif OLDIPC 21: # include <sys/socket.h> 22: # ifdef INTERNET 23: # include <netinet/in.h> 24: # include <netdb.h> 25: # ifndef OLDIPC 26: # include <arpa/inet.h> 27: # endif !OLDIPC 28: # ifdef BROADCAST 29: # include <net/if.h> 30: # endif BROADCAST 31: # else INTERNET 32: # include <sys/un.h> 33: # endif INTERNET 34: 35: # ifdef INTERNET 36: # define SOCK_FAMILY AF_INET 37: # else INTERNET 38: # define SOCK_FAMILY AF_UNIX 39: # define AF_UNIX_HACK /* 4.2 hack; leaves files around */ 40: # endif INTERNET 41: 42: # define ADDCH ('a' | 0200) 43: # define MOVE ('m' | 0200) 44: # define REFRESH ('r' | 0200) 45: # define CLRTOEOL ('c' | 0200) 46: # define ENDWIN ('e' | 0200) 47: # define CLEAR ('C' | 0200) 48: # define REDRAW ('R' | 0200) 49: # define LAST_PLAYER ('l' | 0200) 50: # define BELL ('b' | 0200) 51: # define READY ('g' | 0200) 52: 53: /* 54: * Choose MAXPL and MAXMON carefully. The screen is assumed to be 55: * 23 lines high and will only tolerate (MAXPL == 12 && MAXMON == 0) 56: * or (MAXPL + MAXMON <= 10). 57: */ 58: # define MAXPL 9 59: # ifdef MONITOR 60: # define MAXMON 1 61: # endif MONITOR 62: # define NAMELEN 20 63: # define MSGLEN 80 64: # define DECAY 50.0 65: 66: # define NASCII 128 67: 68: # ifndef REFLECT 69: # ifndef RANDOM 70: # define RANDOM 71: # endif RANDOM 72: # endif REFLECT 73: 74: # define WIDTH 59 75: # define WIDTH2 64 /* Next power of 2 >= WIDTH (for fast access) */ 76: # define HEIGHT 23 77: # define UBOUND 1 78: # define DBOUND 22 79: # define LBOUND 1 80: # define RBOUND (WIDTH - 1) 81: 82: # define STAT_LABEL_COL 60 83: # define STAT_VALUE_COL 74 84: # define STAT_NAME_COL 61 85: # define STAT_SCAN_COL (STAT_NAME_COL + 5) 86: # define STAT_NAME_ROW 0 87: # define STAT_AMMO_ROW 2 88: # define STAT_SCAN_ROW 3 89: # define STAT_CLOAK_ROW 4 90: # define STAT_GUN_ROW 5 91: # define STAT_DAM_ROW 7 92: # define STAT_KILL_ROW 8 93: # define STAT_PLAY_ROW 10 94: # ifdef MONITOR 95: # define STAT_MON_ROW (STAT_PLAY_ROW + MAXPL + 1) 96: # endif MONITOR 97: # define STAT_NAME_LEN 16 98: 99: # define DOOR '#' 100: # define WALL1 '-' 101: # define WALL2 '|' 102: # define WALL3 '+' 103: # ifdef REFLECT 104: # define WALL4 '/' 105: # define WALL5 '\\' 106: # endif REFLECT 107: # define KNIFE 'K' 108: # define SHOT ':' 109: # define GRENADE 'o' 110: # define SATCHEL 'O' 111: # define BOMB '@' 112: # define MINE ';' 113: # define GMINE 'g' 114: # ifdef OOZE 115: # define SLIME '$' 116: # endif OOZE 117: # ifdef VOLCANO 118: # define LAVA '~' 119: # endif VOLCANO 120: # ifdef FLY 121: # define FALL 'F' 122: # endif FLY 123: # define SPACE ' ' 124: 125: # define ABOVE 'i' 126: # define BELOW '!' 127: # define RIGHT '}' 128: # define LEFTS '{' 129: # ifdef FLY 130: # define FLYER '&' 131: # endif FLY 132: 133: # define NORTH 01 134: # define SOUTH 02 135: # define EAST 010 136: # define WEST 020 137: 138: # ifndef TRUE 139: # define TRUE 1 140: # define FALSE 0 141: # endif TRUE 142: # ifndef CTRL 143: # define CTRL(x) ('x' & 037) 144: # endif CTRL 145: 146: # define BULSPD 5 /* bullets movement speed */ 147: # define ISHOTS 15 148: # define NSHOTS 5 149: # define MAXNCSHOT 2 150: # define MAXDAM 10 151: # define MINDAM 5 152: # define STABDAM 2 153: 154: # define BULREQ 1 155: # define GRENREQ 9 156: # define SATREQ 25 157: # define BOMBREQ 49 158: # ifdef OOZE 159: # define SLIMEREQ 15 160: # define SSLIMEREQ 30 161: # define SLIMESPEED 5 162: # endif OOZE 163: # ifdef VOLCANO 164: # define LAVASPEED 2 165: # endif VOLCANO 166: 167: # define CLOAKLEN 20 168: # define SCANLEN (Nplayer * 20) 169: # define EXPLEN 4 170: 171: # ifdef FLY 172: # define _cloak_char(pp) (((pp)->p_cloak < 0) ? ' ' : '+') 173: # define _scan_char(pp) (((pp)->p_scan < 0) ? _cloak_char(pp) : '*') 174: # define stat_char(pp) (((pp)->p_flying < 0) ? _scan_char(pp) : FLYER) 175: # else FLY 176: # define _cloak_char(pp) (((pp)->p_cloak < 0) ? ' ' : '+') 177: # define stat_char(pp) (((pp)->p_scan < 0) ? _cloak_char(pp) : '*') 178: # endif FLY 179: 180: typedef int FLAG; 181: typedef struct bullet_def BULLET; 182: typedef struct expl_def EXPL; 183: typedef struct player_def PLAYER; 184: typedef struct ident_def IDENT; 185: typedef struct regen_def REGEN; 186: # ifdef INTERNET 187: typedef struct sockaddr_in SOCKET; 188: # else INTERNET 189: typedef struct sockaddr_un SOCKET; 190: # endif INTERNET 191: typedef struct sgttyb TTYB; 192: 193: struct ident_def { 194: char i_name[NAMELEN]; 195: long i_machine; 196: long i_uid; 197: int i_kills; 198: int i_entries; 199: float i_score; 200: IDENT *i_next; 201: }; 202: 203: struct player_def { 204: IDENT *p_ident; 205: int p_face; 206: char p_over; 207: int p_undershot; 208: # ifdef FLY 209: int p_flying; 210: int p_flyx, p_flyy; 211: # endif FLY 212: FILE *p_output; 213: int p_fd; 214: int p_mask; 215: int p_damage; 216: int p_damcap; 217: int p_ammo; 218: int p_ncshot; 219: int p_scan; 220: int p_cloak; 221: int p_x, p_y; 222: int p_ncount; 223: int p_nexec; 224: long p_nchar; 225: char p_death[MSGLEN]; 226: char p_maze[HEIGHT][WIDTH2]; 227: int p_curx, p_cury; 228: int p_lastx, p_lasty; 229: int p_changed; 230: char p_cbuf[BUFSIZ]; 231: }; 232: 233: struct bullet_def { 234: int b_x, b_y; 235: int b_face; 236: int b_charge; 237: char b_type; 238: char b_over; 239: PLAYER *b_owner; 240: IDENT *b_score; 241: FLAG b_expl; 242: BULLET *b_next; 243: }; 244: 245: struct expl_def { 246: int e_x, e_y; 247: char e_char; 248: EXPL *e_next; 249: }; 250: 251: struct regen_def { 252: int r_x, r_y; 253: REGEN *r_next; 254: }; 255: 256: /* 257: * external variables 258: */ 259: 260: extern FLAG Last_player; 261: 262: extern char Buf[BUFSIZ], Maze[HEIGHT][WIDTH2], Orig_maze[HEIGHT][WIDTH2]; 263: 264: extern char *Sock_name, *Driver; 265: 266: extern int errno, Have_inp, Nplayer, Num_fds, Socket; 267: extern long Fds_mask, Sock_mask; 268: 269: # ifdef INTERNET 270: extern int Test_port; 271: extern int Sock_port; 272: # else INTERNET 273: extern char *Sock_name; 274: # endif INTERNET 275: 276: # ifdef VOLCANO 277: extern int volcano; 278: # endif VOLCANO 279: 280: extern int See_over[NASCII]; 281: 282: extern BULLET *Bullets; 283: 284: extern EXPL *Expl[EXPLEN]; 285: 286: extern IDENT *Scores; 287: 288: extern PLAYER Player[MAXPL], *End_player; 289: 290: # ifdef MONITOR 291: extern FLAG Am_monitor; 292: extern PLAYER Monitor[MAXMON], *End_monitor; 293: # endif MONITOR 294: 295: /* 296: * function types 297: */ 298: 299: char *getenv(), *malloc(), *sprintf(), *strcpy(), *strncpy(); 300: 301: IDENT *get_ident(); 302: 303: int moveshots(); 304: 305: BULLET *is_bullet(), *create_shot(); 306: 307: PLAYER *play_at();