- 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 = checkcollide(test2, test, Person::players[i]->laststanding);
- if (j == -1)
- j = 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 && ((tutoriallevel != 1 || 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 &&
- ((tutoriallevel != 1 || cananger) && hostile)) {
- Person::players[i]->losupdatedelay = .2;
- if (distsq(&Person::players[i]->coords, &Person::players[0]->coords) < 4 && animation[Person::players[i]->animTarget].height != lowheight) {
- Person::players[i]->aitype = attacktypecutoff;
- Person::players[i]->lastseentime = 1;
- }
- if (abs(Random() % 2) || animation[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 ((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 != 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 && ((tutoriallevel != 1 || 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[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 = checkcollide(test2, test, Person::players[i]->laststanding);
- if (j == -1)
- j = 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[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[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 &&
- (tutoriallevel == 1 && 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;