extern float usermousesensitivity;
extern bool ismotionblur;
extern bool showdamagebar; // (des)activate the damage bar
-extern bool decals;
+extern bool decalstoggle;
extern bool skyboxtexture;
extern float skyboxr;
extern float skyboxg;
// utility functions
// TODO: this is slightly incorrect
-inline float roughDirection(XYZ vec)
+float roughDirection(XYZ vec)
{
Normalise(&vec);
float angle = -asin(-vec.x) * 180 / M_PI;
angle = 180 - angle;
return angle;
}
-inline float roughDirectionTo(XYZ start, XYZ end)
+float roughDirectionTo(XYZ start, XYZ end)
{
return roughDirection(end - start);
}
Normalise(&vec);
return -asin(vec.y) * 180 / M_PI;
}
-inline float pitchTo(XYZ start, XYZ end)
+float pitchTo(XYZ start, XYZ end)
{
return pitchOf(end - start);
}
-inline float sq(float n)
+float sq(float n)
{
return n * n;
}
int closest = -1;
float closestdist = std::numeric_limits<float>::max();
- for (int i = 0; i < Object::objects.size(); i++) {
- float distance = distsq(&Object::objects[i]->position, &Person::players[0]->coords);
+ for (unsigned int i = 0; i < Object::objects.size(); i++) {
+ float distance = distsq(&Object::objects[i]->position,
+ &Person::players[0]->coords);
if (distance < closestdist) {
closestdist = distance;
- closest = i;
+ closest = (int) i;
}
}
return closest;
light.ambient[2] *= (skyboxlightb + average) / 2;
}
-int findPathDist(int start, int end)
-{
- int smallestcount, count, connected;
- int last, last2, last3, last4;
- int closest;
-
- smallestcount = 1000;
- for (int i = 0; i < 50; i++) {
- count = 0;
- last = start;
- last2 = -1;
- last3 = -1;
- last4 = -1;
- while (last != end && count < 30) {
- closest = -1;
- for (int j = 0; j < numpathpoints; j++) {
- if (j != last && j != last2 && j != last3 && j != last4) {
- connected = 0;
- if (numpathpointconnect[j])
- for (int k = 0; k < numpathpointconnect[j]; k++) {
- if (pathpointconnect[j][k] == last)connected = 1;
- }
- if (!connected)
- if (numpathpointconnect[last])
- for (int k = 0; k < numpathpointconnect[last]; k++) {
- if (pathpointconnect[last][k] == j)connected = 1;
- }
- if (connected)
- if (closest == -1 || Random() % 2 == 0) {
- closest = j;
- }
- }
- }
- last4 = last3;
- last3 = last2;
- last2 = last;
- last = closest;
- count++;
- }
- if (count < smallestcount)
- smallestcount = count;
- }
- return smallestcount;
-}
-
void Setenvironment(int which)
{
LOGFUNC;
"Textures/Skybox(snow)/Down.jpg");
-
-
texdetail = temptexdetail;
} else if (environment == desertenvironment) {
windvector = 0;
"Textures/Skybox(sand)/Down.jpg");
-
-
texdetail = temptexdetail;
} else if (environment == grassyenvironment) {
windvector = 0;
"Textures/Skybox(grass)/Down.jpg");
-
texdetail = temptexdetail;
}
temptexdetail = texdetail;
freeze = 0;
winfreeze = 0;
- for (int i = 0; i < 100; i++)
+ for (unsigned char i = 0; i < 100; i++)
bonusnum[i] = 0;
numfalls = 0;
}
if (!stealthloading) {
- terrain.numdecals = 0;
+ terrain.decals.clear();
Sprite::deleteSprites();
for (int i = 0; i < subdivision; i++) {
/* Grow tree leaves?? */
if (Input::isKeyPressed(SDL_SCANCODE_Y)) {
- for (int i = 0; i < Object::objects.size(); i++) {
- if (Object::objects[i]->type == treeleavestype) {
- Object::objects[i]->scale *= .9;
+ for (auto& an_object : Object::objects) {
+ if (an_object->type == treeleavestype) {
+ an_object->scale *= .9;
}
}
}
void doJumpReversals()
{
- for (unsigned k = 0; k < Person::players.size(); k++)
- for (unsigned i = k; i < Person::players.size(); i++) {
- if (i == k)
- continue;
+ for (unsigned k = 0; k < Person::players.size(); k++) {
+ for (unsigned i = k + 1; i < Person::players.size(); i++) {
if ( Person::players[k]->skeleton.free == 0 &&
Person::players[i]->skeleton.oldfree == 0 &&
(Person::players[i]->animTarget == jumpupanim ||
}
}
}
+ }
}
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) {
- Person::players[k]->setAnimation(walljumpleftanim);
+ 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) {
- Person::players[k]->setAnimation(walljumprightanim);
+ 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) {
- Person::players[k]->setAnimation(walljumpbackanim);
+ 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) {
- Person::players[k]->setAnimation(walljumpfrontanim);
+ 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;
whichhit = Object::objects[i]->model.LineCheckPossible(&lowpoint, &lowpointtarget, &colpoint, &Object::objects[i]->position, &Object::objects[i]->yaw);
if (Object::objects[i]->friction > .5)
if (whichhit != -1) {
- if (whichhit != -1 && Person::players[k]->animTarget != jumpupanim && Person::players[k]->animTarget != jumpdownanim)
+ if (Person::players[k]->animTarget != jumpupanim && Person::players[k]->animTarget != jumpdownanim)
Person::players[k]->collided = 1;
if (Object::checkcollide(lowpoint7, lowpointtarget7) == -1)
if (Object::checkcollide(lowpoint6, lowpointtarget6) == -1)
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]->frameTarget = 1;
//hang ledge (?)
if (j > 25) {
- Person::players[k]->setAnimation(hanganim);
+ Person::players[k]->setTargetAnimation(hanganim);
Person::players[k]->jumppower = 0;
}
}
//stagger off ledge (?)
if (Person::players[k]->animTarget == staggerbackhighanim || Person::players[k]->animTarget == staggerbackhardanim)
Person::players[k]->RagDoll(0);
- Person::players[k]->setAnimation(jumpdownanim);
+ Person::players[k]->setTargetAnimation(jumpdownanim);
if (!k)
emit_sound_at(whooshsound, Person::players[k]->coords, 128.);
Person::players[i]->animTarget == staffhitanim ||
Person::players[i]->animTarget == staffspinhitanim)
if (distsq(&Person::players[k]->coords, &Person::players[i]->coords) < 6.5 && !Person::players[i]->skeleton.free) {
- Person::players[k]->setAnimation(dodgebackanim);
+ Person::players[k]->setTargetAnimation(dodgebackanim);
Person::players[k]->targetyaw = roughDirectionTo(Person::players[k]->coords, Person::players[i]->coords);
Person::players[k]->targettilt2 = pitchTo(Person::players[k]->coords, Person::players[i]->coords);
}
if (Person::players[k]->animTarget != dodgebackanim) {
if (k == 0)
numflipped++;
- Person::players[k]->setAnimation(backhandspringanim);
+ Person::players[k]->setTargetAnimation(backhandspringanim);
Person::players[k]->targetyaw = -yaw + 180;
if (Person::players[k]->leftkeydown)
Person::players[k]->targetyaw -= 45;
Person::players[i]->skeleton.free &&
Person::players[i]->skeleton.longdead > 1000) {
Person::players[k]->animTarget = killanim;
- //TODO: refactor this out, what does it do?
- for (int j = 0; j < terrain.numdecals; j++) {
- if ((terrain.decaltype[j] == blooddecal || terrain.decaltype[j] == blooddecalslow) &&
- terrain.decalalivetime[j] < 2)
- terrain.DeleteDecal(j);
- }
- for (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);
- }
+ terrain.deleteDeadDecals();
+ for (unsigned int l = 0; l < Object::objects.size(); l++) {
+ if (Object::objects[l]->model.type == decalstype) {
+ Object::objects[l]->model.deleteDeadDecals();
+ }
}
}
if (!Person::players[i]->dead || musictype != 2)
Person::players[i]->skeleton.free) &&
(!Person::players[i]->dead || musictype != stream_fighttheme)) {
Person::players[k]->animTarget = dropkickanim;
- for (int j = 0; j < terrain.numdecals; j++) {
- if ((terrain.decaltype[j] == blooddecal || terrain.decaltype[j] == blooddecalslow) &&
- terrain.decalalivetime[j] < 2) {
- terrain.DeleteDecal(j);
+ terrain.deleteDeadDecals();
+ for (unsigned int l = 0; l < Object::objects.size(); l++) {
+ if (Object::objects[l]->model.type == decalstype) {
+ Object::objects[l]->model.deleteDeadDecals();
}
}
- for (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 (Animation::animations[Person::players[k]->animTarget].attack == normalattack &&
Person::players[k]->rabbitkickenabled) ||
Person::players[k]->jumpkeydown)) {
oldattackkey = 1;
- Person::players[k]->setAnimation(rabbitkickanim);
+ Person::players[k]->setTargetAnimation(rabbitkickanim);
}
//update counts
if (Animation::animations[Person::players[k]->animTarget].attack && k == 0) {
if (Person::players[k]->howactive == typeactive || hostile)
if (Person::players[k]->isIdle()) {
if (Person::players[k]->howactive < typesleeping)
- Person::players[k]->setAnimation(Person::players[k]->getStop());
+ Person::players[k]->setTargetAnimation(Person::players[k]->getStop());
else if (Person::players[k]->howactive == typesleeping)
- Person::players[k]->setAnimation(getupfromfrontanim);
+ Person::players[k]->setTargetAnimation(getupfromfrontanim);
if (!editorenabled)
Person::players[k]->howactive = typeactive;
}
if (Person::players[i]->howactive == typeactive || hostile)
if (Person::players[i]->isIdle()) {
if (Person::players[i]->howactive < typesleeping)
- Person::players[i]->setAnimation(Person::players[k]->getStop());
+ Person::players[i]->setTargetAnimation(Person::players[k]->getStop());
else
- Person::players[i]->setAnimation(getupfromfrontanim);
+ Person::players[i]->setTargetAnimation(getupfromfrontanim);
if (!editorenabled)
Person::players[i]->howactive = typeactive;
}
}
}
-void doAI(unsigned i)
-{
- static bool connected;
- if (Person::players[i]->aitype != playercontrolled && !Dialog::inDialog()) {
- Person::players[i]->jumpclimb = 0;
- //disable movement in editor
- if (editorenabled)
- Person::players[i]->stunned = 1;
-
- Person::players[i]->pause = 0;
- if (distsqflat(&Person::players[0]->coords, &Person::players[i]->coords) < 30 &&
- Person::players[0]->coords.y > Person::players[i]->coords.y + 2 &&
- !Person::players[0]->onterrain)
- Person::players[i]->pause = 1;
-
- //pathfinding
- if (Person::players[i]->aitype == pathfindtype) {
- if (Person::players[i]->finalpathfindpoint == -1) {
- float closestdistance;
- float tempdist;
- int closest;
- XYZ colpoint;
- closest = -1;
- closestdistance = -1;
- for (int j = 0; j < numpathpoints; j++) {
- if (closest == -1 || distsq(&Person::players[i]->finalfinaltarget, &pathpoint[j]) < closestdistance) {
- closestdistance = distsq(&Person::players[i]->finalfinaltarget, &pathpoint[j]);
- closest = j;
- Person::players[i]->finaltarget = pathpoint[j];
- }
- }
- Person::players[i]->finalpathfindpoint = closest;
- for (int j = 0; j < numpathpoints; j++) {
- for (int k = 0; k < numpathpointconnect[j]; k++) {
- DistancePointLine(&Person::players[i]->finalfinaltarget, &pathpoint[j], &pathpoint[pathpointconnect[j][k]], &tempdist, &colpoint);
- if (sq(tempdist) < closestdistance)
- if (findDistance(&colpoint, &pathpoint[j]) + findDistance(&colpoint, &pathpoint[pathpointconnect[j][k]]) <
- findDistance(&pathpoint[j], &pathpoint[pathpointconnect[j][k]]) + .1) {
- closestdistance = sq(tempdist);
- closest = j;
- Person::players[i]->finaltarget = colpoint;
- }
- }
- }
- Person::players[i]->finalpathfindpoint = closest;
-
- }
- if (Person::players[i]->targetpathfindpoint == -1) {
- float closestdistance;
- float tempdist;
- int closest;
- XYZ colpoint;
- closest = -1;
- closestdistance = -1;
- if (Person::players[i]->lastpathfindpoint == -1) {
- for (int j = 0; j < numpathpoints; j++) {
- if (j != Person::players[i]->lastpathfindpoint)
- if (closest == -1 || (distsq(&Person::players[i]->coords, &pathpoint[j]) < closestdistance)) {
- closestdistance = distsq(&Person::players[i]->coords, &pathpoint[j]);
- closest = j;
- }
- }
- Person::players[i]->targetpathfindpoint = closest;
- for (int j = 0; j < numpathpoints; j++)
- if (j != Person::players[i]->lastpathfindpoint)
- for (int k = 0; k < numpathpointconnect[j]; k++) {
- DistancePointLine(&Person::players[i]->coords, &pathpoint[j], &pathpoint[pathpointconnect[j][k]], &tempdist, &colpoint );
- if (sq(tempdist) < closestdistance) {
- if (findDistance(&colpoint, &pathpoint[j]) + findDistance(&colpoint, &pathpoint[pathpointconnect[j][k]]) <
- findDistance(&pathpoint[j], &pathpoint[pathpointconnect[j][k]]) + .1) {
- closestdistance = sq(tempdist);
- closest = j;
- }
- }
- }
- Person::players[i]->targetpathfindpoint = closest;
- } else {
- for (int j = 0; j < numpathpoints; j++)
- if (j != Person::players[i]->lastpathfindpoint &&
- j != Person::players[i]->lastpathfindpoint2 &&
- j != Person::players[i]->lastpathfindpoint3 &&
- j != Person::players[i]->lastpathfindpoint4) {
- connected = 0;
- if (numpathpointconnect[j])
- for (int k = 0; k < numpathpointconnect[j]; k++)
- if (pathpointconnect[j][k] == Person::players[i]->lastpathfindpoint)
- connected = 1;
- if (!connected)
- if (numpathpointconnect[Person::players[i]->lastpathfindpoint])
- for (int k = 0; k < numpathpointconnect[Person::players[i]->lastpathfindpoint]; k++)
- if (pathpointconnect[Person::players[i]->lastpathfindpoint][k] == j)
- connected = 1;
- if (connected) {
- tempdist = findPathDist(j, Person::players[i]->finalpathfindpoint);
- if (closest == -1 || tempdist < closestdistance) {
- closestdistance = tempdist;
- closest = j;
- }
- }
- }
- Person::players[i]->targetpathfindpoint = closest;
- }
- }
- Person::players[i]->losupdatedelay -= multiplier;
-
- Person::players[i]->targetyaw = roughDirectionTo(Person::players[i]->coords, pathpoint[Person::players[i]->targetpathfindpoint]);
- Person::players[i]->lookyaw = Person::players[i]->targetyaw;
-
- //reached target point
- if (distsqflat(&Person::players[i]->coords, &pathpoint[Person::players[i]->targetpathfindpoint]) < .6) {
- Person::players[i]->lastpathfindpoint4 = Person::players[i]->lastpathfindpoint3;
- Person::players[i]->lastpathfindpoint3 = Person::players[i]->lastpathfindpoint2;
- Person::players[i]->lastpathfindpoint2 = Person::players[i]->lastpathfindpoint;
- Person::players[i]->lastpathfindpoint = Person::players[i]->targetpathfindpoint;
- if (Person::players[i]->lastpathfindpoint2 == -1)
- Person::players[i]->lastpathfindpoint2 = Person::players[i]->lastpathfindpoint;
- if (Person::players[i]->lastpathfindpoint3 == -1)
- Person::players[i]->lastpathfindpoint3 = Person::players[i]->lastpathfindpoint2;
- if (Person::players[i]->lastpathfindpoint4 == -1)
- Person::players[i]->lastpathfindpoint4 = Person::players[i]->lastpathfindpoint3;
- Person::players[i]->targetpathfindpoint = -1;
- }
- if ( distsqflat(&Person::players[i]->coords, &Person::players[i]->finalfinaltarget) <
- distsqflat(&Person::players[i]->coords, &Person::players[i]->finaltarget) ||
- distsqflat(&Person::players[i]->coords, &Person::players[i]->finaltarget) < .6 * sq(Person::players[i]->scale * 5) ||
- Person::players[i]->lastpathfindpoint == Person::players[i]->finalpathfindpoint) {
- Person::players[i]->aitype = passivetype;
- }
-
- Person::players[i]->forwardkeydown = 1;
- Person::players[i]->leftkeydown = 0;
- Person::players[i]->backkeydown = 0;
- Person::players[i]->rightkeydown = 0;
- Person::players[i]->crouchkeydown = 0;
- Person::players[i]->attackkeydown = 0;
- Person::players[i]->throwkeydown = 0;
-
- if (Person::players[i]->avoidcollided > .8 && !Person::players[i]->jumpkeydown && Person::players[i]->collided < .8)
- Person::players[i]->targetyaw += 90 * (Person::players[i]->whichdirection * 2 - 1);
-
- if (Person::players[i]->collided < 1 || Person::players[i]->animTarget != jumpupanim)
- Person::players[i]->jumpkeydown = 0;
- if ((Person::players[i]->collided > .8 && Person::players[i]->jumppower >= 5))
- Person::players[i]->jumpkeydown = 1;
-
- if ((!Tutorial::active || cananger) &&
- hostile &&
- !Person::players[0]->dead &&
- distsq(&Person::players[i]->coords, &Person::players[0]->coords) < 400 &&
- Person::players[i]->occluded < 25) {
- if (distsq(&Person::players[i]->coords, &Person::players[0]->coords) < 12 &&
- Animation::animations[Person::players[0]->animTarget].height != lowheight &&
- !editorenabled &&
- (Person::players[0]->coords.y < Person::players[i]->coords.y + 5 || Person::players[0]->onterrain))
- Person::players[i]->aitype = attacktypecutoff;
- if (distsq(&Person::players[i]->coords, &Person::players[0]->coords) < 30 &&
- Animation::animations[Person::players[0]->animTarget].height == highheight &&
- !editorenabled)
- Person::players[i]->aitype = attacktypecutoff;
-
- if (Person::players[i]->losupdatedelay < 0 && !editorenabled && Person::players[i]->occluded < 2) {
- Person::players[i]->losupdatedelay = .2;
- for (unsigned j = 0; j < Person::players.size(); j++)
- if (j == 0 || Person::players[j]->skeleton.free || Person::players[j]->aitype != passivetype)
- if (abs(Random() % 2) || Animation::animations[Person::players[j]->animTarget].height != lowheight || j != 0)
- if (distsq(&Person::players[i]->coords, &Person::players[j]->coords) < 400)
- if (normaldotproduct(Person::players[i]->facing, Person::players[j]->coords - Person::players[i]->coords) > 0)
- if (Person::players[j]->coords.y < Person::players[i]->coords.y + 5 || Person::players[j]->onterrain)
- if (!Person::players[j]->isWallJump() && -1 == Object::checkcollide(
- DoRotation(Person::players[i]->jointPos(head), 0, Person::players[i]->yaw, 0)
- *Person::players[i]->scale + Person::players[i]->coords,
- DoRotation(Person::players[j]->jointPos(head), 0, Person::players[j]->yaw, 0)
- *Person::players[j]->scale + Person::players[j]->coords) ||
- (Person::players[j]->animTarget == hanganim &&
- normaldotproduct(Person::players[j]->facing, Person::players[i]->coords - Person::players[j]->coords) < 0)) {
- Person::players[i]->aitype = searchtype;
- Person::players[i]->lastchecktime = 12;
- Person::players[i]->lastseen = Person::players[j]->coords;
- Person::players[i]->lastseentime = 12;
- }
- }
- }
- if (Person::players[i]->aitype == attacktypecutoff && musictype != 2)
- if (Person::players[i]->creature != wolftype) {
- Person::players[i]->stunned = .6;
- Person::players[i]->surprised = .6;
- }
- }
-
- if (Person::players[i]->aitype != passivetype && leveltime > .5)
- Person::players[i]->howactive = typeactive;
-
- if (Person::players[i]->aitype == passivetype) {
- Person::players[i]->aiupdatedelay -= multiplier;
- Person::players[i]->losupdatedelay -= multiplier;
- Person::players[i]->lastseentime += multiplier;
- Person::players[i]->pausetime -= multiplier;
- if (Person::players[i]->lastseentime > 1)
- Person::players[i]->lastseentime = 1;
-
- if (Person::players[i]->aiupdatedelay < 0) {
- if (Person::players[i]->numwaypoints > 1 && Person::players[i]->howactive == typeactive && Person::players[i]->pausetime <= 0) {
- Person::players[i]->targetyaw = roughDirectionTo(Person::players[i]->coords, Person::players[i]->waypoints[Person::players[i]->waypoint]);
- Person::players[i]->lookyaw = Person::players[i]->targetyaw;
- Person::players[i]->aiupdatedelay = .05;
-
- if (distsqflat(&Person::players[i]->coords, &Person::players[i]->waypoints[Person::players[i]->waypoint]) < 1) {
- if (Person::players[i]->waypointtype[Person::players[i]->waypoint] == wppause)
- Person::players[i]->pausetime = 4;
- Person::players[i]->waypoint++;
- if (Person::players[i]->waypoint > Person::players[i]->numwaypoints - 1)
- Person::players[i]->waypoint = 0;
-
- }
- }
-
- if (Person::players[i]->numwaypoints > 1 && Person::players[i]->howactive == typeactive && Person::players[i]->pausetime <= 0)
- Person::players[i]->forwardkeydown = 1;
- else
- Person::players[i]->forwardkeydown = 0;
- Person::players[i]->leftkeydown = 0;
- Person::players[i]->backkeydown = 0;
- Person::players[i]->rightkeydown = 0;
- Person::players[i]->crouchkeydown = 0;
- Person::players[i]->attackkeydown = 0;
- Person::players[i]->throwkeydown = 0;
-
- if (Person::players[i]->avoidcollided > .8 && !Person::players[i]->jumpkeydown && Person::players[i]->collided < .8) {
- if (!Person::players[i]->avoidsomething)
- Person::players[i]->targetyaw += 90 * (Person::players[i]->whichdirection * 2 - 1);
- else {
- XYZ leftpos, rightpos;
- float leftdist, rightdist;
- leftpos = Person::players[i]->coords + DoRotation(Person::players[i]->facing, 0, 90, 0);
- rightpos = Person::players[i]->coords - DoRotation(Person::players[i]->facing, 0, 90, 0);
- leftdist = distsq(&leftpos, &Person::players[i]->avoidwhere);
- rightdist = distsq(&rightpos, &Person::players[i]->avoidwhere);
- if (leftdist < rightdist)
- Person::players[i]->targetyaw += 90;
- else
- Person::players[i]->targetyaw -= 90;
- }
- }
- }
- if (Person::players[i]->collided < 1 || Person::players[i]->animTarget != jumpupanim)
- Person::players[i]->jumpkeydown = 0;
- if ((Person::players[i]->collided > .8 && Person::players[i]->jumppower >= 5))
- Person::players[i]->jumpkeydown = 1;
-
-
- //hearing sounds
- if (!editorenabled) {
- if (Person::players[i]->howactive <= typesleeping)
- if (numenvsounds > 0 && (!Tutorial::active || cananger) && hostile)
- for (int j = 0; j < numenvsounds; j++) {
- float vol = Person::players[i]->howactive == typesleeping ? envsoundvol[j] - 14 : envsoundvol[j];
- if (vol > 0 && distsq(&Person::players[i]->coords, &envsound[j]) <
- 2 * (vol + vol * (Person::players[i]->creature == rabbittype) * 3))
- Person::players[i]->aitype = attacktypecutoff;
- }
-
- if (Person::players[i]->aitype != passivetype) {
- if (Person::players[i]->howactive == typesleeping)
- Person::players[i]->setAnimation(getupfromfrontanim);
- Person::players[i]->howactive = typeactive;
- }
- }
-
- if (Person::players[i]->howactive < typesleeping &&
- ((!Tutorial::active || cananger) && hostile) &&
- !Person::players[0]->dead &&
- distsq(&Person::players[i]->coords, &Person::players[0]->coords) < 400 &&
- Person::players[i]->occluded < 25) {
- if (distsq(&Person::players[i]->coords, &Person::players[0]->coords) < 12 &&
- Animation::animations[Person::players[0]->animTarget].height != lowheight && !editorenabled)
- Person::players[i]->aitype = attacktypecutoff;
- if (distsq(&Person::players[i]->coords, &Person::players[0]->coords) < 30 &&
- Animation::animations[Person::players[0]->animTarget].height == highheight && !editorenabled)
- Person::players[i]->aitype = attacktypecutoff;
-
- //wolf smell
- if (Person::players[i]->creature == wolftype) {
- XYZ windsmell;
- for (unsigned j = 0; j < Person::players.size(); j++) {
- if (j == 0 || (Person::players[j]->dead && Person::players[j]->bloodloss > 0)) {
- float smelldistance = 50;
- if (j == 0 && Person::players[j]->num_weapons > 0) {
- if (weapons[Person::players[j]->weaponids[0]].bloody)
- smelldistance = 100;
- if (Person::players[j]->num_weapons == 2)
- if (weapons[Person::players[j]->weaponids[1]].bloody)
- smelldistance = 100;
- }
- if (j != 0)
- smelldistance = 100;
- windsmell = windvector;
- Normalise(&windsmell);
- windsmell = windsmell * 2 + Person::players[j]->coords;
- if (distsq(&Person::players[i]->coords, &windsmell) < smelldistance && !editorenabled)
- Person::players[i]->aitype = attacktypecutoff;
- }
- }
- }
-
- if (Person::players[i]->howactive < typesleeping && Person::players[i]->losupdatedelay < 0 && !editorenabled && Person::players[i]->occluded < 2) {
- Person::players[i]->losupdatedelay = .2;
- for (unsigned j = 0; j < Person::players.size(); j++) {
- if (j == 0 || Person::players[j]->skeleton.free || Person::players[j]->aitype != passivetype) {
- if (abs(Random() % 2) || Animation::animations[Person::players[j]->animTarget].height != lowheight || j != 0)
- if (distsq(&Person::players[i]->coords, &Person::players[j]->coords) < 400)
- if (normaldotproduct(Person::players[i]->facing, Person::players[j]->coords - Person::players[i]->coords) > 0)
- if ((-1 == Object::checkcollide(
- DoRotation(Person::players[i]->jointPos(head), 0, Person::players[i]->yaw, 0)*
- Person::players[i]->scale + Person::players[i]->coords,
- DoRotation(Person::players[j]->jointPos(head), 0, Person::players[j]->yaw, 0)*
- Person::players[j]->scale + Person::players[j]->coords) &&
- !Person::players[j]->isWallJump()) ||
- (Person::players[j]->animTarget == hanganim &&
- normaldotproduct(Person::players[j]->facing, Person::players[i]->coords - Person::players[j]->coords) < 0)) {
- Person::players[i]->lastseentime -= .2;
- if (j == 0 && Animation::animations[Person::players[j]->animTarget].height == lowheight)
- Person::players[i]->lastseentime -= .4;
- else
- Person::players[i]->lastseentime -= .6;
- }
- if (Person::players[i]->lastseentime <= 0) {
- Person::players[i]->aitype = searchtype;
- Person::players[i]->lastchecktime = 12;
- Person::players[i]->lastseen = Person::players[j]->coords;
- Person::players[i]->lastseentime = 12;
- }
- }
- }
- }
- }
- //alerted surprise
- if (Person::players[i]->aitype == attacktypecutoff && musictype != 2) {
- if (Person::players[i]->creature != wolftype) {
- Person::players[i]->stunned = .6;
- Person::players[i]->surprised = .6;
- }
- if (Person::players[i]->creature == wolftype) {
- Person::players[i]->stunned = .47;
- Person::players[i]->surprised = .47;
- }
- numseen++;
- }
- }
-
- //search for player
- int j;
- if (Person::players[i]->aitype == searchtype) {
- Person::players[i]->aiupdatedelay -= multiplier;
- Person::players[i]->losupdatedelay -= multiplier;
- if (!Person::players[i]->pause)
- Person::players[i]->lastseentime -= multiplier;
- Person::players[i]->lastchecktime -= multiplier;
-
- if (Person::players[i]->isRun() && !Person::players[i]->onground) {
- if (Person::players[i]->coords.y > terrain.getHeight(Person::players[i]->coords.x, Person::players[i]->coords.z) + 10) {
- XYZ test2 = Person::players[i]->coords + Person::players[i]->facing;
- test2.y += 5;
- XYZ test = Person::players[i]->coords + Person::players[i]->facing;
- test.y -= 10;
- j = Object::checkcollide(test2, test, Person::players[i]->laststanding);
- if (j == -1)
- j = Object::checkcollide(test2, test);
- if (j == -1) {
- Person::players[i]->velocity = 0;
- Person::players[i]->setAnimation(Person::players[i]->getStop());
- Person::players[i]->targetyaw += 180;
- Person::players[i]->stunned = .5;
- //Person::players[i]->aitype=passivetype;
- Person::players[i]->aitype = pathfindtype;
- Person::players[i]->finalfinaltarget = Person::players[i]->waypoints[Person::players[i]->waypoint];
- Person::players[i]->finalpathfindpoint = -1;
- Person::players[i]->targetpathfindpoint = -1;
- Person::players[i]->lastpathfindpoint = -1;
- Person::players[i]->lastpathfindpoint2 = -1;
- Person::players[i]->lastpathfindpoint3 = -1;
- Person::players[i]->lastpathfindpoint4 = -1;
- } else
- Person::players[i]->laststanding = j;
- }
- }
- //check out last seen location
- if (Person::players[i]->aiupdatedelay < 0) {
- Person::players[i]->targetyaw = roughDirectionTo(Person::players[i]->coords, Person::players[i]->lastseen);
- Person::players[i]->lookyaw = Person::players[i]->targetyaw;
- Person::players[i]->aiupdatedelay = .05;
- Person::players[i]->forwardkeydown = 1;
-
- if (distsqflat(&Person::players[i]->coords, &Person::players[i]->lastseen) < 1 * sq(Person::players[i]->scale * 5) || Person::players[i]->lastchecktime < 0) {
- Person::players[i]->forwardkeydown = 0;
- Person::players[i]->aiupdatedelay = 1;
- Person::players[i]->lastseen.x += (float(Random() % 100) - 50) / 25;
- Person::players[i]->lastseen.z += (float(Random() % 100) - 50) / 25;
- Person::players[i]->lastchecktime = 3;
- }
-
- Person::players[i]->leftkeydown = 0;
- Person::players[i]->backkeydown = 0;
- Person::players[i]->rightkeydown = 0;
- Person::players[i]->crouchkeydown = 0;
- Person::players[i]->attackkeydown = 0;
- Person::players[i]->throwkeydown = 0;
-
- if (Person::players[i]->avoidcollided > .8 && !Person::players[i]->jumpkeydown && Person::players[i]->collided < .8) {
- if (!Person::players[i]->avoidsomething)
- Person::players[i]->targetyaw += 90 * (Person::players[i]->whichdirection * 2 - 1);
- else {
- XYZ leftpos, rightpos;
- float leftdist, rightdist;
- leftpos = Person::players[i]->coords + DoRotation(Person::players[i]->facing, 0, 90, 0);
- rightpos = Person::players[i]->coords - DoRotation(Person::players[i]->facing, 0, 90, 0);
- leftdist = distsq(&leftpos, &Person::players[i]->avoidwhere);
- rightdist = distsq(&rightpos, &Person::players[i]->avoidwhere);
- if (leftdist < rightdist)
- Person::players[i]->targetyaw += 90;
- else
- Person::players[i]->targetyaw -= 90;
- }
- }
- }
- if (Person::players[i]->collided < 1 || Person::players[i]->animTarget != jumpupanim)
- Person::players[i]->jumpkeydown = 0;
- if ((Person::players[i]->collided > .8 && Person::players[i]->jumppower >= 5))
- Person::players[i]->jumpkeydown = 1;
-
- if (numenvsounds > 0 && ((!Tutorial::active || cananger) && hostile))
- for (int k = 0; k < numenvsounds; k++) {
- if (distsq(&Person::players[i]->coords, &envsound[k]) < 2 * (envsoundvol[k] + envsoundvol[k] * (Person::players[i]->creature == rabbittype) * 3)) {
- Person::players[i]->aitype = attacktypecutoff;
- }
- }
-
- if (!Person::players[0]->dead &&
- Person::players[i]->losupdatedelay < 0 &&
- !editorenabled &&
- Person::players[i]->occluded < 2 &&
- ((!Tutorial::active || cananger) && hostile)) {
- Person::players[i]->losupdatedelay = .2;
- if (distsq(&Person::players[i]->coords, &Person::players[0]->coords) < 4 && Animation::animations[Person::players[i]->animTarget].height != lowheight) {
- Person::players[i]->aitype = attacktypecutoff;
- Person::players[i]->lastseentime = 1;
- }
- if (abs(Random() % 2) || Animation::animations[Person::players[i]->animTarget].height != lowheight)
- //TODO: factor out canSeePlayer()
- if (distsq(&Person::players[i]->coords, &Person::players[0]->coords) < 400)
- if (normaldotproduct(Person::players[i]->facing, Person::players[0]->coords - Person::players[i]->coords) > 0)
- if ((Object::checkcollide(
- DoRotation(Person::players[i]->jointPos(head), 0, Person::players[i]->yaw, 0)*
- Person::players[i]->scale + Person::players[i]->coords,
- DoRotation(Person::players[0]->jointPos(head), 0, Person::players[0]->yaw, 0)*
- Person::players[0]->scale + Person::players[0]->coords) == -1) ||
- (Person::players[0]->animTarget == hanganim && normaldotproduct(
- Person::players[0]->facing, Person::players[i]->coords - Person::players[0]->coords) < 0)) {
- /* //TODO: changed j to 0 on a whim, make sure this is correct
- (Person::players[j]->animTarget==hanganim&&normaldotproduct(
- Person::players[j]->facing,Person::players[i]->coords-Person::players[j]->coords)<0)
- */
- Person::players[i]->aitype = attacktypecutoff;
- Person::players[i]->lastseentime = 1;
- }
- }
- //player escaped
- if (Person::players[i]->lastseentime < 0) {
- //Person::players[i]->aitype=passivetype;
- numescaped++;
- Person::players[i]->aitype = pathfindtype;
- Person::players[i]->finalfinaltarget = Person::players[i]->waypoints[Person::players[i]->waypoint];
- Person::players[i]->finalpathfindpoint = -1;
- Person::players[i]->targetpathfindpoint = -1;
- Person::players[i]->lastpathfindpoint = -1;
- Person::players[i]->lastpathfindpoint2 = -1;
- Person::players[i]->lastpathfindpoint3 = -1;
- Person::players[i]->lastpathfindpoint4 = -1;
- }
- }
-
- if (Person::players[i]->aitype != gethelptype)
- Person::players[i]->runninghowlong = 0;
-
- //get help from buddies
- if (Person::players[i]->aitype == gethelptype) {
- Person::players[i]->runninghowlong += multiplier;
- Person::players[i]->aiupdatedelay -= multiplier;
-
- if (Person::players[i]->aiupdatedelay < 0 || Person::players[i]->ally == 0) {
- Person::players[i]->aiupdatedelay = .2;
-
- //find closest ally
- //TODO: factor out closest search somehow
- if (!Person::players[i]->ally) {
- int closest = -1;
- float closestdist = -1;
- for (unsigned k = 0; k < Person::players.size(); k++) {
- if (k != i && k != 0 && !Person::players[k]->dead &&
- Person::players[k]->howactive < typedead1 &&
- !Person::players[k]->skeleton.free &&
- Person::players[k]->aitype == passivetype) {
- float distance = distsq(&Person::players[i]->coords, &Person::players[k]->coords);
- if (closestdist == -1 || distance < closestdist) {
- closestdist = distance;
- closest = k;
- }
- closest = k;
- }
- }
- if (closest != -1)
- Person::players[i]->ally = closest;
- else
- Person::players[i]->ally = 0;
- Person::players[i]->lastseen = Person::players[0]->coords;
- Person::players[i]->lastseentime = 12;
- }
-
-
- Person::players[i]->lastchecktime = 12;
-
- XYZ facing = Person::players[i]->coords;
- XYZ flatfacing = Person::players[Person::players[i]->ally]->coords;
- facing.y += Person::players[i]->jointPos(head).y * Person::players[i]->scale;
- flatfacing.y += Person::players[Person::players[i]->ally]->jointPos(head).y * Person::players[Person::players[i]->ally]->scale;
- if (-1 != Object::checkcollide(facing, flatfacing))
- Person::players[i]->lastseentime -= .1;
-
- //no available ally, run back to player
- if (Person::players[i]->ally <= 0 ||
- Person::players[Person::players[i]->ally]->skeleton.free ||
- Person::players[Person::players[i]->ally]->aitype != passivetype ||
- Person::players[i]->lastseentime <= 0) {
- Person::players[i]->aitype = searchtype;
- Person::players[i]->lastseentime = 12;
- }
-
- //seek out ally
- if (Person::players[i]->ally > 0) {
- Person::players[i]->targetyaw = roughDirectionTo(Person::players[i]->coords, Person::players[Person::players[i]->ally]->coords);
- Person::players[i]->lookyaw = Person::players[i]->targetyaw;
- Person::players[i]->aiupdatedelay = .05;
- Person::players[i]->forwardkeydown = 1;
-
- if (distsqflat(&Person::players[i]->coords, &Person::players[Person::players[i]->ally]->coords) < 3) {
- Person::players[i]->aitype = searchtype;
- Person::players[i]->lastseentime = 12;
- Person::players[Person::players[i]->ally]->aitype = searchtype;
- if (Person::players[Person::players[i]->ally]->lastseentime < Person::players[i]->lastseentime) {
- Person::players[Person::players[i]->ally]->lastseen = Person::players[i]->lastseen;
- Person::players[Person::players[i]->ally]->lastseentime = Person::players[i]->lastseentime;
- Person::players[Person::players[i]->ally]->lastchecktime = Person::players[i]->lastchecktime;
- }
- }
-
- if (Person::players[i]->avoidcollided > .8 && !Person::players[i]->jumpkeydown && Person::players[i]->collided < .8) {
- if (!Person::players[i]->avoidsomething)
- Person::players[i]->targetyaw += 90 * (Person::players[i]->whichdirection * 2 - 1);
- else {
- XYZ leftpos, rightpos;
- float leftdist, rightdist;
- leftpos = Person::players[i]->coords + DoRotation(Person::players[i]->facing, 0, 90, 0);
- rightpos = Person::players[i]->coords - DoRotation(Person::players[i]->facing, 0, 90, 0);
- leftdist = distsq(&leftpos, &Person::players[i]->avoidwhere);
- rightdist = distsq(&rightpos, &Person::players[i]->avoidwhere);
- if (leftdist < rightdist)
- Person::players[i]->targetyaw += 90;
- else
- Person::players[i]->targetyaw -= 90;
- }
- }
- }
-
- Person::players[i]->leftkeydown = 0;
- Person::players[i]->backkeydown = 0;
- Person::players[i]->rightkeydown = 0;
- Person::players[i]->crouchkeydown = 0;
- Person::players[i]->attackkeydown = 0;
- }
- if (Person::players[i]->collided < 1 || Person::players[i]->animTarget != jumpupanim)
- Person::players[i]->jumpkeydown = 0;
- if (Person::players[i]->collided > .8 && Person::players[i]->jumppower >= 5)
- Person::players[i]->jumpkeydown = 1;
- }
-
- //retreiving a weapon on the ground
- if (Person::players[i]->aitype == getweapontype) {
- Person::players[i]->aiupdatedelay -= multiplier;
- Person::players[i]->lastchecktime -= multiplier;
-
- if (Person::players[i]->aiupdatedelay < 0) {
- Person::players[i]->aiupdatedelay = .2;
-
- //ALLY IS WEPON
- if (Person::players[i]->ally < 0) {
- int closest = -1;
- float closestdist = -1;
- for (unsigned k = 0; k < weapons.size(); k++)
- if (weapons[k].owner == -1) {
- float distance = distsq(&Person::players[i]->coords, &weapons[k].position);
- if (closestdist == -1 || distance < closestdist) {
- closestdist = distance;
- closest = k;
- }
- closest = k;
- }
- if (closest != -1)
- Person::players[i]->ally = closest;
- else
- Person::players[i]->ally = -1;
- }
-
- Person::players[i]->lastseentime = 12;
-
- if (!Person::players[0]->dead && ((!Tutorial::active || cananger) && hostile))
- if (Person::players[i]->ally < 0 || Person::players[i]->weaponactive != -1 || Person::players[i]->lastchecktime <= 0) {
- Person::players[i]->aitype = attacktypecutoff;
- Person::players[i]->lastseentime = 1;
- }
- if (!Person::players[0]->dead)
- if (Person::players[i]->ally >= 0) {
- if (weapons[Person::players[i]->ally].owner != -1 ||
- distsq(&Person::players[i]->coords, &weapons[Person::players[i]->ally].position) > 16) {
- Person::players[i]->aitype = attacktypecutoff;
- Person::players[i]->lastseentime = 1;
- }
- //TODO: factor these out as moveToward()
- Person::players[i]->targetyaw = roughDirectionTo(Person::players[i]->coords, weapons[Person::players[i]->ally].position);
- Person::players[i]->lookyaw = Person::players[i]->targetyaw;
- Person::players[i]->aiupdatedelay = .05;
- Person::players[i]->forwardkeydown = 1;
-
-
- if (Person::players[i]->avoidcollided > .8 && !Person::players[i]->jumpkeydown && Person::players[i]->collided < .8) {
- if (!Person::players[i]->avoidsomething)
- Person::players[i]->targetyaw += 90 * (Person::players[i]->whichdirection * 2 - 1);
- else {
- XYZ leftpos, rightpos;
- float leftdist, rightdist;
- leftpos = Person::players[i]->coords + DoRotation(Person::players[i]->facing, 0, 90, 0);
- rightpos = Person::players[i]->coords - DoRotation(Person::players[i]->facing, 0, 90, 0);
- leftdist = distsq(&leftpos, &Person::players[i]->avoidwhere);
- rightdist = distsq(&rightpos, &Person::players[i]->avoidwhere);
- if (leftdist < rightdist)
- Person::players[i]->targetyaw += 90;
- else
- Person::players[i]->targetyaw -= 90;
- }
- }
- }
-
- Person::players[i]->leftkeydown = 0;
- Person::players[i]->backkeydown = 0;
- Person::players[i]->rightkeydown = 0;
- Person::players[i]->attackkeydown = 0;
- Person::players[i]->throwkeydown = 1;
- Person::players[i]->crouchkeydown = 0;
- if (Person::players[i]->animTarget != crouchremoveknifeanim &&
- Person::players[i]->animTarget != removeknifeanim)
- Person::players[i]->throwtogglekeydown = 0;
- Person::players[i]->drawkeydown = 0;
- }
- if (Person::players[i]->collided < 1 || Person::players[i]->animTarget != jumpupanim)
- Person::players[i]->jumpkeydown = 0;
- if ((Person::players[i]->collided > .8 && Person::players[i]->jumppower >= 5))
- Person::players[i]->jumpkeydown = 1;
- }
-
- if (Person::players[i]->aitype == attacktypecutoff) {
- Person::players[i]->aiupdatedelay -= multiplier;
- //dodge or reverse rabbit kicks, knife throws, flips
- if (Person::players[i]->damage < Person::players[i]->damagetolerance * 2 / 3)
- if ((Person::players[0]->animTarget == rabbitkickanim ||
- Person::players[0]->animTarget == knifethrowanim ||
- (Person::players[0]->isFlip() &&
- normaldotproduct(Person::players[0]->facing, Person::players[0]->coords - Person::players[i]->coords) < 0)) &&
- !Person::players[0]->skeleton.free &&
- (Person::players[i]->aiupdatedelay < .1)) {
- Person::players[i]->attackkeydown = 0;
- if (Person::players[i]->isIdle())
- Person::players[i]->crouchkeydown = 1;
- if (Person::players[0]->animTarget != rabbitkickanim && Person::players[0]->weaponactive != -1) {
- if (weapons[Person::players[0]->weaponids[0]].getType() == knife) {
- if (Person::players[i]->isIdle() || Person::players[i]->isCrouch() || Person::players[i]->isRun() || Person::players[i]->isFlip()) {
- if (abs(Random() % 2) == 0)
- Person::players[i]->setAnimation(backhandspringanim);
- else
- Person::players[i]->setAnimation(rollanim);
- Person::players[i]->targetyaw += 90 * (abs(Random() % 2) * 2 - 1);
- Person::players[i]->wentforweapon = 0;
- }
- if (Person::players[i]->animTarget == jumpupanim || Person::players[i]->animTarget == jumpdownanim)
- Person::players[i]->setAnimation(flipanim);
- }
- }
- Person::players[i]->forwardkeydown = 0;
- Person::players[i]->aiupdatedelay = .02;
- }
- //get confused by flips
- if (Person::players[0]->isFlip() &&
- !Person::players[0]->skeleton.free &&
- Person::players[0]->animTarget != walljumprightkickanim &&
- Person::players[0]->animTarget != walljumpleftkickanim) {
- if (distsq(&Person::players[0]->coords, &Person::players[i]->coords) < 25)
- if ((1 - Person::players[i]->damage / Person::players[i]->damagetolerance) > .5)
- Person::players[i]->stunned = 1;
- }
- //go for weapon on the ground
- if (Person::players[i]->wentforweapon < 3)
- for (unsigned k = 0; k < weapons.size(); k++)
- if (Person::players[i]->creature != wolftype)
- if (Person::players[i]->num_weapons == 0 &&
- weapons[k].owner == -1 &&
- weapons[i].velocity.x == 0 &&
- weapons[i].velocity.z == 0 &&
- weapons[i].velocity.y == 0) {
- if (distsq(&Person::players[i]->coords, &weapons[k].position) < 16) {
- Person::players[i]->wentforweapon++;
- Person::players[i]->lastchecktime = 6;
- Person::players[i]->aitype = getweapontype;
- Person::players[i]->ally = -1;
- }
- }
- //dodge/reverse walljump kicks
- if (Person::players[i]->damage < Person::players[i]->damagetolerance / 2)
- if (Animation::animations[Person::players[i]->animTarget].height != highheight)
- if (Person::players[i]->damage < Person::players[i]->damagetolerance * .5 &&
- ((Person::players[0]->animTarget == walljumprightkickanim ||
- Person::players[0]->animTarget == walljumpleftkickanim) &&
- ((Person::players[i]->aiupdatedelay < .15 &&
- difficulty == 2) ||
- (Person::players[i]->aiupdatedelay < .08 &&
- difficulty != 2)))) {
- Person::players[i]->crouchkeydown = 1;
- }
- //walked off a ledge (?)
- if (Person::players[i]->isRun() && !Person::players[i]->onground)
- if (Person::players[i]->coords.y > terrain.getHeight(Person::players[i]->coords.x, Person::players[i]->coords.z) + 10) {
- XYZ test2 = Person::players[i]->coords + Person::players[i]->facing;
- test2.y += 5;
- XYZ test = Person::players[i]->coords + Person::players[i]->facing;
- test.y -= 10;
- j = Object::checkcollide(test2, test, Person::players[i]->laststanding);
- if (j == -1)
- j = Object::checkcollide(test2, test);
- if (j == -1) {
- Person::players[i]->velocity = 0;
- Person::players[i]->setAnimation(Person::players[i]->getStop());
- Person::players[i]->targetyaw += 180;
- Person::players[i]->stunned = .5;
- Person::players[i]->aitype = pathfindtype;
- Person::players[i]->finalfinaltarget = Person::players[i]->waypoints[Person::players[i]->waypoint];
- Person::players[i]->finalpathfindpoint = -1;
- Person::players[i]->targetpathfindpoint = -1;
- Person::players[i]->lastpathfindpoint = -1;
- Person::players[i]->lastpathfindpoint2 = -1;
- Person::players[i]->lastpathfindpoint3 = -1;
- Person::players[i]->lastpathfindpoint4 = -1;
- } else
- Person::players[i]->laststanding = j;
- }
- //lose sight of player in the air (?)
- if (Person::players[0]->coords.y > Person::players[i]->coords.y + 5 &&
- Animation::animations[Person::players[0]->animTarget].height != highheight &&
- !Person::players[0]->onterrain) {
- Person::players[i]->aitype = pathfindtype;
- Person::players[i]->finalfinaltarget = Person::players[i]->waypoints[Person::players[i]->waypoint];
- Person::players[i]->finalpathfindpoint = -1;
- Person::players[i]->targetpathfindpoint = -1;
- Person::players[i]->lastpathfindpoint = -1;
- Person::players[i]->lastpathfindpoint2 = -1;
- Person::players[i]->lastpathfindpoint3 = -1;
- Person::players[i]->lastpathfindpoint4 = -1;
- }
- //it's time to think (?)
- if (Person::players[i]->aiupdatedelay < 0 &&
- !Animation::animations[Person::players[i]->animTarget].attack &&
- Person::players[i]->animTarget != staggerbackhighanim &&
- Person::players[i]->animTarget != staggerbackhardanim &&
- Person::players[i]->animTarget != backhandspringanim &&
- Person::players[i]->animTarget != dodgebackanim) {
- //draw weapon
- if (Person::players[i]->weaponactive == -1 && Person::players[i]->num_weapons > 0)
- Person::players[i]->drawkeydown = Random() % 2;
- else
- Person::players[i]->drawkeydown = 0;
- Person::players[i]->rabbitkickenabled = Random() % 2;
- //chase player
- XYZ rotatetarget = Person::players[0]->coords + Person::players[0]->velocity;
- XYZ targetpoint = Person::players[0]->coords;
- if (distsq(&Person::players[0]->coords, &Person::players[i]->coords) <
- distsq(&rotatetarget, &Person::players[i]->coords))
- targetpoint += Person::players[0]->velocity *
- findDistance(&Person::players[0]->coords, &Person::players[i]->coords) / findLength(&Person::players[i]->velocity);
- Person::players[i]->targetyaw = roughDirectionTo(Person::players[i]->coords, targetpoint);
- Person::players[i]->lookyaw = Person::players[i]->targetyaw;
- Person::players[i]->aiupdatedelay = .2 + fabs((float)(Random() % 100) / 1000);
-
- if (distsq(&Person::players[i]->coords, &Person::players[0]->coords) > 5 && (Person::players[0]->weaponactive == -1 || Person::players[i]->weaponactive != -1))
- Person::players[i]->forwardkeydown = 1;
- else if ((distsq(&Person::players[i]->coords, &Person::players[0]->coords) > 16 ||
- distsq(&Person::players[i]->coords, &Person::players[0]->coords) < 9) &&
- Person::players[0]->weaponactive != -1)
- Person::players[i]->forwardkeydown = 1;
- else if (Random() % 6 == 0 || (Person::players[i]->creature == wolftype && Random() % 3 == 0))
- Person::players[i]->forwardkeydown = 1;
- else
- Person::players[i]->forwardkeydown = 0;
- //chill out around the corpse
- if (Person::players[0]->dead) {
- Person::players[i]->forwardkeydown = 0;
- if (Random() % 10 == 0)
- Person::players[i]->forwardkeydown = 1;
- if (Random() % 100 == 0) {
- Person::players[i]->aitype = pathfindtype;
- Person::players[i]->finalfinaltarget = Person::players[i]->waypoints[Person::players[i]->waypoint];
- Person::players[i]->finalpathfindpoint = -1;
- Person::players[i]->targetpathfindpoint = -1;
- Person::players[i]->lastpathfindpoint = -1;
- Person::players[i]->lastpathfindpoint2 = -1;
- Person::players[i]->lastpathfindpoint3 = -1;
- Person::players[i]->lastpathfindpoint4 = -1;
- }
- }
- Person::players[i]->leftkeydown = 0;
- Person::players[i]->backkeydown = 0;
- Person::players[i]->rightkeydown = 0;
- Person::players[i]->crouchkeydown = 0;
- Person::players[i]->throwkeydown = 0;
-
- if (Person::players[i]->avoidcollided > .8 && !Person::players[i]->jumpkeydown && Person::players[i]->collided < .8)
- Person::players[i]->targetyaw += 90 * (Person::players[i]->whichdirection * 2 - 1);
- //attack!!!
- if (Random() % 2 == 0 || Person::players[i]->weaponactive != -1 || Person::players[i]->creature == wolftype)
- Person::players[i]->attackkeydown = 1;
- else
- Person::players[i]->attackkeydown = 0;
- if (Person::players[i]->isRun() && Random() % 6 && distsq(&Person::players[i]->coords, &Person::players[0]->coords) > 7)
- Person::players[i]->attackkeydown = 0;
-
- //TODO: wat
- if (Person::players[i]->aitype != playercontrolled &&
- (Person::players[i]->isIdle() ||
- Person::players[i]->isCrouch() ||
- Person::players[i]->isRun())) {
- int target = -2;
- for (unsigned j = 0; j < Person::players.size(); j++)
- if (j != i && !Person::players[j]->skeleton.free &&
- Person::players[j]->hasvictim &&
- (Tutorial::active && reversaltrain ||
- Random() % 2 == 0 && difficulty == 2 ||
- Random() % 4 == 0 && difficulty == 1 ||
- Random() % 8 == 0 && difficulty == 0 ||
- Person::players[j]->lastattack2 == Person::players[j]->animTarget &&
- Person::players[j]->lastattack3 == Person::players[j]->animTarget &&
- (Random() % 2 == 0 || difficulty == 2) ||
- (Person::players[i]->isIdle() || Person::players[i]->isRun()) &&
- Person::players[j]->weaponactive != -1 ||
- Person::players[j]->animTarget == swordslashanim &&
- Person::players[i]->weaponactive != -1 ||
- Person::players[j]->animTarget == staffhitanim ||
- Person::players[j]->animTarget == staffspinhitanim))
- if (distsq(&Person::players[j]->coords, &Person::players[j]->victim->coords) < 4 &&
- Person::players[j]->victim == Person::players[i] &&
- (Person::players[j]->animTarget == sweepanim ||
- Person::players[j]->animTarget == spinkickanim ||
- Person::players[j]->animTarget == staffhitanim ||
- Person::players[j]->animTarget == staffspinhitanim ||
- Person::players[j]->animTarget == winduppunchanim ||
- Person::players[j]->animTarget == upunchanim ||
- Person::players[j]->animTarget == wolfslapanim ||
- Person::players[j]->animTarget == knifeslashstartanim ||
- Person::players[j]->animTarget == swordslashanim &&
- (distsq(&Person::players[j]->coords, &Person::players[i]->coords) < 2 ||
- Person::players[i]->weaponactive != -1))) {
- if (target >= 0)
- target = -1;
- else
- target = j;
- }
- if (target >= 0)
- Person::players[target]->Reverse();
- }
-
- if (Person::players[i]->collided < 1)
- Person::players[i]->jumpkeydown = 0;
- if (Person::players[i]->collided > .8 && Person::players[i]->jumppower >= 5 ||
- distsq(&Person::players[i]->coords, &Person::players[0]->coords) > 400 &&
- Person::players[i]->onterrain &&
- Person::players[i]->creature == rabbittype)
- Person::players[i]->jumpkeydown = 1;
- //TODO: why are we controlling the human?
- if (normaldotproduct(Person::players[i]->facing, Person::players[0]->coords - Person::players[i]->coords) > 0)
- Person::players[0]->jumpkeydown = 0;
- if (Person::players[0]->animTarget == jumpdownanim &&
- distsq(&Person::players[0]->coords, &Person::players[i]->coords) < 40)
- Person::players[i]->crouchkeydown = 1;
- if (Person::players[i]->jumpkeydown)
- Person::players[i]->attackkeydown = 0;
-
- if (Tutorial::active)
- if (!canattack)
- Person::players[i]->attackkeydown = 0;
-
-
- XYZ facing = Person::players[i]->coords;
- XYZ flatfacing = Person::players[0]->coords;
- facing.y += Person::players[i]->jointPos(head).y * Person::players[i]->scale;
- flatfacing.y += Person::players[0]->jointPos(head).y * Person::players[0]->scale;
- if (Person::players[i]->occluded >= 2)
- if (-1 != Object::checkcollide(facing, flatfacing)) {
- if (!Person::players[i]->pause)
- Person::players[i]->lastseentime -= .2;
- if (Person::players[i]->lastseentime <= 0 &&
- (Person::players[i]->creature != wolftype ||
- Person::players[i]->weaponstuck == -1)) {
- Person::players[i]->aitype = searchtype;
- Person::players[i]->lastchecktime = 12;
- Person::players[i]->lastseen = Person::players[0]->coords;
- Person::players[i]->lastseentime = 12;
- }
- } else
- Person::players[i]->lastseentime = 1;
- }
- }
- if (Animation::animations[Person::players[0]->animTarget].height == highheight &&
- (Person::players[i]->aitype == attacktypecutoff ||
- Person::players[i]->aitype == searchtype))
- if (Person::players[0]->coords.y > terrain.getHeight(Person::players[0]->coords.x, Person::players[0]->coords.z) + 10) {
- XYZ test = Person::players[0]->coords;
- test.y -= 40;
- if (-1 == Object::checkcollide(Person::players[0]->coords, test))
- Person::players[i]->stunned = 1;
- }
- //stunned
- if (Person::players[i]->aitype == passivetype && !(Person::players[i]->numwaypoints > 1) ||
- Person::players[i]->stunned > 0 ||
- Person::players[i]->pause && Person::players[i]->damage > Person::players[i]->superpermanentdamage) {
- if (Person::players[i]->pause)
- Person::players[i]->lastseentime = 1;
- Person::players[i]->targetyaw = Person::players[i]->yaw;
- Person::players[i]->forwardkeydown = 0;
- Person::players[i]->leftkeydown = 0;
- Person::players[i]->backkeydown = 0;
- Person::players[i]->rightkeydown = 0;
- Person::players[i]->jumpkeydown = 0;
- Person::players[i]->attackkeydown = 0;
- Person::players[i]->crouchkeydown = 0;
- Person::players[i]->throwkeydown = 0;
- }
-
-
- XYZ facing;
- facing = 0;
- facing.z = -1;
-
- XYZ flatfacing = DoRotation(facing, 0, Person::players[i]->yaw + 180, 0);
- facing = flatfacing;
-
- if (Person::players[i]->aitype == attacktypecutoff) {
- Person::players[i]->targetheadyaw = 180 - roughDirectionTo(Person::players[i]->coords, Person::players[0]->coords);
- Person::players[i]->targetheadpitch = pitchTo(Person::players[i]->coords, Person::players[0]->coords);
- } else if (Person::players[i]->howactive >= typesleeping) {
- Person::players[i]->targetheadyaw = Person::players[i]->targetyaw;
- Person::players[i]->targetheadpitch = 0;
- } else {
- if (Person::players[i]->interestdelay <= 0) {
- Person::players[i]->interestdelay = .7 + (float)(abs(Random() % 100)) / 100;
- Person::players[i]->headtarget = Person::players[i]->coords;
- Person::players[i]->headtarget.x += (float)(abs(Random() % 200) - 100) / 100;
- Person::players[i]->headtarget.z += (float)(abs(Random() % 200) - 100) / 100;
- Person::players[i]->headtarget.y += (float)(abs(Random() % 200) - 100) / 300;
- Person::players[i]->headtarget += Person::players[i]->facing * 1.5;
- }
- Person::players[i]->targetheadyaw = 180 - roughDirectionTo(Person::players[i]->coords, Person::players[i]->headtarget);
- Person::players[i]->targetheadpitch = pitchTo(Person::players[i]->coords, Person::players[i]->headtarget);
- }
- }
-}
-
void Game::Tick()
{
static XYZ facing, flatfacing;
Person::players[i]->avoidsomething = 0;
//avoid flaming things
- for (int j = 0; j < Object::objects.size(); j++)
+ for (unsigned int j = 0; j < Object::objects.size(); j++)
if (Object::objects[j]->onfire)
if (distsq(&Person::players[i]->coords, &Object::objects[j]->position) < sq(Object::objects[j]->scale) * 200)
if ( distsq(&Person::players[i]->coords, &Object::objects[j]->position) <
if (Person::players[i]->collided > .8)
Person::players[i]->avoidcollided = 0;
- doAI(i);
+ Person::players[i]->doAI();
if (Animation::animations[Person::players[i]->animTarget].attack == reversed) {
//Person::players[i]->targetyaw=Person::players[i]->yaw;
Person::players[i]->isIdle() ||
Person::players[i]->aitype != playercontrolled) {
Person::players[i]->throwtogglekeydown = 1;
- Person::players[i]->setAnimation(crouchremoveknifeanim);
+ Person::players[i]->setTargetAnimation(crouchremoveknifeanim);
Person::players[i]->targetyaw = roughDirectionTo(Person::players[i]->coords, weapons[j].position);
Person::players[i]->hasvictim = 0;
}
Person::players[i]->coords.y < weapons[j].position.y) {
if (!Person::players[i]->isFlip()) {
Person::players[i]->throwtogglekeydown = 1;
- Person::players[i]->setAnimation(removeknifeanim);
+ Person::players[i]->setTargetAnimation(removeknifeanim);
Person::players[i]->targetyaw = roughDirectionTo(Person::players[i]->coords, weapons[j].position);
}
if (Person::players[i]->isFlip()) {
Person::players[i]->throwtogglekeydown = 1;
Person::players[i]->victim = Person::players[j];
Person::players[i]->hasvictim = 1;
- Person::players[i]->setAnimation(crouchremoveknifeanim);
+ Person::players[i]->setTargetAnimation(crouchremoveknifeanim);
Person::players[i]->targetyaw = roughDirectionTo(Person::players[i]->coords, Person::players[j]->coords);
}
if (Person::players[i]->animTarget == rollanim || Person::players[i]->animTarget == backhandspringanim) {
if (!Person::players[i]->isFlip()) {
Person::players[i]->throwtogglekeydown = 1;
Person::players[i]->victim = Person::players[j];
- Person::players[i]->setAnimation(knifethrowanim);
+ Person::players[i]->setTargetAnimation(knifethrowanim);
Person::players[i]->targetyaw = roughDirectionTo(Person::players[i]->coords, Person::players[j]->coords);
Person::players[i]->targettilt2 = pitchTo(Person::players[i]->coords, Person::players[j]->coords);
}
isgood = false;
if (isgood && Person::players[i]->creature != wolftype) {
if (Person::players[i]->isIdle() && Person::players[i]->num_weapons && weapons[Person::players[i]->weaponids[0]].getType() == knife) {
- Person::players[i]->setAnimation(drawrightanim);
+ Person::players[i]->setTargetAnimation(drawrightanim);
Person::players[i]->drawtogglekeydown = 1;
}
if ((Person::players[i]->isIdle() ||
Person::players[i]->isRun())) &&
Person::players[i]->num_weapons &&
weapons[Person::players[i]->weaponids[0]].getType() == sword) {
- Person::players[i]->setAnimation(drawleftanim);
+ Person::players[i]->setTargetAnimation(drawleftanim);
Person::players[i]->drawtogglekeydown = 1;
}
if (Person::players[i]->isCrouch() && Person::players[i]->num_weapons && weapons[Person::players[i]->weaponids[0]].getType() == knife) {
- Person::players[i]->setAnimation(crouchdrawrightanim);
+ Person::players[i]->setTargetAnimation(crouchdrawrightanim);
Person::players[i]->drawtogglekeydown = 1;
}
}
Person::players[i]->attackkeydown &&
musictype != stream_fighttheme) {
if (weapons[Person::players[i]->weaponids[Person::players[i]->weaponactive]].getType() == knife)
- Person::players[i]->setAnimation(crouchstabanim);
+ Person::players[i]->setTargetAnimation(crouchstabanim);
if (weapons[Person::players[i]->weaponids[Person::players[i]->weaponactive]].getType() == sword)
- Person::players[i]->setAnimation(swordgroundstabanim);
+ Person::players[i]->setTargetAnimation(swordgroundstabanim);
Person::players[i]->hasvictim = 0;
}
}
Person::players[i]->lowreversaldelay = .5;
if (Person::players[i]->isIdle()) {
- Person::players[i]->setAnimation(Person::players[i]->getCrouch());
+ Person::players[i]->setTargetAnimation(Person::players[i]->getCrouch());
Person::players[i]->transspeed = 10;
}
if (Person::players[i]->isRun() ||
Person::players[i]->rightkeydown ||
Person::players[i]->forwardkeydown ||
Person::players[i]->backkeydown))) {
- Person::players[i]->setAnimation(rollanim);
+ Person::players[i]->setTargetAnimation(rollanim);
Person::players[i]->transspeed = 20;
}
}
Person::players[i]->animCurrent = Person::players[i]->getCrouch();
Person::players[i]->frameCurrent = 0;
}
- Person::players[i]->setAnimation(Person::players[i]->getIdle());
+ Person::players[i]->setTargetAnimation(Person::players[i]->getIdle());
Person::players[i]->transspeed = 10;
}
}
if (Person::players[i]->animTarget == sneakanim) {
- Person::players[i]->setAnimation(Person::players[i]->getIdle());
+ Person::players[i]->setTargetAnimation(Person::players[i]->getIdle());
Person::players[i]->transspeed = 10;
}
}
!Person::players[i]->jumpkeydown &&
Person::players[i]->crouchkeydown)) {
if (Person::players[i]->aitype == passivetype)
- Person::players[i]->setAnimation(walkanim);
+ Person::players[i]->setTargetAnimation(walkanim);
else
- Person::players[i]->setAnimation(Person::players[i]->getRun());
+ Person::players[i]->setTargetAnimation(Person::players[i]->getRun());
}
if (Person::players[i]->isCrouch()) {
Person::players[i]->animTarget = sneakanim;
Person::players[i]->frameTarget = 0;
}
if (Person::players[i]->animTarget == hanganim/*&&(!Person::players[i]->forwardstogglekeydown||Person::players[i]->aitype!=playercontrolled)*/) {
- Person::players[i]->setAnimation(climbanim);
+ Person::players[i]->setTargetAnimation(climbanim);
Person::players[i]->frameTarget = 1;
Person::players[i]->jumpclimb = 1;
}
Person::players[i]->frameTarget > 0 &&
!Person::players[i]->jumpkeydown &&
Person::players[i]->crouchkeydown)) {
- Person::players[i]->setAnimation(Person::players[i]->getRun());
+ Person::players[i]->setTargetAnimation(Person::players[i]->getRun());
}
if (Person::players[i]->isCrouch()) {
Person::players[i]->animTarget = sneakanim;
Person::players[i]->frameTarget > 0 &&
!Person::players[i]->jumpkeydown &&
Person::players[i]->crouchkeydown)) {
- Person::players[i]->setAnimation(Person::players[i]->getRun());
+ Person::players[i]->setTargetAnimation(Person::players[i]->getRun());
}
if (Person::players[i]->isCrouch()) {
Person::players[i]->animTarget = sneakanim;
Person::players[i]->frameTarget > 0 &&
!Person::players[i]->jumpkeydown &&
Person::players[i]->crouchkeydown)) {
- Person::players[i]->setAnimation(Person::players[i]->getRun());
+ Person::players[i]->setTargetAnimation(Person::players[i]->getRun());
}
if (Person::players[i]->isCrouch()) {
Person::players[i]->animTarget = sneakanim;
((Person::players[i]->animTarget != rabbitrunninganim &&
Person::players[i]->animTarget != wolfrunninganim) || i != 0)) {
Person::players[i]->jumpstart = 0;
- Person::players[i]->setAnimation(jumpupanim);
+ Person::players[i]->setTargetAnimation(jumpupanim);
Person::players[i]->yaw = Person::players[i]->targetyaw;
Person::players[i]->transspeed = 20;
Person::players[i]->FootLand(leftfoot, 1);
emit_sound_at(jumpsound, Person::players[i]->coords, 128.);
}
if ((Person::players[i]->isIdle()) && Person::players[i]->jumppower > 1) {
- Person::players[i]->setAnimation(Person::players[i]->getLanding());
+ Person::players[i]->setTargetAnimation(Person::players[i]->getLanding());
Person::players[i]->frameTarget = 2;
Person::players[i]->landhard = 0;
Person::players[i]->jumpstart = 1;
}
if (!movekey) {
- if (Person::players[i]->isRun() || Person::players[i]->animTarget == walkanim)
- Person::players[i]->setAnimation(Person::players[i]->getStop());
+ if (Person::players[i]->isRun() || Person::players[i]->animTarget == walkanim) {
+ Person::players[i]->setTargetAnimation(Person::players[i]->getStop());
+ }
if (Person::players[i]->animTarget == sneakanim) {
Person::players[i]->animTarget = Person::players[i]->getCrouch();
- if (Person::players[i]->animCurrent == sneakanim)
+ if (Person::players[i]->animCurrent == sneakanim) {
Person::players[i]->target = 0;
+ }
Person::players[i]->frameTarget = 0;
}
}
Person::players[i]->aitype == searchtype ||
(Person::players[i]->aitype == passivetype &&
Person::players[i]->numwaypoints <= 1)))
- Person::players[i]->setAnimation(Person::players[i]->getStop());
+ Person::players[i]->setTargetAnimation(Person::players[i]->getStop());
if (Person::players[i]->isRun() && (Person::players[i]->aitype == passivetype))
- Person::players[i]->setAnimation(Person::players[i]->getStop());
+ Person::players[i]->setTargetAnimation(Person::players[i]->getStop());
}
}
if (Person::players[i]->animTarget == rollanim)
//stop to turn in right direction
if (fabs(Person::players[k]->yaw - Person::players[k]->targetyaw) > 90 && (Person::players[k]->isRun() || Person::players[k]->animTarget == walkanim))
- Person::players[k]->setAnimation(Person::players[k]->getStop());
+ Person::players[k]->setTargetAnimation(Person::players[k]->getStop());
if (Person::players[k]->animTarget == backhandspringanim || Person::players[k]->animTarget == dodgebackanim)
Person::players[k]->targettilt = 0;
}
if (changedelay <= 0 && !loading && !editorenabled && gameon && !Tutorial::active && changedelay != -999 && !won) {
- if (Person::players[0]->dead && changedelay <= 0) {
+ if (Person::players[0]->dead) {
changedelay = 1;
targetlevel = whichlevel;
}