From 58e93c0ea316e88f3bb8196f41d8c07a873b7472 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Fri, 5 Mar 2004 06:48:57 +0000 Subject: [PATCH] (deli, do_demo, lnd_sweep, guerrilla): Saturate items at ITEM_MAX. With variables, item increases beyond the capacity of variables (65535) were ignored here. This should cover all item changes not going through putvec(). --- src/lib/commands/deli.c | 3 ++- src/lib/commands/demo.c | 2 ++ src/lib/subs/lndsub.c | 2 +- src/lib/update/revolt.c | 7 +++++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/lib/commands/deli.c b/src/lib/commands/deli.c index f589dfff9..6328e7e03 100644 --- a/src/lib/commands/deli.c +++ b/src/lib/commands/deli.c @@ -101,7 +101,8 @@ deli(void) if (!check_sect_ok(§)) continue; - del = thresh + dir; + thresh = min(thresh, ITEM_MAX) & ~7; + del = thresh | dir; sect.sct_del[ich->i_vtype] = del; putsect(§); } diff --git a/src/lib/commands/demo.c b/src/lib/commands/demo.c index 437d2f0ac..74fbb71c2 100644 --- a/src/lib/commands/demo.c +++ b/src/lib/commands/demo.c @@ -105,6 +105,8 @@ do_demo(struct natstr *natp, struct nstr_sect nstr, int number, s_char *p, continue; } else if ((deltamil = min(mil, number)) <= 0) continue; + if (deltamil > ITEM_MAX - civ) + deltamil = ITEM_MAX - civ; civ += deltamil; mil -= deltamil; mil_demob += deltamil; diff --git a/src/lib/subs/lndsub.c b/src/lib/subs/lndsub.c index 849959c81..221286f20 100644 --- a/src/lib/subs/lndsub.c +++ b/src/lib/subs/lndsub.c @@ -715,7 +715,7 @@ lnd_sweep(struct emp_qelem *land_list, int verbose, int takemob, mines--; if (lshells < max) ++lshells; - else + else if (sshells < ITEM_MAX) ++sshells; } } diff --git a/src/lib/update/revolt.c b/src/lib/update/revolt.c index 5f550024e..e6f27d826 100644 --- a/src/lib/update/revolt.c +++ b/src/lib/update/revolt.c @@ -220,10 +220,9 @@ guerrilla(struct sctstr *sp) if ((tnat->nat_stat & STAT_INUSE) == 0) { /* target nation has dissolved: che's retire. */ logerror("%d Che targeted at country %d retiring", che, target); - civ += che; sp->sct_che = 0; sp->sct_che_target = 0; - sp->sct_item[I_CIVIL] = civ; + sp->sct_item[I_CIVIL] = min(civ + che, ITEM_MAX); return; } @@ -347,6 +346,10 @@ guerrilla(struct sctstr *sp) sp->sct_newtype = SCT_AGRI; n = civ / 20; civ -= n; + if (civ > ITEM_MAX) { + uw = ITEM_MAX - civ; + civ = ITEM_MAX; + } sp->sct_item[I_CIVIL] = civ; sp->sct_item[I_UW] = uw; sp->sct_item[I_MILIT] = n; -- 2.43.0