/* $NetBSD: hunt_common.h,v 1.5 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
* 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.
*/
/*
* There is no particular significance to the numbers assigned
* to Test_port. They're just random numbers greater than the
* range reserved for privileged sockets.
*/
#ifdef INTERNET
#define SOCK_FAMILY AF_INET
#define TEST_PORT (('h' << 8) | 't')
#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 WIRE_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
#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
#ifdef OOZE
#define SLIME_FACTOR 3
#define SLIMEREQ 5
#define SSLIMEREQ 10
#define SLIME2REQ 15
#define SLIME3REQ 20
#define MAXSLIME 4
#define SLIMESPEED 5
#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 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
#ifdef INTERNET
typedef struct sockaddr_in SOCKET;
#else
typedef struct sockaddr_un SOCKET;
#endif