(owned_and_navigable): Do not check the real sector, only the bmap.
Checking the real sector leaks information, which can be abused to test whether an arbitrary sector is unfriendly or an inefficient harbor or bridge, at the cost of some ship mobility (I think). Initially broken ca. 1993, went through several changes, but the leak survived them all.
This commit is contained in:
parent
a77a8c3abd
commit
7f37ecb680
1 changed files with 1 additions and 26 deletions
|
@ -237,12 +237,9 @@ bestownedpath(s_char *bpath,
|
||||||
static int
|
static int
|
||||||
owned_and_navigable(s_char *map, int x, int y, s_char *terrain, int own)
|
owned_and_navigable(s_char *map, int x, int y, s_char *terrain, int own)
|
||||||
{
|
{
|
||||||
s_char c;
|
|
||||||
s_char *t;
|
s_char *t;
|
||||||
s_char mapspot; /* What this spot on the bmap is */
|
s_char mapspot; /* What this spot on the bmap is */
|
||||||
int negate;
|
int negate;
|
||||||
struct sctstr *sect;
|
|
||||||
int rel;
|
|
||||||
|
|
||||||
/* No terrain to check? Everything is navigable! (this
|
/* No terrain to check? Everything is navigable! (this
|
||||||
probably means we are flying) */
|
probably means we are flying) */
|
||||||
|
@ -287,28 +284,6 @@ owned_and_navigable(s_char *map, int x, int y, s_char *terrain, int own)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* According to our bmap, this sector is ok so far. */
|
/* According to our bmap, this sector is ok. */
|
||||||
|
|
||||||
/* Ok, we made it this far. Now get the sector */
|
|
||||||
sect = getsectp(x, y);
|
|
||||||
c = dchr[sect->sct_type].d_mnem;
|
|
||||||
/* Ok, now, check the owner if needed */
|
|
||||||
if (own >= 0) {
|
|
||||||
if (sect->sct_own != own) {
|
|
||||||
rel = getrel(getnatp(sect->sct_own), own);
|
|
||||||
/* We can't sail through deity sectors, but we can sail
|
|
||||||
through any ocean */
|
|
||||||
if (rel < FRIENDLY && sect->sct_type != SCT_WATER)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* Ok, now, check these two sector types */
|
|
||||||
/* check for bad harbors. */
|
|
||||||
if (c == 'h' && sect->sct_effic < 2)
|
|
||||||
return 0;
|
|
||||||
/* check for bad bridges */
|
|
||||||
if (c == '=' && sect->sct_effic < 60)
|
|
||||||
return 0;
|
|
||||||
/* Woo-hoo, it's ok! */
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue