310 lines
5.9 KiB
C
310 lines
5.9 KiB
C
/* @(#)hunt.h 1.1 94/10/31 SMI; from UCB X.X XX/XX/XX */
|
|
|
|
/*
|
|
* 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 <stdio.h>
|
|
# ifndef OLDIPC
|
|
# include <sgtty.h>
|
|
# include <sys/types.h>
|
|
# include <sys/uio.h>
|
|
# else OLDIPC
|
|
# include <sys/localopts.h>
|
|
# include <sys/types.h>
|
|
# include <sys/netltoshort.h>
|
|
# endif OLDIPC
|
|
# include <sys/socket.h>
|
|
# ifdef INTERNET
|
|
# include <netinet/in.h>
|
|
# include <netdb.h>
|
|
# ifndef OLDIPC
|
|
# include <arpa/inet.h>
|
|
# endif !OLDIPC
|
|
# ifdef BROADCAST
|
|
# include <net/if.h>
|
|
# endif BROADCAST
|
|
# else INTERNET
|
|
# include <sys/un.h>
|
|
# 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();
|