]> git.pond.sub.org Git - empserver/blobdiff - src/lib/subs/attsub.c
Update copyright notice
[empserver] / src / lib / subs / attsub.c
index e2651352d467317be78578cd058db97a7e1e6494..5f3bbe71b88b758cd3c34067eda341e6578cc810 100644 (file)
@@ -1,11 +1,11 @@
 /*
  *  Empire - A multi-player, client/server Internet based war game.
- *  Copyright (C) 1986-2010, Dave Pare, Jeff Bailey, Thomas Ruschak,
- *                           Ken Stevens, Steve McClure
+ *  Copyright (C) 1986-2013, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ *                Ken Stevens, Steve McClure, Markus Armbruster
  *
- *  This program is free software; you can redistribute it and/or modify
+ *  Empire is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
+ *  the Free Software Foundation, either version 3 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -14,8 +14,7 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  *  ---
  *
@@ -30,7 +29,7 @@
  *  Known contributors to this file:
  *     Ken Stevens, 1995
  *     Steve McClure, 1996-2000
- *     Markus Armbruster, 2006-2009
+ *     Markus Armbruster, 2006-2011
  */
 
 #include <config.h>
 #include <ctype.h>
 #include <math.h>
 #include "combat.h"
+#include "empobj.h"
 #include "file.h"
 #include "map.h"
 #include "misc.h"
 #include "mission.h"
+#include "news.h"
 #include "nsc.h"
 #include "optlist.h"
 #include "path.h"
 #include "plague.h"
 #include "player.h"
 #include "prototypes.h"
-#include "xy.h"
-#include "empobj.h"
 #include "unit.h"
+#include "xy.h"
 
 #define CASUALTY_LUMP  1       /* How big casualty chunks should be */
 
@@ -285,16 +285,15 @@ att_get_combat(struct combat *com, int isdef)
                   mil);
            com->troops = mil;
        } else {                /* attacker */
-           if (owner != player->cnum
-               && getrel(getnatp(owner), player->cnum) != ALLIED) {
+           if (owner != com->own && owner != player->cnum) {
                /* must be EF_SECTOR */
-               if (com->mil)
+               if (com->troops)
                    pr("WARNING: Your %d mil in %s were destroyed because %s just took the sector!\n",
                       com->mil, xyas(com->x, com->y, player->cnum),
                       cname(owner));
                else
-                   pr("You no longer own %s\n",
-                      xyas(com->x, com->y, player->cnum));
+                   pr("%s just took %s!\n",
+                      cname(owner), xyas(com->x, com->y, player->cnum));
                return att_combat_init(com, EF_BAD);
            }
            if (com->troops && com->troops + 1 > mil) {
@@ -1023,7 +1022,7 @@ ask_olist(int combat_mode, struct combat *off, struct combat *def,
             * of high-mobility sectors (mountains): for those we
             * still require attack mobility.
             */
-           pathcost = att_mobcost(off->own, def, lnd_mobtype(&land));
+           pathcost = att_mobcost(land.lnd_own, def, lnd_mobtype(&land));
            mobcost = lnd_pathcost(&land, pathcost);
            if (pathcost < 1.0) {
                if (land.lnd_mobil <= 0) {
@@ -1272,7 +1271,7 @@ get_ototal(int combat_mode, struct combat *off, struct emp_qelem *olist,
            }
            if (w < 0) {
                lnd_print(player->cnum, llp,
-                         "is in a sector not owned by you");
+                         "can't attack from this sector now");
                lnd_delete(llp);
                continue;
            }
@@ -1459,7 +1458,6 @@ att_reacting_units(struct combat *def, struct emp_qelem *list, int a_spy,
 {
     struct nstr_item ni;
     struct lndstr land;
-    struct sctstr sect, dsect;
     struct ulist *llp;
     int dtotal;
     double new_land = 0;
@@ -1467,7 +1465,6 @@ att_reacting_units(struct combat *def, struct emp_qelem *list, int a_spy,
     double pathcost;
     int origx, origy;
     double eff = att_combat_eff(def);
-    char buf[1024];
 
     if (list)
        dtotal = get_dtotal(def, list, 1.0, 1);
@@ -1499,12 +1496,10 @@ att_reacting_units(struct combat *def, struct emp_qelem *list, int a_spy,
        if (!in_oparea((struct empobj *)&land, def->x, def->y))
            continue;
 
-       getsect(land.lnd_x, land.lnd_y, &sect);
-       getsect(def->x, def->y, &dsect);
-       if (!BestLandPath(buf, &sect, &dsect, &pathcost,
-                         lnd_mobtype(&land)))
+       pathcost = path_find(land.lnd_x, land.lnd_y, def->x, def->y,
+                           def->own, lnd_mobtype(&land));
+       if (pathcost < 0)
            continue;
-
        mobcost = lnd_pathcost(&land, pathcost);
        if (land.lnd_mobil < mobcost)
            continue;
@@ -2516,7 +2511,7 @@ take_move_in_mob(int combat_mode, struct ulist *llp, struct combat *off,
     switch (combat_mode) {
     case A_ATTACK:
        mobcost = lnd_pathcost(&llp->unit.land,
-                              att_mobcost(off->own, def,
+                              att_mobcost(llp->unit.land.lnd_own, def,
                                           lnd_mobtype(&llp->unit.land)));
        break;
     case A_ASSAULT: