diff --git a/main/multi.c b/main/multi.c index d62cbb639..cf17a1789 100644 --- a/main/multi.c +++ b/main/multi.c @@ -174,76 +174,9 @@ char RefuseThisPlayer=0,WaitForRefuseAnswer=0,RefuseTeam,RefusePlayerName[12]; fix64 RefuseTimeLimit=0; extern void init_player_stats_new_ship(ubyte pnum); -static const int message_length[MULTI_MAX_TYPE+1] = { - 25, // POSITION - 4, // REAPPEAR - 8, // FIRE - 5, // KILL - 4, // REMOVE_OBJECT - 97+9, // PLAYER_EXPLODE - 37, // MESSAGE (MAX_MESSAGE_LENGTH = 40) - 2, // QUIT - 4, // PLAY_SOUND - 41, // BEGIN_SYNC - 4, // CONTROLCEN - 5, // CLAIM ROBOT - 4, // END_SYNC - 2, // CLOAK - 3, // ENDLEVEL_START - 5, // DOOR_OPEN - 2, // CREATE_EXPLOSION - 16, // CONTROLCEN_FIRE - 97+9, // PLAYER_DROP - 19, // CREATE_POWERUP - 9, // MISSILE_TRACK - 2, // DE-CLOAK - 2, // MENU_CHOICE - 28, // ROBOT_POSITION (shortpos_length (23) + 5 = 28) - 9, // ROBOT_EXPLODE - 5, // ROBOT_RELEASE - 18, // ROBOT_FIRE - 6, // SCORE - 6, // CREATE_ROBOT - 3, // TRIGGER - 10, // BOSS_ACTIONS - 27, // ROBOT_POWERUPS - 7, // HOSTAGE_DOOR - 2+24, // SAVE_GAME (ubyte slot, uint id, char name[20]) // obsolete - 2+4, // RESTORE_GAME (ubyte slot, uint id) // obsolete - -1, // MULTI_REQ_PLAYER - NEVER USED - -1, // MULTI_SEND_PLAYER - NEVER USED - 55, // MULTI_MARKER - 12, // MULTI_DROP_WEAPON - 3+sizeof(shortpos), // MULTI_GUIDED, IF SHORTPOS CHANGES, CHANGE MAC VALUE BELOW - 11, // MULTI_STOLEN_ITEMS - 6, // MULTI_WALL_STATUS - 5, // MULTI_HEARTBEAT - 9, // MULTI_KILLGOALS - 9, // MULTI_SEISMIC - 18, // MULTI_LIGHT - 2, // MULTI_START_TRIGGER - 6, // MULTI_FLAGS - 2, // MULTI_DROP_BLOB - MAX_POWERUP_TYPES+1, // MULTI_POWCAP_UPDATE - sizeof(active_door)+3, // MULTI_ACTIVE_DOOR - 4, // MULTI_SOUND_FUNCTION - 2, // MULTI_CAPTURE_BONUS - 2, // MULTI_GOT_FLAG - 12, // MULTI_DROP_FLAG - 1, // MULTI_ROBOT_CONTROLS - UNUSED - 2, // MULTI_FINISH_GAME - 3, // MULTI_RANK - 1, // MULTI_MODEM_PING - 1, // MULTI_MODEM_PING_RETURN - 3, // MULTI_ORB_BONUS - 2, // MULTI_GOT_ORB - 12, // MULTI_DROP_ORB - 4, // MULTI_PLAY_BY_PLAY - 2, // MULTI_DO_BOUNTY - 3, // MULTI_TYPING_STATE - 3, // MULTI_GMODE_UPDATE - 7, // MULTI_KILL_HOST - 5, // MULTI_KILL_CLIENT +static const int message_length[] = { +#define define_message_length(NAME,SIZE) (SIZE), + for_each_multiplayer_command(, define_message_length, ) }; char PowerupsInMine[MAX_POWERUP_TYPES],MaxPowerupsAllowed[MAX_POWERUP_TYPES]; diff --git a/main/multi.h b/main/multi.h index 842b26edd..41775c465 100644 --- a/main/multi.h +++ b/main/multi.h @@ -59,81 +59,84 @@ extern int multi_protocol; // set and determinate used protocol #define MULTI_PROTO_UDP 1 // UDP protocol // What version of the multiplayer protocol is this? Increment each time something drastic changes in Multiplayer without the version number changes. Can be reset to 0 each time the version of the game changes -#define MULTI_PROTO_VERSION 5 +#define MULTI_PROTO_VERSION 6 // PROTOCOL VARIABLES AND DEFINES - END #define MAX_MESSAGE_LEN 35 -#define MULTI_POSITION 0 -#define MULTI_REAPPEAR 1 -#define MULTI_FIRE 2 -#define MULTI_KILL 3 -#define MULTI_REMOVE_OBJECT 4 -#define MULTI_PLAYER_EXPLODE 5 -#define MULTI_MESSAGE 6 -#define MULTI_QUIT 7 -#define MULTI_PLAY_SOUND 8 -#define MULTI_BEGIN_SYNC 9 -#define MULTI_CONTROLCEN 10 -#define MULTI_ROBOT_CLAIM 11 -#define MULTI_END_SYNC 12 -#define MULTI_CLOAK 13 -#define MULTI_ENDLEVEL_START 14 -#define MULTI_DOOR_OPEN 15 -#define MULTI_CREATE_EXPLOSION 16 -#define MULTI_CONTROLCEN_FIRE 17 -#define MULTI_PLAYER_DROP 18 -#define MULTI_CREATE_POWERUP 19 -#define MULTI_CONSISTENCY 20 -#define MULTI_DECLOAK 21 -#define MULTI_MENU_CHOICE 22 -#define MULTI_ROBOT_POSITION 23 -#define MULTI_ROBOT_EXPLODE 24 -#define MULTI_ROBOT_RELEASE 25 -#define MULTI_ROBOT_FIRE 26 -#define MULTI_SCORE 27 -#define MULTI_CREATE_ROBOT 28 -#define MULTI_TRIGGER 29 -#define MULTI_BOSS_ACTIONS 30 -#define MULTI_CREATE_ROBOT_POWERUPS 31 -#define MULTI_HOSTAGE_DOOR 32 -#define MULTI_SAVE_GAME 33 -#define MULTI_RESTORE_GAME 34 -#define MULTI_REQ_PLAYER 35 // NEVER USED -#define MULTI_SEND_PLAYER 36 // NEVER USED -#define MULTI_MARKER 37 -#define MULTI_DROP_WEAPON 38 -#define MULTI_GUIDED 39 -#define MULTI_STOLEN_ITEMS 40 -#define MULTI_WALL_STATUS 41 // send to new players -#define MULTI_HEARTBEAT 42 -#define MULTI_KILLGOALS 43 -#define MULTI_SEISMIC 44 -#define MULTI_LIGHT 45 -#define MULTI_START_TRIGGER 46 -#define MULTI_FLAGS 47 -#define MULTI_DROP_BLOB 48 -#define MULTI_POWCAP_UPDATE 49 -#define MULTI_ACTIVE_DOOR 50 -#define MULTI_SOUND_FUNCTION 51 -#define MULTI_CAPTURE_BONUS 52 -#define MULTI_GOT_FLAG 53 -#define MULTI_DROP_FLAG 54 -#define MULTI_ROBOT_CONTROLS 55 // NEVER USED -#define MULTI_FINISH_GAME 56 -#define MULTI_RANK 57 -#define MULTI_MODEM_PING 58 -#define MULTI_MODEM_PING_RETURN 59 -#define MULTI_ORB_BONUS 60 -#define MULTI_GOT_ORB 61 -#define MULTI_DROP_ORB 62 -#define MULTI_PLAY_BY_PLAY 63 -#define MULTI_DO_BOUNTY 64 -#define MULTI_TYPING_STATE 65 -#define MULTI_GMODE_UPDATE 66 -#define MULTI_KILL_HOST 67 -#define MULTI_KILL_CLIENT 68 +#define define_multiplayer_command(NAME,SIZE) NAME, + +#define for_each_multiplayer_command(BEFORE,VALUE,AFTER) \ + BEFORE \ + VALUE(MULTI_POSITION , 25) \ + VALUE(MULTI_REAPPEAR , 4) \ + VALUE(MULTI_FIRE , 8) \ + VALUE(MULTI_KILL , 5) \ + VALUE(MULTI_REMOVE_OBJECT , 4) \ + VALUE(MULTI_MESSAGE , 37) /* (MAX_MESSAGE_LENGTH = 40) */ \ + VALUE(MULTI_QUIT , 2) \ + VALUE(MULTI_PLAY_SOUND , 4) \ + VALUE(MULTI_CONTROLCEN , 4) \ + VALUE(MULTI_ROBOT_CLAIM , 5) \ + VALUE(MULTI_END_SYNC , 4) \ + VALUE(MULTI_CLOAK , 2) \ + VALUE(MULTI_ENDLEVEL_START , 3) \ + VALUE(MULTI_CREATE_EXPLOSION , 2) \ + VALUE(MULTI_CONTROLCEN_FIRE , 16) \ + VALUE(MULTI_CREATE_POWERUP , 19) \ + VALUE(MULTI_DECLOAK , 2) \ + VALUE(MULTI_MENU_CHOICE , 2) \ + VALUE(MULTI_ROBOT_POSITION , 5+sizeof(shortpos)) \ + VALUE(MULTI_PLAYER_EXPLODE , 97+9) \ + VALUE(MULTI_BEGIN_SYNC , 41) \ + VALUE(MULTI_DOOR_OPEN , 5) \ + VALUE(MULTI_PLAYER_DROP , 97+9) \ + VALUE(MULTI_ROBOT_EXPLODE , 9) \ + VALUE(MULTI_ROBOT_RELEASE , 5) \ + VALUE(MULTI_ROBOT_FIRE , 18) \ + VALUE(MULTI_SCORE , 6) \ + VALUE(MULTI_CREATE_ROBOT , 6) \ + VALUE(MULTI_TRIGGER , 3) \ + VALUE(MULTI_BOSS_ACTIONS , 10) \ + VALUE(MULTI_CREATE_ROBOT_POWERUPS, 27) \ + VALUE(MULTI_HOSTAGE_DOOR , 7) \ + VALUE(MULTI_SAVE_GAME , 2+24) /* (ubyte slot, uint id, char name[20]) */ \ + VALUE(MULTI_RESTORE_GAME , 2+4) /* (ubyte slot, uint id) */ \ + VALUE(MULTI_HEARTBEAT , 5) \ + VALUE(MULTI_KILLGOALS , 9) \ + VALUE(MULTI_POWCAP_UPDATE , MAX_POWERUP_TYPES+1) \ + VALUE(MULTI_DO_BOUNTY , 2) \ + VALUE(MULTI_TYPING_STATE , 3) \ + VALUE(MULTI_GMODE_UPDATE , 3) \ + VALUE(MULTI_KILL_HOST , 7) \ + VALUE(MULTI_KILL_CLIENT , 5) \ + VALUE(MULTI_RANK , 3) \ + VALUE(MULTI_MARKER , 55) \ + VALUE(MULTI_DROP_WEAPON , 12) \ + VALUE(MULTI_GUIDED , 3+sizeof(shortpos)) \ + VALUE(MULTI_STOLEN_ITEMS , 11) \ + VALUE(MULTI_WALL_STATUS , 6) /* send to new players */ \ + VALUE(MULTI_SEISMIC , 9) \ + VALUE(MULTI_LIGHT , 18) \ + VALUE(MULTI_START_TRIGGER , 2) \ + VALUE(MULTI_FLAGS , 6) \ + VALUE(MULTI_DROP_BLOB , 2) \ + VALUE(MULTI_ACTIVE_DOOR , sizeof(active_door)+3) \ + VALUE(MULTI_SOUND_FUNCTION , 4) \ + VALUE(MULTI_CAPTURE_BONUS , 2) \ + VALUE(MULTI_GOT_FLAG , 2) \ + VALUE(MULTI_DROP_FLAG , 12) \ + VALUE(MULTI_ROBOT_CONTROLS , 1) /* UNUSED */ \ + VALUE(MULTI_FINISH_GAME , 2) \ + VALUE(MULTI_MODEM_PING , 1) \ + VALUE(MULTI_MODEM_PING_RETURN , 1) \ + VALUE(MULTI_ORB_BONUS , 3) \ + VALUE(MULTI_GOT_ORB , 2) \ + VALUE(MULTI_DROP_ORB , 12) \ + VALUE(MULTI_PLAY_BY_PLAY , 4) \ + AFTER +for_each_multiplayer_command(enum {, define_multiplayer_command, }); #define MAX_NET_CREATE_OBJECTS 40