Mercurial > ~darius > hgwebdir.cgi > paradise_client
diff packets.h @ 3:5a977ccbc7a9 default tip
Empty changelog
author | darius |
---|---|
date | Sat, 06 Dec 1997 05:41:29 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/packets.h Sat Dec 06 05:41:29 1997 +0000 @@ -0,0 +1,1115 @@ +/* $Id: packets.h,v 1.1.1.1 1997/12/06 05:41:29 darius Exp $ */ + +/*-------------------------------------------------------------------------- +NETREK II -- Paradise 2.1 FILE: packets.h + +Permission to use, copy, modify, and distribute this software and its +documentation for any NON-COMMERCIAL purpose (following the terms of +the GNU General Public License (read the file 'COPYING')) 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 + Paradise II by: + Larry Denys, Kurt Olsen, Brandon Gillespie, and Rob Forsman + and: + Heath Kehoe, Mike Lutz, Mike McGrath, Ted Hadley, and Mark Kolb +--------------------------------------------------------------------------*/ + +/* + * 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(RS6K) +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 /* Terrain packets */ +#define SP_TERRAIN_INFO2 54 /* Terrain info */ + +#ifdef FEATURE +/* feature_spacket, response to feature_cpacket requests. identical structures */ +#define SP_FEATURE 60 +#endif + +#ifdef RECORDER +/* special type tells us when to update the display on playback. + Not sent or received, only placed in the recorder file */ +#define REC_UPDATE 127 +#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 +#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; +}; + +/* terrain info for Paradise terrain */ +/* 5/16/95 rpg */ + +struct terrain_info_packet2 { + CARD8 type; /* SP_TERRAIN_INFO2 */ + CARD8 pad; + CARD16 pad2; + CARD16 xdim; + CARD16 ydim; +}; + +struct terrain_packet2 { + CARD8 type; /* SP_TERRAIN2 */ + CARD8 sequence; + CARD8 total_pkts; + CARD8 length; + CARD8 terrain_type[128]; /* Ugh... this needs to be fixed 5/16/95 rpg */ + /* CARD16 terrain_alt1[128]; */ + /* CARD16 terrain_alt2[128]; */ +}; + +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; + char name[16]; + char monitor[16]; + char 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; + char 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; + char 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 */ +}; + +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; + char 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; + char name[16]; + char password[16]; + char 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 +/* feature_cpacket and _spacket are identical! */ +struct feature_cpacket { /* CP_FEATURE */ + INT8 type; + char feature_type; /* either 'C' or 'S' */ + CARD8 arg1; /* could be INT8 depending on feature */ + CARD8 arg2; /* but only BEEP_LITE uses it, for now */ + INT32 value; + char name[80]; +}; + +struct feature_spacket { /* SP_FEATURE */ + INT8 type; + char feature_type; /* either 'C' or 'S' */ + CARD8 arg1; + CARD8 arg2; + INT32 value; + char name[80]; +}; +#endif /* FEATURE */ + +/* + * 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