]> git.pond.sub.org Git - empserver/blobdiff - src/lib/update/sail.c
COPYING duplicates information from README. Remove. Move GPL from
[empserver] / src / lib / update / sail.c
index dba8d5061675da4051033aab8bbaccee96a54017..e74ad2f8c1d5074a49c584ffb2c072583354cc79 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  Empire - A multi-player, client/server Internet based war game.
- *  Copyright (C) 1986-2005, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ *  Copyright (C) 1986-2006, Dave Pare, Jeff Bailey, Thomas Ruschak,
  *                           Ken Stevens, Steve McClure
  *
  *  This program is free software; you can redistribute it and/or modify
@@ -19,9 +19,9 @@
  *
  *  ---
  *
- *  See the "LEGAL", "LICENSE", "CREDITS" and "README" files for all the
- *  related information and legal notices. It is expected that any future
- *  projects/authors will amend these files as needed.
+ *  See files README, COPYING and CREDITS in the root of the source
+ *  tree for related information and legal notices.  It is expected
+ *  that future projects/authors will amend these files as needed.
  *
  *  ---
  *
@@ -34,6 +34,8 @@
  *     Steve McClure, 1998-2000
  */
 
+#include <config.h>
+
 #include "misc.h"
 #include "sect.h"
 #include "path.h"
@@ -135,7 +137,7 @@ sail_find_fleet(struct fltheadstr **head, struct shpstr *sp)
        return 0;
     }
 
-    for (stop = 0, cp = ap->shp_path; (!stop) && (*cp); cp++) {
+    for (stop = 0, cp = ap->shp_path; !stop && *cp; cp++) {
        switch (*cp) {
        case 'y':
        case 'u':
@@ -214,6 +216,7 @@ sail_nav_fleet(struct fltheadstr *fltp)
     natid own;
     struct emp_qelem ship_list;
     int dir;
+    int canal = 1;
 
 #ifdef SAILDEBUG
     switch (fltp->real_q) {
@@ -236,17 +239,6 @@ sail_nav_fleet(struct fltheadstr *fltp)
        wu(0, fltp->own, " %d", fe->num);
     wu(0, fltp->own, "\n");
 #endif
-    sectp = getsectp(fltp->x, fltp->y);
-    switch (check_nav(sectp)) {
-    case CN_NAVIGABLE:
-       break;
-    case CN_CONSTRUCTION:
-    case CN_LANDLOCKED:
-    default:
-       wu(0, fltp->own, "Your fleet lead by %d is trapped by land.\n",
-          fltp->leader);
-       return 0;
-    }
     for (fe = fltp->head; fe; fe = fe->next) {
        sp = getshipp(fe->num);
        if (sp->shp_item[I_MILIT] == 0 && sp->shp_item[I_CIVIL] == 0) {
@@ -254,10 +246,28 @@ sail_nav_fleet(struct fltheadstr *fltp)
               "   ship #%d (%s) is crewless and can't go on\n",
               fe->num, cname(fe->own));
            error = 1;
-       }
+       } else if (!(mchr[sp->shp_type].m_flags & M_CANAL))
+           canal = 0;
     }
     if (error)
        return 0;
+    sectp = getsectp(fltp->x, fltp->y);
+    switch (shp_check_nav(sectp)) {
+    case CN_NAVIGABLE:
+       if (IS_BIG_CITY(sectp->sct_type) && !canal) {
+           wu(0, fltp->own,
+              "Your fleet lead by %d is too big to fit through the canal.\n",
+              fltp->leader);
+           return 0;
+       }
+       break;
+    case CN_CONSTRUCTION:
+    case CN_LANDLOCKED:
+    default:
+       wu(0, fltp->own, "Your fleet lead by %d is trapped by land.\n",
+          fltp->leader);
+       return 0;
+    }
     sp = getshipp(fltp->leader);
     own = sp->shp_own;
     fltp_to_list(fltp, &ship_list);    /* hack -KHS 1995 */
@@ -306,9 +316,9 @@ sail_ship(natid cn)
 
     /* see what the fleets fall out into */
     for (fltp = head; fltp; fltp = fltp->next) {
-       sail_nav_fleet(fltp);
-       wu(0, fltp->own, "Your fleet lead by ship #%d has reached %s.\n",
-          fltp->leader, xyas(fltp->x, fltp->y, fltp->own));
+       if (sail_nav_fleet(fltp))
+           wu(0, fltp->own, "Your fleet lead by ship #%d has reached %s.\n",
+              fltp->leader, xyas(fltp->x, fltp->y, fltp->own));
     }
 
     /* Free up the memory, 'cause I want to. */