void savestate(char *fn) { stop(); f = gzopen(fn, "wb9"); if (!f) { conoutf("could not write %s", fn); return; }; gzwrite(f, (void *) "CUBESAVE", 8); gzputc(f, islittleendian); gzputi(SAVEGAMEVERSION); gzputi(sizeof(Sprite)); char buf[_MAXDEFSTR]; sprintf(buf, "%s", getclientmap().c_str()); gzwrite(f, buf, _MAXDEFSTR); gzputi(gamemode); gzputi(entityList.size()); for(Entity &en : entityList) { gzputc(f, en.spawned); } gzwrite(f, player1, sizeof(Sprite)); std::vector<Sprite *> &monsters = getmonsters(); gzputi(monsters.size()); for(Sprite *m : monsters) { gzwrite(f, m, sizeof(Sprite)); } gzputi(players.size()); for(Sprite *p : players) { gzput(p == NULL); gzwrite(f, p, sizeof(Sprite)); }; }
void incomingdemodata(uchar *buf, int len, bool extras) { if(!demorecording) return; gzputi(lastmillis-starttime); gzputi(len); gzwrite(f, buf, len); gzput(extras); if(extras) { gzput(player1->gunselect); gzput(player1->lastattackgun); gzputi(player1->lastaction-starttime); gzputi(player1->gunwait); gzputi(player1->health); gzputi(player1->armour); gzput(player1->armourtype); loopi(NUMGUNS) gzput(player1->ammo[i]); gzput(player1->state); gzputi(bdamage); bdamage = 0; gzputi(ddamage); if(ddamage) { gzputv(dorig); ddamage = 0; }; // FIXME: add all other client state which is not send through the network }; };
static void savestate(char *fn) { stop(); f = gzopen(fn, "wb9"); if (!f) { con::out("could not write %s", fn); return; } gzwrite(f, (void *)"CUBESAVE", 8); gzputc(f, sys::islittleendian()); gzputi(SAVEGAMEVERSION); gzputi(sizeof(game::dynent)); gzwrite(f, (const voidp) game::getclientmap(), MAXDEFSTR); gzputi(game::mode()); gzputi(game::ents.length()); loopv(game::ents) gzputc(f, game::ents[i].spawned); gzwrite(f, game::player1, sizeof(game::dynent)); game::dvector &monsters = game::getmonsters(); gzputi(monsters.length()); loopv(monsters) gzwrite(f, monsters[i], sizeof(game::dynent)); gzputi(game::players.length()); loopv(game::players) { gzput(game::players[i]==NULL); gzwrite(f, game::players[i], sizeof(game::dynent)); } }
void savestate(char *fn) { stop(); f = gzopen(fn, "wb9"); if(!f) { conoutf("could not write %s", fn); return; }; gzwrite(f, (void *)"CUBESAVE", 8); gzputc(f, islittleendian); gzputi(SAVEGAMEVERSION); gzputi(sizeof(dynent)); gzwrite(f, getclientmap(), _MAXDEFSTR); gzputi(gamemode); gzputi(ents.length()); loopv(ents) gzputc(f, ents[i].spawned); gzwrite(f, player1, sizeof(dynent)); dvector &monsters = getmonsters(); gzputi(monsters.length()); loopv(monsters) gzwrite(f, monsters[i], sizeof(dynent)); gzputi(players.length()); loopv(players) { gzput(players[i]==NULL); gzwrite(f, players[i], sizeof(dynent)); }; };