Beispiel #1
0
void loadgamerest(void) {
  if (demoplayback || !f) return;
  if (gzgeti()!=game::ents.length()) return loadgameout();
  loopv(game::ents) {
    game::ents[i].spawned = gzgetc(f)!=0;
    // TODO if (game::ents[i].type==game::CARROT && !game::ents[i].spawned)
      // world::trigger(game::ents[i].attr1, game::ents[i].attr2, true);
  }
  server::restoreserverstate(game::ents);

  gzread(f, game::player1, sizeof(game::dynent));
  game::player1->lastaction = game::lastmillis();

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

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

  con::out("savegame restored");
  if (demoloading) start(); else stop();
}
Beispiel #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();
}