BSD 4_4_Lite2 development
[unix-history] / usr / src / contrib / hunt / hunt.h
CommitLineData
5ae73570
C
1/*
2 * Hunt
3 * Copyright (c) 1985 Conrad C. Huang, Gregory S. Couch, Kenneth C.R.C. Arnold
4 * San Francisco, California
5 */
6
7# include "bsd.h"
8
9# include <stdio.h>
10# include <string.h>
11# ifdef LOG
12# include <syslog.h>
13# endif
14# if !defined(TERMINFO) && BSD_RELEASE < 44
15# include <sgtty.h>
16# else
17# include <sys/ioctl.h>
18# endif
19# include <sys/types.h>
20# include <sys/uio.h>
21# include <sys/socket.h>
22# ifdef INTERNET
23# include <netinet/in.h>
24# include <netdb.h>
25# include <arpa/inet.h>
26# ifdef BROADCAST
27# include <net/if.h>
28# endif
29# else
30# include <sys/un.h>
31# endif
32
33# ifdef INTERNET
34# define SOCK_FAMILY AF_INET
35# else
36# define SOCK_FAMILY AF_UNIX
37# define AF_UNIX_HACK /* 4.2 hack; leaves files around */
38# endif
39
40/*
41 * Preprocessor define dependencies
42 */
43# if defined(VOLCANO) && !defined(OOZE)
44# define OOZE
45# endif
46# if defined(BOOTS) && !defined(FLY)
47# define FLY
48# endif
49# if !defined(REFLECT) && !defined(RANDOM)
50# define RANDOM
51# endif
52# ifdef TERMINFO
53/* mvcur() in terminfo needs the curses library to be initialized to not
54 * coredump, so give up and use it. */
55# define USE_CURSES
56# endif
57
58/* decrement version number for each change in startup protocol */
59# define HUNT_VERSION -1
60
61# define ADDCH ('a' | 0200)
62# define MOVE ('m' | 0200)
63# define REFRESH ('r' | 0200)
64# define CLRTOEOL ('c' | 0200)
65# define ENDWIN ('e' | 0200)
66# define CLEAR ('C' | 0200)
67# define REDRAW ('R' | 0200)
68# define LAST_PLAYER ('l' | 0200)
69# define BELL ('b' | 0200)
70# define READY ('g' | 0200)
71
72/*
73 * Choose MAXPL and MAXMON carefully. The screen is assumed to be
74 * 23 lines high and will only tolerate (MAXPL == 17 && MAXMON == 0)
75 * or (MAXPL + MAXMON <= 16).
76 */
77# ifdef MONITOR
78# define MAXPL 15
79# define MAXMON 1
80# else
81# define MAXPL 17
82# endif
83# define SHORTLEN 2 /* sizeof (network short) */
84# define LONGLEN 4 /* sizeof (network long) */
85# define NAMELEN 20
86# define MSGLEN SCREEN_WIDTH
87# define DECAY 50.0
88
89# define NASCII 128
90
91# define WIDTH 51
92# define WIDTH2 64 /* Next power of 2 >= WIDTH (for fast access) */
93# define HEIGHT 23
94# define UBOUND 1
95# define DBOUND (HEIGHT - 1)
96# define LBOUND 1
97# define RBOUND (WIDTH - 1)
98
99# define SCREEN_HEIGHT 24
100# define SCREEN_WIDTH 80
101# define SCREEN_WIDTH2 128 /* Next power of 2 >= SCREEN_WIDTH */
102
103# define STAT_LABEL_COL 60
104# define STAT_VALUE_COL 74
105# define STAT_NAME_COL 61
106# define STAT_SCAN_COL (STAT_NAME_COL + 5)
107# define STAT_AMMO_ROW 0
108# define STAT_GUN_ROW 1
109# define STAT_DAM_ROW 2
110# define STAT_KILL_ROW 3
111# define STAT_PLAY_ROW 5
112# ifdef MONITOR
113# define STAT_MON_ROW (STAT_PLAY_ROW + MAXPL + 1)
114# endif
115# define STAT_NAME_LEN 18
116
117# define DOOR '#'
118# define WALL1 '-'
119# define WALL2 '|'
120# define WALL3 '+'
121# ifdef REFLECT
122# define WALL4 '/'
123# define WALL5 '\\'
124# endif
125# define KNIFE 'K'
126# define SHOT ':'
127# define GRENADE 'o'
128# define SATCHEL 'O'
129# define BOMB '@'
130# define MINE ';'
131# define GMINE 'g'
132# ifdef OOZE
133# define SLIME '$'
134# endif
135# ifdef VOLCANO
136# define LAVA '~'
137# endif
138# ifdef DRONE
139# define DSHOT '?'
140# endif
141# ifdef FLY
142# define FALL 'F'
143# endif
144# ifdef BOOTS
145# define NBOOTS 2
146# define BOOT 'b'
147# define BOOT_PAIR 'B'
148# endif
149# define SPACE ' '
150
151# define ABOVE 'i'
152# define BELOW '!'
153# define RIGHT '}'
154# define LEFTS '{'
155# ifdef FLY
156# define FLYER '&'
157# define isplayer(c) (c == LEFTS || c == RIGHT ||\
158 c == ABOVE || c == BELOW || c == FLYER)
159# else
160# define isplayer(c) (c == LEFTS || c == RIGHT ||\
161 c == ABOVE || c == BELOW)
162# endif
163
164# define NORTH 01
165# define SOUTH 02
166# define EAST 010
167# define WEST 020
168
169# ifndef TRUE
170# define TRUE 1
171# define FALSE 0
172# endif
173# undef CTRL
174# define CTRL(x) ((x) & 037)
175
176# define BULSPD 5 /* bullets movement speed */
177# define ISHOTS 15
178# define NSHOTS 5
179# define MAXNCSHOT 2
180# define MAXDAM 10
181# define MINDAM 5
182# define STABDAM 2
183
184# define BULREQ 1
185# define GRENREQ 9
186# define SATREQ 25
187# define BOMB7REQ 49
188# define BOMB9REQ 81
189# define BOMB11REQ 121
190# define BOMB13REQ 169
191# define BOMB15REQ 225
192# define BOMB17REQ 289
193# define BOMB19REQ 361
194# define BOMB21REQ 441
195# define MAXBOMB 11
196# ifdef DRONE
197# define MINDSHOT 2 /* At least a satchel bomb */
198# endif
199extern int shot_req[];
200extern int shot_type[];
201# ifdef OOZE
202# define SLIME_FACTOR 3
203# define SLIMEREQ 5
204# define SSLIMEREQ 10
205# define SLIME2REQ 15
206# define SLIME3REQ 20
207# define MAXSLIME 4
208# define SLIMESPEED 5
209extern int slime_req[];
210# endif
211# ifdef VOLCANO
212# define LAVASPEED 1
213# endif
214
215# define CLOAKLEN 20
216# define SCANLEN (Nplayer * 20)
217# define EXPLEN 4
218
219# define Q_QUIT 0
220# define Q_CLOAK 1
221# define Q_FLY 2
222# define Q_SCAN 3
223# define Q_MESSAGE 4
224
225# define C_PLAYER 0
226# define C_MONITOR 1
227# define C_MESSAGE 2
228# define C_SCORES 3
229
230# ifdef MONITOR
231# define C_TESTMSG() (Query_driver ? C_MESSAGE :\
232 (Show_scores ? C_SCORES :\
233 (Am_monitor ? C_MONITOR :\
234 C_PLAYER)))
235# else
236# define C_TESTMSG() (Show_scores ? C_SCORES :\
237 (Query_driver ? C_MESSAGE :\
238 C_PLAYER))
239# endif
240
241# ifdef FLY
242# define _scan_char(pp) (((pp)->p_scan < 0) ? ' ' : '*')
243# define _cloak_char(pp) (((pp)->p_cloak < 0) ? _scan_char(pp) : '+')
244# define stat_char(pp) (((pp)->p_flying < 0) ? _cloak_char(pp) : FLYER)
245# else
246# define _scan_char(pp) (((pp)->p_scan < 0) ? ' ' : '*')
247# define stat_char(pp) (((pp)->p_cloak < 0) ? _scan_char(pp) : '+')
248# endif
249
250typedef int FLAG;
251typedef struct bullet_def BULLET;
252typedef struct expl_def EXPL;
253typedef struct player_def PLAYER;
254typedef struct ident_def IDENT;
255typedef struct regen_def REGEN;
256# ifdef INTERNET
257typedef struct sockaddr_in SOCKET;
258# else
259typedef struct sockaddr_un SOCKET;
260# endif
261typedef struct sgttyb TTYB;
262
263struct ident_def {
264 char i_name[NAMELEN];
265 char i_team;
266 long i_machine;
267 long i_uid;
268 float i_kills;
269 int i_entries;
270 float i_score;
271 int i_absorbed;
272 int i_faced;
273 int i_shot;
274 int i_robbed;
275 int i_slime;
276 int i_missed;
277 int i_ducked;
278 int i_gkills, i_bkills, i_deaths, i_stillb, i_saved;
279 IDENT *i_next;
280};
281
282struct player_def {
283 IDENT *p_ident;
284 char p_over;
285 int p_face;
286 int p_undershot;
287# ifdef FLY
288 int p_flying;
289 int p_flyx, p_flyy;
290# endif
291# ifdef BOOTS
292 int p_nboots;
293# endif
294 FILE *p_output;
295 int p_fd;
296 int p_mask;
297 int p_damage;
298 int p_damcap;
299 int p_ammo;
300 int p_ncshot;
301 int p_scan;
302 int p_cloak;
303 int p_x, p_y;
304 int p_ncount;
305 int p_nexec;
306 long p_nchar;
307 char p_death[MSGLEN];
308 char p_maze[HEIGHT][WIDTH2];
309 int p_curx, p_cury;
310 int p_lastx, p_lasty;
311 char p_cbuf[BUFSIZ];
312};
313
314struct bullet_def {
315 int b_x, b_y;
316 int b_face;
317 int b_charge;
318 char b_type;
319 char b_size;
320 char b_over;
321 PLAYER *b_owner;
322 IDENT *b_score;
323 FLAG b_expl;
324 BULLET *b_next;
325};
326
327struct expl_def {
328 int e_x, e_y;
329 char e_char;
330 EXPL *e_next;
331};
332
333struct regen_def {
334 int r_x, r_y;
335 REGEN *r_next;
336};
337
338/*
339 * external variables
340 */
341
342extern FLAG Last_player;
343
344extern char Buf[BUFSIZ], Maze[HEIGHT][WIDTH2], Orig_maze[HEIGHT][WIDTH2];
345
346extern char *Sock_name, *Driver;
347
348extern int errno, Have_inp, Nplayer, Num_fds, Socket, Status;
349extern long Fds_mask, Sock_mask, Stat_mask;
350
351# ifdef INTERNET
352extern u_short Test_port;
353# else
354extern char *Sock_name;
355# endif
356
357# ifdef VOLCANO
358extern int volcano;
359# endif
360
361extern int See_over[NASCII];
362
363extern BULLET *Bullets;
364
365extern EXPL *Expl[EXPLEN];
366extern EXPL *Last_expl;
367
368extern IDENT *Scores;
369
370extern PLAYER Player[MAXPL], *End_player;
371# ifdef BOOTS
372extern PLAYER Boot[NBOOTS];
373# endif
374
375# ifdef MONITOR
376extern FLAG Am_monitor;
377extern PLAYER Monitor[MAXMON], *End_monitor;
378# endif
379
380# ifdef INTERNET
381extern char *Send_message;
382# endif
383
384extern char map_key[256];
385extern FLAG no_beep;
386
387/*
388 * function types
389 */
390
391extern char *getenv();
392extern void *malloc(), *realloc();
393
394extern IDENT *get_ident();
395
396extern int moveshots();
397
398extern BULLET *is_bullet(), *create_shot();
399
400extern PLAYER *play_at();