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