X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FObjects%2FPerson.cpp;h=daba2752fd74e8dc7716328b0dc3dd18084a94aa;hb=e069918736630bf740df60442891b66f93b564e9;hp=8022c0fc3323f023bc485bb3ff2eb20a7ae12ad9;hpb=29b23632dbddbb74ca9c74e3229c5e4729fe3622;p=lugaru.git diff --git a/Source/Objects/Person.cpp b/Source/Objects/Person.cpp index 8022c0f..daba275 100644 --- a/Source/Objects/Person.cpp +++ b/Source/Objects/Person.cpp @@ -7325,7 +7325,7 @@ bool Person::addClothes(const int& clothesId) void Person::doAI() { - if (!isPlayerControlled() && !isPlayerFriend() && !Dialog::inDialog()) { + if (!isPlayerControlled() && !Dialog::inDialog()) { jumpclimb = 0; //disable movement in editor if (Game::editorenabled) { @@ -7488,6 +7488,7 @@ void Person::doAI() if ((!Tutorial::active || cananger) && hostile && + !isPlayerFriend() && !Person::players[0]->dead && distsq(&coords, &Person::players[0]->coords) < 400 && occluded < 25) { @@ -7605,7 +7606,7 @@ void Person::doAI() //hearing sounds if (!Game::editorenabled) { if (howactive <= typesleeping) { - if (numenvsounds > 0 && (!Tutorial::active || cananger) && hostile) { + if (numenvsounds > 0 && (!Tutorial::active || cananger) && !isPlayerFriend() && hostile) { for (int j = 0; j < numenvsounds; j++) { float vol = howactive == typesleeping ? envsoundvol[j] - 14 : envsoundvol[j]; if (vol > 0 && distsq(&coords, &envsound[j]) < 2 * (vol + vol * (creature == rabbittype) * 3)) { @@ -7625,6 +7626,7 @@ void Person::doAI() if (howactive < typesleeping && ((!Tutorial::active || cananger) && hostile) && + !isPlayerFriend() && !Person::players[0]->dead && distsq(&coords, &Person::players[0]->coords) < 400 && occluded < 25) { @@ -7803,7 +7805,7 @@ void Person::doAI() jumpkeydown = 1; } - if (numenvsounds > 0 && ((!Tutorial::active || cananger) && hostile)) { + if (numenvsounds > 0 && ((!Tutorial::active || cananger) && !isPlayerFriend() && hostile)) { for (int k = 0; k < numenvsounds; k++) { if (distsq(&coords, &envsound[k]) < 2 * (envsoundvol[k] + envsoundvol[k] * (creature == rabbittype) * 3)) { aitype = attacktypecutoff; @@ -7812,6 +7814,7 @@ void Person::doAI() } if (!Person::players[0]->dead && + !isPlayerFriend() && losupdatedelay < 0 && !Game::editorenabled && occluded < 2 && @@ -7997,7 +8000,7 @@ void Person::doAI() lastseentime = 12; - if (!Person::players[0]->dead && ((!Tutorial::active || cananger) && hostile)) { + if (!Person::players[0]->dead && !isPlayerFriend() && ((!Tutorial::active || cananger) && hostile)) { if (ally < 0 || hasWeapon() || lastchecktime <= 0) { aitype = attacktypecutoff; lastseentime = 1; @@ -8359,6 +8362,7 @@ void Person::doAI() } } } + //stunned if (aitype == passivetype && !(numwaypoints > 1) || stunned > 0 || @@ -8377,6 +8381,32 @@ void Person::doAI() throwkeydown = 0; } + if (stunned < 1 && isPlayerFriend()) { + // friends follow player + if (!Person::players[0]->dead && + distsq(&coords, &Person::players[0]->coords) > 5) { + XYZ rotatetarget = Person::players[0]->coords + Person::players[0]->velocity; + XYZ targetpoint = Person::players[0]->coords; + velocity = (targetpoint - coords); + velocity.y += 2; + float vellength = findLength(&velocity); + if (vellength != 0 && + distsq(&Person::players[0]->coords, &coords) < distsq(&rotatetarget, &coords)) { + targetpoint += Person::players[0]->velocity * + findDistance(&Person::players[0]->coords, &coords) / vellength; + } + targetyaw = roughDirectionTo(coords, targetpoint); + lookyaw = targetyaw; + forwardkeydown = 1; + aitype = pathfindtype; + } + + // friends help player with its enemies + if (Game::musictype == stream_fighttheme) { + aitype = attacktypecutoff; + } + } + XYZ facing; facing = 0; facing.z = -1; @@ -8390,6 +8420,9 @@ void Person::doAI() } else if (howactive >= typesleeping) { targetheadyaw = targetyaw; targetheadpitch = 0; + } else if (isPlayerFriend()) { + targetheadyaw = 180 - roughDirectionTo(coords, Person::players[0]->coords); + targetheadpitch = pitchTo(coords, Person::players[0]->coords); } else { if (interestdelay <= 0) { interestdelay = .7 + (float)(abs(Random() % 100)) / 100;