Exemple #1
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));
	};
}
Exemple #2
0
void loadgamerest() {
	if (demoplayback || !f)
		return;

	if (gzgeti() != entityList.size())
		return loadgameout();
	for(Entity &en : entityList) {
		en.spawned = gzgetc(f) != 0;
		if (en.type == CARROT && !en.spawned)
			trigger(en.attr1, en.attr2, true);
	};
	restoreserverstate(entityList);

	gzread(f, player1, sizeof(Sprite));
	player1->lastaction = lastmillis;

	int nmonsters = gzgeti();
	std::vector<Sprite *> &monsters = getmonsters();
	if (nmonsters != monsters.size())
		return loadgameout();
	loopv(monsters) {
		gzread(f, monsters[i], sizeof(Sprite));
		monsters[i]->enemy = player1;    // lazy, could save id of enemy instead
		monsters[i]->lastaction = monsters[i]->trigger = lastmillis + 500; // also lazy, but no real noticable effect on game
		if (monsters[i]->state == CS_DEAD)
			monsters[i]->lastaction = 0;
	};
	restoremonsterstate();

	int nplayers = gzgeti();
	loopi(nplayers)
		if (!gzget()) {
			Sprite *d = getclient(i);
			assert(d);
			gzread(f, d, sizeof(Sprite));
		};

	conoutf("savegame restored");
	if (demoloading)
		startdemo();
	else
		stop();
}
Exemple #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(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));
    };
};