xref: /dragonfly/games/hunt/huntd/server.h (revision 09ac707a)
1 /*-
2  * Copyright (c) 1983-2003, Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  * 3. Neither the name of the University of California, San Francisco nor
15  *    the names of its contributors may be used to endorse or promote
16  *    products derived from this software without specific prior written
17  *    permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
20  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
22  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  *
31  * $OpenBSD: server.h,v 1.9 2004/01/16 00:13:19 espie Exp $
32  * $NetBSD: hunt.h,v 1.5 1998/09/13 15:27:28 hubertf Exp $
33  */
34 
35 
36 #include <stdio.h>
37 #include <sys/socket.h>
38 #include <sys/types.h>
39 
40 #ifndef __GNUC__
41 #define __attribute__(x)
42 #endif
43 
44 /*
45  * Choose MAXPL and MAXMON carefully.  The screen is assumed to be
46  * 23 lines high and will only tolerate (MAXPL == 17 && MAXMON == 0)
47  * or (MAXPL + MAXMON <= 16).
48  */
49 #define MAXPL		14
50 #define MAXMON		2
51 #if (MAXPL + MAXMON > 16)
52 #warning "MAXPL + MAXMON is excessive"
53 #endif
54 
55 #define MSGLEN		SCREEN_WIDTH
56 
57 #define UBOUND		1
58 #define DBOUND		(HEIGHT - 1)
59 #define LBOUND		1
60 #define RBOUND		(WIDTH - 1)
61 
62 #define NASCII		128
63 
64 /* Layout of the scoreboard: */
65 #define STAT_LABEL_COL	60
66 #define STAT_VALUE_COL	74
67 #define STAT_NAME_COL	61
68 #define STAT_SCAN_COL	(STAT_NAME_COL + 5)
69 #define STAT_AMMO_ROW	0
70 #define STAT_GUN_ROW	1
71 #define STAT_DAM_ROW	2
72 #define STAT_KILL_ROW	3
73 #define STAT_PLAY_ROW	5
74 #define STAT_MON_ROW	(STAT_PLAY_ROW + MAXPL + 1)
75 #define STAT_NAME_LEN	18
76 
77 /* Number of boots: */
78 #define NBOOTS		2
79 
80 /* Bitmask of directions */
81 #define NORTH		01
82 #define SOUTH		02
83 #define EAST		010
84 #define WEST		020
85 
86 # undef CTRL
87 #define CTRL(x)	((x) & 037)
88 
89 #define BULREQ		1		/* 0 */
90 #define GRENREQ		9		/* 1 */
91 #define SATREQ		25		/* 2 */
92 #define BOMB7REQ	49		/* 3 */
93 #define BOMB9REQ	81		/* 4 */
94 #define BOMB11REQ	121		/* 5 */
95 #define BOMB13REQ	169		/* 6 */
96 #define BOMB15REQ	225		/* 7 */
97 #define BOMB17REQ	289		/* 8 */
98 #define BOMB19REQ	361		/* 9 */
99 #define BOMB21REQ	441		/* 10 */
100 #define MAXBOMB				   11
101 
102 #define SLIMEREQ	5		/* 0 */
103 #define SSLIMEREQ	10		/* 1 */
104 #define SLIME2REQ	15		/* 2 */
105 #define SLIME3REQ	20		/* 3 */
106 #define MAXSLIME			   4
107 
108 #define EXPLEN		16
109 
110 #define _scan_char(pp)	(((pp)->p_scan < 0) ? ' ' : '*')
111 #define _cloak_char(pp)	(((pp)->p_cloak < 0) ? _scan_char(pp) : '+')
112 #define stat_char(pp)	(((pp)->p_flying < 0) ? _cloak_char(pp) : FLYER)
113 
114 typedef struct bullet_def	BULLET;
115 typedef struct expl_def		EXPL;
116 typedef struct player_def	PLAYER;
117 typedef struct ident_def	IDENT;
118 typedef struct regen_def	REGEN;
119 
120 #define	ALL_PLAYERS		((PLAYER *)1)
121 
122 struct ident_def {
123 	char	i_name[NAMELEN];
124 	char	i_team;
125 	u_int32_t i_machine;
126 	uid_t	i_uid;
127 	float	i_kills;
128 	int	i_entries;
129 	float	i_score;
130 	int	i_absorbed;
131 	int	i_faced;
132 	int	i_shot;
133 	int	i_robbed;
134 	int	i_slime;
135 	int	i_missed;
136 	int	i_ducked;
137 	int	i_gkills, i_bkills, i_deaths, i_stillb, i_saved;
138 	IDENT	*i_next;
139 };
140 
141 struct player_def {
142 	IDENT	*p_ident;
143 	char	p_over;
144 	int	p_face;
145 	int	p_undershot;
146 	int	p_flying;
147 	int	p_flyx, p_flyy;
148 	int	p_nboots;
149 	FILE	*p_output;
150 	int	p_fd;
151 	int	p_mask;
152 	int	p_damage;
153 	int	p_damcap;
154 	int	p_ammo;
155 	int	p_ncshot;
156 	int	p_scan;
157 	int	p_cloak;
158 	int	p_x, p_y;
159 	int	p_ncount;
160 	int	p_nexec;
161 	long	p_nchar;
162 	char	p_death[MSGLEN];
163 	char	p_maze[HEIGHT][WIDTH2];
164 	int	p_curx, p_cury;
165 	int	p_lastx, p_lasty;
166 	char	p_cbuf[BUFSIZ];
167 };
168 
169 struct bullet_def {
170 	int	b_x, b_y;
171 	int	b_face;
172 	int	b_charge;
173 	char	b_type;
174 	char	b_size;
175 	char	b_over;
176 	PLAYER	*b_owner;
177 	IDENT	*b_score;
178 	FLAG	b_expl;
179 	BULLET	*b_next;
180 };
181 
182 struct expl_def {
183 	int	e_x, e_y;
184 	char	e_char;
185 	EXPL	*e_next;
186 };
187 
188 struct regen_def {
189 	int	r_x, r_y;
190 	REGEN	*r_next;
191 };
192 
193 struct spawn {
194 	int		fd;
195 	int		reading_msg;
196 	struct sockaddr source;
197 	socklen_t	sourcelen;
198 	uid_t		uid;
199 	char		name[NAMELEN+1];
200 	u_int8_t	team;
201 	u_int32_t	enter_status;
202 	char		ttyname[NAMELEN];
203 	u_int32_t	mode;
204 	char		msg[BUFSIZ];
205 	int		msglen;
206 	struct spawn *	next;
207 	struct spawn **	prevnext;
208 	int		inlen;
209 	char		inbuf[ sizeof (u_int32_t) + NAMELEN +
210 			       sizeof (u_int8_t) + sizeof (u_int32_t) +
211 			       NAMELEN + sizeof (u_int32_t) ];
212 };
213 
214 extern struct spawn *	Spawn;
215 
216 extern int	Socket;
217 
218 /* answer.c */
219 void	answer_first(void);
220 int	answer_next(struct spawn *);
221 int	rand_dir(void);
222 void	answer_info(FILE *);
223 
224 /* draw.c */
225 void	drawmaze(PLAYER *);
226 void	look(PLAYER *);
227 void	check(PLAYER *, int, int);
228 void	showstat(PLAYER *);
229 void	drawplayer(PLAYER *, FLAG);
230 void	message(PLAYER *, const char *);
231 
232 /* driver.c */
233 int	rand_num(int);
234 void	checkdam(PLAYER *, PLAYER *, IDENT *, int, char);
235 void	cleanup(int) __dead2;
236 
237 /* execute.c */
238 void	mon_execute(PLAYER *);
239 void	execute(PLAYER *);
240 void	add_shot(int, int, int, char, int, PLAYER *, int, char);
241 BULLET *create_shot(int, int, int, char, int, int, PLAYER *, IDENT *,
242 	    int, char);
243 void	ammo_update(PLAYER *);
244 
245 /* expl.c */
246 void	showexpl(int, int, char);
247 void	rollexpl(void);
248 void	clearwalls(void);
249 int	can_rollexpl(void);
250 
251 /* makemaze.c */
252 void	makemaze(void);
253 
254 /* shots.c */
255 int	can_moveshots(void);
256 void	moveshots(void);
257 PLAYER *play_at(int, int);
258 int	opposite(int, char);
259 BULLET *is_bullet(int, int);
260 void	fixshots(int, int, char);
261 
262 /* terminal.c */
263 void	cgoto(PLAYER *, int, int);
264 void	outch(PLAYER *, char);
265 void	outstr(PLAYER *, const char *, int);
266 void	outyx(PLAYER *, int, int, const char *, ...)
267 			__attribute__((format (printf, 4, 5)));
268 void	clrscr(PLAYER *);
269 void	ce(PLAYER *);
270 void	sendcom(PLAYER *, int, ...);
271 void	flush(PLAYER *);
272 void	logit(int, const char *, ...)
273 			__attribute__((format (printf, 2, 3)));
274 void	logx(int, const char *, ...)
275 			__attribute__((format (printf, 2, 3)));
276 
277 /* extern.c */
278 extern FLAG	Am_monitor;
279 extern char	Buf[BUFSIZ];
280 extern char	Maze[HEIGHT][WIDTH2];
281 extern char	Orig_maze[HEIGHT][WIDTH2];
282 extern fd_set	Fds_mask;
283 extern fd_set	Have_inp;
284 extern int	Nplayer;
285 extern int	Num_fds;
286 extern int	Status;
287 extern int	See_over[NASCII];
288 extern BULLET *	Bullets;
289 extern EXPL *	Expl[EXPLEN];
290 extern EXPL *	Last_expl;
291 extern PLAYER	Player[MAXPL];
292 extern PLAYER *	End_player;
293 extern PLAYER	Boot[NBOOTS];
294 extern IDENT *	Scores;
295 extern PLAYER	Monitor[MAXMON];
296 extern PLAYER *	End_monitor;
297 extern int	volcano;
298 extern int	shot_req[MAXBOMB];
299 extern int	shot_type[MAXBOMB];
300 extern int	slime_req[MAXSLIME];
301