diff --git a/src/lib/commands/deli.c b/src/lib/commands/deli.c index f589dfff..6328e7e0 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 437d2f0a..74fbb71c 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 849959c8..221286f2 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 5f550024..e6f27d82 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;