-/* $NetBSD: hunt.h,v 1.19 2009/08/12 07:42:11 dholland Exp $ */
+/* $NetBSD: hunt.h,v 1.32 2021/05/02 12:50:45 rillig 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
+ *
+ * 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
+ *
+ * + 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
+ * + 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
+ * + 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
+ *
+ * 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 <stdbool.h>
#include <stdio.h>
#include <string.h>
-
-#ifdef LOG
#include <syslog.h>
-#endif
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/uio.h>
#include <sys/poll.h>
+#include <_types/_uint32_t.h>
-#ifdef INTERNET
-#include <netinet/in.h>
-#include <netdb.h>
-#include <arpa/inet.h>
-#include <net/if.h>
-#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
-
-/* 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 isplayer(c) (c == LEFTS || c == RIGHT ||\
- c == ABOVE || c == BELOW || c == FLYER)
-#else
-#define isplayer(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
+#include "hunt_common.h"
-#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[];
+extern const int shot_req[];
+extern const 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) : '+')
+extern const int slime_req[];
#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_name[WIRE_NAMELEN];
char i_team;
uint32_t i_machine;
uint32_t i_uid;
char b_over;
PLAYER *b_owner;
IDENT *b_score;
- FLAG b_expl;
+ bool b_expl;
BULLET *b_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 int Nplayer;
+extern int huntsock;
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;
#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) __dead;
-void bad_ver(void) __dead;
-void ce(PLAYER *);
-void cgoto(PLAYER *, int, int);
+/* in answer.c */
+bool answer(void);
+int rand_dir(void);
+
+/* in draw.c */
+void drawmaze(PLAYER *);
+void look(PLAYER *);
void check(PLAYER *, int, int);
+void showstat(PLAYER *);
+void drawplayer(PLAYER *, bool);
+void message(PLAYER *, const char *);
+
+/* in driver.c */
void checkdam(PLAYER *, PLAYER *, IDENT *, int, char);
-void clearwalls(void);
-void clear_eol(void);
-void clear_the_screen(void);
-void clrscr(PLAYER *);
+int rand_num(int);
+__dead void cleanup(int);
+
+/* in execute.c */
+void mon_execute(PLAYER *); /* ifdef MONITOR only */
+void execute(PLAYER *);
+void add_shot(int, int, int, char, int, PLAYER *, int, char);
BULLET *create_shot(int, int, int, char, int, int, PLAYER *,
IDENT *, int, char);
-void do_connect(char *, char, long);
-void do_message(void);
-void drawmaze(PLAYER *);
-void drawplayer(PLAYER *, FLAG);
-void execute(PLAYER *);
-void faketalk(void);
-void fixshots(int, int, char);
-void get_local_name(char *);
-int get_remote_name(char *);
-BULLET *is_bullet(int, int);
-void look(PLAYER *);
+
+/* in expl.c */
+void showexpl(int, int, char);
+void rollexpl(void);
+void clearwalls(void);
+
+/* in makemaze.c */
void makemaze(void);
-void message(PLAYER *, const char *);
-void mon_execute(PLAYER *);
+
+/* in shots.c */
void moveshots(void);
-void open_ctl(void);
-int opposite(int, char);
-void otto(int, int, char);
+PLAYER *play_at(int, int);
+bool opposite(int, char);
+BULLET *is_bullet(int, int);
+void fixshots(int, int, char);
+
+/* in support.c */
+__printflike(2, 3) void complain(int level, const char *fmt, ...);
+
+/* in terminal.c */
+void cgoto(PLAYER *, int, int);
void outch(PLAYER *, int);
void outstr(PLAYER *, const char *, int);
-PLAYER *play_at(int, int);
-void playit(void);
-void put_ch(char);
-void put_str(char *);
-int quit(int);
-int rand_dir(void);
-int rand_num(int);
-void rollexpl(void);
+void clrscr(PLAYER *);
+void ce(PLAYER *);
void sendcom(PLAYER *, int, ...);
-void showexpl(int, int, char);
-void showstat(PLAYER *);
-void cleanup(int) __dead;
-void intr(int);
-void tstp(int);