diff src/struct.h @ 8:0836fb919dfa

First entry of Paradise Server 2.9 patch 10 Beta
author darius
date Sat, 06 Dec 1997 04:37:05 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/struct.h	Sat Dec 06 04:37:05 1997 +0000
@@ -0,0 +1,1174 @@
+/*--------------------------------------------------------------------------
+NETREK II -- Paradise
+
+Permission to use, copy, modify, and distribute this software and its
+documentation, or any derivative works thereof, for any NON-COMMERCIAL
+purpose and without fee is hereby granted, provided that this copyright
+notice appear in all copies.  No representations are made about the
+suitability of this software for any purpose.  This software is provided
+"as is" without express or implied warranty.
+
+    Xtrek Copyright 1986                            Chris Guthrie
+    Netrek (Xtrek II) Copyright 1989                Kevin P. Smith
+                                                    Scott Silvey
+    Paradise II (Netrek II) Copyright 1993          Larry Denys
+                                                    Kurt Olsen
+                                                    Brandon Gillespie
+--------------------------------------------------------------------------*/
+
+#ifndef struct_h_
+#define struct_h_
+
+
+#include "defs.h"
+
+
+
+
+
+/*-----------------------------SHIP STRUCTURE------------------------------*/
+
+enum ship_types_e
+{
+  SCOUT, DESTROYER, CRUISER, BATTLESHIP, ASSAULT, STARBASE, ATT,
+  JUMPSHIP, FRIGATE, WARBASE, LIGHTCRUISER, CARRIER, UTILITY, PATROL
+
+#if 1
+#define	NUM_TYPES	14	/* this is less clean, but cc has a */
+  /* problem with using an enum constant */
+  /* as an array dimension.  POS compiler. */
+#else
+  NUM_TYPES
+#endif
+};
+
+struct drivestat
+{
+  /* various drive type statistics */
+  int acc;			/* acceleration */
+  int dec;			/* decelleration */
+  int cost;			/* fuel cost */
+  int maxspeed;			/* maximum speed */
+  int etemp;			/* engine temperature */
+};
+
+struct weaponstat
+{
+  short damage;			/* damage potential */
+  short speed;			/* speed for missiles, range for beams */
+  short cost;			/* fuel cost */
+  short fuse;			/* how long they last */
+  short wtemp;			/* weapon temperature cost */
+  short wtemp_halfarc;		/* Arc the penalty is calculated from */
+  short wtemp_factor;		/* Penalty Factor 1-16 of wtemp caused */
+  short count;			/* how many we can have airborne */
+  short aux;			/* aux field */
+  /* aux is turn rate for torps and plasmas. */
+};
+
+struct ship
+{
+
+  short s_type;			/* ship type, defined with the number */
+  short s_alttype;		/* This MUST be a legal vanilla bronco type */
+  char s_name[32];		/* ship's name */
+
+  /* engine characteristics */
+  int s_turns;			/* ship\'s turning */
+#undef	s_imp			/* bloody obsolete header files */
+  struct drivestat s_imp;	/* impulse drive stats */
+  struct drivestat s_after;	/* impulse drive stats */
+  struct drivestat s_warp;	/* impulse drive stats */
+  int s_warpinitcost;		/* fuel charge to initialize warp */
+  int s_warpinittime;		/* time to initialize warp */
+  int s_warpprepspeed;		/* speed while initializing warp */
+
+  short s_mass;			/* to guage affect of tractor beams */
+
+  /* tractor characteristics */
+  short s_tractstr;		/* Strength of tractor beam */
+  float s_tractrng;		/* tractor range */
+  int s_tractcost;		/* fuel used by tractors */
+  int s_tractetemp;		/* e-temp caused by tractors */
+
+  struct weaponstat s_torp;	/* torp characteristics */
+  struct weaponstat s_phaser;	/* phaser characteristics */
+  struct weaponstat s_missile;	/* missile characteristics */
+  struct weaponstat s_plasma;	/* plasma characteristics */
+  short s_missilestored;	/* how many missiles can we store? */
+
+  /* Raynfala's Butt Torp Code. Gjor's Ship Patch for his code to do it */
+  /* for each ship.						       */
+
+  short s_torp_penalty_halfarc;
+  short s_torp_penalty_factor;
+
+  int s_maxwpntemp;		/* max W-temp */
+  short s_wpncoolrate;		/* weapon cool rate */
+
+  int s_maxegntemp;		/* max engine temp */
+  short s_egncoolrate;		/* engine cool rate */
+
+  /* fuel characteristics */
+  int s_maxfuel;		/* ship's maximum fuel */
+  short s_recharge;		/* speed fuel recharges */
+  int s_mingivefuel;		/* ship must have this much to give fuel */
+  int s_takeonfuel;		/* how fast ship takes on fuel */
+
+  short s_expldam;		/* damage done by ship's explosion (assuming
+				 * his fuel tank is empty) */
+  short s_fueldam;		/* the amount of _additional_ damage that
+				 * this ship's explosion does with a full
+				 * tank */
+
+  /* miscellaneous army stats */
+  float s_armyperkill;		/* the number of armies per kill */
+  short s_maxarmies;		/* max armies ship can carry */
+  int s_bomb;			/* bomb damage ship can do */
+
+  /* hull, shield and repair stats */
+  short s_repair;		/* ship's repair rate */
+  int s_maxdamage;		/* maximum damage ship can take */
+  int s_maxshield;		/* maximum shield value */
+  int s_shieldcost;		/* cost in fuel of shields being up */
+
+  short s_detcost;		/* fuel cost of detting */
+  int s_detdist;		/* fuel cost of detting */
+  short s_cloakcost;		/* base fuel cost of cloaking */
+
+  short s_scanrange;		/* range of the ship's scanners */
+
+  short s_numports;		/* how many docking ports do we have? */
+
+  char s_letter;		/* the letter used to enter as that ship */
+  char s_desig1;		/* the designation used (such as A, in AS */
+  char s_desig2;		/* the designation used (such as S, in AS */
+
+  short s_bitmap;		/* the bitmap to use */
+  short s_width;		/* width of bitmap */
+  short s_height;		/* height of bitmap */
+
+  /* ship requisition limitations */
+  int s_timer;			/* value to set timer to get another ship */
+  int s_maxnum;			/* maximum number of these per team */
+  int s_rank;			/* minimum rank for this sucker */
+  int s_numdefn;		/* number of player necessary */
+  int s_numplan;		/* number of planets */
+
+  long s_nflags;		/* attributes for ship type, SFN flags */
+};
+
+/*
+ * ATTENTION!!! Changes to these flags should be mirrored in structdesc.c
+ */
+/* For s_nflags field */
+#if 0
+#define SFNDOCKON       (1<< 0)	/* specify a ship to docked on */
+#define SFNCANDOCK      (1<< 1)	/* specify a ship can dock */
+#else
+#define SFNUNDOCKABLE	(1<< 0)	/* this ship can not dock with another */
+#define SFNCANORBIT     (1<< 1)	/* specify a ship can orbit */
+#endif
+#define SFNCANWARP      (1<< 2)	/* this ship can go warp */
+#define SFNCANFUEL	(1<< 3)	/* base can give docked ships fuel */
+#define SFNCANREPAIR	(1<< 4)	/* base can repair docked ships */
+#define SFNCANREFIT	(1<< 5)	/* base allows a refit while docked */
+#define SFNARMYNEEDKILL (1<< 6)	/* does ship need kills to carry */
+
+#define SFNHASPHASERS	(1<< 7)	/* this ship has phasers */
+
+#define SFNPLASMASTYLE  (1<< 8)	/* style of firing plasmas */
+
+#define SFNMASSPRODUCED (1<< 9)	/* ship can appear docked to an SB or UT */
+
+#define SFNPLASMAARMED	(1<<10)
+#define SFNHASMISSILE	(1<<11)
+
+#define SFNHASFIGHTERS	(1<<12)	/* ship has a fighter bay */
+
+#if 0
+#define allows_docking(s_ship)	((s_ship).s_nflags & SFNDOCKON)
+#define can_dock(s_ship)	((s_ship).s_nflags & SFNCANDOCK)
+#else
+#define allows_docking(s_ship)	((s_ship).s_numports>0)
+#define can_dock(s_ship)	((s_ship).s_numports==0 && !((s_ship).s_nflags&SFNUNDOCKABLE))
+#endif
+/*-------------------------------------------------------------------------*/
+
+
+
+
+
+
+
+/*----------------------------STATS STRUCTURE------------------------------*/
+
+struct 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 */
+  int st_cluesuccess;		/* how many times you passed a clue check */
+  char st_pad[92];		/* space for expansion */
+  int st_rank;			/* Ranking of the player */
+  int st_royal;			/* royaly, specialty, rank */
+};
+
+/*
+ * These are for the flags field and control the preset options of the
+ * players client.
+ */
+#if 0
+#define ST_MAPMODE      0x001
+#define ST_NAMEMODE     0x002
+#define ST_SHOWSHIELDS  0x004
+#endif
+#define ST_NOBITMAPS	(1<<0)
+#define ST_KEEPPEACE    (1<<3)
+#if 0
+#define ST_SHOWLOCAL    0x010	/* two bits for these two */
+#define ST_SHOWGLOBAL   0x040
+#endif
+#define ST_CYBORG	(1<<8)
+
+/* initial value to put in flags */
+#define ST_INITIAL ST_KEEPPEACE
+/*
+ * ST_MAPMODE+ST_NAMEMODE+ST_SHOWSHIELDS+ \
+ * ST_KEEPPEACE+ST_SHOWLOCAL*2+ST_SHOWGLOBAL*2;
+ */
+
+/*-------------------------------------------------------------------------*/
+
+
+
+
+
+
+
+/*---------------------------VARIOUS STRUCTURES----------------------------*/
+
+/*
+ * This is used to indicate various things about the game and to hold global
+ * stats about it.  All stats are only updated while in t-mode.
+ */
+struct status
+{
+  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 */
+  unsigned long clock;		/* clock used for timestamping */
+  int nukegame;			/* set to PID of daemon */
+  int gameup;			/* is game up */
+};
+
+/*
+ * Some of the stuff above belongs in struct status2
+ */
+
+struct league_team
+{
+  int index;			/* team index, not mask. -1 means captain
+				 * hasn't chosen yet */
+  int captain;			/* player number of captain */
+  char name[32];
+  int timeouts_left;		/* NYI */
+  int ready;
+  int desirepause;		/* do we want to pause the game? */
+
+  struct
+  {
+    int regulation;		/* game length */
+    int overtime;
+    int maxplayers;		/* max players per team */
+    int galaxyreset;		/* do we want to reset the galaxy? */
+    int restart;		/* should we restart team selection? */
+  }   desired;
+};
+
+struct status2
+{
+#ifdef LEAGUE_SUPPORT
+  int league;			/* are we playing league? 0 means no. 1 means
+				 * we're prepping (captains choose sides). 2
+				 * means we're almost there. 3 means we're in
+				 * regulation league play. 4 means we're in
+				 * overtime */
+  int leagueticksleft;		/* ticks left in game play */
+
+  struct league_team home, away;
+
+  int timeout_timeleft;		/* ticks left in a timeout */
+  int awaypassed;		/* does the away team get first choice? this
+				 * becomes 1 if they PASS */
+  int paused;			/* contains 0 if the game is not paused.
+				 * contains the number of ticks left before
+				 * return to normal play if already paused */
+  int pausemsgfuse;		/* a fuse that prints out a reminder every
+				 * few seconds */
+#endif
+  int starttourn;
+  int newgalaxy;
+  int nontteamlock;
+};
+
+
+/*
+ * used for the request field of status.  These are used for a client
+ * querying the queue to see if he can get in
+ */
+
+enum queue_request_type_e
+{
+  REQFREE, REQWHO, REQDEAD
+};
+
+/*
+ * This structure is used to hold various info that each team has, such as
+ * how long before a certain ship type is done with construction.
+ */
+struct team
+{
+  char nickname[32];		/* he is now a %s  */
+  char name[32];		/* come join the %s */
+  char letter;			/* 1-letter abbrev */
+  char shortname[4];		/* 3-letter abbrev */
+
+  int s_turns[NUM_TYPES];	/* turns till another ship is legal */
+  int s_surrender;		/* minutes until this team surrenders */
+  int s_plcount;		/* how many planets this team owns */
+  int s_plcountold;		/* the old planet count */
+};
+
+
+/*
+ * this is used for getting a player name and password and fetching a players
+ * stats
+ */
+struct statentry
+{
+  char name[16];		/* player's name */
+  char password[16];		/* player's password */
+  struct stats stats;		/* player's stats */
+};
+
+/* Used by the function that computes ratings */
+struct rating
+{
+  float battle;
+  float strategy;
+  float special;
+
+  float bombrat;
+  float planetrat;
+  float resrat;
+  float offrat;
+  float dooshrat;
+  float ratio;
+
+  float sbrat;
+  float wbrat;
+  float jsrat;
+};
+
+/*-------------------------------------------------------------------------*/
+
+
+
+
+
+
+
+/*-----------------------------PLAYER STRUCTURE----------------------------*/
+
+#define MAXPORTS	6	/* maximum number of docking bays a ship type
+				 * can have */
+
+/* These are defines for the p_whydead field of the player structure */
+enum why_dead_e
+{
+  KNOREASON,
+  KQUIT,			/* Player quit */
+  KTORP,			/* killed by torp */
+  KPHASER,			/* killed by phaser */
+  KPLANET,			/* killed by planet */
+  KSHIP,			/* killed by other ship */
+  KDAEMON,			/* killed by dying daemon */
+  KWINNER,			/* killed by a winner */
+  KGHOST,			/* killed because a ghost */
+  KGENOCIDE,			/* killed by genocide */
+  KPROVIDENCE,			/* killed by a hacker */
+  KPLASMA,			/* killed by a plasma torpedo */
+  KTOURNEND,			/* killed by the end of the tourn */
+  KOVER,			/* killed by overtime */
+  KTOURNSTART,			/* killed by the start of the tournament */
+  KBINARY,			/* killed by improper client */
+  KMISSILE,			/* killed by a missile */
+  KASTEROID			/* smashed by an asteroid */
+};
+
+/* These are number defines for the player structs p_status field */
+enum player_status_e
+{
+  PFREE,			/* player slot is not filled */
+  POUTFIT,			/* player in process of being ghost busted */
+  PALIVE,			/* player is alive */
+  PEXPLODE,			/* player is in process of exploding */
+  PDEAD,			/* player is dead */
+  PTQUEUE,			/* player is on the tournament queue */
+  POBSERVE			/* player is observing the game */
+};
+
+
+struct player
+{
+  int p_no;			/* player number in player array */
+  int p_updates;		/* Number of updates ship has survived */
+  enum player_status_e p_status;/* Player status */
+  char p_observer;		/* is the player only an observer? */
+  unsigned int p_flags;		/* Player flags */
+  char p_name[16];		/* name of player */
+  char p_login[16];		/* as much of user name and site we can hold */
+  char p_monitor[16];		/* Monitor being played on */
+  struct ship p_ship;		/* Personal ship statistics */
+  int p_x;			/* players x coord in the galaxy */
+  int p_y;			/* player y coord in the galaxy */
+
+  unsigned char p_dir;		/* Real direction */
+  int p_subdir;			/* fraction direction change */
+  unsigned char p_desdir;	/* desired direction */
+
+  int p_speed;			/* Real speed */
+  int p_subspeed;		/* Fractional speed */
+  short p_desspeed;		/* Desired speed */
+  short p_warpdesspeed;		/* Desired warp speed, after prep [BDyess] */
+
+  short p_team;			/* Team I'm on */
+  enum HomeAway
+  {
+    NEITHER, HOME, AWAY
+  }   p_homeaway;
+  char p_spyable;		/* can you watch this player? */
+  char p_teamspy;		/* (mask) what teams can this player watch? */
+
+  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_nplasmatorp;		/* Number of plasma torps active */
+  short p_nthingys;		/* number of thingys we own. */
+  long p_specweap;		/* which special weapons we're packing */
+
+  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 */
+  char p_orbitdir;		/* direction you are orbiting the planet in */
+  short p_playerl;		/* Player locked onto */
+  short p_armies;		/* armies player is carrying */
+
+  int p_fuel;			/* fuel player's ship currently has */
+  short p_explode;		/* Keeps track of final explosion */
+
+  int p_etemp;			/* player's current engine temp */
+  int p_subetemp;		/* fractional part of E-temp */
+  short p_etime;		/* timer for coming out of E-temp */
+
+  int p_wtemp;			/* current weapon temp */
+  short p_wtime;		/* timer for coming out of W-temp */
+
+  enum why_dead_e p_whydead;	/* Tells you why you died */
+  short p_whodead;		/* Tells you who killed you */
+  struct stats p_stats;		/* player statistics */
+  short p_planets;		/* planets taken this game */
+  short p_armsbomb;		/* armies bombed this game */
+  short p_resbomb;		/* resources bombed */
+  short p_dooshes;		/* armies being carried killed */
+  int p_ghostbuster;		/* ??????????????? */
+  int p_docked;			/* If SB, # docked to, else no base host */
+  int p_port[MAXPORTS];		/* If SB, 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 */
+  char p_full_hostname[32];	/* full hostname 4/13/92 TC */
+#if 0
+  int p_planfrac;		/* for getting fractional credit for */
+  int p_bombfrac;		/* bombing and planet taking */
+#endif
+  int p_warptime;		/* timer for warp countdown */
+  int p_jsdock;			/* to keep track of undocking from JS */
+  int p_lastjs;			/* player number of last JS ridden on */
+  int p_lastman;		/* flag used to beam up last men */
+
+  int p_lastrefit;		/* what shipyard you last refitted at (plno) */
+  /* ping stuff */
+  int p_avrt;			/* average round trip time */
+  int p_stdv;			/* standard deviation in round trip time */
+  int p_pkls;			/* packet loss (input/output) */
+
+  /* clue checking goop */
+  int p_cluecountdown;
+  int p_cluedelay;
+
+  int p_ntspid;			/* proc ID of ntserv in control of this slot */
+  int p_zone;			/* total warp zone bonus/penalty [BDyess] */
+
+#ifdef	RC_DISTRESS
+  int gen_distress;		/* generate generic distress messages for
+				 * client */
+#endif
+};
+
+/* These are defines that used for the player struct's p_flags field */
+#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 */
+#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 */
+/*-------------------------------------------------------------------------*/
+
+
+
+
+
+
+
+/*-----------------------------TORP STRUCTURE-------------------------------*/
+
+
+/* For status field of torp structure */
+enum torp_status_e
+{
+  TFREE,			/* torp is not being fired */
+  TMOVE,			/* torp is moving with wobble */
+  TEXPLODE,			/* torp is in the process of exploding */
+  TDET,				/* torp is being detted */
+  TOFF,				/* torp is off ??? */
+  TSTRAIGHT,			/* Non-wobbling torp */
+  TRETURN,			/* torp is returning to owner (fighters) */
+  TLAND				/* torp gets recovered */
+};
+
+struct basetorp
+{
+  int bt_no;
+  enum torp_status_e bt_status;
+  int bt_owner;
+  int bt_x, bt_y;
+  unsigned char bt_dir;
+  int bt_damage;
+  int bt_speed;
+  int bt_fuse;
+  char bt_war;
+  char bt_team;
+  char bt_whodet;		/* who detonated... */
+};
+
+
+struct torp
+{
+  struct basetorp t_base;
+#define t_no		t_base.bt_no
+#define t_status	t_base.bt_status
+#define t_owner		t_base.bt_owner
+#define t_x		t_base.bt_x
+#define t_y		t_base.bt_y
+#define t_dir		t_base.bt_dir
+#define t_damage	t_base.bt_damage
+#define t_speed		t_base.bt_speed
+#define t_fuse		t_base.bt_fuse
+#define t_war		t_base.bt_war
+#define t_team		t_base.bt_team
+#define t_whodet	t_base.bt_whodet
+  short t_turns;		/* rate of change of direction if tracking */
+};
+
+/*-------------------------------------------------------------------------*/
+
+struct missile
+{
+  struct basetorp ms_base;
+#define ms_no		ms_base.bt_no
+#define ms_status	ms_base.bt_status
+#define ms_owner	ms_base.bt_owner
+#define ms_x		ms_base.bt_x
+#define ms_y		ms_base.bt_y
+#define ms_dir		ms_base.bt_dir
+#define ms_damage	ms_base.bt_damage
+#define ms_speed	ms_base.bt_speed
+#define ms_fuse		ms_base.bt_fuse
+#define ms_war		ms_base.bt_war
+#define ms_team		ms_base.bt_team
+#define ms_whodet       ms_base.bt_whodet
+  short ms_turns;
+  short ms_locked;
+  short ms_type;		/* A missile, fighter, or mine */
+  short fi_hasfired;		/* has the fighter fired a torp? */
+};
+/* defines for ms_type */
+#define MISSILETHINGY 0
+#define FIGHTERTHINGY 1
+#define MINETHINGY 2
+
+enum thingy_type
+{
+  TT_NONE,
+  TT_WARP_BEACON
+};
+
+struct warp_beacon
+{
+  int owner;
+  int x, y;
+};
+
+struct thingy
+{
+  enum thingy_type type;
+  union
+  {
+    struct warp_beacon wbeacon;
+  }   u;
+};
+
+
+
+/*---------------------------PLASMA TORP STRUCTURE-------------------------*/
+/* For the plasma status field */
+struct plasmatorp
+{
+  struct basetorp pt_base;
+#define pt_no		pt_base.bt_no
+#define pt_status	pt_base.bt_status
+#define PTFREE	TFREE
+#define PTMOVE	TMOVE
+#define PTEXPLODE	TEXPLODE
+#define PTDET	TDET
+#define pt_owner	pt_base.bt_owner
+#define pt_x		pt_base.bt_x
+#define pt_y		pt_base.bt_y
+#define pt_dir		pt_base.bt_dir
+#define pt_damage	pt_base.bt_damage
+#define pt_speed	pt_base.bt_speed
+#define pt_fuse		pt_base.bt_fuse
+#define pt_war		pt_base.bt_war
+#define pt_team		pt_base.bt_team
+#define pt_whodet	pt_base.bt_whodet
+  short pt_turns;		/* ticks turned per cycle */
+};
+
+
+/*-------------------------------------------------------------------------*/
+
+
+
+
+
+
+
+/*-----------------------------PHASER STRUCTURE---------------------------*/
+
+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 */
+};
+
+/* for phaser's status field */
+#define PHFREE 0x00		/* phaser not being fired */
+#define PHHIT  (1<<0)		/* When it hits a person */
+#define PHMISS (1<<1)		/* phaser missed */
+#define PHHIT2 (1<<2)		/* When it hits a plasma */
+
+/*-------------------------------------------------------------------------*/
+
+
+
+
+
+
+
+/*-----------------------------PLANET STRUCTURE---------------------------*/
+
+/* This structure is used to hold what each team knows about a planet */
+struct teaminfo
+{				/* to hold what a team knows about a planet */
+  int owner;			/* planet's owner */
+  int armies;			/* number of armies team knows about */
+  int flags;			/* flags team knows about */
+  int timestamp;		/* time info was taken */
+};
+
+struct planet
+{				/* all info about a planet */
+  int pl_no;			/* planet number */
+  int pl_flags;			/* attributes of planet */
+  int pl_owner;			/* the current owner of the planet */
+
+  int pl_x;			/* planet's coords */
+  int pl_y;			/* use the move_planet function to change
+				 * them */
+  int pl_radius;		/* distance from sun */
+  float pl_angle;		/* angular position relative to sun */
+  int pl_system;		/* planetary system number, 0 = no system */
+
+  char pl_name[16];		/* name of the planet */
+  char pl_namelen;		/* name's length--Cuts back on strlen's */
+#if 1
+  char pl_hostile;
+#else
+  char pl_torbit;		/* teams currently in orbit */
+#endif
+  int pl_tshiprepair;		/* repair and shipyard growth timer */
+  int pl_tagri;			/* agri growth timer */
+  int pl_tfuel;			/* fuel depot growth timer */
+  int pl_armies;		/* armies curently on planet */
+  int pl_warning;		/* timer so that planets don't talk too much */
+  int pl_hinfo;			/* which races have info on planet */
+  struct teaminfo pl_tinfo[MAXTEAM + 1];	/* to hold information for
+						 * races */
+  int pl_trevolt;		/* timer for planet revolting */
+  /* space grid support stuff */
+  int pl_next, pl_prev;		/* doubly linked list of planet numbers */
+  int pl_gridnum;		/* to hold grid square number */
+};
+
+/* defines for the pl_flags field of planet struct */
+#if 0
+#define PLHOME 	   0x000100	/* These 4 flags no longer are */
+#define PLCOUP     0x000200	/* used in the server */
+#define PLCHEAP    0x000400
+#define PLCORE     0x000800
+#define PLREPAIR   0x001010	/* planet can repair ships */
+#define PLFUEL     0x002020	/* planet has fuel depot */
+#define PLAGRI     0x004040	/* agricultural thingies built here */
+#define PLSHIPYARD 0x008000	/* planet has a shipyard on it */
+#define PLORESMASK 0x000070	/* mask for original resource flags */
+#define PLRESMASK  0x00F000	/* to mask off all but resource bits */
+#define PLRESSHIFT       12	/* bit to shift right by for resources */
+#define PLSTAR     0x010000	/* planet is actually a star */
+#define PLREDRAW   0x000080	/* Player close for redraw */
+#define PLPOISON   0x000000	/* poison atmosphere, no army growth */
+#define PLATYPE3   0x020000	/* slightly toxic, very slow army growth */
+#define PLATYPE2   0x040000	/* thin atmosphere, slow army growth */
+#define PLATYPE1   0x060000	/* normal human atmosphere, normal growth */
+#define PLATMASK   0x060000	/* to mask off everything but atmos bits */
+#define PLATSHIFT	 17	/* number of right bit shifts for atmos bits */
+#define PLBARREN   0X000000	/* rocky barren surface */
+#define PLDILYTH   0x080000	/* dilythium deposits on the planet */
+#define PLMETAL    0x100000	/* metal deposits on the planet */
+#define PLARABLE   0x200000	/* planet has farmland */
+#define PLSURMASK  0x380000	/* number of surface combinations */
+#define PLSURSHIFT 	 19	/* number of bit shift to surface */
+#define PLPARADISE 0x400000	/* Paradise server flag set to 1 for P server */
+#else
+
+/*
+ * 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
+ * n bits 4..6			planetary facilities (REPAIR,FUEL,AGRI) bit
+ * 7			redraw (archaic, recyclable?) bits 8..11
+ * ld flags (archaic, recyclable?) bits 12..15			paradise
+ * planetary facilities (REPAIR,FUEL,AGRI,SHIPY) bit  16
+ * osmic 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
+ * acilities (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, 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 NYI */
+#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 */
+
+#endif
+/*-------------------------------------------------------------------------*/
+
+
+/*----------------------T E R R A I N   S T R U C T S----------------------*/
+/* Data */
+struct t_unit
+{
+  int alt1;			/* alt1, alt2 are currently unused in the
+				 * client */
+  int alt2;			/* according to MDM (5/16/95) */
+  char types;			/* modify the packet code as well if these
+				 * are put */
+};				/* back in, as well as the structs in
+				 * packets.h */
+
+/* Flags */
+#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
+
+/*-------------------------------------------------------------------------*/
+
+
+/*-----------------------------MESSAGE STRUCTS-----------------------------*/
+
+struct message
+{
+  int m_no;			/* message number in array of messgs */
+  int m_flags;			/* flags for message type */
+  int m_time;			/* time message sent???? */
+  int m_recpt;			/* who it should be sent to */
+  char m_data[80];		/* the message string */
+  int m_from;			/* who it is from */
+};
+
+/*
+ * for m_flags field -- lower five bits used for what kind of group the
+ * message is sent to
+ */
+#define MVALID (1<<0)		/* the message is valid--has not been sent */
+#define MINDIV (1<<1)		/* sent to an individual */
+#define MTEAM  (1<<2)		/* sent to a team */
+#define MALL   (1<<3)		/* sent to eveyone */
+
+/* order these by importance (0x100 - 0x400) */
+/*
+ * many of these are not used by the client, so their incorrect value doesn't
+ * matter.  however we should note that the packet only has a width of 8 bits
+ * for the type field, and many of these flags are > 8 bits wide --eld
+ */
+
+#define	MGOD   ( 1<<4)		/* sent to god -- misc.c, socket.c */
+#define MGENO  ( 1<<5)		/* genocide message -- conquer.c */
+#define MCONQ  ( 2<<5)		/* conquer message -- planets.c */
+#define MTAKE  ( 1<<5)		/* planet taken message -- player.c */
+#define MDEST  ( 2<<5)		/* planet destroyed message -- player.c */
+#define MKILLA ( 5<<5)		/* a person killed -- dutil.c, snakemove.c */
+#define MBOMB  ( 3<<5)		/* bombarding planet -- planets.c */
+#define MKILLP ( 7<<5)		/* a person killed -- NOT USED */
+#define MKILL  ( 8<<5)		/* a person killed -- NOT USED */
+#define MLEAVE ( 9<<5)		/* player leaving game message -- main.c */
+#define MJOIN  (10<<5)		/* player joining game -- enter.c */
+#define MGHOST (11<<5)		/* player ghostbusted -- daemonII.c */
+#define MCOUP1 (12<<5)		/* a coup occured -- NOT USED */
+#define MCOUP2 (13<<5)		/* -- NOT USED */
+#define MDISTR (14<<5)		/* flag for a distress message */
+#define MMASK  (0xf<<5)		/* bits in the flags field should be sent --
+				 * 
+				/* message control structure */
+struct mctl
+{				/* used to keep track of position in */
+  int mc_current;		/* array we put our last message */
+};
+
+/*-------------------------------------------------------------------------*/
+
+
+
+struct rsa_key
+{
+  unsigned char client_type[KEY_SIZE];
+  unsigned char architecture[KEY_SIZE];
+  unsigned char global[KEY_SIZE];
+  unsigned char public[KEY_SIZE];
+};
+
+
+/*
+ * RCD stuff, from bronco server 2.7pl13.
+ */
+#ifdef RC_DISTRESS
+struct distress
+{
+  unsigned char sender;
+  unsigned char dam, shld, arms, wtmp, etmp, fuelp, sts;
+  unsigned char wtmpflag, etempflag, cloakflag, distype, macroflag, ttype;
+  unsigned char close_pl, close_en, target, tclose_pl, tclose_en, pre_app,
+      i;
+  unsigned char close_j, close_fr, tclose_j, tclose_fr;
+  unsigned char cclist[6];	/* CC list */
+  unsigned char preappend[80];	/* text which we pre- or append */
+};
+
+/*
+ * macro management
+ */
+struct dmacro_list
+{
+  char c;
+  char *name;
+  char *macro;
+};
+
+/*
+ * distress types
+ */
+enum dist_type
+{
+  /* help me do series */
+  take = 1, ogg, bomb, space_control, help1, help2, help3, help4,
+
+  /* doing series */
+  escorting, ogging, bombing, controlling, doing1, doing2, doing3, doing4,
+
+  /* other info series */
+  free_beer,			/* player x is totally hosed now */
+  no_gas,			/* player x has no gas */
+  crippled,			/* player x is crippled but may have fuel */
+  pickup,			/* player x picked up armies */
+  pop,				/* there was a pop somewhere */
+  carrying,			/* I am carrying */
+  other1, other2,
+
+  /* just a generic distress call */
+  generic
+};
+
+/*
+ * targets of messages
+ */
+enum target_type
+{
+  none,
+  planet,
+  player
+};
+
+/*
+ * from bronco server2.7pl3
+ */
+/*
+ * The General distress has format:
+ * 
+ * A 'E' will do byte1-8 inclusive. Macros can do more but haven't been
+ * implemented that way yet.
+ * 
+ * byte1: xxyzzzzz where zzzzz is dist_type, xx is target_type and y is 1 if
+ * this is a macro and not just a simple distress (a simple distress will
+ * ONLY send ship info like shields, armies, status, location, etc.)
+ * 
+ * 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
+ * 
+ * Byte 11 and on are only sent if y (from byte 1) is = 1 although even for
+ * simplest case (y=0) we should send byte14+ = 0x80 and then a null so that
+ * in future we can send a cc list and pre/append text byte11: 1ttt tttt -
+ * target (either player number or planet number) byte12: 1ppp pppp - planet
+ * closest to target byte13: 1eee eeee - enemy closest to target byte14+: cc
+ * list (each player to cc this message to is 11pp ppp) cc list is terminated
+ * by 1000 0000 or 0100 0000 ) pre-pend     append byte15++: the text to pre
+ * or append .. depending on termination above. text is null terminated and
+ * the last thing in this distress
+ */
+
+#endif				/* RCD */
+
+struct command_handler
+{
+  char *command;
+  int tag;
+  char *desc;
+  int (*handler) ();
+};
+
+#ifdef VOTING
+struct vote_handler
+{
+  char *type;
+  int tag;
+  int minpass;
+  int start;
+  char *desc;
+  int frequency;
+  int (*handler) ();
+};
+
+#define VC_ALL     0x0001	/* Majority Vote */
+#define VC_TEAM    0x0002	/* Team Vote     */
+#define VC_GLOG    0x0010	/* Write Votes to God Log */
+#define VC_PLAYER  0x0020	/* Each player can be voted on, like eject */
+
+
+#endif
+
+/*-------------------------SOME CLIENT STRUCTURES--------------------------*/
+
+/* used to tell what planet or player mouse is pointing to */
+struct obtype
+{
+  int o_type;			/* mouse pointing to a player or planet */
+  int o_num;			/* the player or planet number */
+};
+
+/* used in the o_type structure */
+#define PLANETTYPE 1		/* mouse on planet */
+#define PLAYERTYPE 2		/* mouse on player */
+
+
+/* used to hold a players rank */
+struct rank
+{
+  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
+{
+  char *name;			/* name of rank */
+};
+
+/*-------------------------------------------------------------------------*/
+
+
+
+#endif
+
+/*---------END OF FILE---------*/