char buf[32];
snprintf(buf, 32, "map%d", which + 1); // challenges
Loadlevel(buf);
- } else
+ } else {
Loadlevel("mapsave");
+ }
}
void Game::Loadlevel(const std::string& name, bool tutorial)
funpackf(tfile, "Bi", &environment);
+ if (environment != oldenvironment)
+ Setenvironment(environment);
+ oldenvironment = environment;
+
Object::LoadObjectsFromFile(tfile, stealthloading);
if (mapvers >= 7) {
funpackf(tfile, "Bf Bf Bf Bf", &mapcenter.x, &mapcenter.y, &mapcenter.z, &mapradius);
SetUpLighting();
- if (environment != oldenvironment)
- Setenvironment(environment);
- oldenvironment = environment;
if (!stealthloading) {
Object::AddObjectsToTerrain();
oldmusicvolume[2] = 0;
oldmusicvolume[3] = 0;
- if (!firstload)
- firstload = 1;
-
leveltime = 0;
wonleveltime = 0;
visibleloading = false;
lowpointtarget = lowpoint + DoRotation(Person::players[k]->facing, 0, -90, 0) * 1.5;
XYZ tempcoords1 = lowpoint;
whichhit = Object::objects[i]->model.LineCheck(&lowpoint, &lowpointtarget, &colpoint, &Object::objects[i]->position, &Object::objects[i]->yaw);
- if (whichhit != -1 && fabs(Object::objects[i]->model.facenormals[whichhit].y) < .3) {
+ if (whichhit != -1 && fabs(Object::objects[i]->model.Triangles[whichhit].facenormal.y) < .3) {
Person::players[k]->setTargetAnimation(walljumpleftanim);
emit_sound_at(movewhooshsound, Person::players[k]->coords);
if (k == 0)
pause_sound(whooshsound);
- lowpointtarget = DoRotation(Object::objects[i]->model.facenormals[whichhit], 0, Object::objects[i]->yaw, 0);
+ lowpointtarget = DoRotation(Object::objects[i]->model.Triangles[whichhit].facenormal, 0, Object::objects[i]->yaw, 0);
Person::players[k]->yaw = -asin(0 - lowpointtarget.x) * 180 / M_PI;
if (lowpointtarget.z < 0)
Person::players[k]->yaw = 180 - Person::players[k]->yaw;
lowpoint = tempcoords1;
lowpointtarget = lowpoint + DoRotation(Person::players[k]->facing, 0, 90, 0) * 1.5;
whichhit = Object::objects[i]->model.LineCheck(&lowpoint, &lowpointtarget, &colpoint, &Object::objects[i]->position, &Object::objects[i]->yaw);
- if (whichhit != -1 && fabs(Object::objects[i]->model.facenormals[whichhit].y) < .3) {
+ if (whichhit != -1 && fabs(Object::objects[i]->model.Triangles[whichhit].facenormal.y) < .3) {
Person::players[k]->setTargetAnimation(walljumprightanim);
emit_sound_at(movewhooshsound, Person::players[k]->coords);
if (k == 0)
pause_sound(whooshsound);
- lowpointtarget = DoRotation(Object::objects[i]->model.facenormals[whichhit], 0, Object::objects[i]->yaw, 0);
+ lowpointtarget = DoRotation(Object::objects[i]->model.Triangles[whichhit].facenormal, 0, Object::objects[i]->yaw, 0);
Person::players[k]->yaw = -asin(0 - lowpointtarget.x) * 180 / M_PI;
if (lowpointtarget.z < 0)
Person::players[k]->yaw = 180 - Person::players[k]->yaw;
lowpoint = tempcoords1;
lowpointtarget = lowpoint + Person::players[k]->facing * 2;
whichhit = Object::objects[i]->model.LineCheck(&lowpoint, &lowpointtarget, &colpoint, &Object::objects[i]->position, &Object::objects[i]->yaw);
- if (whichhit != -1 && fabs(Object::objects[i]->model.facenormals[whichhit].y) < .3) {
+ if (whichhit != -1 && fabs(Object::objects[i]->model.Triangles[whichhit].facenormal.y) < .3) {
Person::players[k]->setTargetAnimation(walljumpbackanim);
emit_sound_at(movewhooshsound, Person::players[k]->coords);
if (k == 0)
pause_sound(whooshsound);
- lowpointtarget = DoRotation(Object::objects[i]->model.facenormals[whichhit], 0, Object::objects[i]->yaw, 0);
+ lowpointtarget = DoRotation(Object::objects[i]->model.Triangles[whichhit].facenormal, 0, Object::objects[i]->yaw, 0);
Person::players[k]->yaw = -asin(0 - lowpointtarget.x) * 180 / M_PI;
if (lowpointtarget.z < 0)
Person::players[k]->yaw = 180 - Person::players[k]->yaw;
lowpoint = tempcoords1;
lowpointtarget = lowpoint - Person::players[k]->facing * 2;
whichhit = Object::objects[i]->model.LineCheck(&lowpoint, &lowpointtarget, &colpoint, &Object::objects[i]->position, &Object::objects[i]->yaw);
- if (whichhit != -1 && fabs(Object::objects[i]->model.facenormals[whichhit].y) < .3) {
+ if (whichhit != -1 && fabs(Object::objects[i]->model.Triangles[whichhit].facenormal.y) < .3) {
Person::players[k]->setTargetAnimation(walljumpfrontanim);
emit_sound_at(movewhooshsound, Person::players[k]->coords);
if (k == 0)
pause_sound(whooshsound);
- lowpointtarget = DoRotation(Object::objects[i]->model.facenormals[whichhit], 0, Object::objects[i]->yaw, 0);
+ lowpointtarget = DoRotation(Object::objects[i]->model.Triangles[whichhit].facenormal, 0, Object::objects[i]->yaw, 0);
Person::players[k]->yaw = -asin(0 - lowpointtarget.x) * 180 / M_PI;
if (lowpointtarget.z < 0)
Person::players[k]->yaw = 180 - Person::players[k]->yaw;
lowpoint.y += (float)j / 13;
lowpointtarget = lowpoint + facing * 1.3;
flatfacing = Person::players[k]->coords;
- Person::players[k]->coords = colpoint - DoRotation(Object::objects[i]->model.facenormals[whichhit], 0, Object::objects[k]->yaw, 0) * .01;
+ Person::players[k]->coords = colpoint - DoRotation(Object::objects[i]->model.Triangles[whichhit].facenormal, 0, Object::objects[k]->yaw, 0) * .01;
Person::players[k]->coords.y = lowpointtarget.y - .07;
Person::players[k]->currentoffset = (flatfacing - Person::players[k]->coords) / Person::players[k]->scale;
}
emit_sound_at(jumpsound, Person::players[k]->coords, 128.);
- lowpointtarget = DoRotation(Object::objects[i]->model.facenormals[whichhit], 0, Object::objects[i]->yaw, 0);
+ lowpointtarget = DoRotation(Object::objects[i]->model.Triangles[whichhit].facenormal, 0, Object::objects[i]->yaw, 0);
Person::players[k]->yaw = -asin(0 - lowpointtarget.x) * 180 / M_PI;
if (lowpointtarget.z < 0)
Person::players[k]->yaw = 180 - Person::players[k]->yaw;
Person::players[k]->animTarget = killanim;
terrain.deleteDeadDecals();
for (unsigned int l = 0; l < Object::objects.size(); l++) {
- if (Object::objects[l]->model.type == decalstype)
- for (int j = 0; j < Object::objects[l]->model.numdecals; j++) {
- if ((Object::objects[l]->model.decaltype[j] == blooddecal ||
- Object::objects[l]->model.decaltype[j] == blooddecalslow) &&
- Object::objects[l]->model.decalalivetime[j] < 2)
- Object::objects[l]->model.DeleteDecal(j);
- }
+ if (Object::objects[l]->model.type == decalstype) {
+ Object::objects[l]->model.deleteDeadDecals();
+ }
}
}
if (!Person::players[i]->dead || musictype != 2)
Person::players[k]->animTarget = dropkickanim;
terrain.deleteDeadDecals();
for (unsigned int l = 0; l < Object::objects.size(); l++) {
- if (Object::objects[l]->model.type == decalstype)
- for (int j = 0; j < Object::objects[l]->model.numdecals; j++) {
- if ((Object::objects[l]->model.decaltype[j] == blooddecal ||
- Object::objects[l]->model.decaltype[j] == blooddecalslow) &&
- Object::objects[l]->model.decalalivetime[j] < 2) {
- Object::objects[l]->model.DeleteDecal(j);
- }
- }
+ if (Object::objects[l]->model.type == decalstype) {
+ Object::objects[l]->model.deleteDeadDecals();
+ }
}
}
}
Person::players[i]->aitype == getweapontype ||
Person::players[i]->aitype == gethelptype ||
Person::players[i]->aitype == searchtype) &&
- !Person::players[i]->dead/*&&Person::players[i]->surprised<=0*/ &&
+ !Person::players[i]->dead &&
(Person::players[i]->animTarget != sneakattackedanim &&
Person::players[i]->animTarget != knifesneakattackedanim &&
Person::players[i]->animTarget != swordsneakattackedanim)) {
loading = 2;
loadtime = 0;
targetlevel = 7;
- if (!firstload)
+ if (!firstLoadDone) {
LoadStuff();
+ }
whichchoice = 0;
actuallevel = campaignlevels[actuallevel].nextlevel.front();
visibleloading = true;