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(); }
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(); }