root/games/hunt/include/hunt_common.h
/*      $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