home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / demos / audio / bz / bz.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-02  |  8.4 KB  |  310 lines

  1. /*
  2.  * Copyright (C) 1992, 1993, 1994, Silicon Graphics, Inc.
  3.  * All Rights Reserved.
  4.  *
  5.  * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  6.  * the contents of this file may not be disclosed to third parties, copied or
  7.  * duplicated in any form, in whole or in part, without the prior written
  8.  * permission of Silicon Graphics, Inc.
  9.  *
  10.  * RESTRICTED RIGHTS LEGEND:
  11.  * Use, duplication or disclosure by the Government is subject to restrictions
  12.  * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  13.  * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  14.  * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  15.  * rights reserved under the Copyright Laws of the United States.
  16.  */
  17. /***************************************************************************
  18.  *
  19.  * @(#) - BZ - Multiplayer tank game.
  20.  *
  21.  * $Id: bz.h,v 1.5 1993/08/11 19:45:22 adele Exp $
  22.  *
  23.  *                    Chris Fouts - Silicon Graphics, Inc.
  24.  *                    October, 1991
  25.  **************************************************************************/
  26.  
  27. #if !defined(BZ_H)
  28. #include <sys/time.h>
  29. #include <time.h>
  30. #include <X11/X.h>
  31.  
  32. #define BZ_H
  33. /*
  34.  * Network stuff.  NOTE: these values are chosen not to collide with known
  35.  * multicast protocols and ports, but they might be wrong...
  36.  */
  37. #define BZ_SERVICE        "sgi-bznet"
  38. #define BZ_GROUP        "224.0.1.2"
  39. #define BZ_MIN_TTL        1                /* TTL == 1, don't forward */
  40. #define BZ_DEFAULT_TTL    8
  41. #define BZ_MAX_TTL        32                /* don't go beyond site */
  42.  
  43. #define    MAIN_VIEW_MAP    0
  44. #define    RADAR_VIEW_MAP    1
  45. #define    BASE_VIEW_MAP    2
  46.  
  47. #define    FIELD_SIZE        1000.f
  48. #define OBJECT_SPACING    125
  49.  
  50. #define    RED_FLAG            0
  51. #define    BLUE_FLAG            1
  52. #define    N_FLAGS                2
  53. #define    FLAG_HOME_PERIM        30.f
  54. #define    FLAG_HOME_INSET        200.f
  55. #define    RED_FLAG_HOME_X        (  FIELD_SIZE - FLAG_HOME_PERIM - FLAG_HOME_INSET )
  56. #define    RED_FLAG_HOME_Y        (  FIELD_SIZE - FLAG_HOME_PERIM - FLAG_HOME_INSET )
  57. #define    BLUE_FLAG_HOME_X    ( -FIELD_SIZE + FLAG_HOME_PERIM + FLAG_HOME_INSET )
  58. #define    BLUE_FLAG_HOME_Y    ( -FIELD_SIZE + FLAG_HOME_PERIM + FLAG_HOME_INSET )
  59. #define    FLAG_MINE_RADIUS    75.f
  60. #define    FLAG_MINE_RADIUS_2    ( 75.f * 75.f )
  61.  
  62. #define    REG_MINE_RADIUS        15.f        /* regular mine radius */
  63. #define    DET_MINE_RADIUS        40.f        /* detonated mine radius */
  64.  
  65. #define    FLAG_BONUS            500
  66.  
  67. #define    RED_FLAG_BIT        0x01
  68. #define    BLUE_FLAG_BIT        0x02
  69. #define    RESET_FLAG_BIT        0x04
  70.  
  71. #define    HAS_RED_FLAG(player)    ((player).team_flag & RED_FLAG_BIT )
  72. #define    HAS_BLUE_FLAG(player)    ((player).team_flag & BLUE_FLAG_BIT )
  73. #define    HAS_A_FLAG(player)        ((player).team_flag & ( RED_FLAG_BIT | BLUE_FLAG_BIT ) )
  74. #define    LOST_FLAG(player)        ((player).team_flag & RESET_FLAG_BIT )
  75.  
  76. #define DROP            3.25f
  77. #define CONES             0
  78. #define CUBES            12    /* allows 12 cones       */
  79. #define TOTALOBSTS        24    /* allows 12 cubes       */
  80. #define GM_DURATN        90
  81. #define RM_DURATN        75
  82. #define MEXPL_DURATION  10
  83. #define EXPDURATION        30
  84. #define    GM_VEL            90.f        /* guided missile velocity */
  85. #define    RM_VEL            108.f    /* normal missile velocity */
  86.  
  87. #define    CONE_COLLISION_INSET    0.8375f
  88.  
  89. #define NORMAL_TRACK_RADIUS        150.f
  90. #define    VIEW_ONLY_TRACK_RADIUS    225.f
  91.  
  92. #define    N_VIEWS            8
  93.  
  94. #define DHEAD            10
  95. #define RAD2DEG            57.29578f    /* factor to convert radians to degrees */
  96. #define DEG2RAD            0.0174533f    /* factor to convert degrees to radians */
  97.  
  98. #define NAME_CHECK_LIMIT    20    /* check for duplicate names first N frames */
  99.  
  100. #define SELF             0
  101. #define ENEMY             1
  102. #define MISSILE             1
  103. #define MAXPLAYERS        40
  104. #define TOTALOBJS        (TOTALOBSTS + 2 * (MAXPLAYERS) + N_FLAGS )
  105.  
  106. #define    BZACK            0x425a4102        /* BZ acknowledge = BZA 01 */
  107. #define BZBLUEMSG        0x425a4201        /* BZ BLUE Team msg = BZB 01 */
  108. #define    BZCENSUS        0x425a4302        /* BZ census = BZC 02 */
  109. #define    BZDROP            0x425a4400        /* BZ drop = BZD 00 */
  110. #define    BZINVALIDATE    0x425a4900        /* BZ invalidate = BZI 00 */
  111. #define    BZLOGO_00        0x425a4c00        /* BZ LOGO description 0 = BZL 00 */
  112. #define BZMSG            0x425a4d01        /* BZ msg = BZM 01 */
  113. #define BZ                0x425a5005       /* BZ player = BZP 05 */
  114. #define BZQUIT            0x425a5100        /* BZ quit = BZQ 00 */
  115. #define BZREDMSG        0x425a5201        /* BZ RED Team msg = BZR 01 */
  116. #define    BZLIST            0x4c495354        /* BZ list = LIST */
  117. #define    BZSTOP            0x53544f50        /* BZ stop = STOP */
  118.  
  119. #define NAMELEN 12
  120.  
  121. #define DEFAULT_FRAME_RATE    15
  122.  
  123. #define POST_MSG_NUMBER        12
  124. #if !defined( NETDEBUGGER )
  125. #define POST_MSG_SIZE        50
  126. #else
  127. #define POST_MSG_SIZE        100
  128. #endif /* !defined( NETDEBUGGER ) */
  129. #define POST_MSG_DURATION    100
  130.  
  131. #define MAIL_MSG_SIZE        (POST_MSG_SIZE-1)
  132. #define    SENDING_NO_MAIL        0
  133. #define    SENDING_ALL_MAIL    1
  134. #define    SENDING_TEAM_MAIL    2
  135.  
  136. #define MAX_ACTIVITY        50
  137.  
  138. #define    QUITTING_STATUS        -1
  139.  
  140. #define ALIVE_STATUS        0
  141. #define MIN_DEAD_STATUS        1
  142. #define MAX_DEAD_STATUS        90
  143. #define MAILING_STATUS        10
  144.  
  145. #define INTRO_SCREEN        0
  146. #define INTRO_PICK_SCREEN    1
  147. #define MAIN_SCREEN            2
  148.  
  149. #define    IS_ALIVE(player)    ( (player).status <= ALIVE_STATUS )
  150. #define    IS_DEAD(player)        ( (player).status > ALIVE_STATUS )
  151.  
  152. #define HIT_BY_MINE            0
  153. #define HIT_BY_MISSILE        1
  154.  
  155. #define NEUTRAL_TEAM        0U
  156. #define    RED_TEAM            1U
  157. #define    BLUE_TEAM            2U
  158. #define N_TEAMS                3U
  159.  
  160. #define N_TYPES                3    /* Number of tank types. */
  161.  
  162. #define IS_STEALTH_TANK( player ) ( (player).tank_type == 2 )
  163.  
  164. #define    PRIVATE_GAME        0x08000
  165. #define    NO_FLAG_GAME        0x04000
  166. #define    FAST_GAME            0x02000
  167. #define    GAME_KEY_MASK        0x01fff
  168.  
  169. #ifndef DATA_DIR
  170. #define DATA_DIR "/usr/local/data/bz"
  171. #endif
  172.  
  173. /*
  174.  * Defs for solo version.
  175.  */
  176. #define    MAX_ENEMY    4
  177.  
  178. typedef    int    BzId ;
  179.  
  180.  
  181. struct BzMember {
  182.     BzId            bz_id ;
  183.     long            id ;
  184.     int                score ;
  185.     char            tank_type ;
  186.     char            team ;
  187.     char            hit_type ;
  188.     signed char        status ;
  189.     signed char        msl_status ;
  190.     unsigned char    team_flag ;
  191.     char            name[NAMELEN];
  192.     unsigned short    key ;
  193.     float            x ;
  194.     float            y ;
  195.     float            head ;
  196.     float            msl_x ;
  197.     float            msl_y ;
  198.     float            msl_head ;
  199.     long            hit_by_id ;
  200.     long            killed_by_id ;
  201.     } ;
  202.  
  203.  
  204. struct BzNotice {
  205.     BzId    bz_id ;
  206.     long    id ;
  207.     char    out_message[MAIL_MSG_SIZE] ;
  208.     } ;
  209.  
  210.  
  211. struct BzAck {
  212.     BzId            bz_id ;
  213.     long            id ;
  214.     long            ack_id ;
  215.     unsigned short    key ;
  216.     } ;
  217.  
  218.  
  219. struct BzCensus {
  220.     BzId            bz_id ;
  221.     long            id ;
  222.     long            n_players ;
  223.     unsigned long    chksum ;
  224.     unsigned long    chkxor ;
  225.     long            list[MAXPLAYERS] ;
  226.     } ;
  227.  
  228.  
  229. #define    LOGO_SIZE    500
  230.  
  231. struct BzLogo {
  232.     BzId            bz_id ;
  233.     long            id ;
  234.     unsigned char    logo_info[LOGO_SIZE] ;
  235.     } ;
  236.  
  237. union BzPacket {
  238.     BzId                bz_id ;
  239.     struct BzMember        member ;
  240.     struct BzNotice        notice ;
  241.     struct BzLogo        logo ;
  242.     struct BzAck        ack ;
  243.     struct BzCensus        census ;
  244.     } ;
  245.  
  246. typedef void    (*Color_Function)() ;
  247. typedef void    (*Packet_Function)( void ) ;
  248.  
  249. struct lineset {
  250.            float v0[2] ;
  251.            float v1[2] ;
  252.            } ;
  253.  
  254. #define COSINE(x)    ( cosf( (float)(x) * DEG2RAD ) )
  255. #define SINE(x)        ( sinf( (float)(x) * DEG2RAD ) )
  256.  
  257. /* BEGIN PROTOTYPES bz.c */
  258. void    act_on_input( void )  ;
  259. void    add_player( int *number )  ;
  260. void    blow_up_self( int killer ) ;
  261. void    change_cursor( void )  ;
  262. void    check_id( int n ) ;
  263. void    check_name( void )  ;
  264. void    check_quit_time( void )  ;
  265. int     cmpfnc( const void *ep1, const void *ep2 ) ;
  266. void    collide( void )  ;
  267. void    copy_player( int k, struct BzMember *psrc ) ;
  268. void    delete_player( int i, char *verb ) ;
  269. void    draw_intro_screen( void )  ;
  270. void    end_program( int status ) ;
  271. void    file_in( void )  ;
  272. void    file_name( char *name )  ;
  273. void    file_out( void )  ;
  274. int     find_player( long id ) ;
  275. float   getangle( float x, float y ) ;
  276. float   hypotn( float x, float y ) ;
  277. void    indicate_map_order( Window w, int map ) ;
  278. void    init_com( void )  ;
  279. void    init_var( void )  ;
  280. int     main( int argc, char **argv ) ;
  281. void    main_view( void )  ;
  282. void    move_after_hit( unsigned int tank_id, float xhit, float yhit,
  283.             float velx, float vely ) ;
  284. void    move_em( void )  ;
  285. void    network_in( void )  ;
  286. void    network_out( void )  ;
  287. void    no_op( void )  ;
  288. void    place_self( void )  ;
  289. char   *print_version( void )  ;
  290. void    process_bz_packet( struct BzMember *input ) ;
  291. void    process_players( void )  ;
  292. int     read_rest_of_file_packet( void *packet, int size ) ;
  293. void    redraw_main_view( void )  ;
  294. void    reset_viewing_order( void )  ;
  295. void    send_out( void *buf, int size ) ;
  296. void    send_out_message( void )  ;
  297. void    send_quit_packet( void )  ;
  298. void    send_to_file( void *buf, int size ) ;
  299. void    send_to_network( char *buf, int size ) ;
  300. void    set_quit_time( void )  ;
  301. void    set_up_main_view( void )  ;
  302. void    sort_view( int k ) ;
  303. float   square( float x, float y ) ;
  304. void    turn_and_go( float l, float r, float *heading, float *velx,
  305.             float *vely ) ;
  306. void    vertex2f( float x, float y ) ;
  307. /* END PROTOTYPES bz.c */
  308.  
  309. #endif /* !defined(BZ_H) */
  310.