123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485 |
- /* $NetBSD: hunt.h,v 1.11 2004/02/08 22:23:50 jsm Exp $ */
- /*
- * Copyright (c) 1983-2003, Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * + Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * + Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * + Neither the name of the University of California, San Francisco nor
- * the names of its contributors may be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- # include "bsd.h"
- # include <errno.h>
- # include <stdio.h>
- # include <string.h>
- # ifdef LOG
- # include <syslog.h>
- # endif
- # if !defined(TERMINFO) && BSD_RELEASE < 44
- # include <sgtty.h>
- # else
- # include <sys/ioctl.h>
- # endif
- # include <sys/types.h>
- # include <sys/uio.h>
- # include <sys/poll.h>
- # ifdef INTERNET
- # include <netinet/in.h>
- # include <netdb.h>
- # include <arpa/inet.h>
- # ifdef BROADCAST
- # include <net/if.h>
- # endif
- # else
- # include <sys/un.h>
- # endif
- # ifdef INTERNET
- # define SOCK_FAMILY AF_INET
- # else
- # define SOCK_FAMILY AF_UNIX
- # define AF_UNIX_HACK /* 4.2 hack; leaves files around */
- # endif
- /*
- * Preprocessor define dependencies
- */
- # if defined(VOLCANO) && !defined(OOZE)
- # define OOZE
- # endif
- # if defined(BOOTS) && !defined(FLY)
- # define FLY
- # endif
- # if !defined(REFLECT) && !defined(RANDOM)
- # define RANDOM
- # endif
- # ifdef TERMINFO
- /* mvcur() in terminfo needs the curses library to be initialized to not
- * coredump, so give up and use it. */
- # define USE_CURSES
- # endif
- /* decrement version number for each change in startup protocol */
- # define HUNT_VERSION -1
- # 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 == 17 && MAXMON == 0)
- * or (MAXPL + MAXMON <= 16).
- */
- # ifdef MONITOR
- # define MAXPL 15
- # define MAXMON 1
- # else
- # define MAXPL 17
- # define MAXMON 0
- # endif
- # define SHORTLEN 2 /* sizeof (network short) */
- # define LONGLEN 4 /* sizeof (network long) */
- # define NAMELEN 20
- # define MSGLEN SCREEN_WIDTH
- # define DECAY 50.0
- # define NASCII 128
- # define WIDTH 51
- # define WIDTH2 64 /* Next power of 2 >= WIDTH (for fast access) */
- # define HEIGHT 23
- # define UBOUND 1
- # define DBOUND (HEIGHT - 1)
- # define LBOUND 1
- # define RBOUND (WIDTH - 1)
- # define SCREEN_HEIGHT 24
- # define SCREEN_WIDTH 80
- # define SCREEN_WIDTH2 128 /* Next power of 2 >= SCREEN_WIDTH */
- # 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_AMMO_ROW 0
- # define STAT_GUN_ROW 1
- # define STAT_DAM_ROW 2
- # define STAT_KILL_ROW 3
- # define STAT_PLAY_ROW 5
- # ifdef MONITOR
- # define STAT_MON_ROW (STAT_PLAY_ROW + MAXPL + 1)
- # endif
- # define STAT_NAME_LEN 18
- # define DOOR '#'
- # define WALL1 '-'
- # define WALL2 '|'
- # define WALL3 '+'
- # ifdef REFLECT
- # define WALL4 '/'
- # define WALL5 '\\'
- # endif
- # define KNIFE 'K'
- # define SHOT ':'
- # define GRENADE 'o'
- # define SATCHEL 'O'
- # define BOMB '@'
- # define MINE ';'
- # define GMINE 'g'
- # ifdef OOZE
- # define SLIME '$'
- # endif
- # ifdef VOLCANO
- # define LAVA '~'
- # endif
- # ifdef DRONE
- # define DSHOT '?'
- # endif
- # ifdef FLY
- # define FALL 'F'
- # endif
- # ifdef BOOTS
- # define NBOOTS 2
- # define BOOT 'b'
- # define BOOT_PAIR 'B'
- # endif
- # define SPACE ' '
- # define ABOVE 'i'
- # define BELOW '!'
- # define RIGHT '}'
- # define LEFTS '{'
- # ifdef FLY
- # define FLYER '&'
- # define is_player(c) (c == LEFTS || c == RIGHT ||\
- c == ABOVE || c == BELOW || c == FLYER)
- # else
- # define is_player(c) (c == LEFTS || c == RIGHT ||\
- c == ABOVE || c == BELOW)
- # endif
- # define NORTH 01
- # define SOUTH 02
- # define EAST 010
- # define WEST 020
- # ifndef TRUE
- # define TRUE 1
- # define FALSE 0
- # endif
- # undef CTRL
- # define CTRL(x) ((x) & 037)
- # 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 BOMB7REQ 49
- # define BOMB9REQ 81
- # define BOMB11REQ 121
- # define BOMB13REQ 169
- # define BOMB15REQ 225
- # define BOMB17REQ 289
- # define BOMB19REQ 361
- # define BOMB21REQ 441
- # define MAXBOMB 11
- # ifdef DRONE
- # define MINDSHOT 2 /* At least a satchel bomb */
- # endif
- extern int shot_req[];
- extern int shot_type[];
- # ifdef OOZE
- # define SLIME_FACTOR 3
- # define SLIMEREQ 5
- # define SSLIMEREQ 10
- # define SLIME2REQ 15
- # define SLIME3REQ 20
- # define MAXSLIME 4
- # define SLIMESPEED 5
- extern int slime_req[];
- # endif
- # ifdef VOLCANO
- # define LAVASPEED 1
- # endif
- # define CLOAKLEN 20
- # define SCANLEN (Nplayer * 20)
- # define EXPLEN 4
- # define Q_QUIT 0
- # define Q_CLOAK 1
- # define Q_FLY 2
- # define Q_SCAN 3
- # define Q_MESSAGE 4
- # define C_PLAYER 0
- # define C_MONITOR 1
- # define C_MESSAGE 2
- # define C_SCORES 3
- # ifdef MONITOR
- # define C_TESTMSG() (Query_driver ? C_MESSAGE :\
- (Show_scores ? C_SCORES :\
- (Am_monitor ? C_MONITOR :\
- C_PLAYER)))
- # else
- # define C_TESTMSG() (Show_scores ? C_SCORES :\
- (Query_driver ? C_MESSAGE :\
- C_PLAYER))
- # endif
- # ifdef FLY
- # define _scan_char(pp) (((pp)->p_scan < 0) ? ' ' : '*')
- # define _cloak_char(pp) (((pp)->p_cloak < 0) ? _scan_char(pp) : '+')
- # define stat_char(pp) (((pp)->p_flying < 0) ? _cloak_char(pp) : FLYER)
- # else
- # define _scan_char(pp) (((pp)->p_scan < 0) ? ' ' : '*')
- # define stat_char(pp) (((pp)->p_cloak < 0) ? _scan_char(pp) : '+')
- # endif
- 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
- typedef struct sockaddr_un SOCKET;
- # endif
- struct ident_def {
- char i_name[NAMELEN];
- char i_team;
- long i_machine;
- long i_uid;
- float i_kills;
- int i_entries;
- float i_score;
- int i_absorbed;
- int i_faced;
- int i_shot;
- int i_robbed;
- int i_slime;
- int i_missed;
- int i_ducked;
- int i_gkills, i_bkills, i_deaths, i_stillb, i_saved;
- IDENT *i_next;
- };
- struct player_def {
- IDENT *p_ident;
- char p_over;
- int p_face;
- int p_undershot;
- # ifdef FLY
- int p_flying;
- int p_flyx, p_flyy;
- # endif
- # ifdef BOOTS
- int p_nboots;
- # endif
- 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;
- char p_cbuf[BUFSIZ];
- };
- struct bullet_def {
- int b_x, b_y;
- int b_face;
- int b_charge;
- char b_type;
- char b_size;
- 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 const char *Driver;
- extern int Nplayer, Socket, Status;
- extern struct pollfd fdset[];
- # ifdef INTERNET
- extern u_short Test_port;
- # else
- extern char *Sock_name, *Stat_name;
- # endif
- # ifdef VOLCANO
- extern int volcano;
- # endif
- extern int See_over[NASCII];
- extern BULLET *Bullets;
- extern EXPL *Expl[EXPLEN];
- extern EXPL *Last_expl;
- extern IDENT *Scores;
- extern PLAYER Player[MAXPL], *End_player;
- # ifdef BOOTS
- extern PLAYER Boot[NBOOTS];
- # endif
- # ifdef MONITOR
- extern FLAG Am_monitor;
- extern PLAYER Monitor[MAXMON], *End_monitor;
- # endif
- # ifdef INTERNET
- extern char *Send_message;
- # endif
- extern char map_key[256];
- extern FLAG no_beep;
- /*
- * function types
- */
- void add_shot(int, int, int, char, int, PLAYER *, int, char);
- int answer(void);
- void bad_con(void) __attribute__((__noreturn__));
- void bad_ver(void) __attribute__((__noreturn__));
- int broadcast_vec(int, struct sockaddr **);
- void ce(PLAYER *);
- void cgoto(PLAYER *, int, int);
- void check(PLAYER *, int, int);
- void checkdam(PLAYER *, PLAYER *, IDENT *, int, char);
- void clearwalls(void);
- void clear_eol(void);
- void clear_the_screen(void);
- void clrscr(PLAYER *);
- BULLET *create_shot(int, int, int, char, int, int, PLAYER *,
- IDENT *, int, char);
- void do_connect(const char *, char, long);
- void do_message(void);
- void drawmaze(PLAYER *);
- void drawplayer(PLAYER *, FLAG);
- void drawstatus(PLAYER *);
- void execute(PLAYER *);
- void faketalk(void);
- void find_driver(FLAG);
- void fixshots(int, int, char);
- IDENT *get_ident(u_long, u_long, const char *, char);
- void get_local_name(const char *);
- int get_remote_name(char *);
- BULLET *is_bullet(int, int);
- void look(PLAYER *);
- void makemaze(void);
- void message(PLAYER *, const char *);
- void mon_execute(PLAYER *);
- void moveshots(void);
- void open_ctl(void);
- int opposite(int, char);
- void otto(int, int, char);
- void outch(PLAYER *, int);
- void outstr(PLAYER *, const char *, int);
- int player_sym(const PLAYER *, int, int);
- PLAYER *play_at(int, int);
- void playit(void);
- void put_ch(char);
- # ifndef USE_CURSES
- void put_str(const char *);
- # endif
- int quit(int);
- int rand_dir(void);
- int rand_num(int);
- void redraw_screen(void);
- void rmnl(char *);
- void rollexpl(void);
- void see(PLAYER *, int);
- void sendcom(PLAYER *, int, ...);
- void showexpl(int, int, char);
- void showstat(PLAYER *);
- void start_driver(void);
- void stmonitor(PLAYER *);
- void stplayer(PLAYER *, int);
- char translate(char);
- SIGNAL_TYPE cleanup(int) __attribute__((__noreturn__));
- SIGNAL_TYPE intr(int);
- SIGNAL_TYPE sigalrm(int);
- SIGNAL_TYPE sigemt(int) __attribute__((__noreturn__));
- SIGNAL_TYPE sigterm(int) __attribute__((__noreturn__));
- SIGNAL_TYPE sigusr1(int) __attribute__((__noreturn__));
- SIGNAL_TYPE tstp(int);
|