//*************************************************************************** // // multplyr.cpp - This file contains the MultiPlayer Class // //---------------------------------------------------------------------------// // Copyright (C) Microsoft Corporation. All rights reserved. // //===========================================================================// #ifndef MCLIB_H #include "mclib.h" #endif #include "crtdbg.h" #ifndef MULTPLYR_H #include "multplyr.h" #endif #ifndef TEAM_H #include "team.h" #endif #ifndef MOVER_H #include "mover.h" #endif #ifndef TURRET_H #include "turret.h" #endif #ifndef MISSION_H #include "mission.h" #endif #ifndef MECH_H #include "mech.h" #endif #ifndef GAMEOBJ_H #include "gameobj.h" #endif #ifndef OBJMGR_H #include "objmgr.h" #endif #ifndef LOGISTICSDATA_H #include "LogisticsData.h" #endif #ifndef BLDNG_H #include "bldng.h" #endif #ifndef TERROBJ_H #include "terrobj.h" #endif #ifndef MOVE_H #include "move.h" #endif #ifndef GROUP_H #include "group.h" #endif #ifndef COMNDR_H #include "comndr.h" #endif #ifndef CARNAGE_H #include "carnage.h" #endif #ifndef ARTLRY_H #include "artlry.h" #endif #ifndef CONTROLGUI_H #include "controlGui.h" #endif #ifndef LOGISTICS_H #include "logistics.h" #endif #include "MissionBegin.h" #ifndef PREFS_H #include "Prefs.h" #endif #ifndef MISSIONGUI_H #include "missiongui.h" #endif #ifndef GAMELOG_H #include "gamelog.h" #endif #include "dplay8.h" #include "MPParameterScreen.h" //#ifndef VERSION_H //#include "version.h" //#endif #include "..\resource.h" #ifdef USE_MISSION_RESULTS_SCREEN extern bool EventsToMissionResultsScreen; #else bool EventsToMissionResultsScreen = false; #endif #ifdef USE_LOGISTICS extern bool whackTimer; void CancelBool(long value); #endif #ifndef MPPREFS_H #include "mpprefs.h" #endif #ifdef USE_STRING_RESOURCES extern HINSTANCE thisInstance; long cLoadString (HINSTANCE hInstance, UINT uID, LPTSTR lpBuffer, int nBufferMax ); #endif #include "gamesound.h" #define MAX_MSG_SIZE 10240 extern CPrefs prefs; extern bool quitGame; extern float loadProgress; extern bool aborted; //*************************************************************************** DWORD ServerPlayerNum = 1; //commanderId (or checkInId) of server bool MultiPlayer::launchedFromLobby = false; bool MultiPlayer::registerZone = false; long MultiPlayer::presetDropZones[MAX_MC_PLAYERS] = {-1, -1, -1, -1, -1, -1, -1, -1}; long MultiPlayer::colors[MAX_COLORS] = {0}; float ResourceBuildingRefreshRate = 60.0f; // {35DC7890-C5EF-4171-B0CF-4D5C7AE7C2D7} static const GUID MC2GUID = { 0x35dc7890, 0xc5ef, 0x4171, { 0xb0, 0xcf, 0x4d, 0x5c, 0x7a, 0xe7, 0xc2, 0xd7 } }; // {1F8251BB-1436-44b3-A5B0-0FCF6858C176} static const GUID MC2DEMOGUID = { 0x1f8251bb, 0x1436, 0x44b3, { 0xa5, 0xb0, 0xf, 0xcf, 0x68, 0x58, 0xc1, 0x76 } }; void* MC2NetLib = NULL; bool OnLAN = false; NETMESSAGE ReceiveMsg; //------------ // EXTERN vars extern GameLog* CombatLog; extern GameLog* NetLog; extern bool LaunchedFromLobby; extern UserHeapPtr systemHeap; #ifdef _DEBUG //extern DebugFileStream Debug; #endif extern char* startupPakFile; // ConnectUsingDialog is a function defined in dpdialog.cpp. // It allows the user to choose the type of connection. //extern HRESULT ConnectUsingDialog(HINSTANCE ); extern void SortMoverList (long numMovers, MoverPtr* moverList, Stuff::Vector3D dest); extern void killTheGame(void); #ifndef TERRAINEDIT extern DebuggerPtr debugger; #endif //------------ // GLOBAL vars MultiPlayer* MPlayer = NULL; //extern long NumMissionScriptMessages; ///extern Scenario* scenario; ///extern Logistics* globalLogPtr; void DEBUGWINS_print (char* s, long window = 0); //*************************************************************************** // MISC functions //*************************************************************************** bool StartupNetworking (void) { return false; } //----------------------------------------------------------------------------- void ResetNetworking (void) { } //----------------------------------------------------------------------------- void ShutdownNetworking (void) { } //*************************************************************************** // WORLD CHUNK class //*************************************************************************** void* WorldChunk::operator new (size_t ourSize) { void* result = systemHeap->Malloc(ourSize); return(result); } //--------------------------------------------------------------------------- void WorldChunk::operator delete (void* us) { systemHeap->Free(us); } //--------------------------------------------------------------------------- void WorldChunk::buildMine (long worldCellR, long worldCellC, long teamId, long mineState, long explosionType) { } //--------------------------------------------------------------------------- void WorldChunk::buildTerrainFire (GameObjectPtr object, long seconds) { } //--------------------------------------------------------------------------- void WorldChunk::buildArtillery (long commanderId, long artilleryType, Stuff::Vector3D location, long seconds) { } //--------------------------------------------------------------------------- void WorldChunk::buildMissionScriptMessage (long messageCode, long messageParam) { } //--------------------------------------------------------------------------- void WorldChunk::buildPilotKillStat ( long moverIndex, long vehicleClass) { } //-------------------------------------------------------------------------- void WorldChunk::buildScore (long commanderID, long score) { } //-------------------------------------------------------------------------- void WorldChunk::buildKillLoss (long killerCID, long loserCID) { } //-------------------------------------------------------------------------- void WorldChunk::buildCaptureBuilding (BuildingPtr building, long newCommanderID) { } //--------------------------------------------------------------------------- void WorldChunk::buildEndMission (void) { } //-------------------------------------------------------------------------- void WorldChunk::pack (void) { } //--------------------------------------------------------------------------- void WorldChunk::unpack (void) { } //--------------------------------------------------------------------------- bool WorldChunk::equalTo (WorldChunkPtr chunk) { return false; } //*************************************************************************** // MECHCOMMANDER MESSAGE handlers //*************************************************************************** //*************************************************************************** // MULTIPLAYER class //*************************************************************************** void* MultiPlayer::operator new (size_t ourSize) { void* result = systemHeap->Malloc(ourSize); return(result); } //--------------------------------------------------------------------------- void MultiPlayer::operator delete (void* us) { systemHeap->Free(us); } //--------------------------------------------------------------------------- void MultiPlayer::init (void) { } //--------------------------------------------------------------------------- long MultiPlayer:: setup (void) { return(MPLAYER_NO_ERR); } //--------------------------------------------------------------------------- void MultiPlayer::initUpdateFrequencies() { } //--------------------------------------------------------------------------- long MultiPlayer::update (void) { return(MPLAYER_NO_ERR); } //--------------------------------------------------------------------------- long MultiPlayer::beginSessionScan (char* ipAddress, bool persistent) { return(MPLAYER_NO_ERR); } //--------------------------------------------------------------------------- long MultiPlayer::endSessionScan (void) { return(MPLAYER_NO_ERR); } //--------------------------------------------------------------------------- MC2Session* MultiPlayer::getSessions (long& sessionCount) { return(NULL); } //--------------------------------------------------------------------------- bool MultiPlayer::hostSession (char* sessionName, char* playerName, long mxPlayers) { return(true); } //--------------------------------------------------------------------------- void MultiPlayer::updateSessionData (MC2SessionData* sessionData) { } //--------------------------------------------------------------------------- void MultiPlayer::setLocked (bool set) { } //--------------------------------------------------------------------------- void MultiPlayer::setInProgress (bool set) { } //--------------------------------------------------------------------------- void MultiPlayer::setCancelled (bool set) { } //--------------------------------------------------------------------------- void MultiPlayer::addTeamScore (long teamID, long score) { } //--------------------------------------------------------------------------- long MultiPlayer::joinSession (MC2Session* session, char* playerName) { return(MPLAYER_ERR_SESSION_NOT_FOUND); } //----------------------------------------------------------------------------- long MultiPlayer::closeSession (void) { return 0; } //----------------------------------------------------------------------------- void MultiPlayer::leaveSession (void) { } //----------------------------------------------------------------------------- long MultiPlayer::bootPlayer (NETPLAYER bootedPlayer) { return(MPLAYER_NO_ERR); } //----------------------------------------------------------------------------- bool MultiPlayer::waitTillStartLoading (void) { return(false); } //----------------------------------------------------------------------------- bool MultiPlayer::waitTillMechDataReceived (void) { return(false); } //----------------------------------------------------------------------------- bool MultiPlayer::waitTillMissionLoaded (void) { return(false); } //----------------------------------------------------------------------------- bool MultiPlayer::waitTillMissionSetup (void) { return(false); } //----------------------------------------------------------------------------- bool MultiPlayer::waitForSessionEntry (void) { sessionEntry = -1; return(sessionEntry == 1); } //----------------------------------------------------------------------------- bool MultiPlayer::playersReadyToLoad (void) { return(true); } //----------------------------------------------------------------------------- bool MultiPlayer::launchBrowser (const char* link) { return(false); } //----------------------------------------------------------------------------- void MultiPlayer::initParametersScreen (void) { } //----------------------------------------------------------------------------- void MultiPlayer::setDefaultPlayerInfo (void) { } //----------------------------------------------------------------------------- long MultiPlayer::setClosestColor (long colorIndex, long commanderID) { long curIndex = colorIndex; return(curIndex); } //----------------------------------------------------------------------------- long MultiPlayer::setNextFreeColor (long commanderID) { long i = 0; return(i); } //----------------------------------------------------------------------------- void MultiPlayer::setPlayerBaseColor (long commanderID, long colorIndex) { } //----------------------------------------------------------------------------- void MultiPlayer::setPlayerTeam (long commanderID, long teamID) { } //----------------------------------------------------------------------------- void MultiPlayer::setColor (long colorIndex, long commanderID) { } //----------------------------------------------------------------------------- MC2Player GetPlayersList[MAX_MC_PLAYERS]; const MC2Player* MultiPlayer::getPlayers (long& playerCount) { return(NULL); } //----------------------------------------------------------------------------- void MultiPlayer::logMessage (NETMESSAGE* message, bool sent) { } //----------------------------------------------------------------------------- void MultiPlayer::sendMessage (NETPLAYER player, void* data, int dataSize, bool guaranteed, bool toSelf) { } //----------------------------------------------------------------------------- bool MultiPlayer::hostGame (char* sessionName, char* playerName, long nPlayers) { return(true); } //--------------------------------------------------------------------------- long MultiPlayer::joinGame (char* ipAddress, char* sessionName, char* playerName) { return(MPLAYER_NO_ERR); } //----------------------------------------------------------------------------- void MultiPlayer::addToLocalMovers (MoverPtr mover) { } //--------------------------------------------------------------------------- void MultiPlayer::removeFromLocalMovers (MoverPtr mover) { } //--------------------------------------------------------------------------- void MultiPlayer::addToMoverRoster (MoverPtr mover) { for (long i = 0; i < MAX_MULTIPLAYER_MOVERS; i++) if (!moverRoster[i]) { moverRoster[i] = mover; mover->setNetRosterIndex(i); return; } STOP(("MultiPlayer.addToMoverRoster: too many movers")); } //--------------------------------------------------------------------------- void MultiPlayer::removeFromMoverRoster (MoverPtr mover) { } //--------------------------------------------------------------------------- void MultiPlayer::addToPlayerMoverRoster (long playerCommanderID, MoverPtr mover) { } //--------------------------------------------------------------------------- void MultiPlayer::removeFromPlayerMoverRoster (MoverPtr mover) { } //--------------------------------------------------------------------------- void MultiPlayer::addToTurretRoster (TurretPtr turret) { } //--------------------------------------------------------------------------- void MultiPlayer::initSpecialBuildings (char commandersToLoad[8][3]) { } //*************************************************************************** // WORLD CHUNK maintenance functions //*************************************************************************** long MultiPlayer::addWorldChunk (WorldChunkPtr chunk) { return(0); } //--------------------------------------------------------------------------- long MultiPlayer::addMissionScriptMessageChunk (long code, long param) { return(0); } //--------------------------------------------------------------------------- long MultiPlayer::addArtilleryChunk (long commanderId, long artilleryType, Stuff::Vector3D location, long seconds) { return(0); } //--------------------------------------------------------------------------- long MultiPlayer::addMineChunk (long tileR, long tileC, long teamId, long mineState, long explosionType) { return(0); } //--------------------------------------------------------------------------- long MultiPlayer::addLightOnFireChunk (GameObjectPtr object, long seconds) { return(0); } //--------------------------------------------------------------------------- long MultiPlayer::addPilotKillStat (MoverPtr mover, long vehicleClass) { return(0); } //--------------------------------------------------------------------------- long MultiPlayer::addScoreChunk (long commanderID, long score) { return(0); } //--------------------------------------------------------------------------- long MultiPlayer::addKillLossChunk (long killerCID, long loserCID) { return(0); } //--------------------------------------------------------------------------- long MultiPlayer::addEndMissionChunk (void) { return(0); } //--------------------------------------------------------------------------- long MultiPlayer::addCaptureBuildingChunk (BuildingPtr building, long prevCommanderID, long newCommanderID) { return(0); } //--------------------------------------------------------------------------- long MultiPlayer::grabWorldChunks (unsigned long* packedChunkBuffer) { return(0); } //--------------------------------------------------------------------------- // WEAPON HIT CHUNK maintenance functions //--------------------------------------------------------------------------- long MultiPlayer::addWeaponHitChunk (WeaponHitChunkPtr chunk) { return(0); } //--------------------------------------------------------------------------- long MultiPlayer::addWeaponHitChunk (GameObjectPtr target, WeaponShotInfoPtr shotInfo, bool isRefit) { return(0); } //--------------------------------------------------------------------------- void MultiPlayer::grabWeaponHitChunks (unsigned long* packedChunkBuffer, long numChunks) { } //--------------------------------------------------------------------------- // MESSAGE SENDERS //--------------------------------------------------------------------------- void MultiPlayer::sendPlayerInfo (NETPLAYER receiver) { } //--------------------------------------------------------------------------- void MultiPlayer::sendPlayerCID (NETPLAYER receiver, unsigned char subType, char CID) { } //--------------------------------------------------------------------------- void MultiPlayer::sendPlayerUpdate (NETPLAYER receiver, long stage, long newCommanderID) { } //--------------------------------------------------------------------------- void MultiPlayer::sendMissionSettingsUpdate (NETPLAYER receiver) { } //--------------------------------------------------------------------------- void MultiPlayer::sendChat (NETPLAYER receiver, char team, char* chatMessage) { } void MultiPlayer::sendPlayerActionChat(NETPLAYER receiver, const char* playerName, unsigned long resID ) { } //--------------------------------------------------------------------------- void MultiPlayer::sendPlayerCheckIn (void) { } //--------------------------------------------------------------------------- void MultiPlayer::sendPlayerSetup (void) { } //--------------------------------------------------------------------------- void MultiPlayer::sendPlayerInsignia (char* insigniaFileName, unsigned char* insigniaData, long dataSize) { } //--------------------------------------------------------------------------- void MultiPlayer::sendMissionSetup (NETPLAYER receiver, long subType, CompressedMech* mechData) { } //--------------------------------------------------------------------------- void MultiPlayer::setServer (NETPLAYER player, char playerIPAddress[16]) { } //--------------------------------------------------------------------------- void MultiPlayer::sendStartMission (void) { } //--------------------------------------------------------------------------- void MultiPlayer::sendEndMission (long result) { } //--------------------------------------------------------------------------- extern MoverPtr BringInReinforcement (long vehicleID, long rosterIndex, long commanderID, Stuff::Vector3D pos, bool exists); void MultiPlayer::sendReinforcement (long vehicleID, long rosterIndex, char pilotName[16], long commanderID, Stuff::Vector3D pos, unsigned char stage) { } //----------------------------------------------------------------------------- void MultiPlayer::sendNewServer (void) { } //----------------------------------------------------------------------------- void MultiPlayer::sendLeaveSession (char subType, char commanderID) { } //----------------------------------------------------------------------------- void MultiPlayer::sendPlayerOrder (TacticalOrderPtr tacOrder, bool needsSelection, long numMovers, MoverPtr* moverList, long numGroups, MoverGroupPtr* groupList, bool queuedOrder) { } //--------------------------------------------------------------------------- void MultiPlayer::sendHoldPosition (void) { } //--------------------------------------------------------------------------- void MultiPlayer::sendPlayerMoverGroup (long groupId, long numMovers, MoverPtr* moverList, long point) { } //--------------------------------------------------------------------------- void MultiPlayer::sendPlayerArtillery (long strikeType, Stuff::Vector3D location, long seconds) { } //--------------------------------------------------------------------------- void MultiPlayer::sendMoverUpdate (void) { } //--------------------------------------------------------------------------- void MultiPlayer::sendTurretUpdate (void) { } //--------------------------------------------------------------------------- void MultiPlayer::sendMoverWeaponFireUpdate (void) { } //--------------------------------------------------------------------------- void MultiPlayer::sendTurretWeaponFireUpdate (void) { } //--------------------------------------------------------------------------- void MultiPlayer::sendMoverCriticalUpdate (void) { } //--------------------------------------------------------------------------- void MultiPlayer::sendWeaponHitUpdate (void) { } //--------------------------------------------------------------------------- void MultiPlayer::sendWorldUpdate (void) { } //--------------------------------------------------------------------------- // MESSAGE HANDLERS //--------------------------------------------------------------------------- void MultiPlayer::handleChat (NETPLAYER sender, MCMSG_Chat* msg) { } //--------------------------------------------------------------------------- void MultiPlayer::handleMissionSettingsUpdate (NETPLAYER sender, MCMSG_MissionSettingsUpdate* msg) { } //--------------------------------------------------------------------------- void MultiPlayer::handlePlayerCID (NETPLAYER sender, MCMSG_PlayerCID* msg) { } //--------------------------------------------------------------------------- void MultiPlayer::handlePlayerUpdate (NETPLAYER sender, MCMSG_PlayerUpdate* msg) { } //--------------------------------------------------------------------------- void MultiPlayer::handleMissionSetup (NETPLAYER sender, MCMSG_MissionSetup* msg) { } //--------------------------------------------------------------------------- void MultiPlayer::handlePlayerInfo (NETPLAYER sender, MCMSG_PlayerInfo* msg) { } //--------------------------------------------------------------------------- void MultiPlayer::handlePlayerCheckIn (NETPLAYER sender, MCMSG_PlayerCheckIn* msg) { } //--------------------------------------------------------------------------- void MultiPlayer::handlePlayerSetup (NETPLAYER sender, MCMSG_PlayerSetup* msg) { } //--------------------------------------------------------------------------- void MultiPlayer::handlePlayerInsignia (NETPLAYER sender, MCMSG_PlayerInsignia* msg) { } //--------------------------------------------------------------------------- void MultiPlayer::handleStartMission (NETPLAYER sender) { } //--------------------------------------------------------------------------- void MultiPlayer::handleEndMission (NETPLAYER sender, MCMSG_EndMission* msg) { } //--------------------------------------------------------------------------- void MultiPlayer::handleReinforcement (NETPLAYER sender, MCMSG_Reinforcement* msg) { } //----------------------------------------------------------------------------- void MultiPlayer::handleNewServer (NETPLAYER sender, MCMSG_NewServer* msg) { } //----------------------------------------------------------------------------- void MultiPlayer::handleLeaveSession (NETPLAYER sender, MCMSG_LeaveSession* msg) { } //----------------------------------------------------------------------------- void MultiPlayer::handleHoldPosition (NETPLAYER sender, MCMSG_HoldPosition* msg) { } //----------------------------------------------------------------------------- void MultiPlayer::handlePlayerOrder (NETPLAYER sender, MCMSG_PlayerOrder* msg) { } //--------------------------------------------------------------------------- void MultiPlayer::handlePlayerMoverGroup (NETPLAYER sender, MCMSG_PlayerMoverGroup* msg) { } //--------------------------------------------------------------------------- void MultiPlayer::handlePlayerArtillery (NETPLAYER sender, MCMSG_PlayerArtillery* msg) { } //--------------------------------------------------------------------------- void MultiPlayer::handleMoverUpdate (NETPLAYER sender, MCMSG_MoverUpdate* msg) { } //--------------------------------------------------------------------------- void MultiPlayer::handleTurretUpdate (NETPLAYER sender, MCMSG_TurretUpdate* msg) { } //--------------------------------------------------------------------------- void MultiPlayer::handleMoverWeaponFireUpdate (NETPLAYER sender, MCMSG_MoverWeaponFireUpdate* msg) { } //--------------------------------------------------------------------------- void MultiPlayer::handleTurretWeaponFireUpdate (NETPLAYER sender, MCMSG_TurretWeaponFireUpdate* msg) { } //--------------------------------------------------------------------------- void MultiPlayer::handleMoverCriticalUpdate (NETPLAYER sender, MCMSG_MoverCriticalUpdate* msg) { } //--------------------------------------------------------------------------- extern bool FromMP; void MultiPlayer::handleWeaponHitUpdate (NETPLAYER sender, MCMSG_WeaponHitUpdate* msg) { } //--------------------------------------------------------------------------- void MultiPlayer::handleWorldUpdate (NETPLAYER sender, MCMSG_WorldUpdate* msg) { } //--------------------------------------------------------------------------- void MultiPlayer::handlePlayerLeftSession (NETPLAYER leftPlayer) { } //--------------------------------------------------------------------------- void MultiPlayer::handleTerminateSession (void) { } //--------------------------------------------------------------------------- bool MultiPlayer::isServerMissing (void) { return(false); } //--------------------------------------------------------------------------- bool MultiPlayer::processGameMessage (NETMESSAGE* msg) { return(true); } //--------------------------------------------------------------------------- void MultiPlayer::processMessages (void) { } //----------------------------------------------------------------------------- // Misc. routines //----------------------------------------------------------------------------- void MultiPlayer::buildMoverRosterRLE (void) { } //--------------------------------------------------------------------------- long MultiPlayer::updateClients (bool forceIt) { return(MPLAYER_NO_ERR); } //--------------------------------------------------------------------------- bool MultiPlayer::calcMissionStatus (void) { return(true); } //----------------------------------------------------------------------------- int __cdecl sortPlayerRanks (const void* player1, const void* player2) { return(0); } //----------------------------------------------------------------------------- void MultiPlayer::calcPlayerRanks (void) { } //----------------------------------------------------------------------------- bool MultiPlayer::allPlayersCheckedIn (void) { return(true); } //--------------------------------------------------------------------------- bool MultiPlayer::allPlayersReady (void) { return(true); } //--------------------------------------------------------------------------- void MultiPlayer::switchServers (void) { } //--------------------------------------------------------------------------- void MultiPlayer::calcDropZones (char dropZonesCID[MAX_MC_PLAYERS], char hqs[MAX_TEAMS]) { } //--------------------------------------------------------------------------- void MultiPlayer::initStartupParameters (bool fresh) { } //--------------------------------------------------------------------------- extern char* GetTime(); extern char *SpecialtySkillsTable[NUM_SPECIALTY_SKILLS]; long MultiPlayer::saveTranscript (const char* fileName, bool debugging) { return(MPLAYER_NO_ERR); } //--------------------------------------------------------------------------- void MultiPlayer::destroy (void) { } //--------------------------------------------------------------------------- void MultiPlayer::getChatMessages( char** buffer, long* playerIDs, long& count ) { } void MultiPlayer::redistributeRP( ) { } //***************************************************************************