diff --git a/src/lib/common/move.c b/src/lib/common/move.c index 34df9b95..141accb5 100644 --- a/src/lib/common/move.c +++ b/src/lib/common/move.c @@ -53,6 +53,8 @@ sector_mcost(struct sctstr *sp, int do_bonus) if (do_bonus == MOB_ROAD) { d = d / (1.0 + sp->sct_road / 122.0); } else if (do_bonus == MOB_RAIL) { + if (sp->sct_rail <= 0) + return -1.0; d = d / (1.0 + sp->sct_rail / 100.0); } else { if (d < 2.0) diff --git a/src/lib/common/path.c b/src/lib/common/path.c index aa5a2512..ab4604ad 100644 --- a/src/lib/common/path.c +++ b/src/lib/common/path.c @@ -182,6 +182,7 @@ static int bp_neighbors(struct as_coord c, struct as_coord *cp, void *pp) { struct sctstr *sectp = (void *)empfile[EF_SECTOR].cache; + struct bestp *bp = pp; coord x, y; coord nx, ny; int n = 0, q; @@ -220,6 +221,8 @@ bp_neighbors(struct as_coord c, struct as_coord *cp, void *pp) move through it. We calculate it later. */ if (dchr[sp->sct_type].d_mcst == 0) continue; + if (bp->bp_mobtype == MOB_RAIL && sp->sct_rail == 0) + continue; if (sp->sct_own != from->sct_own) continue; cp[n].x = sx;