/* * $Logfile: /DescentIII/Main/entropy/EntropyPackets.cpp $ * $Revision: 1.1.1.1 $ * $Date: 2003-08-26 03:57:41 $ * $Author: kevinb $ * * * * $Log: not supported by cvs2svn $ * * 10 5/21/99 10:03a Jeff * hopefully filled in any remaining gaps related to have more than you * can carry virus loads * * 9 5/12/99 11:04p Jeff * dmfc and multiplayer games now have endian friendly packets (*whew*) * * 8 5/12/99 11:28a Jeff * added sourcesafe comment block * * $NoKeywords: $ */ #include "gamedll_header.h" #include #include "idmfc.h" #include "Entropystr.h" #include "EntropyAux.h" extern IDMFC *DMFCBase; extern room *dRooms; extern object *dObjects; void SendTakeOverPacket(int newteam,int oldteam,int room,int victor) { int count = 0; ubyte data[MAX_GAME_DATA_SIZE]; DMFCBase->StartPacket(data,SPID_TAKEOVER,&count); MultiAddByte(newteam,data,&count); MultiAddByte(oldteam,data,&count); MultiAddByte(victor,data,&count); MultiAddInt(room,data,&count); DMFCBase->SendPacket(data,count,SP_ALL); } void ReceiveTakeOverPacket(ubyte *data) { ubyte newteam,oldteam; int room; int count = 0; int victor; newteam = MultiGetByte(data,&count); oldteam = MultiGetByte(data,&count); victor = MultiGetByte(data,&count); room = MultiGetInt(data,&count); TakeOverRoom(newteam,oldteam,room,victor); } void RemoveVirusFromPlayer(int player_num,bool remove_all); //Handles when we get a new player packet void GetGameStartPacket(ubyte *data) { int i,count = 0; for(i=0;iStartPacket(data,SPID_NEWPLAYER,&count); for(i=0;iCheckPlayerNum(i)) { MultiAddByte(1,data,&count); MultiAddInt(NumberOfKillsSinceLastDeath[i],data,&count); MultiAddInt(DLLInvGetTypeIDCount(i,OBJ_POWERUP,virus_id),data,&count); }else { MultiAddByte(0,data,&count); } } for(i=0;iSendPacket(data,count,pnum); //send over the rest SendRoomInfo(pnum); } void SendClientPickupVirus(int player_num) { int start,count = 0; ubyte data[MAX_GAME_DATA_SIZE]; DMFCBase->StartPacket(data,SPID_PICKUPVIRUS,&count); start = count; MultiAddByte(player_num,data,&count); ReceivePickupVirus(&data[start]); DMFCBase->SendPacket(data,count,SP_ALL); } void ReceivePickupVirus(ubyte *data) { int player_num,count = 0; player_num = MultiGetByte(data,&count); DLLInvAddTypeID(player_num,OBJ_POWERUP,virus_id,-1,-1,0,TXT_VIRUS); if(player_num==DMFCBase->GetPlayerNum()) { DLLAddHUDMessage(TXT_PICKUPVIRUS); } } #define RT_REDLAB 0 #define RT_REDREP 1 #define RT_REDENG 2 #define RT_BLULAB 3 #define RT_BLUREP 4 #define RT_BLUENG 5 void SendRoomInfo(int pnum) { char *room_info; int flags,r,i; room_info = (char *)malloc(sizeof(char)*RoomCount); if(!room_info) return; for(r=0;rStartPacket(data,SPID_ROOMINFO,&count); for(i=0;iSendPacket(data,count,pnum); free(room_info); } void ReceiveRoomInfo(ubyte *data) { int i,count = 0; int flag; char *room_info; room_info = (char *)malloc(sizeof(char)*RoomCount); if(!room_info){ FatalError("Out of Memory"); return; } for(i=0;iflags &= ~RF_SPECIAL1; rp->flags &= ~RF_SPECIAL2; rp->flags &= ~RF_SPECIAL3; rp->flags &= ~RF_SPECIAL4; rp->flags &= ~RF_SPECIAL5; rp->flags &= ~RF_SPECIAL6; rp->flags |= flag; rp->room_change_flags |= RCF_GOALSPECIAL_FLAGS; } free(room_info); for(i=0;iStartPacket(data,SPID_VIRUSCREATE,&count); start = count; int objnum = obj-dObjects; MultiAddInt(objnum,data,&count); DoVirusCreate(&data[start]); DMFCBase->SendPacket(data,count,SP_ALL); } void DoVirusCreate(ubyte *data) { int s_objnum,l_objnum,count=0; s_objnum = MultiGetInt(data,&count); l_objnum = DMFCBase->ConvertServerToLocalObjnum(s_objnum); if(l_objnum!=-1) { DLLCreateRandomSparks(rand()%150+100,&dObjects[l_objnum].pos,dObjects[l_objnum].roomnum,HOT_SPARK_INDEX,(rand()%3)+2); } }