do not crash when terraforming land regions with road in them (oceans cannot have roads)

This commit is contained in:
Enno Rehling 2011-06-04 18:37:02 +02:00
parent 58208e0db5
commit 2aa3acf56a
2 changed files with 15 additions and 6 deletions

View File

@ -1113,7 +1113,7 @@ cr_borders(seen_region ** seen, const region * r, const faction * f,
if (!b->type->transparent(b, f)) if (!b->type->transparent(b, f))
fputs("1;opaque\n", F); fputs("1;opaque\n", F);
/* hack: */ /* hack: */
if (b->type == &bt_road) { if (b->type == &bt_road && r->terrain->max_road) {
int p = rroad(r, d) * 100 / r->terrain->max_road; int p = rroad(r, d) * 100 / r->terrain->max_road;
fprintf(F, "%d;prozent\n", p); fprintf(F, "%d;prozent\n", p);
} }

View File

@ -773,18 +773,23 @@ void rsetroad(region * r, direction_t d, short val)
connection *b; connection *b;
region *r2 = rconnect(r, d); region *r2 = rconnect(r, d);
if (!r2) if (!r2) {
return; return;
}
b = get_borders(r, r2); b = get_borders(r, r2);
while (b && b->type != &bt_road) while (b && b->type != &bt_road) {
b = b->next; b = b->next;
if (!b) }
if (!b) {
if (!val) return;
b = new_border(&bt_road, r, r2); b = new_border(&bt_road, r, r2);
if (r == b->from) }
if (r == b->from) {
b->data.sa[0] = val; b->data.sa[0] = val;
else } else {
b->data.sa[1] = val; b->data.sa[1] = val;
} }
}
short rroad(const region * r, direction_t d) short rroad(const region * r, direction_t d)
{ {
@ -1236,6 +1241,10 @@ void terraform_region(region * r, const terrain_type * terrain)
} }
if (r->land) { if (r->land) {
int d;
for (d=0;d!=MAXDIRECTIONS;++d) {
rsetroad(r, d, 0);
}
i_freeall(&r->land->items); i_freeall(&r->land->items);
} else { } else {
static struct surround { static struct surround {