X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;ds=sidebyside;f=Source%2FGameTick.cpp;h=ed22ee26b33e57f299ee51cd61f5c9fc450b8013;hb=8b8230c564e1f0063b381e77bf6222af9f2e678d;hp=ebf1175342ce52f5f383563c7668e8bfca5bf29e;hpb=e60cbd7add6123d81b3c35543296449b5d02cbaa;p=lugaru.git diff --git a/Source/GameTick.cpp b/Source/GameTick.cpp index ebf1175..ed22ee2 100644 --- a/Source/GameTick.cpp +++ b/Source/GameTick.cpp @@ -502,8 +502,9 @@ void Game::Loadlevel(int which) 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) @@ -706,6 +707,10 @@ 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) { @@ -769,9 +774,6 @@ void Game::Loadlevel(const std::string& name, bool tutorial) 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(); @@ -924,9 +926,6 @@ void Game::Loadlevel(const std::string& name, bool tutorial) oldmusicvolume[2] = 0; oldmusicvolume[3] = 0; - if (!firstload) - firstload = 1; - leveltime = 0; wonleveltime = 0; visibleloading = false; @@ -1775,13 +1774,13 @@ void doAerialAcrobatics() 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; @@ -1793,13 +1792,13 @@ void doAerialAcrobatics() 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; @@ -1811,13 +1810,13 @@ void doAerialAcrobatics() 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; @@ -1829,13 +1828,13 @@ void doAerialAcrobatics() 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; @@ -1978,7 +1977,7 @@ void doAerialAcrobatics() 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; @@ -1989,7 +1988,7 @@ void doAerialAcrobatics() } 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; @@ -2460,13 +2459,9 @@ void doAttacks() 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) @@ -2481,14 +2476,9 @@ void doAttacks() 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(); + } } } } @@ -4299,7 +4289,7 @@ void Game::TickOnceAfter() 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)) { @@ -4562,8 +4552,9 @@ void Game::TickOnceAfter() loading = 2; loadtime = 0; targetlevel = 7; - if (!firstload) + if (!firstLoadDone) { LoadStuff(); + } whichchoice = 0; actuallevel = campaignlevels[actuallevel].nextlevel.front(); visibleloading = true;