(fuel, load, shp_check_nav, retreat_ship1, shp_nav_one_sector)

(shp_check_nav, sail_nav_fleet, bigcity_dchr[], sector_navigation[])
(d_navigation): Add a NEW d_navigation enum NAV_CANAL to
indicate that a sector has canal capability. Add canal determination
logic to shp_check_nav(). Update sector_navigation[] with new
canal navigation enum.  Use shp_check_nav() to determine the
sector can be navigated.
This commit is contained in:
Ron Koenderink 2006-01-21 20:56:50 +00:00
parent 82df8cfe0c
commit 74e4e2810a
9 changed files with 44 additions and 45 deletions

View file

@ -216,7 +216,6 @@ sail_nav_fleet(struct fltheadstr *fltp)
natid own;
struct emp_qelem ship_list;
int dir;
int canal = 1;
#ifdef SAILDEBUG
switch (fltp->real_q) {
@ -239,6 +238,7 @@ 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);
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) {
@ -246,28 +246,22 @@ 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 ((shp_check_nav(sectp, sp) == CN_LANDLOCKED) &&
(dchr[sectp->sct_type].d_nav == NAV_CANAL)) {
wu(0, fltp->own,
"Your ship #%d (%s) is too big to fit through the canal.\n",
fe->num, cname(fe->own));
error = 1;
}
}
if (error)
return 0;
sp = getshipp(fltp->leader);
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:
if (shp_check_nav(sectp, sp) != CN_NAVIGABLE)
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 */