diff --git a/src/lib/commands/prod.c b/src/lib/commands/prod.c index 16494b39..4f894cf3 100644 --- a/src/lib/commands/prod.c +++ b/src/lib/commands/prod.c @@ -87,7 +87,7 @@ prod(void) int wforce; i_type it; i_type vtype; - s_char *resource; + u_char *resource; s_char maxc[MAXPRCON][10]; s_char use[MAXPRCON][10]; int lcms, hcms; @@ -204,7 +204,7 @@ prod(void) goto is_enlist; if (pp->p_nrndx != 0) { unit_work++; - resource = ((s_char *)§) + pp->p_nrndx; + resource = (u_char *)§ + pp->p_nrndx; p_e = (*resource * p_e) / 100.0; } /* diff --git a/src/lib/update/produce.c b/src/lib/update/produce.c index ee35f74a..6a69f2e2 100644 --- a/src/lib/update/produce.c +++ b/src/lib/update/produce.c @@ -57,7 +57,7 @@ produce(struct natstr *np, struct sctstr *sp, short *vec, int work, struct pchrstr *product; double p_e; double prodeff; - s_char *resource; + u_char *resource; double output; int actual; int unit_work; @@ -82,7 +82,7 @@ produce(struct natstr *np, struct sctstr *sp, short *vec, int work, p_e = neweff / 100.0; if (product->p_nrndx != 0) { unit_work++; - resource = ((s_char *)sp) + product->p_nrndx; + resource = (u_char *)sp + product->p_nrndx; p_e = (*resource * p_e) / 100.0; } /* diff --git a/src/lib/update/ship.c b/src/lib/update/ship.c index 68adce71..861304a1 100644 --- a/src/lib/update/ship.c +++ b/src/lib/update/ship.c @@ -121,6 +121,7 @@ upd_ship(struct shpstr *sp, int etus, int max_food; struct pchrstr *product; s_char *resource; + int dep; int n; int mult; int needed; @@ -180,9 +181,11 @@ upd_ship(struct shpstr *sp, int etus, oil_gained = max_oil - sp->shp_item[I_OIL]; sp->shp_item[I_OIL] += oil_gained; if (product->p_nrdep != 0 && oil_gained > 0) { - resource = ((s_char *)sectp) + product->p_nrndx; - *resource -= roundavg(oil_gained * - product->p_nrdep / 100.0); + resource = (u_char *)sectp + product->p_nrndx; + dep = roundavg(oil_gained * product->p_nrdep / 100.0); + if (CANT_HAPPEN(dep > *resource)) + dep = *resource; + *resource -= dep; } } if ((mp->m_flags & M_FOOD) && sectp->sct_type == SCT_WATER) {