From: Markus Armbruster Date: Thu, 4 Mar 2004 15:54:46 +0000 (+0000) Subject: (MINES_MAX): New. X-Git-Tag: v4.2.14~85 X-Git-Url: http://git.pond.sub.org/?p=empserver;a=commitdiff_plain;h=828b84d840e013a79454aca53907c5d42ffc35c6 (MINES_MAX): New. (doland, mine, landmine, setsector, pln_dropoff): Use it. With variables, mining beyond the capacity of variables (65535) was ignored. Now the mines saturate at MINES_MAX. --- diff --git a/include/sect.h b/include/sect.h index dd2224e0e..3db521980 100644 --- a/include/sect.h +++ b/include/sect.h @@ -184,8 +184,10 @@ extern struct dchrstr bigcity_dchr; /* Sector flags */ #define MOVE_IN_PROGRESS bit(0) /* move in progress */ -/* maximal number of che, must fit into struct sctstr member sct_che */ -#define CHE_MAX 255 +/* maximum number of che, must fit into struct sctstr member sct_che */ +#define CHE_MAX 255 +/* maximum number of mines, must fit into struct sctstr member sct_mines */ +#define MINES_MAX 65535 /* Each cost is per point of efficency */ struct sctintrins { diff --git a/src/lib/commands/edit.c b/src/lib/commands/edit.c index f22d9b808..274c0075b 100644 --- a/src/lib/commands/edit.c +++ b/src/lib/commands/edit.c @@ -627,8 +627,9 @@ doland(s_char op, int arg, s_char *p, struct sctstr *sect) sect->sct_avail = new; break; case 'M': - sect->sct_mines = arg; - pr("Mines changed to %d\n", arg); + new = errcheck(arg, 0, MINES_MAX); + sect->sct_mines = new; + pr("Mines changed to %d\n", new); break; case 'L': if (!sarg_xy(p, &newx, &newy)) diff --git a/src/lib/commands/mine.c b/src/lib/commands/mine.c index 964c0d497..5fd0b7431 100644 --- a/src/lib/commands/mine.c +++ b/src/lib/commands/mine.c @@ -59,8 +59,8 @@ mine(void) if (!snxtitem(&ni, EF_SHIP, player->argp[1])) return RET_SYN; - mines = - onearg(player->argp[2], "Drop how many mines from each ship? "); + mines = onearg(player->argp[2], + "Drop how many mines from each ship? "); if (mines <= 0) return RET_SYN; while (nxtitem(&ni, (s_char *)&ship)) { @@ -77,7 +77,7 @@ mine(void) pr("You can't lay mines there!!\n"); continue; } - sect.sct_mines += mines_avail; + sect.sct_mines = min(sect.sct_mines + mines_avail, MINES_MAX); ship.shp_item[I_SHELL] = shells - mines_avail; putsect(§); ship.shp_mission = 0; @@ -151,7 +151,7 @@ landmine(void) shells = min(shells, land.lnd_mobil); } getsect(sect.sct_x, sect.sct_y, §); - sect.sct_mines += total_mines_laid; + sect.sct_mines = min(sect.sct_mines + total_mines_laid, MINES_MAX); putsect(§); if (total_mines_laid == mines_wanted) { pr("%s laid a total of %d mines in %s", diff --git a/src/lib/commands/setsect.c b/src/lib/commands/setsect.c index e11b5c814..e1136fa04 100644 --- a/src/lib/commands/setsect.c +++ b/src/lib/commands/setsect.c @@ -222,6 +222,8 @@ setsector(void) current += amt; if (current < 0) current = 0; + if (current > MINES_MAX) + current = MINES_MAX; if (sect.sct_own != 0) resnoise(§, 1, "Mines", sect.sct_mines, current); sect.sct_mines = current; diff --git a/src/lib/subs/plnsub.c b/src/lib/subs/plnsub.c index 277bf4935..38b6f56db 100644 --- a/src/lib/subs/plnsub.c +++ b/src/lib/subs/plnsub.c @@ -230,7 +230,7 @@ pln_dropoff(struct emp_qelem *list, struct ichrstr *ip, coord tx, coord ty, sectp = ptr; if (sectp->sct_type == SCT_WATER && ip->i_vtype == V_SHELL) { /* aerial mining */ - sectp->sct_mines += amt; + sectp->sct_mines = min(sectp->sct_mines + amt, MINES_MAX); pr("%d mines laid in %s.\n", amt, xyas(sectp->sct_x, sectp->sct_y, player->cnum)); if (amt > 0