/* * Hunt * Copyright (c) 1985 Conrad C. Huang, Gregory S. Couch, Kenneth C.R.C. Arnold * San Francisco, California * * Copyright (c) 1985 Regents of the University of California. * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ # include # ifndef OLDIPC # include # include # include # else OLDIPC # include # include # include # endif OLDIPC # include # ifdef INTERNET # include # include # ifndef OLDIPC # include # endif !OLDIPC # ifdef BROADCAST # include # endif BROADCAST # else INTERNET # include # endif INTERNET # ifdef INTERNET # define SOCK_FAMILY AF_INET # else INTERNET # define SOCK_FAMILY AF_UNIX # define AF_UNIX_HACK /* 4.2 hack; leaves files around */ # endif INTERNET # define ADDCH ('a' | 0200) # define MOVE ('m' | 0200) # define REFRESH ('r' | 0200) # define CLRTOEOL ('c' | 0200) # define ENDWIN ('e' | 0200) # define CLEAR ('C' | 0200) # define REDRAW ('R' | 0200) # define LAST_PLAYER ('l' | 0200) # define BELL ('b' | 0200) # define READY ('g' | 0200) /* * Choose MAXPL and MAXMON carefully. The screen is assumed to be * 23 lines high and will only tolerate (MAXPL == 12 && MAXMON == 0) * or (MAXPL + MAXMON <= 10). */ # define MAXPL 9 # ifdef MONITOR # define MAXMON 1 # endif MONITOR # define NAMELEN 20 # define MSGLEN 80 # define DECAY 50.0 # define NASCII 128 # ifndef REFLECT # ifndef RANDOM # define RANDOM # endif RANDOM # endif REFLECT # define WIDTH 59 # define WIDTH2 64 /* Next power of 2 >= WIDTH (for fast access) */ # define HEIGHT 23 # define UBOUND 1 # define DBOUND 22 # define LBOUND 1 # define RBOUND (WIDTH - 1) # define STAT_LABEL_COL 60 # define STAT_VALUE_COL 74 # define STAT_NAME_COL 61 # define STAT_SCAN_COL (STAT_NAME_COL + 5) # define STAT_NAME_ROW 0 # define STAT_AMMO_ROW 2 # define STAT_SCAN_ROW 3 # define STAT_CLOAK_ROW 4 # define STAT_GUN_ROW 5 # define STAT_DAM_ROW 7 # define STAT_KILL_ROW 8 # define STAT_PLAY_ROW 10 # ifdef MONITOR # define STAT_MON_ROW (STAT_PLAY_ROW + MAXPL + 1) # endif MONITOR # define STAT_NAME_LEN 16 # define DOOR '#' # define WALL1 '-' # define WALL2 '|' # define WALL3 '+' # ifdef REFLECT # define WALL4 '/' # define WALL5 '\\' # endif REFLECT # define KNIFE 'K' # define SHOT ':' # define GRENADE 'o' # define SATCHEL 'O' # define BOMB '@' # define MINE ';' # define GMINE 'g' # ifdef OOZE # define SLIME '$' # endif OOZE # ifdef VOLCANO # define LAVA '~' # endif VOLCANO # ifdef FLY # define FALL 'F' # endif FLY # define SPACE ' ' # define ABOVE 'i' # define BELOW '!' # define RIGHT '}' # define LEFTS '{' # ifdef FLY # define FLYER '&' # endif FLY # define NORTH 01 # define SOUTH 02 # define EAST 010 # define WEST 020 # ifndef TRUE # define TRUE 1 # define FALSE 0 # endif TRUE # ifndef CTRL # define CTRL(x) ('x' & 037) # endif CTRL # define BULSPD 5 /* bullets movement speed */ # define ISHOTS 15 # define NSHOTS 5 # define MAXNCSHOT 2 # define MAXDAM 10 # define MINDAM 5 # define STABDAM 2 # define BULREQ 1 # define GRENREQ 9 # define SATREQ 25 # define BOMBREQ 49 # ifdef OOZE # define SLIMEREQ 15 # define SSLIMEREQ 30 # define SLIMESPEED 5 # endif OOZE # ifdef VOLCANO # define LAVASPEED 2 # endif VOLCANO # define CLOAKLEN 20 # define SCANLEN (Nplayer * 20) # define EXPLEN 4 # ifdef FLY # define _cloak_char(pp) (((pp)->p_cloak < 0) ? ' ' : '+') # define _scan_char(pp) (((pp)->p_scan < 0) ? _cloak_char(pp) : '*') # define stat_char(pp) (((pp)->p_flying < 0) ? _scan_char(pp) : FLYER) # else FLY # define _cloak_char(pp) (((pp)->p_cloak < 0) ? ' ' : '+') # define stat_char(pp) (((pp)->p_scan < 0) ? _cloak_char(pp) : '*') # endif FLY typedef int FLAG; typedef struct bullet_def BULLET; typedef struct expl_def EXPL; typedef struct player_def PLAYER; typedef struct ident_def IDENT; typedef struct regen_def REGEN; # ifdef INTERNET typedef struct sockaddr_in SOCKET; # else INTERNET typedef struct sockaddr_un SOCKET; # endif INTERNET typedef struct sgttyb TTYB; struct ident_def { char i_name[NAMELEN]; long i_machine; long i_uid; int i_kills; int i_entries; float i_score; IDENT *i_next; }; struct player_def { IDENT *p_ident; int p_face; char p_over; int p_undershot; # ifdef FLY int p_flying; int p_flyx, p_flyy; # endif FLY FILE *p_output; int p_fd; int p_mask; int p_damage; int p_damcap; int p_ammo; int p_ncshot; int p_scan; int p_cloak; int p_x, p_y; int p_ncount; int p_nexec; long p_nchar; char p_death[MSGLEN]; char p_maze[HEIGHT][WIDTH2]; int p_curx, p_cury; int p_lastx, p_lasty; int p_changed; char p_cbuf[BUFSIZ]; }; struct bullet_def { int b_x, b_y; int b_face; int b_charge; char b_type; char b_over; PLAYER *b_owner; IDENT *b_score; FLAG b_expl; BULLET *b_next; }; struct expl_def { int e_x, e_y; char e_char; EXPL *e_next; }; struct regen_def { int r_x, r_y; REGEN *r_next; }; /* * external variables */ extern FLAG Last_player; extern char Buf[BUFSIZ], Maze[HEIGHT][WIDTH2], Orig_maze[HEIGHT][WIDTH2]; extern char *Sock_name, *Driver; extern int errno, Have_inp, Nplayer, Num_fds, Socket; extern long Fds_mask, Sock_mask; # ifdef INTERNET extern int Test_port; extern int Sock_port; # else INTERNET extern char *Sock_name; # endif INTERNET # ifdef VOLCANO extern int volcano; # endif VOLCANO extern int See_over[NASCII]; extern BULLET *Bullets; extern EXPL *Expl[EXPLEN]; extern IDENT *Scores; extern PLAYER Player[MAXPL], *End_player; # ifdef MONITOR extern FLAG Am_monitor; extern PLAYER Monitor[MAXMON], *End_monitor; # endif MONITOR /* * function types */ char *getenv(), *malloc(), *sprintf(), *strcpy(), *strncpy(); IDENT *get_ident(); int moveshots(); BULLET *is_bullet(), *create_shot(); PLAYER *play_at();