#include #include #include #include #define GOD_LIKE_SYNC_CHECKING #include "TYPES.H" #include "shipdefs.h" #include "classdefs.h" #include "maxmultiplayer.h" #include "gamestats.h" #include "spaceobj.h" typedef struct { sdword numPlayers; char names[MAX_MULTIPLAYER_PLAYERS+1][20]; }GameStatsDebugHeader; #define OP_NONE 0 #define OP_COMPARE 1 #define OP_SYNC_TXT 2 #define OP_VIEW 3 #define OP_SYNC_COMPARE 4 int main(int argc,char *argv[]) { FILE *fp1,*fp2; sdword options=OP_NONE; char *filename1; char *filename2; char name1[25]; char name2[25]; char ch = 't'; sdword i; GameStatsDebugHeader header1; GameStatsDebugHeader header2; GameStats machine1; GameStats machine2; sdword frame1; sdword frame2; sdword sizetoread=0; sdword totalread=0; sdword numShips1,numShips2; sdword univFrame1,univFrame2; sdword shipcount,sizeofsnapshot; GodWritePacketHeader *m1Header; GodWritePacketHeader *m2Header; UniverseSnapShot *m1SnapShot; UniverseSnapShot *m2SnapShot; sdword sizeofHeader; Ship ship1; Ship ship2; memset(&ship1,0,sizeof(Ship)); memset(&ship2,0,sizeof(Ship)); if(argc < 2) { explainnetparse: printf("\nStat File Parser and Comparer"); printf("\nUsage: statview <...>"); printf("\n\nOptions: /c "); printf("\n Compare two different stat files."); printf("\n /d "); printf("\n Compare two different sync*.txt files"); printf("\n /v "); printf("\n view a SyncDump.txt type file"); printf("\n /cs "); printf("\n compare two syncdump.txt files"); printf("\n\n\n\n"); return 0; } //Parse Options if(argc > 2) { for(i=1;iplayerName); printf("\nWindow Size # : %d",m1Header->windowSize); for(i=0;iwindowSize;i++) { //read size fread(&sizeofsnapshot,sizeof(sdword),1,fp1); //read snap shot! m1SnapShot = (UniverseSnapShot *)malloc(sizeofsnapshot); fread(m1SnapShot,sizeofsnapshot,1,fp1); printf("\nPacket %d Univ Frame %d NumShips %d",i,m1SnapShot->univUpdateCounterValue,m1SnapShot->numShips); free(m1SnapShot); } free(m1Header); break; case OP_SYNC_COMPARE: if((fp1 = fopen(filename1,"rb"))==NULL) { printf("\n\nError opening %s.",filename1); return 0; } if((fp2 = fopen(filename2,"rb"))==NULL) { printf("\n\nError opening %s.",filename2); return 0; } sizeofHeader = sizeof(GodWritePacketHeader); m1Header = (GodWritePacketHeader *) malloc(sizeofHeader); m2Header = (GodWritePacketHeader *) malloc(sizeofHeader); fread(m1Header,sizeofHeader,1,fp1); fread(m2Header,sizeofHeader,1,fp2); printf("\nMachine 1 From : %s Machine 2 From : %s",m1Header->playerName,m2Header->playerName); printf("\nWindow Size # : %d Window Size # : %d\n\n",m1Header->windowSize,m2Header->windowSize); for(i=0;iwindowSize;i++) { //read size fread(&sizeofsnapshot,sizeof(sdword),1,fp1); //read snap shot! m1SnapShot = (UniverseSnapShot *)malloc(sizeofsnapshot); fread(m1SnapShot,sizeofsnapshot,1,fp1); //read size from 2 fread(&sizeofsnapshot,sizeof(sdword),1,fp2); //read snap shot! m2SnapShot = (UniverseSnapShot *)malloc(sizeofsnapshot); fread(m2SnapShot,sizeofsnapshot,1,fp2); if(m1SnapShot->numShips != m2SnapShot->numShips) { printf("\nPacket %d differs on # of ships: M1: %d M2: %d\n",i,m1SnapShot->numShips,m2SnapShot->numShips); _asm int 3; } if(m1SnapShot->univUpdateCounterValue != m2SnapShot->univUpdateCounterValue) { printf("\nPacket %d differs on Frame #'s: M1: %d M2 %d\n",i,m1SnapShot->univUpdateCounterValue,m2SnapShot->univUpdateCounterValue); _asm int 3; } { sdword j,k; printf("\rWindow Packet# %d",i); for(j=0;j<(sdword) m1SnapShot->numShips;j++) { sdword *m1 = (sdword *) &m1SnapShot->ship[j]; sdword *m2 = (sdword *) &m2SnapShot->ship[j]; m1SnapShot->ship[j].collInfo.selCircleDepth=0.0f; m2SnapShot->ship[j].collInfo.selCircleDepth=0.0f; m1SnapShot->ship[j].gravwellTimeEffect=0.0f; m2SnapShot->ship[j].gravwellTimeEffect=0.0f; for(k=0;k