view struct.h @ 3:5a977ccbc7a9 default tip

Empty changelog
author darius
date Sat, 06 Dec 1997 05:41:29 +0000
parents
children
line wrap: on
line source

/* $Id: struct.h,v 1.1.1.1 1997/12/06 05:41:31 darius Exp $ */

/*
 * struct.h for the client of an xtrek socket protocol.
 *
 * Most of the unneeded stuff in the structures has been thrown away.
 */

#ifndef struct_h_
#define struct_h_

#include "copyright.h"
#include "Wlib.h"
#include "defs.h"
#include "packets.h"

#ifdef HOCKEY
/* hockey struct [BDyess] */
struct hockeyLine {
  int vertical;		/* vertical or horizontal flag */
  W_Color color;
  int pos, end1, end2;	/* x or y constant and two endpoints */
};
#endif /*HOCKEY*/

/* ratings struct [BDyess] */
struct ratings {
    float   r_offrat;		/* offense rating */
    float   r_planetrat;	/* planets rating */
    float   r_bombrat;		/* bombing rating */
    float   r_defrat;		/* defense rating */
    float   r_resrat;		/* resource rating */
    float   r_dooshrat;		/* doosh rating */
    float   r_stratrat;		/* strategy rating */
    float   r_batrat;		/* battle rating */
    float   r_sbrat;		/* sb rating */
    float   r_wbrat;		/* wb rating */
    float   r_jsrat;		/* js rating */
    int     r_jsplanets;	/* js planets */
    int     r_resources;	/* total resources bombed */
    int     r_armies;		/* total armies bombed */
    int     r_planets;		/* total planets taken */
    int     r_dooshes;		/* total armies dooshed */
    float   r_specrat;		/* special ship rating */
    float   r_di;		/* damage inflicted */
    float   r_ratio;		/* ratio, kills/losses */
    int     r_kills;		/* kills */
    int     r_losses;		/* losses */
    float   r_ratings;		/* total ratings */
    float   r_killsPerHour;	/* kills/hour */
    float   r_lossesPerHour;	/* losses/hour */
    float   r_maxkills;		/* max kills */
    int     r_genocides;	/* number of genocides */
};

/* messageWindow structure [BDyess] */
struct messageWin {
    W_Window window;
    int     flags;
    struct messageNode *head, *curHead;
};

/* stuff yanked from COW-lite for rc_distress [BDyess] */
struct distress {
    unsigned char sender;
    unsigned char dam, shld, arms, wtmp, etmp, fuelp, sts;
    unsigned char wtmpflag, etempflag, cloakflag, distype, macroflag;
    unsigned char close_pl, close_en, tclose_pl, tclose_en, pre_app, i;
    unsigned char close_j, close_fr, tclose_j, tclose_fr;
    unsigned char cclist[6];	/* allow us some day to cc a message up to 5
				   people */
    /* sending this to the server allows the server to do the cc action */
    /* otherwise it would have to be the client ... less BW this way */
    char    preappend[80];	/* text which we pre or append */
};

enum dist_type {
    /* help me do series */
    take = 1, ogg, bomb, space_control,
    save_planet,
    base_ogg,
    help3, help4,

    /* doing series */
    escorting, ogging, bombing, controlling,
    asw,
    asbomb,
    doing3, doing4,

    /* other info series */
    free_beer,			/* ie. player x is totally hosed now */
    no_gas,			/* ie. player x has no gas */
    crippled,			/* ie. player x is way hurt but may have gas */
    pickup,			/* player x picked up armies */
    pop,			/* there was a pop somewhere */
    carrying,			/* I am carrying */
    other1, other2,

    /* just a generic distress call */
    generic
};

/* The General distress has format:

   byte1: 00yzzzzz
   where zzzzz is dist_type, and y is 1 if this is a more complicated macro
   and not just a simple distress (a simple distress will ONLY send ship
   info like shields, armies, status, location, etc.). I guess y=1 can be for !
   future expansion.

   byte2: 1fff ffff - f = percentage fuel remaining (0-100)
   byte3: 1ddd dddd - % damage
   byte4: 1sss ssss - % shields remaining
   byte5: 1eee eeee - % etemp
   byte6: 1www wwww - % wtemp
   byte7: 100a aaaa - armies carried
   byte8: (lsb of me->p_status) & 0x80
   byte9: 1ppp pppp - planet closest to me
   byte10: 1eee eeee - enemy closest to me
   byte11: 1ppp pppp - planet closest to target
   byte12: 1eee eeee - enemy closest to target
   byte13: 1ttt tttt - tclose_j
   byte14: 1jjj jjjj - close_j
   byte15: 1fff ffff - tclose_fr
   byte16: 1ccc cccc - close_fr
   byte17+: cc list (each player to cc this message to is 11pp ppp)
   cc list is terminated by 0x80 (pre-pend) or 0100 0000 (append) )
   byte18++: the text to pre or append .. depending on termination above.
   text is null terminated and the last thing in this distress
 */

struct macro_list {
    int     type;
    char    key;
    char    who;
    char   *string;
};

struct dmacro_list {
    unsigned char c;
    char   *name;
    char   *macro;
};
/* end rc_distress stuff [BDyess] */

struct status {
    unsigned char tourn;	/* Tournament mode? */
    /* These stats only updated during tournament mode */
    unsigned int armsbomb, planets, kills, losses, time;
    /* Use long for this, so it never wraps */
    unsigned long timeprod;
};

struct status2 {		/* paradise status struct */
    int     active;		/* for interfacing with people who */
    unsigned int wait, count;	/* want to get into the game */
    unsigned int number, request, answer;
    unsigned char tourn;	/* Tournament mode? */
    unsigned long dooshes;	/* total number of armies dooshed */
    unsigned long armsbomb;	/* all t-mode armies bombed */
    unsigned long resbomb;	/* resources bombed */
    unsigned long planets;	/* all t-mode planets taken */
    unsigned long kills;	/* all t-mode kills made */
    unsigned long losses;	/* all t-mode losses */
    unsigned long genocides;	/* number of genocides */
    unsigned long sbkills;	/* total kills in SB's */
    unsigned long sblosses;	/* total losses in Sb's */
    unsigned long sbtime;	/* total time in SB's */
    unsigned long wbkills;	/* kills in warbases */
    unsigned long wblosses;	/* losses in warbases */
    unsigned long wbtime;	/* total time played in wb's */
    unsigned long jsplanets;	/* total planets taken by jump ships */
    unsigned long jstime;	/* total time in a jump ship */
    unsigned long time;		/* t-mode time */
    unsigned long timeprod;	/* t-mode ship ticks--sort of like */
    /* manhours in t-mode */
    int     gameup;		/* is game up */
    unsigned long clock;	/* clock for planet info timestamp */
};


#ifdef METASERVER
/* metaserver window struct */
struct servers {
    char    address[LINE];
    int     port;
    int     time;
    int     players;
    int     status;
    int     RSA_client;
    char    typeflag;
    char    hilited;
};
#endif				/* METASERVER */

/* MOTD structures */
struct piclist {
    int     page;
    W_Icon  thepic;
    int     x, y;
    int     width, height;
    struct piclist *next;
};
struct page {
    struct list *text;
    struct page *next;
    struct page *prev;
    int     first;
    int     page;
};

#define PFREE 0
#define POUTFIT 1
#define PALIVE 2
#define PEXPLODE 3
#define PDEAD 4
#define PTQUEUE 5
#define POBSERVE 6

#define PFSHIELD	  (1<< 0)	/* shields are raised */
#define PFREPAIR	  (1<< 1)	/* player in repair mode */
#define PFBOMB		  (1<< 2)	/* player is bombing */
#define PFORBIT		  (1<< 3)	/* player is orbiting */
#define PFCLOAK		  (1<< 4)	/* player is cloaked */
#define PFWEP		  (1<< 5)	/* player is weapon temped */
#define PFENG		  (1<< 6)	/* player is engine temped */
#define PFROBOT		  (1<< 7)	/* player is a robot */
#define PFBEAMUP	  (1<< 8)	/* player is beaming up */
#define PFBEAMDOWN	  (1<< 9)	/* player is beaming down */
#define PFSELFDEST	  (1<<10)	/* player is self destructing */
#define PFGREEN		  (1<<11)	/* player at green alert */
#define PFYELLOW	  (1<<12)	/* player is at yellow alert */
#define PFRED		  (1<<13)	/* player is at red alert */
#define PFPLOCK		  (1<<14)	/* Locked on a player */
#define PFPLLOCK	  (1<<15)	/* Locked on a planet */
#define PFCOPILOT	  (1<<16)	/* Allow copilots */
#define PFWAR		  (1<<17)	/* computer reprogramming for war */
#define PFPRACTR	  (1<<18)	/* practice type robot (no kills) */
#define PFDOCK            (1<<19)	/* true if docked to a starbase */
#define PFREFIT           (1<<20)	/* true if about to refit */
#define PFREFITTING	  (1<<21)	/* true if currently refitting */
#define PFTRACT  	  (1<<22)	/* tractor beam activated */
#define PFPRESS  	  (1<<23)	/* pressor beam activated */
#define PFDOCKOK	  (1<<24)	/* docking permission */
#define PFSEEN		  (1<<25)	/* seen by enemy on galactic map? */
#define PFWARPPREP	  (1<<26)	/* in warp prep [BDyess] */
#define PFWARP		  (1<<27)	/* ship warping */
#define PFAFTER		  (1<<28)	/* after burners on */
#define PFWPSUSPENDED     (1<<29)	/* warp prep suspended [BDyess] */
#define PFSNAKE	          (1<<30)	/* it's a space snake */
#define PFBIRD	          (1<<31)	/* it's a space bird */

enum why_dead {
    KNOREASON, KQUIT, KTORP, KPHASER, KPLANET,
    KSHIP, KDAEMON, KWINNER, KGHOST, KGENOCIDE,
    KPROVIDENCE, KPLASMA, KTOURNEND, KOVER, KTOURNSTART,
    KBADBIN, KMISSILE, KASTEROID
};

#define DEFAULT -1
#define SCOUT 0
#define DESTROYER 1
#define CRUISER 2
#define BATTLESHIP 3
#define ASSAULT 4
#define STARBASE 5
#define ATT 6
#define GALAXY 6		/* galaxy ships now supported - they look
				   extremely similar to flagships :) [BDyess] */
#define JUMPSHIP 7
#define FLAGSHIP 8
#define WARBASE 9
#define LIGHTCRUISER 10
#define CARRIER 11
#define UTILITY 12
#define PATROL 13
#define PUCK 14
/*#define NUM_TYPES 14*/

struct shiplist {
    struct ship *ship;
    struct shiplist *prev, *next;
};

struct ship {
    int     s_phaserrange;
    int     s_maxspeed;
    int     s_maxfuel;
    int     s_maxshield;
    int     s_maxdamage;
    int     s_maxegntemp;
    int     s_maxwpntemp;
    short   s_maxarmies;
    short   s_type;
    int     s_torpspeed;
    char    s_letter;
    /* char s_name[16]; */
    char    s_desig[2];
    short   s_bitmap;
    unsigned char s_keymap[256];
    unsigned char s_buttonmap[12];
};

struct ship_shape {
    int     nviews;
    W_Icon *bmap;
    W_Icon  shield;
    int     width, height;
};

struct stats {
    double  st_maxkills;	/* max kills ever */
    int     st_kills;		/* how many kills */
    int     st_losses;		/* times killed */
    int     st_armsbomb;	/* armies bombed */
    int     st_planets;		/* planets conquered */
    int     st_ticks;		/* Ticks I've been in game */
    int     st_tkills;		/* Kills in tournament play */
    int     st_tlosses;		/* Losses in tournament play */
    int     st_tarmsbomb;	/* Tournament armies bombed */
    int     st_tplanets;	/* Tournament planets conquered */
    int     st_tticks;		/* Tournament ticks */
    /* SB stats are entirely separate */
    int     st_sbkills;		/* Kills as starbase */
    int     st_sblosses;	/* Losses as starbase */
    int     st_sbticks;		/* Time as starbase */
    double  st_sbmaxkills;	/* Max kills as starbase */
    long    st_lastlogin;	/* Last time this player was played */
    int     st_flags;		/* Misc option flags */
#if 0
    unsigned char st_keymap[256];	/* keymap for this player */
#endif
    int     st_rank;		/* Ranking of the player */
};


struct stats2 {			/* paradise stats */
    int     st_genocides;	/* number of genocides participated in */
    float   st_tmaxkills;	/* max kills ever */
    float   st_di;		/* total destruction inflicted for all time */
    int     st_tkills;		/* Kills in tournament play */
    int     st_tlosses;		/* Losses in tournament play */
    int     st_tarmsbomb;	/* Tournament armies bombed */
    int     st_tresbomb;	/* resources bombed off */
    int     st_tdooshes;	/* armies killed while being carried */
    int     st_tplanets;	/* Tournament planets conquered */
    int     st_tticks;		/* Tournament ticks */
    /* SB/WB/JS stats are entirely separate */
    int     st_sbkills;		/* Kills as starbase */
    int     st_sblosses;	/* Losses as starbase */
    int     st_sbticks;		/* Time as starbase */
    float   st_sbmaxkills;	/* Max kills as starbase */
    int     st_wbkills;		/* Kills as warbase */
    int     st_wblosses;	/* Losses as warbase */
    int     st_wbticks;		/* Time as warbase */
    float   st_wbmaxkills;	/* Max kills as warbase */
    int     st_jsplanets;	/* planets assisted with in JS */
    int     st_jsticks;		/* ticks played as a JS */
    long    st_lastlogin;	/* Last time this player was played */
    int     st_flags;		/* Misc option flags */
    unsigned char st_keymap[256];	/* keymap for this player */
    int     st_rank;		/* Ranking of the player */
    int     st_royal;		/* royaly, specialty, rank */
};

#define ST_NOBITMAPS	(1<<0)
#define ST_KEEPPEACE    (1<<3)

struct player {
    int     p_no;
    int     p_updates;		/* Number of updates ship has survived */
    int     p_status;		/* Player status */
    unsigned int p_flags;	/* Player flags */
    char    p_name[16];
    char    p_login[16];
    char    p_monitor[16];	/* Monitor being played on */
    char    p_mapchars[2];	/* Cache for map window image */
    struct ship *p_ship;	/* Personal ship statistics */
    int     p_x;
    int     p_y;
    unsigned char p_dir;	/* Real direction */
    unsigned char p_desdir;	/* desired direction */
    int     p_subdir;		/* fraction direction change */
    int     p_speed;		/* Real speed */
    short   p_desspeed;		/* Desired speed */
    int     p_subspeed;		/* Fractional speed */
    short   p_teami;		/* Team I'm on */
    int     p_damage;		/* Current damage */
    int     p_subdamage;	/* Fractional damage repair */
    int     p_shield;		/* Current shield power */
    int     p_subshield;	/* Fractional shield recharge */
    short   p_cloakphase;	/* Drawing stage of cloaking
				   engage/disengage. */
    short   p_ntorp;		/* Number of torps flying */
    short   p_ndrone;		/* Number of drones .. why was this missing? */
    short   p_totmissiles;	/* number of total missiles [Bill Dyess] */
    short   p_nplasmatorp;	/* Number of plasma torps active */
    char    p_hostile;		/* Who my torps will hurt */
    char    p_swar;		/* Who am I at sticky war with */
    float   p_kills;		/* Enemies killed */
    short   p_planet;		/* Planet orbiting or locked onto */
    short   p_playerl;		/* Player locked onto */
#ifdef ARMY_SLIDER
    int     p_armies;		/* XXX: for stats */
#else
    short   p_armies;
#endif				/* ARMY_SLIDER */
    int     p_fuel;
    short   p_explode;		/* Keeps track of final explosion */
    int     p_etemp;
    short   p_etime;
    int     p_wtemp;
    short   p_wtime;
    short   p_whydead;		/* Tells you why you died */
    short   p_whodead;		/* Tells you who killed you */
    struct stats p_stats;	/* player statistics */
    struct stats2 p_stats2;	/* Paradise stats */
    short   p_genoplanets;	/* planets taken since last genocide */
    short   p_genoarmsbomb;	/* armies bombed since last genocide */
    short   p_planets;		/* planets taken this game */
    short   p_armsbomb;		/* armies bombed this game */
    int     p_docked;		/* If starbase, # docked to, else pno base
				   host */
    int     p_port[4];		/* If starbase, pno of ship docked to that
				   port, else p_port[0] = port # docked to on
				   host.   */
    short   p_tractor;		/* What player is in tractor lock */
    int     p_pos;		/* My position in the player file */
};

struct statentry {
    char    name[16], password[16];
    struct stats stats;
};

/* Torpedo states */

#define TFREE 0
#define TMOVE 1
#define TEXPLODE 2
#define TDET 3
#define TOFF 4
#define TSTRAIGHT 5		/* Non-wobbling torp */

struct torp {
    int     t_no;
    int     t_status;		/* State information */
    int     t_owner;
    int     t_x;
    int     t_y;
    unsigned char t_dir;	/* direction */
    short   t_turns;		/* rate of change of direction if tracking */
    int     t_damage;		/* damage for direct hit */
    int     t_speed;		/* Moving speed */
    int     t_fuse;		/* Life left in current state */
    char    t_war;		/* enemies */
    char    t_team;		/* launching team */
    char    t_whodet;		/* who detonated... */
    char    frame;		/* frame of animation [BDyess] */
};

struct thingy {
    int     t_no;
    int     t_shape;		/* State information */
    int     t_owner;
    int     t_x;
    int     t_y;
    unsigned char t_dir;	/* direction */
    int     t_speed;		/* Moving speed */
    int     t_fuse;		/* Life left in current state */
    char    t_war;		/* enemies */
};

/* Plasma Torpedo states */

#define PTFREE 0
#define PTMOVE 1
#define PTEXPLODE 2
#define PTDET 3

struct plasmatorp {
    int     pt_no;
    int     pt_status;		/* State information */
    int     pt_owner;
    int     pt_x;
    int     pt_y;
    unsigned char pt_dir;	/* direction */
    short   pt_turns;		/* ticks turned per cycle */
    int     pt_damage;		/* damage for direct hit */
    int     pt_speed;		/* Moving speed */
    int     pt_fuse;		/* Life left in current state */
    char    pt_war;		/* enemies */
    char    pt_team;		/* launching team */
};

#define PHFREE 0x00
#define PHHIT  0x01		/* When it hits a person */
#define PHMISS 0x02
#define PHHIT2 0x04		/* When it hits a photon */
#ifdef CHECK_DROPPED
#define PHGHOST 0x80		/* fuse has exceeded longest received so far */
#endif
struct phaser {
    int     ph_status;		/* What it's up to */
    unsigned char ph_dir;	/* direction */
    int     ph_target;		/* Who's being hit (for drawing) */
    int     ph_x, ph_y;		/* For when it hits a torp */
    int     ph_fuse;		/* Life left for drawing */
    int     ph_damage;		/* Damage inflicted on victim */
};

/* An important note concerning planets:  The game assumes that
    the planets are in a 'known' order.  Ten planets per team,
    the first being the home planet.
*/

 /* defines for the pl_flags field of planet struct */

/*
   pl_flags is an int of 32 bits:

   bits 16 and 23 currently define the type of the planet.  The
   interpretation of the other bits is dependent upon the planet
   type.

   Here is the interpretation for a planet
   bits 0..3			unknown
   bits 4..6			planetary facilities (REPAIR,FUEL,AGRI)
   bit  7			redraw (archaic, recyclable?)
   bits 8..11			old flags (archaic, recyclable?)
   bits 12..15			paradise planetary facilities
				(REPAIR,FUEL,AGRI,SHIPY)
   bit  16			cosmic object type (also bit 23)
   bits 17,18			planet atmosphere type
   bits 19..21			planetary surface properties
				(DILYTH,METAL,ARABLE)
   bit  22			paradise planet flag (why?)
   bit  23			cosmic object type (also bit 16)
   bits 24..31	currently unallocated (8 bits to play with)

   Asteroids are NYI but here is a draft standard:
   bits 12,15			facilities
				(REPAIR,FUEL,SHIPY)
   bit  20			surface properties
				(DILYTH,METAL)
   other bits	currently unallocated

   */

/* facilities, bits 4..6 and 12..15
   valid for planets and asteroids */
#define PLREPAIR   ((1<<12) | (1<<4))	/* planet can repair ships */
#define PLFUEL     ((1<<13) | (1<<5))	/* planet has fuel depot */
#define PLAGRI     ((1<<14) | (1<<6))	/* agricultural thingies built here */
#define PLSHIPYARD ((1<<15))	/* planet has a shipyard on it */
#define PLORESMASK (0x7<<4)	/* mask for original resource flags */
#define PLRESSHIFT       12	/* bit to shift right by for resources */
#define PLRESMASK  (0xF<<PLRESSHIFT)	/* to mask off all but resource bits */

#define PLREDRAW   (1<<7)	/* Player close for redraw */

#define PLHOME 	   (1<< 8)	/* These 4 flags no longer are */
#define PLCOUP     (1<< 9)	/* used in the server */
#define PLCHEAP    (1<<10)
#define PLCORE     (1<<11)

/* cosmic object types, bits 16 and 23, and 24 */
#define PLPLANET	0	/* object is a planet */
#define PLSTAR     (1<<16)	/* object is a star */
#define PLAST	   (1<<23)	/* object is an asteroid NYI */
#define PLNEB	   ((1<<16)|(1<<23))	/* object is a nebula NYI */
#define PLBHOLE    (1<<24)	/* object is a black hole NYI */
#define PLPULSAR   ((1<<16)|(1<<24))	/* object is a pulsar NYI */
#define PLUK1      ((1<<23)|(1<<24))	/* future expansion */
#define PLWHOLE    ((1<<16)|(1<<23)|(1<<24))	/* object is a wormhole */
#define PLTYPEMASK ((1<<16)|(1<<23)|(1<<24))	/* mask to extract object
						   type */
#define PL_TYPE(p) ( (p).pl_flags & PLTYPEMASK )

/* Atmosphere Types, bits 17 and 18.
   Valid for planets.
   */
#define PLATSHIFT	 17	/* number of right bit shifts for atmos bits */
#define PLPOISON   (0<<PLATSHIFT)	/* poison atmosphere, no army growth */
#define PLATYPE3   (1<<PLATSHIFT)	/* slightly toxic, very slow army
					   growth */
#define PLATYPE2   (2<<PLATSHIFT)	/* thin atmosphere, slow army growth */
#define PLATYPE1   (3<<PLATSHIFT)	/* normal human atmosphere, normal
					   growth */
#define PLATMASK   (0x3<<PLATSHIFT)	/* to mask off everything but atmos
					   bits */

/* Surface Properties, bits 19..21
   Valid for planets and asteroids.
   */
#define PLBARREN   0		/* rocky barren surface */
#define PLSURSHIFT 	 19	/* number of bit shift to surface */
#define PLDILYTH   (1<<(PLSURSHIFT+0))	/* dilythium deposits on the planet */
#define PLMETAL    (1<<(PLSURSHIFT+1))	/* metal deposits on the planet */
#define PLARABLE   (1<<(PLSURSHIFT+2))	/* planet has farmland */
#define PLSURMASK  (0x7<<PLSURSHIFT)	/* number of surface combinations */


#define PLPARADISE (1<<22)	/* Paradise server flag set to 1 for P server */


struct planet {
    int     pl_no;
    int     pl_flags;		/* State information */
    int     pl_owner;
    int     pl_x;
    int     pl_y;
    char    pl_name[16];
    int     pl_namelen;		/* Cuts back on strlen's */
    int     pl_armies;
    int     pl_info;		/* Teams which have info on planets */
    int     pl_deadtime;	/* Time before planet will support life */
    int     pl_couptime;	/* Time before coup may take place */
    int     pl_timestamp;	/* time the info was taken */
};

struct t_unit {
/*  int	    alt1;*/
/*  int     alt2;*/		/* Terrain types. */
    char types;
};

/* Terrain types */
#define T_EMPTY_SPACE 0x00
#define T_ASTEROIDS   0x01
#define T_NEBULA      0x02
#define T_RADIATION   0x04
#define T_EXPANSN1    0x08
#define T_EXPANSN2    0x10
#define T_EXPANSN3    0x20
#define T_EXPANSN4    0x40
#define T_EXPANSN5    0x80

struct _clearzone {
    int     x, y;
    int     width, height;
};

#ifndef SHORT_PACKETS
#define MVALID 0x01
#define MINDIV 0x02
#define MTEAM  0x04
#define MALL   0x08
#define MGOD   0x10
#define MCAST  0x18		/* not an offial packet type. only */
                                /* used in smessage to stay orthogonal */
#else
#define MVALID 0x01
#define MGOD   0x10
#define MMOO   0x12

#ifdef TOOLS
#define MTOOLS 0x14
#endif

/* order flags by importance (0x100 - 0x400) */
/* restructuring of message flags to squeeze them all into 1 byte - jmn */
/* hopefully quasi-back-compatible:
   MVALID, MINDIV, MTEAM, MALL, MGOD use up 5 bits. this leaves us 3 bits.
   since the server only checks for those flags when deciding message
   related things and since each of the above cases only has 1 flag on at
   a time we can overlap the meanings of the flags */

#define MINDIV 0x02
/* these go with MINDIV flag */
#ifdef STDBG
#define MDBG   0x20
#endif
#define MCONFIG 0x40		/* config messages from server */
#define MDIST 0x60		/* flag distress messages - client thing
				   really but stick it in here for
				   consistency */
#define MCAST 0x18		/* not an offial packet type. only */
                                /* used in smessage.c to stay orthogonal */

#define MTEAM  0x04
/* these go with MTEAM flag */
#define MTAKE  0x20
#define MDEST  0x40
#define MBOMB  0x60
#define MCOUP1 0x80
#define MCOUP2 0xA0
#define MDISTR 0xC0

#define MALL   0x08
/* these go with MALL flag */
#define MGENO  0x20		/* MGENO is not used in INL server but
				   belongs here */
#define MCONQ  0x20		/* not enought bits to distinguish
				   MCONQ/MGENO :-( */
#define MKILLA 0x40
#define MKILLP 0x60
#define MKILL  0x80
#define MLEAVE 0xA0
#define MJOIN  0xC0
#define MGHOST 0xE0
/* MMASK not used in INL server */

/* to flag multi-line macros */
#define MMACRO 0x80

#define MWHOMSK  0x1f		/* mask with this to find who msg to */
#define MWHATMSK 0xe0		/* mask with this to find what message about */

/*   old flags...
#define MVALID 0x01
#define MINDIV 0x02
#define MTEAM  0x04
#define MALL   0x08
#define MGOD   0x10

#define MGENO  0x100            order these by importance (0x100 - 0x400)
#define MCONQ  0x110
#define MTAKE  0x120
#define MDEST  0x130
#define MKILLA 0x200
#define MBOMB  0x210
#define MKILLP 0x220
#define MKILL  0x230
#define MLEAVE 0x300
#define MJOIN  0x310
#define MGHOST 0x320
#define MCOUP1 0x330
#define MCOUP2 0x340    end of old flags  */
#endif

struct message {
    int     m_no;
    int     m_flags;
    int     m_time;
    int     m_recpt;
    char    m_data[80];
};

/* message control structure */

struct mctl {
    int     mc_current;
};

/* This is a structure used for objects returned by mouse pointing */

#define PLANETTYPE 0x1
#define PLAYERTYPE 0x2

struct obtype {
    int     o_type;
    int     o_num;
};

struct id {
    char   *name;
    int     team;
    int     number;
    int     type;
    char    mapstring[4];
};

struct rank {
    float   hours, ratings, defense;
    char   *name;
};

struct rank2 {			/* Paradise ranks */
    int     genocides;		/* minimum number of genocides */
    float   di;			/* minimum destruction inflicted */
    float   battle;		/* minimum battle ratings */
    float   strategy;		/* minimum strategy ratings */
    float   specship;		/* minimum total ratings in a specialty */
    /* ship  SB + WB + JS */
    char   *name;		/* name of this rank */
};


struct royalty {		/* Paradise royalty ranks */
    char   *name;		/* name of rank */
};

struct plupdate {

    int     plu_update;
    int     plu_x, plu_y;
};

#ifdef MACROS
#define MACSINGLE 1
#define MACRCD 2
#define MACMULTI 4
struct macro {
    char    flags;		/* WAS isSingleMacro; now, uses above flags */
    INT8    to;			/* if to team, rom, etc put here or -1 */
    char    specialto;		/* player nearest mouse, etc here */
    struct macro *next;		/* for multi-line macros, points to a struct
				   *distress if MACRCD flag set. -JR */
    char   *string;		/* string to be sent, % escapes intact */
};
#endif				/* MACROS */

struct stringlist {
    char   *string;
    char   *value;
    struct stringlist *next, *prev;
    int searched;
};
#endif