Mercurial > ~darius > hgwebdir.cgi > paradise_server
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