diff --git a/source/src/client.cpp b/source/src/client.cpp index 05ab8249..4b71fc53 100644 --- a/source/src/client.cpp +++ b/source/src/client.cpp @@ -320,6 +320,7 @@ void c2sinfo(dynent *d) // send update to the server else { enet_packet_resize(packet, p.length()); + incomingdemodata(42, p.buf, p.length()); sendpackettoserv(1, packet); }; }; diff --git a/source/src/clients2c.cpp b/source/src/clients2c.cpp index 8b52ac7f..d0621295 100644 --- a/source/src/clients2c.cpp +++ b/source/src/clients2c.cpp @@ -451,6 +451,11 @@ void parsemessages(int cn, playerent *d, ucharbuf &p) break; }; + /* demo recording compat */ + case SV_PING: + getint(p); + break; + // End add default: @@ -482,6 +487,10 @@ void localservertoclient(int chan, uchar *buf, int len) // processes any updat }; break; case 3: parsemessages(-1, NULL, p); break; + case 42: // player1 demo data only + extern int democlientnum; + parsemessages(democlientnum, getclient(democlientnum), p); + break; }; }; diff --git a/source/src/cube.h b/source/src/cube.h index 5d56b2ac..decc0167 100644 --- a/source/src/cube.h +++ b/source/src/cube.h @@ -434,7 +434,7 @@ struct bounceent : physent // nades, gibs #define has_akimbo(d) ((d)->gunselect==GUN_PISTOL && (d)->akimbo) -#define SAVEGAMEVERSION 6 // bump if dynent/netprotocol changes or any other savegame/demo data bumped from 5 +#define SAVEGAMEVERSION 1006 // bump if dynent/netprotocol changes or any other savegame/demo data bumped from 5 //enum { A_BLUE, A_GREEN, A_YELLOW }; // armour types... take 20/40/60 % off diff --git a/source/src/savegamedemo.cpp b/source/src/savegamedemo.cpp index 00a0c61f..045f8de2 100644 --- a/source/src/savegamedemo.cpp +++ b/source/src/savegamedemo.cpp @@ -45,17 +45,17 @@ void savestate(char *fn) gzwrite(f, (void *)"CUBESAVE", 8); gzputc(f, SDL_BYTEORDER==SDL_LIL_ENDIAN ? 1 : 0); gzputi(SAVEGAMEVERSION); - gzputi(sizeof(dynent)); + gzputi(sizeof(playerent)); gzwrite(f, getclientmap(), _MAXDEFSTR); gzputi(gamemode); gzputi(ents.length()); loopv(ents) gzputc(f, ents[i].spawned); - gzwrite(f, player1, sizeof(dynent)); + gzwrite(f, player1, sizeof(playerent)); gzputi(players.length()); loopv(players) { gzput(players[i]==NULL); - gzwrite(f, players[i], sizeof(dynent)); + gzwrite(f, players[i], sizeof(playerent)); }; }; @@ -76,7 +76,7 @@ void loadstate(char *fn) gzread(f, buf, 8); if(strncmp(buf, "CUBESAVE", 8)) goto out; if(gzgetc(f)!=(SDL_BYTEORDER==SDL_LIL_ENDIAN ? 1 : 0)) goto out; // not supporting save->load accross incompatible architectures simpifies things a LOT - if(gzgeti()!=SAVEGAMEVERSION || gzgeti()!=sizeof(dynent)) goto out; + if(gzgeti()!=SAVEGAMEVERSION || gzgeti()!=sizeof(playerent)) goto out; string mapname; gzread(f, mapname, _MAXDEFSTR); nextmode = gzgeti(); @@ -111,15 +111,15 @@ void loadgamerest() }; restoreserverstate(ents); - gzread(f, player1, sizeof(dynent)); + gzread(f, player1, sizeof(playerent)); player1->lastaction = lastmillis; int nplayers = gzgeti(); loopi(nplayers) if(!gzget()) { - dynent *d = getclient(i); + playerent *d = getclient(i); ASSERT(d); - gzread(f, d, sizeof(dynent)); + gzread(f, d, sizeof(playerent)); }; conoutf("savegame restored");