diff src/packets.h @ 4:aa38447a4b21

First entry of Paradise Server 2.9 patch 10 Beta
author darius
date Sat, 06 Dec 1997 04:37:03 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/packets.h	Sat Dec 06 04:37:03 1997 +0000
@@ -0,0 +1,1201 @@
+/*--------------------------------------------------------------------------
+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
+--------------------------------------------------------------------------*/
+
+/*
+ * Include file for socket I/O xtrek.
+ * 
+ * Kevin P. Smith 1/29/89
+ */
+
+#ifndef packets_h_
+#define packets_h_
+
+#define STATUS_TOKEN	"\t@@@"	/* ATM */
+
+/*
+ * the following typedefs allow portability to machines without the
+ * ubiquitous 32-bit architecture (KSR1, Cray, DEC Alpha)
+ */
+
+typedef unsigned int CARD32;
+typedef unsigned short CARD16;
+typedef unsigned char CARD8;
+
+typedef int INT32;
+typedef short INT16;
+#if __STDC__ || defined(sgi) || defined(AIXV3)
+typedef signed char INT8;
+#else
+/* stupid compilers */
+typedef char INT8;
+#endif
+
+/*
+ * TCP and UDP use identical packet formats; the only difference is that,
+ * when in UDP mode, all packets sent from server to client have a sequence
+ * number appended to them.
+ * 
+ * (note: ALL packets, whether sent on the TCP or UDP channel, will have the
+ * sequence number.  Thus it's important that client & server agree on when
+ * to switch.  This was done to keep critical and non-critical data in sync.)
+ */
+
+/*
+ * the various pad members of the structures are used for explicit data
+ * alignment.  They do not contain any data.  All structures are aligned to 4
+ * bytes.  If your compiler forces 8 byte alignment, you will not be adhering
+ * to the netrek protocol.
+ */
+
+/* packets sent from xtrek server to remote client */
+#define SP_MESSAGE 	1
+#define SP_PLAYER_INFO 	2	/* general player info not elsewhere */
+#define SP_KILLS	3	/* # kills a player has */
+#define SP_PLAYER	4	/* x,y for player */
+#define SP_TORP_INFO	5	/* torp status */
+#define SP_TORP		6	/* torp location */
+#define SP_PHASER	7	/* phaser status and direction */
+#define SP_PLASMA_INFO	8	/* player login information */
+#define SP_PLASMA	9	/* like SP_TORP */
+#define SP_WARNING	10	/* like SP_MESG */
+#define SP_MOTD		11	/* line from .motd screen */
+#define SP_YOU		12	/* info on you? */
+#define SP_QUEUE	13	/* estimated loc in queue? */
+#define SP_STATUS	14	/* galaxy status numbers */
+#define SP_PLANET 	15	/* planet armies & facilities */
+#define SP_PICKOK	16	/* your team & ship was accepted */
+#define SP_LOGIN	17	/* login response */
+#define SP_FLAGS	18	/* give flags for a player */
+#define SP_MASK		19	/* tournament mode mask */
+#define SP_PSTATUS	20	/* give status for a player */
+#define SP_BADVERSION   21	/* invalid version number */
+#define SP_HOSTILE	22	/* hostility settings for a player */
+#define SP_STATS	23	/* a player's statistics */
+#define SP_PL_LOGIN	24	/* new player logs in */
+#define SP_RESERVED	25	/* for future use */
+#define SP_PLANET_LOC	26	/* planet name, x, y */
+
+#define SP_SCAN		27	/* scan packet */
+#define SP_UDP_REPLY	28	/* notify client of UDP status */
+#define SP_SEQUENCE	29	/* sequence # packet */
+#define SP_SC_SEQUENCE	30	/* this trans is semi-critical info */
+#define SP_RSA_KEY	31	/* RSA data packet */
+
+#define SP_MOTD_PIC     32	/* motd bitmap pictures */
+#define SP_STATS2	33	/* new stats packet */
+#define SP_STATUS2	34	/* new status packet */
+#define SP_PLANET2	35	/* new planet packet */
+#define SP_NEW_MOTD     36	/* New MOTD info notification uses */
+#define SP_THINGY	37	/* thingy location */
+#define SP_THINGY_INFO	38	/* thingy status */
+#define SP_SHIP_CAP	39	/* ship capabilities */
+
+#ifdef SHORT_PACKETS
+#define SP_S_REPLY      40	/* reply to send-short request */
+#define SP_S_MESSAGE    41	/* var. Message Packet */
+#define SP_S_WARNING    42	/* Warnings with 4  Bytes */
+#define SP_S_YOU        43	/* hostile,armies,whydead,etc .. */
+#define SP_S_YOU_SS     44	/* your ship status */
+#define SP_S_PLAYER     45	/* variable length player packet */
+#endif
+
+#define SP_PING         46	/* ping packet */
+
+#ifdef SHORT_PACKETS
+#define SP_S_TORP       47	/* variable length torp packet */
+#define SP_S_TORP_INFO  48	/* SP_S_TORP with TorpInfo */
+#define SP_S_8_TORP     49	/* optimized SP_S_TORP */
+#define SP_S_PLANET     50	/* see SP_PLANET */
+
+/* variable length packets */
+#define VPLAYER_SIZE    4
+#define SHORTVERSION    10	/* other number blocks, like UDP Version */
+#endif
+
+#define SP_GPARAM	51	/* game params packet */
+
+/*
+ * the following is a family of packets with the same type, but a
+ * discriminating subtype
+ */
+#define SP_PARADISE_EXT1	52
+#define SP_PE1_MISSING_BITMAP	0
+#define SP_PE1_NUM_MISSILES	1
+/* end of packet 52 subtypes */
+#define SP_TERRAIN2	53	/* GZipped terrain packet - 5/16/95 rpg */
+#define SP_TERRAIN_INFO2 54	/* header for terrain info */
+#ifdef FEATURE
+#define SP_FEATURE	60	/* type 60 is FEATURE packets */
+#endif
+
+
+/* packets sent from remote client to xtrek server */
+#define CP_MESSAGE      1	/* send a message */
+#define CP_SPEED	2	/* set speed */
+#define CP_DIRECTION	3	/* change direction */
+#define CP_PHASER	4	/* phaser in a direction */
+#define CP_PLASMA	5	/* plasma (in a direction) */
+#define CP_TORP		6	/* fire torp in a direction */
+#define CP_QUIT		7	/* self destruct */
+#define CP_LOGIN	8	/* log in (name, password) */
+#define CP_OUTFIT	9	/* outfit to new ship */
+#define CP_WAR		10	/* change war status */
+#define CP_PRACTR	11	/* create practice robot? */
+#define CP_SHIELD	12	/* raise/lower sheilds */
+#define CP_REPAIR	13	/* enter repair mode */
+#define CP_ORBIT	14	/* orbit planet/starbase */
+#define CP_PLANLOCK	15	/* lock on planet */
+#define CP_PLAYLOCK	16	/* lock on player */
+#define CP_BOMB		17	/* bomb a planet */
+#define CP_BEAM		18	/* beam armies up/down */
+#define CP_CLOAK	19	/* cloak on/off */
+#define CP_DET_TORPS	20	/* detonate enemy torps */
+#define CP_DET_MYTORP	21	/* detonate one of my torps */
+#define CP_COPILOT	22	/* toggle copilot mode */
+#define CP_REFIT	23	/* refit to different ship type */
+#define CP_TRACTOR	24	/* tractor on/off */
+#define CP_REPRESS	25	/* pressor on/off */
+#define CP_COUP		26	/* coup home planet */
+#define CP_SOCKET	27	/* new socket for reconnection */
+#define CP_OPTIONS	28	/* send my options to be saved */
+#define CP_BYE		29	/* I'm done! */
+#define CP_DOCKPERM	30	/* set docking permissions */
+#define CP_UPDATES	31	/* set number of usecs per update */
+#define CP_RESETSTATS	32	/* reset my stats packet */
+#define CP_RESERVED	33	/* for future use */
+
+#define CP_SCAN		34	/* ATM: request for player scan */
+
+#define CP_UDP_REQ	35	/* request UDP on/off */
+#define CP_SEQUENCE	36	/* sequence # packet */
+#define CP_RSA_KEY	37	/* request MOTD */
+#define CP_ASK_MOTD	38	/* request MOTD */
+
+#define CP_PING_RESPONSE 42	/* client response */
+
+#ifdef SHORT_PACKETS
+#define CP_S_REQ                43
+#define CP_S_THRS               44
+#define CP_S_MESSAGE    45	/* vari. Message Packet */
+#define CP_S_RESERVED       46
+#define CP_S_DUMMY      47
+#endif
+
+#ifdef FEATURE
+#define CP_FEATURE	60	/* Feature packets */
+#endif
+
+#define SOCKVERSION 	4
+#define UDPVERSION	10	/* changing this blocks other */
+/* versions */
+
+struct packet_handler
+{
+  void (*handler) ();
+};
+
+
+/*
+ * These are server --> client packets
+ */
+
+struct mesg_spacket
+{
+  INT8 type;			/* SP_MESSAGE */
+  CARD8 m_flags;
+  CARD8 m_recpt;
+  CARD8 m_from;
+  char mesg[80];
+};
+
+struct plyr_info_spacket
+{
+  INT8 type;			/* SP_PLAYER_INFO */
+  INT8 pnum;
+  INT8 shiptype;
+  INT8 team;
+};
+
+struct kills_spacket
+{
+  INT8 type;			/* SP_KILLS */
+  INT8 pnum;
+  INT8 pad1;
+  INT8 pad2;
+  CARD32 kills;			/* where 1234=12.34 kills and 0=0.00 kills */
+};
+
+struct player_spacket
+{
+  INT8 type;			/* SP_PLAYER */
+  INT8 pnum;
+  CARD8 dir;
+  INT8 speed;
+  INT32 x, y;
+};
+
+struct torp_info_spacket
+{
+  INT8 type;			/* SP_TORP_INFO */
+  INT8 war;
+  INT8 status;			/* TFREE, TDET, etc... */
+  INT8 pad1;			/* pad needed for cross cpu compatibility */
+  INT16 tnum;
+  INT16 pad2;
+};
+
+struct torp_spacket
+{
+  INT8 type;			/* SP_TORP */
+  CARD8 dir;
+  INT16 tnum;
+  INT32 x, y;
+};
+
+/*
+ * Shapes of thingys.  It would be best to add to the end of this list and
+ * try to coordinate your additions with other hackers.
+ */
+enum thingy_types
+{
+  SHP_BLANK, SHP_MISSILE, SHP_BOOM, SHP_TORP, SHP_PLASMA, SHP_MINE,
+  SHP_PBOOM, SHP_FIGHTER, SHP_WARP_BEACON
+};
+
+struct thingy_info_spacket
+{
+  INT8 type;			/* SP_THINGY_INFO */
+  INT8 war;
+  INT16 shape;			/* a thingy_types */
+  INT16 tnum;
+  INT16 owner;
+};
+
+struct thingy_spacket
+{
+  INT8 type;			/* SP_THINGY */
+  CARD8 dir;
+  INT16 tnum;
+  INT32 x, y;
+};
+
+struct phaser_spacket
+{
+  INT8 type;			/* SP_PHASER */
+  INT8 pnum;
+  INT8 status;			/* PH_HIT, etc... */
+  CARD8 dir;
+  INT32 x, y;
+  INT32 target;
+};
+
+struct plasma_info_spacket
+{
+  INT8 type;			/* SP_PLASMA_INFO */
+  INT8 war;
+  INT8 status;			/* TFREE, TDET, etc... */
+  INT8 pad1;			/* pad needed for cross cpu compatibility */
+  INT16 pnum;
+  INT16 pad2;
+};
+
+struct plasma_spacket
+{
+  INT8 type;			/* SP_PLASMA */
+  INT8 pad1;
+  INT16 pnum;
+  INT32 x, y;
+};
+
+struct warning_spacket
+{
+  INT8 type;			/* SP_WARNING */
+  INT8 pad1;
+  INT8 pad2;
+  INT8 pad3;
+  char mesg[80];
+};
+
+struct motd_spacket
+{
+  INT8 type;			/* SP_MOTD */
+  INT8 pad1;
+  INT8 pad2;
+  INT8 pad3;
+  char line[80];
+};
+
+struct you_spacket
+{
+  INT8 type;			/* SP_YOU */
+  INT8 pnum;			/* Guy needs to know this... */
+  INT8 hostile;
+  INT8 swar;
+  INT8 armies;
+  INT8 tractor;			/* ATM - visible tractor (was pad1) */
+  CARD8 pad2;
+  CARD8 pad3;
+  CARD32 flags;
+  INT32 damage;
+  INT32 shield;
+  INT32 fuel;
+  INT16 etemp;
+  INT16 wtemp;
+  INT16 whydead;
+  INT16 whodead;
+};
+
+struct queue_spacket
+{
+  INT8 type;			/* SP_QUEUE */
+  INT8 pad1;
+  INT16 pos;
+};
+
+struct status_spacket
+{
+  INT8 type;			/* SP_STATUS */
+  INT8 tourn;
+  INT8 pad1;
+  INT8 pad2;
+  CARD32 armsbomb;
+  CARD32 planets;
+  CARD32 kills;
+  CARD32 losses;
+  CARD32 time;
+  CARD32 timeprod;
+};
+
+struct planet_spacket
+{
+  INT8 type;			/* SP_PLANET */
+  INT8 pnum;
+  INT8 owner;
+  INT8 info;
+  INT16 flags;
+  INT16 pad2;
+  INT32 armies;
+};
+
+struct pickok_spacket
+{
+  INT8 type;			/* SP_PICKOK */
+  INT8 state;
+  INT8 pad2;
+  INT8 pad3;
+};
+
+struct login_spacket
+{
+  INT8 type;			/* SP_LOGIN */
+  INT8 accept;			/* 1/0 */
+  INT8 pad2;
+  INT8 pad3;
+  INT32 flags;
+  char keymap[96];
+};
+
+struct flags_spacket
+{
+  INT8 type;			/* SP_FLAGS */
+  INT8 pnum;			/* whose flags are they? */
+  INT8 tractor;			/* ATM - visible tractors */
+  INT8 pad2;
+  CARD32 flags;
+};
+
+struct mask_spacket
+{
+  INT8 type;			/* SP_MASK */
+  INT8 mask;
+  INT8 pad1;
+  INT8 pad2;
+};
+
+struct pstatus_spacket
+{
+  INT8 type;			/* SP_PSTATUS */
+  INT8 pnum;
+  INT8 status;
+  INT8 pad1;
+};
+
+struct badversion_spacket
+{
+  INT8 type;			/* SP_BADVERSION */
+  INT8 why;
+  INT8 pad2;
+  INT8 pad3;
+};
+
+struct hostile_spacket
+{
+  INT8 type;			/* SP_HOSTILE */
+  INT8 pnum;
+  INT8 war;
+  INT8 hostile;
+};
+
+struct stats_spacket
+{
+  INT8 type;			/* SP_STATS */
+  INT8 pnum;
+  INT8 pad1;
+  INT8 pad2;
+  INT32 tkills;			/* Tournament kills */
+  INT32 tlosses;		/* Tournament losses */
+  INT32 kills;			/* overall */
+  INT32 losses;			/* overall */
+  INT32 tticks;			/* ticks of tournament play time */
+  INT32 tplanets;		/* Tournament planets */
+  INT32 tarmies;		/* Tournament armies */
+  INT32 sbkills;		/* Starbase kills */
+  INT32 sblosses;		/* Starbase losses */
+  INT32 armies;			/* non-tourn armies */
+  INT32 planets;		/* non-tourn planets */
+  INT32 maxkills;		/* max kills as player * 100 */
+  INT32 sbmaxkills;		/* max kills as sb * 100 */
+};
+
+struct plyr_login_spacket
+{
+  INT8 type;			/* SP_PL_LOGIN */
+  INT8 pnum;
+  INT8 rank;
+  INT8 pad1;
+  INT8 name[16];
+  INT8 monitor[16];
+  INT8 login[16];
+};
+
+struct reserved_spacket
+{
+  INT8 type;			/* SP_RESERVED */
+  INT8 pad1;
+  INT8 pad2;
+  INT8 pad3;
+  INT8 data[16];
+};
+
+struct planet_loc_spacket
+{
+  INT8 type;			/* SP_PLANET_LOC */
+  INT8 pnum;
+  INT8 pad2;
+  INT8 pad3;
+  INT32 x;
+  INT32 y;
+  INT8 name[16];
+};
+
+struct scan_spacket
+{				/* ATM */
+  INT8 type;			/* SP_SCAN */
+  INT8 pnum;
+  INT8 success;
+  INT8 pad1;
+  INT32 p_fuel;
+  INT32 p_armies;
+  INT32 p_shield;
+  INT32 p_damage;
+  INT32 p_etemp;
+  INT32 p_wtemp;
+};
+
+struct udp_reply_spacket
+{				/* UDP */
+  INT8 type;			/* SP_UDP_REPLY */
+  INT8 reply;
+  INT8 pad1;
+  INT8 pad2;
+  INT32 port;
+};
+
+struct sequence_spacket
+{				/* UDP */
+  INT8 type;			/* SP_SEQUENCE */
+  INT8 pad1;
+  CARD16 sequence;
+};
+struct sc_sequence_spacket
+{				/* UDP */
+  INT8 type;			/* SP_CP_SEQUENCE */
+  INT8 pad1;
+  CARD16 sequence;
+};
+
+/*
+ * Game configuration. KAO 1/23/93
+ */
+
+struct ship_cap_spacket
+{				/* Server configuration of client */
+  INT8 type;			/* screw motd method */
+  INT8 operation;		/* 0 = add/change a ship, 1 = remove a ship */
+  INT16 s_type;			/* SP_SHIP_CAP */
+  INT16 s_torpspeed;
+  INT16 s_phaserrange;
+  INT32 s_maxspeed;
+  INT32 s_maxfuel;
+  INT32 s_maxshield;
+  INT32 s_maxdamage;
+  INT32 s_maxwpntemp;
+  INT32 s_maxegntemp;
+  INT16 s_width;
+  INT16 s_height;
+  INT16 s_maxarmies;
+  INT8 s_letter;
+  INT8 pad2;
+  INT8 s_name[16];
+  INT8 s_desig1;
+  INT8 s_desig2;
+  INT16 s_bitmap;
+};
+
+struct motd_pic_spacket
+{
+  INT8 type;			/* SP_MOTD_PIC */
+  INT8 pad1;
+  INT16 x, y, page;
+  INT16 width, height;
+  INT8 bits[1016];
+};
+
+
+/* This is used to send paradise style stats */
+struct stats_spacket2
+{
+  INT8 type;			/* SP_STATS2 */
+  INT8 pnum;
+  INT8 pad1;
+  INT8 pad2;
+
+  INT32 genocides;		/* number of genocides participated in */
+  INT32 maxkills;		/* max kills ever * 100  */
+  INT32 di;			/* destruction inflicted for all time * 100 */
+  INT32 kills;			/* Kills in tournament play */
+  INT32 losses;			/* Losses in tournament play */
+  INT32 armsbomb;		/* Tournament armies bombed */
+  INT32 resbomb;		/* resources bombed off */
+  INT32 dooshes;		/* armies killed while being carried */
+  INT32 planets;		/* Tournament planets conquered */
+  INT32 tticks;			/* Tournament ticks */
+  /* SB/WB/JS stats are entirely separate */
+  INT32 sbkills;		/* Kills as starbase */
+  INT32 sblosses;		/* Losses as starbase */
+  INT32 sbticks;		/* Time as starbase */
+  INT32 sbmaxkills;		/* Max kills as starbase * 100 */
+  INT32 wbkills;		/* Kills as warbase */
+  INT32 wblosses;		/* Losses as warbase */
+  INT32 wbticks;		/* Time as warbase */
+  INT32 wbmaxkills;		/* Max kills as warbase * 100 */
+  INT32 jsplanets;		/* planets assisted with in JS */
+  INT32 jsticks;		/* ticks played as a JS */
+  INT32 rank;			/* Ranking of the player */
+  INT32 royal;			/* royaly, specialty, rank */
+};
+
+/* status info for paradise stats */
+struct status_spacket2
+{
+  INT8 type;			/* SP_STATUS2 */
+  INT8 tourn;
+  INT8 pad1;
+  INT8 pad2;
+  CARD32 dooshes;		/* total number of armies dooshed */
+  CARD32 armsbomb;		/* all t-mode armies bombed */
+  CARD32 resbomb;		/* resources bombed */
+  CARD32 planets;		/* all t-mode planets taken */
+  CARD32 kills;			/* all t-mode kills made */
+  CARD32 losses;		/* all t-mode losses */
+  CARD32 sbkills;		/* total kills in SB's */
+  CARD32 sblosses;		/* total losses in Sb's */
+  CARD32 sbtime;		/* total time in SB's */
+  CARD32 wbkills;		/* kills in warbases */
+  CARD32 wblosses;		/* losses in warbases */
+  CARD32 wbtime;		/* total time played in wb's */
+  CARD32 jsplanets;		/* total planets taken by jump ships */
+  CARD32 jstime;		/* total time in a jump ship */
+  CARD32 time;			/* t mode time in this game */
+  CARD32 timeprod;		/* t-mode ship ticks--sort of like */
+};
+
+
+/* planet info for a paradise planet */
+struct planet_spacket2
+{
+  INT8 type;			/* SP_PLANET2 */
+  INT8 pnum;			/* planet number */
+  INT8 owner;			/* owner of the planet */
+  INT8 info;			/* who has touched planet */
+  INT32 flags;			/* planet's flags */
+  INT32 timestamp;		/* timestamp for info on planet */
+  INT32 armies;			/* armies on the planet */
+};
+
+/* terrain info for Paradise terrain */
+/* 5/16/95 rpg */
+
+struct terrain_info_packet2
+{
+  CARD8 type;			/* SP_TERRAIN_INFO2 */
+  CARD8 pad;
+  CARD16 pad2;
+  CARD16 xdim;			/* x dimension of grid */
+  CARD16 ydim;			/* y dimension of grid */
+};
+
+struct terrain_packet2
+{
+  CARD8 type;			/* SP_TERRAIN2 */
+  CARD8 sequence;		/* Sequence number - may need multiple
+				 * packets */
+  CARD8 total_pkts;		/* since terrain is gzipped, we need length
+				 * (may have) */
+  CARD8 length;			/* multiple packets */
+  CARD8 terrain_type[NTERRAIN];	/* send up to 128 gzipped bytes at once */
+  /* CARD16   terrain_alt1[128]; *//* Note - these values should be *changed* */
+  /* CARD16   terrain_atl2[128]; *//* depending on if alt1/alt2 are used. */
+};
+
+struct obvious_packet
+{
+  INT8 type;			/* SP_NEW_MOTD */
+  INT8 pad1;			/* CP_ASK_MOTD */
+};
+
+struct rsa_key_spacket
+{
+  INT8 type;			/* SP_RSA_KEY */
+  INT8 pad1;
+  INT8 pad2;
+  INT8 pad3;
+  CARD8 data[KEY_SIZE];
+};
+
+
+struct ping_spacket
+{
+  INT8 type;			/* SP_PING */
+  CARD8 number;			/* id (ok to wrap) */
+  CARD16 lag;			/* delay of last ping in ms */
+
+  CARD8 tloss_sc;		/* total loss server-client 0-100% */
+  CARD8 tloss_cs;		/* total loss client-server 0-100% */
+
+  CARD8 iloss_sc;		/* inc. loss server-client 0-100% */
+  CARD8 iloss_cs;		/* inc. loss client-server 0-100% */
+};
+
+struct paradiseext1_spacket
+{
+  INT8 type;
+  CARD8 subtype;
+  INT16 pad;
+};
+
+struct pe1_missing_bitmap_spacket
+{
+  INT8 type;
+  CARD8 subtype;
+
+  INT16 page;
+
+  INT16 x, y;
+  INT16 width, height;
+};
+
+struct pe1_num_missiles_spacket
+{
+  INT8 type;			/* SP_PARADISE_EXT1 */
+  CARD8 subtype;		/* SP_PE1_NUM_MISSILES */
+
+  INT16 num;			/* number of missiles */
+};
+
+/*
+ * These are the client --> server packets
+ */
+
+struct mesg_cpacket
+{
+  INT8 type;			/* CP_MESSAGE */
+  INT8 group;
+  INT8 indiv;
+  INT8 pad1;
+  INT8 mesg[80];
+};
+
+struct speed_cpacket
+{
+  INT8 type;			/* CP_SPEED */
+  INT8 speed;
+  INT8 pad1;
+  INT8 pad2;
+};
+
+struct dir_cpacket
+{
+  INT8 type;			/* CP_DIRECTION */
+  CARD8 dir;
+  INT8 pad1;
+  INT8 pad2;
+};
+
+struct phaser_cpacket
+{
+  INT8 type;			/* CP_PHASER */
+  CARD8 dir;
+  INT8 pad1;
+  INT8 pad2;
+};
+
+struct plasma_cpacket
+{
+  INT8 type;			/* CP_PLASMA */
+  CARD8 dir;
+  INT8 pad1;
+  INT8 pad2;
+};
+
+struct torp_cpacket
+{
+  INT8 type;			/* CP_TORP */
+  CARD8 dir;			/* direction to fire torp */
+  INT8 pad1;
+  INT8 pad2;
+};
+
+struct quit_cpacket
+{
+  INT8 type;			/* CP_QUIT */
+  INT8 pad1;
+  INT8 pad2;
+  INT8 pad3;
+};
+
+struct login_cpacket
+{
+  INT8 type;			/* CP_LOGIN */
+  INT8 query;
+  INT8 pad2;
+  INT8 pad3;
+  INT8 name[16];
+  INT8 password[16];
+  INT8 login[16];
+};
+
+struct outfit_cpacket
+{
+  INT8 type;			/* CP_OUTFIT */
+  INT8 team;
+  INT8 ship;
+  INT8 pad1;
+};
+
+struct war_cpacket
+{
+  INT8 type;			/* CP_WAR */
+  INT8 newmask;
+  INT8 pad1;
+  INT8 pad2;
+};
+
+struct practr_cpacket
+{
+  INT8 type;			/* CP_PRACTR */
+  INT8 pad1;
+  INT8 pad2;
+  INT8 pad3;
+};
+
+struct shield_cpacket
+{
+  INT8 type;			/* CP_SHIELD */
+  INT8 state;			/* up/down */
+  INT8 pad1;
+  INT8 pad2;
+};
+
+struct repair_cpacket
+{
+  INT8 type;			/* CP_REPAIR */
+  INT8 state;			/* on/off */
+  INT8 pad1;
+  INT8 pad2;
+};
+
+struct orbit_cpacket
+{
+  INT8 type;			/* CP_ORBIT */
+  INT8 state;			/* on/off */
+  INT8 pad1;
+  INT8 pad2;
+};
+
+struct planlock_cpacket
+{
+  INT8 type;			/* CP_PLANLOCK */
+  INT8 pnum;
+  INT8 pad1;
+  INT8 pad2;
+};
+
+struct playlock_cpacket
+{
+  INT8 type;			/* CP_PLAYLOCK */
+  INT8 pnum;
+  INT8 pad1;
+  INT8 pad2;
+};
+
+struct bomb_cpacket
+{
+  INT8 type;			/* CP_BOMB */
+  INT8 state;
+  INT8 pad1;
+  INT8 pad2;
+};
+
+struct beam_cpacket
+{
+  INT8 type;			/* CP_BEAM */
+  INT8 state;
+  INT8 pad1;
+  INT8 pad2;
+};
+
+struct cloak_cpacket
+{
+  INT8 type;			/* CP_CLOAK */
+  INT8 state;
+  INT8 pad1;
+  INT8 pad2;
+};
+
+struct det_torps_cpacket
+{
+  INT8 type;			/* CP_DET_TORPS */
+  INT8 pad1;
+  INT8 pad2;
+  INT8 pad3;
+};
+
+struct det_mytorp_cpacket
+{
+  INT8 type;			/* CP_DET_MYTORP */
+  INT8 pad1;
+  INT16 tnum;
+};
+
+struct copilot_cpacket
+{
+  INT8 type;			/* CP_COPLIOT */
+  INT8 state;
+  INT8 pad1;
+  INT8 pad2;
+};
+
+struct refit_cpacket
+{
+  INT8 type;			/* CP_REFIT */
+  INT8 ship;
+  INT8 pad1;
+  INT8 pad2;
+};
+
+struct tractor_cpacket
+{
+  INT8 type;			/* CP_TRACTOR */
+  INT8 state;
+  INT8 pnum;
+  INT8 pad2;
+};
+
+struct repress_cpacket
+{
+  INT8 type;			/* CP_REPRESS */
+  INT8 state;
+  INT8 pnum;
+  INT8 pad2;
+};
+
+struct coup_cpacket
+{
+  INT8 type;			/* CP_COUP */
+  INT8 pad1;
+  INT8 pad2;
+  INT8 pad3;
+};
+
+struct socket_cpacket
+{
+  INT8 type;			/* CP_SOCKET */
+  INT8 version;
+  INT8 udp_version;		/* was pad2 */
+  INT8 pad3;
+  CARD32 socket;
+};
+
+struct options_cpacket
+{
+  INT8 type;			/* CP_OPTIONS */
+  INT8 pad1;
+  INT8 pad2;
+  INT8 pad3;
+  CARD32 flags;
+  INT8 keymap[96];
+};
+
+struct bye_cpacket
+{
+  INT8 type;			/* CP_BYE */
+  INT8 pad1;
+  INT8 pad2;
+  INT8 pad3;
+};
+
+struct dockperm_cpacket
+{
+  INT8 type;			/* CP_DOCKPERM */
+  INT8 state;
+  INT8 pad2;
+  INT8 pad3;
+};
+
+struct updates_cpacket
+{
+  INT8 type;			/* CP_UPDATES */
+  INT8 pad1;
+  INT8 pad2;
+  INT8 pad3;
+  CARD32 usecs;
+};
+
+struct resetstats_cpacket
+{
+  INT8 type;			/* CP_RESETSTATS */
+  INT8 verify;			/* 'Y' - just to make sure he meant it */
+  INT8 pad2;
+  INT8 pad3;
+};
+
+struct reserved_cpacket
+{
+  INT8 type;			/* CP_RESERVED */
+  INT8 pad1;
+  INT8 pad2;
+  INT8 pad3;
+  INT8 data[16];
+  INT8 resp[16];
+};
+
+struct scan_cpacket
+{				/* ATM */
+  INT8 type;			/* CP_SCAN */
+  INT8 pnum;
+  INT8 pad1;
+  INT8 pad2;
+};
+
+struct udp_req_cpacket
+{				/* UDP */
+  INT8 type;			/* CP_UDP_REQ */
+  INT8 request;
+  INT8 connmode;		/* respond with port # or just send UDP
+				 * packet? */
+  INT8 pad2;
+  INT32 port;			/* compensate for hosed recvfrom() */
+};
+
+struct sequence_cpacket
+{				/* UDP */
+  INT8 type;			/* CP_SEQUENCE */
+  INT8 pad1;
+  CARD16 sequence;
+};
+
+struct rsa_key_cpacket
+{
+  INT8 type;			/* CP_RSA_KEY */
+  INT8 pad1;
+  INT8 pad2;
+  INT8 pad3;
+  CARD8 global[KEY_SIZE];
+  CARD8 public[KEY_SIZE];
+  CARD8 resp[KEY_SIZE];
+};
+
+/* the CP_ASK_MOTD packet is the same as temp_spacket */
+
+struct ping_cpacket
+{
+  INT8 type;			/* CP_PING_RESPONSE */
+  CARD8 number;			/* id */
+  INT8 pingme;			/* if client wants server to ping */
+  INT8 pad1;
+
+  INT32 cp_sent;		/* # packets sent to server */
+  INT32 cp_recv;		/* # packets recv from server */
+};
+
+#ifdef FEATURE
+struct feature_cpacket
+{
+  char type;
+  char feature_type;
+  char arg1, arg2;
+  int value;
+  char name[80];
+};
+
+struct feature_spacket
+{
+  char type;
+  char feature_type;
+  char arg1, arg2;
+  int value;
+  char name[80];
+};
+#endif
+
+/*
+ * short stuff
+ */
+
+#ifdef SHORT_PACKETS
+struct shortreq_cpacket
+{				/* CP_S_REQ */
+  INT8 type;
+  INT8 req;
+  INT8 version;
+  INT8 pad2;
+};
+
+struct threshold_cpacket
+{				/* CP_S_THRS */
+  INT8 type;
+  INT8 pad1;
+  CARD16 thresh;
+};
+
+struct shortreply_spacket
+{				/* SP_S_REPLY */
+  INT8 type;
+  INT8 repl;
+  CARD16 winside;
+  INT32 gwidth;
+};
+
+struct youshort_spacket
+{				/* SP_S_YOU */
+  INT8 type;
+
+  INT8 pnum;
+  INT8 hostile;
+  INT8 swar;
+
+  INT8 armies;
+  INT8 whydead;
+  INT8 whodead;
+
+  INT8 pad1;
+
+  CARD32 flags;
+};
+
+struct youss_spacket
+{				/* SP_S_YOU_SS */
+  INT8 type;
+  INT8 pad1;
+
+  CARD16 damage;
+  CARD16 shield;
+  CARD16 fuel;
+  CARD16 etemp;
+  CARD16 wtemp;
+};
+
+#define VPLANET_SIZE 6
+
+struct planet_s_spacket
+{				/* body of SP_S_PLANET  */
+  INT8 pnum;
+  INT8 owner;
+  INT8 info;
+  CARD8 armies;			/* more than 255 Armies ? ...  */
+  INT16 flags;
+};
+struct warning_s_spacket
+{				/* SP_S_WARNING */
+  INT8 type;
+  CARD8 whichmessage;
+  INT8 argument, argument2;	/* for phaser  etc ... */
+};
+
+struct player_s_spacket
+{
+  INT8 type;			/* SP_S_PLAYER Header */
+  INT8 packets;			/* How many player-packets are in this packet
+				 * ( only the first 6 bits are relevant ) */
+  CARD8 dir;
+  INT8 speed;
+  INT32 x, y;			/* To get the absolute Position */
+};
+
+/*
+ * The format of the body: struct player_s_body_spacket {	Body of new
+ * Player Packet CARD8 pnum;	 0-4 = pnum, 5 local or galactic, 6 = 9.
+ * x-bit, 7 9. y-bit CARD8 speeddir;	 0-3 = speed , 4-7 direction of ship
+ * CARD8 x;	 low 8 bits from X-Pixelcoordinate CARD8 y;	 low 8 bits
+ * from Y-Pixelcoordinate };
+ */
+
+struct torp_s_spacket
+{
+  INT8 type;			/* SP_S_TORP */
+  CARD8 bitset;			/* bit=1 that torp is in packet */
+  CARD8 whichtorps;		/* Torpnumber of first torp / 8 */
+  CARD8 data[21];		/* For every torp 2*9 bit coordinates */
+};
+
+struct mesg_s_spacket
+{
+  INT8 type;			/* SP_S_MESSAGE */
+  CARD8 m_flags;
+  CARD8 m_recpt;
+  CARD8 m_from;
+  CARD8 length;			/* Length of whole packet */
+  INT8 mesg;
+  INT8 pad2;
+  INT8 pad3;
+  INT8 pad[76];
+};
+
+struct mesg_s_cpacket
+{
+  INT8 type;			/* CP_S__MESSAGE */
+  INT8 group;
+  INT8 indiv;
+  INT8 length;			/* Size of whole packet   */
+  INT8 mesg[80];
+};
+
+#endif
+
+#endif