]> git.jsancho.org Git - lugaru.git/blobdiff - Source/GameTick.cpp
Friends fight with true enemies, before they attacked player but hurting enemies
[lugaru.git] / Source / GameTick.cpp
index 4ff18e8b1be9e78e881c231c58c8b421dfcecb0e..285c80cff87fec2740a2d486c5657a4b5d021ef7 100644 (file)
@@ -1472,6 +1472,9 @@ void Game::ProcessDevInput()
             Person::players.back()->power = Person::players[0]->power;
             Person::players.back()->speedmult = Person::players[0]->speedmult;
 
+            if (Input::isKeyDown(SDL_SCANCODE_RSHIFT))
+                Person::players.back()->isplayerfriend = true;
+
             Person::players.back()->loaded = true;
         }
 
@@ -1585,7 +1588,7 @@ void Game::ProcessDevInput()
         }
 
         /* Decrease size for next object */
-        if (Input::isKeyDown(SDL_SCANCODE_DOWN) && !Input::isKeyDown(SDL_SCANCODE_LCTRL)) {
+        if (Input::isKeyDown(SDL_SCANCODE_DOWN) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) {
             editorsize -= multiplier;
             if (editorsize < .1) {
                 editorsize = .1;
@@ -1593,7 +1596,7 @@ void Game::ProcessDevInput()
         }
 
         /* Increase size for next object */
-        if (Input::isKeyDown(SDL_SCANCODE_UP) && !Input::isKeyDown(SDL_SCANCODE_LCTRL)) {
+        if (Input::isKeyDown(SDL_SCANCODE_UP) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) {
             editorsize += multiplier;
         }
 
@@ -2190,7 +2193,25 @@ void doAttacks()
         }
         if (Person::players[k]->animTarget != rabbitrunninganim && Person::players[k]->animTarget != wolfrunninganim) {
             if (!Person::players[k]->isPlayerControlled()) {
-                Person::players[k]->victim = Person::players[0];
+                if (Person::players[k]->isPlayerFriend()) {
+                    bool found = false;
+                    for (unsigned k2 = 1; k2 < Person::players.size(); k2++) {
+                        if (k != k2 &&
+                            !Person::players[k2]->dead &&
+                            Person::players[k2]->aitype == attacktypecutoff) {
+                            Person::players[k]->victim = Person::players[k2];
+                            Person::players[k]->hasvictim = true;
+                            found = true;
+                            break;
+                        }
+                    }
+                    if (!found) {
+                        Person::players[k]->hasvictim = false;
+                        Person::players[k]->attackkeydown = 0;
+                    }
+                } else {
+                    Person::players[k]->victim = Person::players[0];
+                }
             }
             //attack key pressed
             if (Person::players[k]->attackkeydown) {
@@ -2249,7 +2270,9 @@ void doAttacks()
                     Person::players[k]->hasvictim = 0;
                     if (Person::players.size() > 1) {
                         for (unsigned i = 0; i < Person::players.size(); i++) {
-                            if (i == k || !(k == 0 || i == 0)) {
+                            if (i == k ||
+                                (Person::players[k]->isPlayerTeam() && Person::players[i]->isPlayerTeam()) ||
+                                !(Person::players[k]->isPlayerTeam() || Person::players[i]->isPlayerTeam())) {
                                 continue;
                             }
                             if (!Person::players[k]->hasvictim) {
@@ -4484,6 +4507,7 @@ void Game::TickOnceAfter()
                  Person::players[i]->aitype == gethelptype ||
                  Person::players[i]->aitype == searchtype) &&
                 !Person::players[i]->dead &&
+                !Person::players[i]->isPlayerFriend() &&
                 (Person::players[i]->animTarget != sneakattackedanim &&
                  Person::players[i]->animTarget != knifesneakattackedanim &&
                  Person::players[i]->animTarget != swordsneakattackedanim)) {
@@ -4634,7 +4658,7 @@ void Game::TickOnceAfter()
             }
             alldead = true;
             for (unsigned i = 1; i < Person::players.size(); i++) {
-                if (!Person::players[i]->dead && Person::players[i]->howactive < typedead1) {
+              if (!Person::players[i]->dead && Person::players[i]->howactive < typedead1 && !Person::players[i]->isPlayerFriend()) {
                     alldead = false;
                     break;
                 }