12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850 |
- //***************************************************************************
- //
- // Multplyr.h -- Defs for Multiplayer routines
- //
- //---------------------------------------------------------------------------//
- // Copyright (C) Microsoft Corporation. All rights reserved. //
- //===========================================================================//
- #ifndef MULTPLYR_H
- #define MULTPLYR_H
- //***************************************************************************
- //--------------
- // Include Files
- #ifndef MCLIB_H
- #include "mclib.h"
- #endif
- #ifndef DMULTPLYR_H
- #include "dmultplyr.h"
- #endif
- #ifndef DMOVER_H
- #include "dmover.h"
- #endif
- #ifndef DWARRIOR_H
- #include "dwarrior.h"
- #endif
- #ifndef DTURRET_H
- #include "dturret.h"
- #endif
- #ifndef DTACORDR_H
- #include "dtacordr.h"
- #endif
- #ifndef DGAMEOBJ_H
- #include "dgameobj.h"
- #endif
- #ifndef DBLDNG_H
- #include "dbldng.h"
- #endif
- //#ifndef DUNIT_H
- //#include <dunit.h>
- //#endif
- #ifndef UNITDESG_H
- #include "unitdesg.h"
- #endif
- #ifndef DGROUP_H
- #include "dgroup.h"
- #endif
- //#ifndef FICOMMONNETWORK_H
- //#include <ficommonnetwork.h>
- //#endif
- //#ifndef SESSIONMANAGER_H
- //#include <sessionmanager.h>
- //#endif
- #include <windows.h>
- //#include <stdio.h>
- //***************************************************************************
- typedef void *NETPLAYER;
- enum NETMESSAGETYPE
- {
- NMT_MESSAGE, // a network message
- NMT_ADDPLAYER, // a new player
- NMT_DELPLAYER, // a player has left
- NMT_TERMSESSION, // the session has been terminated
- NMT_HOSTMIGRATE, // the host has migrated
- };
- //========================================================================
- // NETMESSAGE
- //========================================================================
- class NETMESSAGE
- {
- public:
- NETMESSAGETYPE m_Type; // 0==network message
- NETPLAYER m_pPlayer; // player message is to, or who it's from
- DWORD m_dwFlags; // priority, guaranteed, etc.
- DWORD m_dwInfo; // additional message info
- DWORD m_dwTimeStamp;
- void * m_pData;
- int m_size;
- };
- #define SERVER_HANDLES_ALL_WEAPONHITS TRUE
- #define MAX_MC_PLAYERS 8
- #define MAX_TEAMS 8
- #define MAX_LOCAL_MOVERS MAX_MOVERGROUP_COUNT // 16
- #define MAX_MULTIPLAYER_MOVERS 96
- #define MAX_MULTIPLAYER_MECHS_IN_LOGISTICS 36
- #define MAX_MULTIPLAYER_TURRETS 128
- #define MAX_WEAPONHIT_CHUNKS 1024
- #define MAX_WORLD_CHUNKS 1024
- #define MAX_STORED_CHATS 16
- #define MAX_CHAT_LENGTH 128
- #define MCGROUP_SERVER 0xFFFFFFFF
- #define MCGROUP_ALLPLAYERS 0xFFFFFFFE
- #define MCGROUP_INNERSPHERE 0xFFFFFFFD
- #define MCGROUP_CLAN 0xFFFFFFFC
- #define MPLAYER_NO_ERR 0
- #define MPLAYER_ERR_HOST_NOT_FOUND -1
- #define MPLAYER_ERR_NO_CONNECTION -2
- #define MPLAYER_ERR_SESSION_IN_PROGRESS -3
- #define MPLAYER_ERR_SESSION_LOCKED -4
- #define MPLAYER_ERR_SESSION_NOT_FOUND -5
- #define MPLAYER_ERR_NOT_SCANNING -6
- #define MPLAYER_ERR_BAD_VERSION -7
- #define MPLAYER_ERR_SESSION_FULL -8
- typedef enum {
- BASECOLOR_PREFERENCE,
- BASECOLOR_SELF,
- BASECOLOR_TEAM
- } BaseColorType;
- typedef enum {
- MULTIPLAYER_MODE_NONE,
- MULTIPLAYER_MODE_BROWSER,
- MULTIPLAYER_MODE_PARAMETERS,
- MULTIPLAYER_MODE_LOGISTICS,
- MULTIPLAYER_MODE_LOADING,
- MULTIPLAYER_MODE_MISSION,
- MULTIPLAYER_MODE_RESULTS
- } MultiplayerMode;
- typedef enum {
- MISSION_TYPE_ELIMINATION,
- MISSION_TYPE_KING_OF_THE_HILL,
- MISSION_TYPE_CAPTURE_BASE,
- MISSION_TYPE_TERRITORIES,
- MISSION_TYPE_LAST_MAN_STANDING,
- MISSION_TYPE_LAST_MAN_ON_THE_HILL,
- MISSION_TYPE_OTHER,
- NUM_MISSION_TYPES
- } MissionType;
- typedef enum {
- GO_SESSION_SCREEN = 1
- };
- typedef enum {
- MCMSG_GENERIC,
- MCMSG_CHAT,
- MCMSG_NEW_SERVER,
- MCMSG_PLAYER_CID,
- MCMSG_PLAYER_UPDATE,
- MCMSG_MISSION_SETTINGS_UPDATE,
- MCMSG_PLAYER_INFO,
- MCMSG_PLAYER_CHECK_IN,
- MCMSG_PLAYER_SETUP,
- MCMSG_PLAYER_INSIGNIA,
- MCMSG_MISSION_SETUP,
- MCMSG_PLAYER_CHECK_IN_RECEIPT,
- MCMSG_MOVERS_SETUP, //not used?
- MCMSG_START_PLANNING, //not used?
- MCMSG_START_MISSION,
- MCMSG_END_MISSION,
- MCMSG_LEAVE_SESSION,
- MCMSG_PLAYER_ORDER,
- MCMSG_HOLD_POSITION,
- MCMSG_PLAYER_MOVERGROUP,
- MCMSG_PLAYER_ARTILLERY,
- MCMSG_MOVER_UPDATE,
- MCMSG_TURRET_UPDATE,
- MCMSG_MOVER_WEAPONFIRE_UPDATE,
- MCMSG_TURRET_WEAPONFIRE_UPDATE,
- MCMSG_MOVER_CRITICAL_UPDATE,
- MCMSG_WEAPONHIT_UPDATE,
- MCMSG_WORLD_UPDATE,
- MCMSG_DEPLOY_FORCE,
- MCMSG_REMOVE_FORCE,
- MCMSG_PREPARE_MISSION,
- MCMSG_READY_FOR_BATTLE,
- MCMSG_FILE_INQUIRY,
- MCMSG_FILE_REPORT,
- MCMSG_LOAD_MISSION,
- MCMSG_START,
- MCMSG_JOIN_TEAM,
- MCMSG_SWITCH_SCREEN,
- MCMSG_RP_UPDATE,
- MCMSG_TECHBASE_CHANGE,
- MCMSG_SESSIONCHECKIN,
- MCMSG_REINFORCEMENT
- };
- #define MAXLEN_SESSION_NAME 25
- #define MAXLEN_MAP_NAME 25
- #define MAXLEN_MAP_DESC 32
- #define MAX_SESSIONS 512
- #define MAXLEN_PLAYER_NAME 25
- #define MAXLEN_UNIT_NAME 25
- #define MAXLEN_INSIGNIA_FILE 35
- #define MAX_COLORS 32
- typedef struct _MC2Session {
- char name[MAXLEN_SESSION_NAME];
- char maxPlayers;
- char numPlayers;
- char map[MAXLEN_MAP_NAME];
- long ping;
- bool locked;
- bool inProgress;
- bool cancelled;
- char versionStamp[15];
- GUID handle;
- } MC2Session;
- #pragma pack(1)
- typedef struct _MC2SessionData {
- char map[MAXLEN_MAP_NAME];
- bool locked;
- bool inProgress;
- char maxPlayers;
- char numPlayers;
- char versionStamp[15];
- bool cancelled;
- } MC2SessionData;
- #pragma pack()
- typedef struct _TeamInfo {
- DWORD id;
- DWORD team;
- } TeamInfo;
- typedef struct _MC2PlayerSlot {
- NETPLAYER player;
- char commanderID;
- char name[MAXLEN_PLAYER_NAME];
- } MC2PlayerSlot;
- typedef struct _MC2Player {
- bool checkedIn;
- NETPLAYER player;
- char commanderID;
- char dropZone;
- char name[MAXLEN_PLAYER_NAME];
- char ipAddress[16];
- char unitName[MAXLEN_UNIT_NAME];
- char insigniaFile[MAXLEN_INSIGNIA_FILE];
- char baseColor[3];
- char stripeColor;
- char teamSelected;
- char team;
- unsigned long teamSeniority;
- char faction;
- long cBills;
- long resourcePointsAtStart;
- long resourcePointsGained;
- long resourcePoints;
- long rank;
- bool ready;
- long score;
- long kills;
- long losses;
- bool winner;
- bool leftSession;
- bool booted;
- } MC2Player;
- typedef struct _MissionSettings {
- char map[MAXLEN_MAP_NAME]; // file name
- char name[MAXLEN_MAP_DESC]; // displayNmae
- GUID mapGuid; // Insures maps are the same version!!
- char url[256]; /// GLENN, you probably want this somewhere else....
- long defaultCBills;
- long resourcePoints;
- float timeLimit;
- bool unlimitedAmmo;
- bool variants;
- bool allTech;
- bool airStrike;
- bool guardTower;
- bool repairVehicle;
- bool recoveryTeam;
- bool sensorProbe;
- bool scoutCopter;
- bool mineLayer;
- bool resourceBuilding;
- bool resourceForMechs;
- char missionType;
- bool quickStart;
- char maxTeams;
- char maxPlayers;
- char numPlayers;
- long dropWeight;
- bool locked;
- bool inProgress;
- } MissionSettings;
- typedef struct _CompressedMech {
- bool lastMech;
- long objNumber;
- char commanderID;
- unsigned long baseColor;
- unsigned long highlightColor1;
- unsigned long highlightColor2;
- char pilotFile[50];
- char mechFile[50];
- char variantName[64];
- char variantNum;
- float pos[2];
- long cBills;
- bool designerMech;
- long numComponents;
- unsigned char components[50];
- } CompressedMech;
- #pragma pack(1)
- #pragma warning (disable : 4200)
- //------------------------------------------------------------------------------------------
- class WorldChunk {
- public:
- char type;
- short tileRC[2];
- long objectId;
- long objectBlockOrTrainNumber;
- long objectVertexOrCarNumber;
- char objectItemNumber;
- long param1;
- long param2;
- unsigned long data;
- public:
- void* operator new (size_t mySize);
- void operator delete (void* us);
-
- void init (void) {
- type = -1;
- tileRC[0] = -1;
- tileRC[1] = -1;
- objectId = 0;
- objectBlockOrTrainNumber = 0;
- objectVertexOrCarNumber = 0;
- objectItemNumber = 0;
- param1 = 0;
- param2 = 0;
- data = 0;
- }
- void destroy (void) {
- }
- WorldChunk (void) {
- init();
- }
- ~WorldChunk (void) {
- destroy();
- }
- void buildMissionScriptMessage (long messageCode,
- long messageParam);
- void buildArtillery (long artilleryType,
- long teamId,
- Stuff::Vector3D location,
- long seconds);
- void buildMine (long tileR,
- long tileC,
- long teamId,
- long mineState,
- long explosionType);
- void buildTerrainFire (GameObjectPtr object,
- long seconds);
- void buildPilotKillStat (long moverIndex,
- long vehicleClass);
- void buildScore (long commanderID, long score);
- void buildKillLoss (long killerCID, long loserCID);
- void buildEndMission (void);
- void buildCaptureBuilding (BuildingPtr building, long newCommanderID);
- void pack (void);
- void unpack (void);
- bool equalTo (WorldChunkPtr chunk);
- };
- // The following messages are for multiplayer games and are sent when
- // the user deploys a unit or drags it back to MechBay.
- //------------------------------------------------------------------------------------------
- /*
- class MCMSG_DeployForce: public FIGuaranteedMessageHeader
- {
- private:
-
- // Keep the constructor private because we don't want
- // anyone to call it when there is an undefined size
- // for the class.
- MCMSG_DeployForce();
-
- unsigned char dataFlags;
- enum
- {
- PartTypeBit = 0,
- TeamBit,
- VariantBits1,
- VariantBits2,
- LanceBits1,
- LanceBits2,
- SlotBits1,
- SlotBits2
- };
- enum
- {
- PartTypeFlag = 1 << PartTypeBit,
- TeamFlag = 1 << TeamBit,
- VariantMask = 1 << VariantBits1 | 1 << VariantBits2,
- LanceMask = 1 << LanceBits1 | 1 << LanceBits2,
- SlotMask = 1 << SlotBits1 | 1 << SlotBits2
- };
- public:
- // data
- unsigned char partNameIndex;
- unsigned char pilotNameIndex[2];
- unsigned char inventoryCount; // Number of components
- unsigned short componentIDs[];
- // member functions
- void Init()
- {
- FIGuaranteedMessageHeader::Init();
- SetType(MCMSG_DEPLOY_FORCE);
- dataFlags = 0;
- partNameIndex = 0;
- pilotNameIndex[0] = 255;
- pilotNameIndex[1] = 255;
- inventoryCount = 0;
- }
- // Teams: InnerSphere is 0, Clan is 1
- void SetInnerSphere()
- {
- dataFlags &= ~TeamFlag;
- }
- void SetClan()
- {
- dataFlags |= TeamFlag;
- }
- void SetVehicle()
- {
- dataFlags &= ~PartTypeFlag;
- }
- void SetMech()
- {
- dataFlags |= PartTypeFlag;
- }
-
- void SetVariant(int variant)
- {
- if (variant > 3)
- return;
- dataFlags &= ~VariantMask; // erase old variant
- dataFlags |= (variant << VariantBits1); // set new
- }
- void SetLance(int lance)
- {
- if (lance > (LanceMask >> LanceBits1))
- return;
- dataFlags &= ~LanceMask;
- dataFlags |= (lance << LanceBits1);
- }
- void SetSlot(int slot)
- {
- if (slot > (SlotMask >> SlotBits1))
- return;
- dataFlags &= ~SlotMask;
- dataFlags |= (slot << SlotBits1);
- }
- int GetVariant()
- {
- return (dataFlags & VariantMask) >> VariantBits1;
- }
- int GetLance()
- {
- return (dataFlags & LanceMask) >> LanceBits1;
- }
- int GetSlot()
- {
- return (dataFlags & SlotMask) >> SlotBits1;
- }
- BOOL IsClan()
- {
- return (dataFlags & TeamFlag);
- }
-
- BOOL IsMech()
- {
- return (dataFlags & PartTypeFlag);
- }
- };
- */
- //---------------------------------------------------------------------------
- /*
- class MCMSG_JoinTeam:public FIGuaranteedMessageHeader
- {
- public:
- void Init()
- {
- FIGuaranteedMessageHeader::Init();
- SetType(MCMSG_JOIN_TEAM);
- player = -1;
- team = -99;
- slot = -99;
- }
- DPID player;
- char team;
- char slot;
- };
- */
- //---------------------------------------------------------------------------
- /*
- class MCMSG_RemoveForce:public FIGuaranteedMessageHeader
- {
- public:
- void Init()
- {
- FIGuaranteedMessageHeader::Init();
- SetType(MCMSG_REMOVE_FORCE);
- slotNumber = 0;
- lanceNumber = 0;
- }
- unsigned char slotNumber;
- unsigned char lanceNumber;
- };
- */
- //---------------------------------------------------------------------------
- class MCMSG_Generic {
- public:
- unsigned char type;
- public:
- MCMSG_Generic (void) {
- init();
- }
- void init (void) {
- type = MCMSG_GENERIC;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_PlayerCID {
- public:
- unsigned char type;
- char commanderID;
- unsigned char subType;
-
- public:
- MCMSG_PlayerCID (void) {
- init();
- }
- void init (void) {
- type = MCMSG_PLAYER_CID;
- commanderID = -1;
- subType = 0;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_PlayerUpdate {
- public:
- unsigned char type;
- char stage;
- float senderTime;
- char sessionIPAddress[16];
- char versionStamp[15];
- MC2Player info;
- public:
- MCMSG_PlayerUpdate (void) {
- init();
- }
- void init (void) {
- type = MCMSG_PLAYER_UPDATE;
- senderTime = -1.0;
- stage = 0;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_MissionSettingsUpdate {
- public:
- unsigned char type;
- MissionSettings missionSettings;
- public:
- MCMSG_MissionSettingsUpdate (void) {
- init();
- }
- void init (void) {
- type = MCMSG_MISSION_SETTINGS_UPDATE;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_MissionSetup {
- public:
- unsigned char type;
- long randomSeed;
- char subType;
- char commandersToLoad[MAX_MC_PLAYERS][3];
- CompressedMech mechData;
- public:
- MCMSG_MissionSetup (void) {
- init();
- }
- void init (void) {
- type = MCMSG_MISSION_SETUP;
- subType = 0;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_PlayerInfo {
- public:
- unsigned char type;
- char commanderID;
- public:
- MCMSG_PlayerInfo (void) {
- init();
- }
- void init (void) {
- type = MCMSG_PLAYER_INFO;
- commanderID = -1;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_Chat {
- //GUARANTEED
- public:
-
- unsigned char type;
- bool allPlayers;
- bool isDeadChat;
- bool hideName;
- char string[];
-
- public:
- MCMSG_Chat (void) {
- init();
- }
- void init (void) {
- type = MCMSG_CHAT;
- allPlayers = false;
- isDeadChat = false;
- hideName = false;
- string[0] = NULL;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_PlayerCheckIn {
- //GUARANTEED
- public:
-
- unsigned char type;
- char commanderID;
- public:
- MCMSG_PlayerCheckIn (void) {
- init();
- }
- void init (void) {
- type = MCMSG_PLAYER_CHECK_IN;
- commanderID = -1;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_PlayerSetup {
- //GUARANTEED
- public:
- unsigned char type;
- unsigned char moverData[MAX_MULTIPLAYER_MOVERS];
- public:
- MCMSG_PlayerSetup (void) {
- init();
- }
- void init (void) {
- type = MCMSG_PLAYER_SETUP;
- for (long i = 0; i < MAX_MULTIPLAYER_MOVERS; i++)
- moverData[i] = 0;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_PlayerInsignia {
- public:
- unsigned char type;
- char commanderID;
- char fileName[64];
- long dataSize;
- unsigned char data[];
- public:
- MCMSG_PlayerInsignia (void) {
- init();
- }
- void init (void) {
- type = MCMSG_PLAYER_INSIGNIA;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_StartMission {
- //GUARANTEED
- public:
- unsigned char type;
- long huh;
-
- public:
- MCMSG_StartMission (void) {
- init();
- }
- void init (void) {
- type = MCMSG_START_MISSION;
- huh = 0;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_EndMission {
- //GUARANTEED
- public:
- unsigned char type;
- long teamScore[MAX_MC_PLAYERS];
- long playerScore[MAX_MC_PLAYERS];
- long result;
- public:
- MCMSG_EndMission (void) {
- init();
- }
- void init (void) {
- type = MCMSG_END_MISSION;
- result = -1;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_LeaveSession {
- public:
- unsigned char type;
- unsigned char subType;
- char commanderID;
- public:
- MCMSG_LeaveSession (void) {
- init();
- }
- void init (void) {
- type = MCMSG_LEAVE_SESSION;
- subType = 0;
- commanderID = -1;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_PlayerOrder {
- //GUARANTEED
- public:
- unsigned char type;
- char commanderID;
- unsigned char flags;
- float location[2];
- unsigned long tacOrderChunk[2];
- public:
- MCMSG_PlayerOrder (void) {
- init();
- }
- void init (void) {
- type = MCMSG_PLAYER_ORDER;
- commanderID = -1;
- flags = 0;
- location[0] = 0.0;
- location[1] = 0.0;
- tacOrderChunk[0] = 0;
- tacOrderChunk[1] = 0;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_HoldPosition {
- public:
- unsigned char type;
- char commanderID;
- unsigned short flags;
- public:
- MCMSG_HoldPosition (void) {
- init();
- }
- void init (void) {
- type = MCMSG_HOLD_POSITION;
- commanderID = -1;
- flags = 0;
- }
- };
- //---------------------------------------------------------------------------
- #define MOVERGROUP_ACTION_DEFAULT 0
- #define MOVERGROUP_ACTION_HOLDPOSITION_OFF 1
- #define MOVERGROUP_ACTION_HOLDPOSITION_ON 2
- class MCMSG_PlayerMoverGroup {
- //GUARANTEED
- public:
- unsigned char type;
- unsigned char action;
- char commanderID;
- char groupId;
- unsigned short moverGroupInfo;
- public:
- MCMSG_PlayerMoverGroup (void) {
- init();
- }
- void init (void) {
- type = MCMSG_PLAYER_MOVERGROUP;
- commanderID = -1;
- groupId = -1;
- moverGroupInfo = 0;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_PlayerArtillery {
- //GUARANTEED
- public:
- unsigned char type;
- float location[2];
- unsigned long chunk;
- MCMSG_PlayerArtillery (void) {
- init();
- }
- void init (void) {
- type = MCMSG_PLAYER_ARTILLERY;
- location[0] = 0.0;
- location[1] = 0.0;
- chunk = 0;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_MoverUpdate {
- public:
- unsigned char type;
- long teamScore[MAX_MC_PLAYERS];
- long playerScore[MAX_MC_PLAYERS];
- //long resourcePoints[MAX_MC_PLAYERS];
- unsigned short updateId;
- unsigned char numRLEs;
- unsigned char moveData[];
- public:
- MCMSG_MoverUpdate (void) {
- init();
- }
- void init (void) {
- type = MCMSG_MOVER_UPDATE;
- updateId = 0xFFFF;
- numRLEs = 0;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_TurretUpdate {
- public:
- unsigned char type;
- unsigned short updateId;
- char targetList[];
- public:
- MCMSG_TurretUpdate (void) {
- init();
- }
- void init (void) {
- type = MCMSG_TURRET_UPDATE;
- updateId = 0xFFFF;
- for (long i = 0; i < MAX_MULTIPLAYER_TURRETS; i++)
- targetList[i] = 0;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_MoverWeaponFireUpdate {
- //GUARANTEED
- public:
- unsigned char type;
- unsigned char numRLEs;
- unsigned char weaponFireData[];
- public:
- MCMSG_MoverWeaponFireUpdate (void) {
- init();
- }
- void init (void) {
- type = MCMSG_MOVER_WEAPONFIRE_UPDATE;
- numRLEs = 0;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_TurretWeaponFireUpdate {
- //GUARANTEED
- public:
- unsigned char type;
- char numTurrets;
- unsigned short info[];
- public:
- MCMSG_TurretWeaponFireUpdate (void) {
- init();
- }
- void init (void) {
- type = MCMSG_TURRET_WEAPONFIRE_UPDATE;
- numTurrets = 0;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_MoverCriticalUpdate {
- //GUARANTEED
- public:
- unsigned char type;
- unsigned char numCritHitChunks[MAX_MULTIPLAYER_MOVERS];
- unsigned char numRadioChunks[MAX_MULTIPLAYER_MOVERS];
- unsigned char chunk[];
- public:
- MCMSG_MoverCriticalUpdate (void) {
- init();
- }
- void init (void) {
- type = MCMSG_MOVER_CRITICAL_UPDATE;
- for (long i = 0; i < MAX_MULTIPLAYER_MOVERS; i++) {
- numCritHitChunks[i] = 0;
- numRadioChunks[i] = 0;
- }
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_WeaponHitUpdate {
- //GUARANTEED
- public:
- unsigned char type;
- unsigned char numWeaponHits;
- unsigned long weaponHitChunk[];
- public:
- MCMSG_WeaponHitUpdate (void) {
- init();
- }
- void init() {
- type = MCMSG_WEAPONHIT_UPDATE;
- numWeaponHits = 0;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_WorldUpdate {
- //GUARANTEED
- public:
- unsigned char type;
- unsigned char numWorldChanges;
- unsigned char numArtilleryStrikes;
- unsigned long worldChunk[];
- public:
- MCMSG_WorldUpdate (void) {
- init();
- }
- void init (void) {
- type = MCMSG_WORLD_UPDATE;
- numWorldChanges = 0;
- numArtilleryStrikes = 0;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_Reinforcement {
- public:
- unsigned char type;
- unsigned char stage;
- unsigned char rosterIndex;
- long vehicleID;
- char pilotName[24];
- char commanderID;
- float location[2];
- public:
- MCMSG_Reinforcement (void) {
- init();
- }
- void init (void) {
- type = MCMSG_REINFORCEMENT;
- stage = 0;
- rosterIndex = 255;
- vehicleID = 0;
- pilotName[0] = NULL;
- commanderID = 0;
- location[0] = 0.0;
- location[1] = 0.0;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_NewServer {
- public:
- unsigned char type;
- char ipAddress[16];
- public:
- MCMSG_NewServer (void) {
- init();
- }
- void init (void) {
- type = MCMSG_NEW_SERVER;
- ipAddress[0] = NULL;
- }
- };
- //---------------------------------------------------------------------------
- class MCMSG_FileReport {
- //GUARANTEED
- public:
- unsigned char type;
- unsigned long checkSum;
- GUID fileGuid;
- char fileName[];
- MCMSG_FileReport (void) {
- init();
- }
- void init() {
- type = MCMSG_FILE_REPORT;
- checkSum = 0;
- fileName[0] = NULL;
- memset(&fileGuid,0,sizeof(GUID));
- }
- };
- //---------------------------------------------------------------------------
- /*
- class MCMSG_PassValue {
- public:
- long value[2];
- public:
- MCMSG_PassValue (void) {
- init();
- }
- void init (void) {
- value[0] = -1;
- value[1] = -1;
- }
- };
- */
- #pragma warning (default : 4200)
- #pragma pack()
- //***************************************************************************
- typedef enum {
- VERSION_STATUS_UNKNOWN,
- VERSION_STATUS_GOOD,
- VERSION_STATUS_BAD,
- NUM_VERSION_STATUS_TYPES
- } VersionStatus;
- class MultiPlayer {
- public:
- bool onLAN;
- bool hostLeft;
- VersionStatus versionStatus;
- long numSessions;
- bool availableCIDs[MAX_MC_PLAYERS];
- MC2Session sessionList[MAX_SESSIONS];
- unsigned long teamSeniority[MAX_TEAMS];
- static long colors[MAX_COLORS];
- char colorsCID[MAX_COLORS];
- char sessionIPAddress[16];
- bool sessionScanning;
- bool sessionScanningError;
- bool sessionScanningPersistent;
- bool fitStart;
- long numFitPlayers;
- MissionSettings missionSettings;
- char commandersToLoad[MAX_MC_PLAYERS][3];
- CompressedMech mechData[MAX_MC_PLAYERS][12];
- bool locked;
- bool inProgress;
- bool cancelled;
- long randomSeed;
- bool startLogistics;
- bool startLoading;
- bool readyToLoad[MAX_MC_PLAYERS];
- bool mechDataReceived[MAX_MC_PLAYERS];
- bool missionDataLoaded[MAX_MC_PLAYERS];
- bool missionFullySetup[MAX_MC_PLAYERS];
- bool leaveSessionConfirmed[MAX_MC_PLAYERS];
- long numAirStrikesUsed[MAX_MC_PLAYERS];
- long numMinelayersUsed[MAX_MC_PLAYERS];
- long numScoutCoptersUsed[MAX_MC_PLAYERS];
- long numArtilleryPiecesUsed[MAX_MC_PLAYERS];
- long numSensorProbesUsed[MAX_MC_PLAYERS];
- long numRepairVehiclesUsed[MAX_MC_PLAYERS];
- long numSalvageCraftUsed[MAX_MC_PLAYERS];
- long numTeams;
- long teamScore[MAX_TEAMS];
- long winningTeam;
- BuildingPtr mainHqBuildings[MAX_TEAMS];
- long numHqBuildings;
- long* hqCIDs;
- BuildingPtr* hqBuildings;
- long numResourceBuildings;
- BuildingPtr* resourceBuildings;
- unsigned long numRandomResourceBuildings;
- long mode;
- long sessionEntry;
- unsigned char* msgBuffer;
- long numLocalMovers;
- long numMovers;
- long numTurrets;
- unsigned char moverRosterRLE[MAX_MULTIPLAYER_MOVERS];
- long numMoverRosterRLE;
- MoverPtr localMovers[MAX_LOCAL_MOVERS];
- MoverPtr moverRoster[MAX_MULTIPLAYER_MOVERS];
- MoverPtr playerMoverRoster[MAX_MC_PLAYERS][MAX_LOCAL_MOVERS];
- TurretPtr turretRoster[MAX_MULTIPLAYER_TURRETS];
- bool iAmHost;
- //long serverCID;
- NETPLAYER myPlayer;
- NETPLAYER serverPlayer;
- bool inSession;
- bool hostDroppedOut;
- long commanderID; // same as commanderId
- char sessionName[80];
- char playerName[80];
- //MC2Player playerList[MAX_MC_PLAYERS]; // list of players--order doesn't matter
- MC2PlayerSlot playerList[MAX_MC_PLAYERS];
- bool insigniaList[MAX_MC_PLAYERS]; // list of insignia data
- long insigniaSizeList[MAX_MC_PLAYERS];
- //long maxPlayers; // max number of players allowed in session
- MC2Player playerInfo[MAX_MC_PLAYERS]; // list of players--indexed by commanderID
- bool playerReady[MAX_MC_PLAYERS];
- bool inSessionScreen[MAX_MC_PLAYERS];
- bool startPlanning;
- bool setupMission;
- bool startMission;
- bool endMission;
- bool waitingToStartMission;
- bool preparingMission;
- float startTime;
- bool allUnitsDestroyed[MAX_MC_PLAYERS];
- long missionStatus;
- //TeamInfo teamInfo[MAX_MC_PLAYERS];
- // ChatMessageCallback is called when a chat message arrives.
- //LPMESSAGECALLBACK ChatMessageCallback;
- // Server Data
- float pingUpdateTime;
- float pingUpdateFrequency;
- float moverUpdateTime;
- float moverUpdateFrequency;
- unsigned short moverUpdateId;
- float turretUpdateTime;
- float turretUpdateFrequency;
- unsigned short turretUpdateId;
- float worldUpdateTime;
- float worldUpdateFrequency;
- float lastServerUpdateTime;
- long numWeaponHitChunks;
- unsigned long weaponHitChunks[MAX_WEAPONHIT_CHUNKS];
- long numWorldChunks;
- unsigned long worldChunks[MAX_WORLD_CHUNKS];
- unsigned long serverOrder[MAX_MC_PLAYERS];
- long reinforcements[MAX_MC_PLAYERS][2]; // index 0 = current reinforcement, index 1 = current recoverery
- char reinforcementPilot[MAX_MC_PLAYERS][32];
-
- bool isMPlayerGame;
- long badSessionCounter;
- float warpFactor;
- long totalLoad;
- long moverWeaponFireLoad;
- long turretWeaponFireLoad;
- long moverCriticalLoad;
- long weaponHitLoad;
- long worldStateLoad;
- long maxTotalLoad;
- long maxMoverWeaponFireLoad;
- long maxTurretWeaponFireLoad;
- long maxMoverCriticalLoad;
- long maxWeaponHitLoad;
- long maxWorldLoad;
- long maxReceiveLoad;
- long maxReceiveSize;
- long worldChunkTally[NUM_WORLDCHUNK_TYPES];
- char currentChatMessages[MAX_STORED_CHATS][MAX_CHAT_LENGTH];
- long currentChatMessagePlayerIDs[MAX_STORED_CHATS];
- long chatCount;
- static bool launchedFromLobby;
- static bool registerZone;
- static long presetDropZones[MAX_MC_PLAYERS];
- public:
- void* operator new (size_t mySize);
- void operator delete (void* us);
-
- void init (void);
- long setup (void);
- // initUpdateFrequencies initializes the update frequencies from the
- // prefs.cfg file if the entries exist. Otherwise, it uses defaults.
- void initUpdateFrequencies (void);
- // initStartupParameters is called by both init() and
- // leaveSession()
- void initStartupParameters (bool fresh);
- void resetForNewGame (void);
- MultiPlayer (void) {
- init();
- }
-
- void destroy (void);
- ~MultiPlayer (void) {
- destroy();
- }
- bool isServer (void) {
- return(false);
- }
- void setServer (NETPLAYER player, char playerIPAddress[16]);
- bool isHost (void) {
- return(isServer());
- }
- void setMode (long newMode) {
- mode = newMode;
- }
- VersionStatus getVersionStatus (void) {
- return(VERSION_STATUS_GOOD);
- }
- long update (void);
- long beginSessionScan (char* ipAddress, bool persistent = true);
- long endSessionScan (void);
- bool getSessionScanFailed (void) {
- return(false);
- }
- MC2Session* getSessions (long& sessionCount);
- // for read purposes
- const MC2Player* getPlayers (long& playerCount);
- // for write purposes....
- MC2Player* getPlayerInfo( long commanderID )
- {
- return NULL;
- }
- bool hostSession(char* sessionName, char* playerName, long mxPlayers);
- long joinSession (MC2Session* session, char* playerName);
- bool getOnLAN (void) {
- return(onLAN);
- }
- bool isServerMissing (void);
- void updateSessionData (MC2SessionData* sessionData);
- void setLocked (bool set);
- void setCancelled (bool set);
- void setInProgress (bool set);
- bool getLocked (void) {
- return(locked);
- }
- bool getLaunchedFromLobby (void) {
- return(launchedFromLobby);
- }
- bool getInProgress (void) {
- return(inProgress);
- }
- void addTeamScore (long teamID, long score);
- long closeSession (void);
- void logMessage (NETMESSAGE* message, bool sent);
-
- long bootPlayer (NETPLAYER bootedPlayer);
- void sendMessage (NETPLAYER player,
- void* data,
- int dataSize,
- bool guaranteed,
- bool toSelf = true);
- bool hostGame (char* sessionName, char* playerName, long nPlayers);
- long joinGame (char* ipAddress, char* sessionName, char* playerName);
- bool waitTillStartLoading (void);
- bool waitTillMechDataReceived (void);
- bool waitTillMissionLoaded (void);
- bool waitTillMissionSetup (void);
- bool waitForSessionEntry (void);
- bool playersReadyToLoad (void);
- void handlePlayerLeftSession (NETPLAYER leftPlayer);
- void handleTerminateSession (void);
- bool launchBrowser (const char* link);
- void initParametersScreen (void);
- void setDefaultPlayerInfo (void);
- void initSpecialBuildings (char commandersToLoad[8][3]);
- char* getPlayerName (void) {
- return(NULL);
- }
- void addToLocalMovers (MoverPtr mover);
- void removeFromLocalMovers (MoverPtr mover);
- void addToMoverRoster (MoverPtr mover);
- bool canAddToMoverRoster (void)
- {
- return false;
- }
- void removeFromMoverRoster (MoverPtr mover);
- void addToTurretRoster (TurretPtr turret);
- void addToPlayerMoverRoster (long playerCommanderID, MoverPtr mover);
- void removeFromPlayerMoverRoster (MoverPtr mover);
- long getNumWorldChunks (void) {
- return(numWorldChunks);
- }
- void clearWorldChunks (void) {
- numWorldChunks = 0;
- }
- long setClosestColor (long colorIndex, long commanderID);
- long setNextFreeColor (long commanderID);
- void setColor (long colorIndex, long commanderID);
- void setPlayerBaseColor (long commanderID, long colorIndex);
- void setPlayerTeam (long commanderID, long teamID);
- void calcPlayerRanks (void);
- long addWorldChunk (WorldChunkPtr chunk);
- long addMissionScriptMessageChunk (long code, long param1);
- // long addTerrainAlignmentChunk (GameObjectPtr object, long alignment);
- long addArtilleryChunk (long artilleryType, long teamId, Stuff::Vector3D location, long seconds);
- long addMineChunk (long tileR, long tileC, long teamId, long mineState, long explosionType);
- long addLightOnFireChunk (GameObjectPtr object, long seconds);
- long addPilotKillStat (MoverPtr mover, long vehicleClass);
- long addScoreChunk (long commanderID, long score);
- long addKillLossChunk (long killerCID, long loserCID);
- long addCaptureBuildingChunk (BuildingPtr building, long prevCommanderID, long newCommanderID);
- long addEndMissionChunk (void);
- long grabWorldChunks (unsigned long* packedChunkBuffer);
- long updateWorldChunks (void);
- long getNumWeaponHitChunks (void) {
- return(numWeaponHitChunks);
- }
- void clearWeaponHitChunks (void) {
- numWeaponHitChunks = 0;
- }
- long addWeaponHitChunk (WeaponHitChunkPtr chunk);
- long addWeaponHitChunk (GameObjectPtr target, WeaponShotInfoPtr shotInfo, bool isRefit = false);
- void grabWeaponHitChunks (unsigned long* packedChunkBuffer, long numChunks);
- long updateWeaponHitChunks (void);
- long getHomeTeamPlayers (DWORD* playerIdList);
- long getEnemyTeamPlayers (DWORD* playerIdList);
- bool processGameMessage (NETMESSAGE* msg);
- void processMessages (void);
- long findPlayer (NETPLAYER player) {
- return(-1);
- }
- bool calcMissionStatus (void);
- void handleChat (NETPLAYER sender, MCMSG_Chat* msg);
- void handlePlayerCID (NETPLAYER sender, MCMSG_PlayerCID* msg);
- void handlePlayerUpdate (NETPLAYER sender, MCMSG_PlayerUpdate* msg);
- void handleMissionSettingsUpdate (NETPLAYER sender, MCMSG_MissionSettingsUpdate* msg);
- void handlePlayerInfo (NETPLAYER sender, MCMSG_PlayerInfo* msg);
- void handlePlayerCheckIn (NETPLAYER sender, MCMSG_PlayerCheckIn* msg);
- void handlePlayerSetup (NETPLAYER sender, MCMSG_PlayerSetup* msg);
- void handlePlayerInsignia (NETPLAYER sender, MCMSG_PlayerInsignia* msg);
- void handleMissionSetup (NETPLAYER sender, MCMSG_MissionSetup* msg);
- void handleStartPlanning (NETPLAYER sender);
- void handleReadyForBattle (NETPLAYER sender, MCMSG_PlayerCheckIn* msg);
- void handleStartMission (NETPLAYER sender);
-
- void handleEndMission (NETPLAYER sender, MCMSG_EndMission* msg);
-
- void handleReinforcement (NETPLAYER sender, MCMSG_Reinforcement* msg);
- void handleNewServer (NETPLAYER sender, MCMSG_NewServer* msg);
- void handleLeaveSession (NETPLAYER sender, MCMSG_LeaveSession* msg);
- void handleHoldPosition (NETPLAYER sender, MCMSG_HoldPosition* msg);
- void handlePlayerOrder (NETPLAYER sender, MCMSG_PlayerOrder* msg);
- void handlePlayerMoverGroup (NETPLAYER sender, MCMSG_PlayerMoverGroup* msg);
-
- void handlePlayerArtillery (NETPLAYER sender, MCMSG_PlayerArtillery* msg);
- void handleMoverUpdate (NETPLAYER sender, MCMSG_MoverUpdate* msg);
- void handleTurretUpdate (NETPLAYER sender, MCMSG_TurretUpdate* msg);
- void handleMoverWeaponFireUpdate (NETPLAYER sender, MCMSG_MoverWeaponFireUpdate* msg);
- void handleTurretWeaponFireUpdate (NETPLAYER sender, MCMSG_TurretWeaponFireUpdate* msg);
- void handleMoverCriticalUpdate (NETPLAYER sender, MCMSG_MoverCriticalUpdate* msg);
- void handleWeaponHitUpdate (NETPLAYER sender, MCMSG_WeaponHitUpdate* msg);
- void handleWorldUpdate (NETPLAYER sender, MCMSG_WorldUpdate* msg);
- void sendChat (NETPLAYER receiver, char team, char* chatString);
- void sendPlayerActionChat(NETPLAYER receiver, const char* playerName, unsigned long resID );
- void sendPlayerCID (NETPLAYER receiver, unsigned char subType, char CID);
- void sendPlayerUpdate (NETPLAYER receiver, long stage, long commanderID);
- void sendMissionSettingsUpdate (NETPLAYER receiver);
- void sendPlayerInfo (NETPLAYER receiver);
- void sendPlayerCheckIn (void);
- void sendPlayerSetup (void);
- void sendPlayerInsignia (char* insigniaFileName, unsigned char* insigniaData, long insigniaDataSize);
- void sendMissionSetup (NETPLAYER receiver, long stage, CompressedMech* mechData);
- void sendStartPlanning (void);
- void sendStartMission (void);
- void sendEndMission (long result);
- void sendReinforcement (long vehicleID, long rosterIndex, char pilotName[16], long commanderID, Stuff::Vector3D pos, unsigned char stage);
- void sendNewServer (void);
- void sendLeaveSession (char subType, char commanderID);
- void sendPlayerOrder (TacticalOrderPtr tacOrder,
- bool needsSelection,
- long numMovers,
- MoverPtr* moverList,
- long numGroups = 0,
- MoverGroupPtr* groupList = NULL,
- bool queuedOrder = false);
- void sendHoldPosition (void);
- void sendPlayerMoverGroup (long groupId,
- long numMovers,
- MoverPtr* moverList,
- long point);
- void sendPlayerArtillery (long strikeType, Stuff::Vector3D location, long seconds);
-
- long sendPing(void);
- void sendMoverUpdate (void);
- void sendTurretUpdate (void);
- void sendMoverWeaponFireUpdate (void);
- void sendTurretWeaponFireUpdate (void);
- void sendMoverCriticalUpdate (void);
- void sendWeaponHitUpdate (void);
- void sendWorldUpdate (void);
- void sendFile (char* path, char* fileName);
- void sendReadyForBattle (void);
- void sendPrepareMission (void);
- void sendFileInquiry (char* filename);
- long updateServer (void);
- void buildMoverRosterRLE (void);
- long updateClients (bool forceIt = false);
- bool isMyTeammate (DWORD playerId);
- bool allPlayersCheckedIn (void);
- bool allPlayersReady (void);
- void switchServers (void);
- void calcDropZones (char dropZonesCID[8], char hqs[MAX_TEAMS]);
- long saveTranscript (const char* fileName, bool debugging = false);
- void playerLeftGame (DWORD playerId);
- // call this to exit the current session.
- void leaveSession (void);
- void getChatMessages( char** buffer, long* playerIDs, long& count );
- void redistributeRP();
- };
- bool StartupNetworking (void);
- void ResetNetworking (void);
- void ShutdownNetworking (void);
- extern MultiPlayer* MPlayer;
- //***************************************************************************
- #endif
|