Example #1
0
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
    };
};
Example #2
0
void stop(void) {
  if (f) {
    if (demorecording) gzputi(-1);
    gzclose(f);
  }
  f = NULL;
  demorecording = false;
  demoplayback = false;
  demoloading = false;
  loopv(playerhistory) game::zapdynent(playerhistory[i]);
  playerhistory.setsize(0);
}
Example #3
0
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));
	};
}
Example #4
0
void record(char *name)
{
    if(m_sp) { conoutf("cannot record singleplayer games"); return; };
    int cn = getclientnum();
    if(cn<0) return;
    sprintf_sd(fn)("demos/%s.cdgz", name);
    savestate(fn);
    gzputi(cn);
    conoutf("started recording demo to %s", fn);
    demorecording = true;
    starttime = lastmillis;
	ddamage = bdamage = 0;
};
Example #5
0
void stop() {
	if (f) {
		if (demorecording)
			gzputi(-1);
		gzclose(f);
	};
	f = NULL;
	demorecording = false;
	demoplayback = false;
	demoloading = false;
	loopv(playerhistory)
		zapSprite(playerhistory[i]);
	playerhistory.resize(0);
}
Example #6
0
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));
  }
}
Example #7
0
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));
    };
};