]> git.pond.sub.org Git - empserver/commitdiff
(total_work): Remove redundant conversion to int.
authorMarkus Armbruster <armbru@pond.sub.org>
Sun, 20 Feb 2005 19:36:41 +0000 (19:36 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Sun, 20 Feb 2005 19:36:41 +0000 (19:36 +0000)
(total_work): New parameter maxpop.  Callers changed.
(newe, prod): Use total_work().  Old code failed to limit military
workers, thus didn't match the update.
(do_feed): Simplify.

include/prototypes.h
src/lib/commands/newe.c
src/lib/commands/prod.c
src/lib/update/human.c
src/lib/update/populace.c
src/lib/update/ship.c

index 5caf84045cc052a51e011d6ddf27f392c8120e8d..e001a6c284e778d23a25fba15569c7537944a109 100644 (file)
@@ -774,8 +774,7 @@ extern int plague_people(struct natstr *, short *, int *, int *, int);
 extern int prod_plane(int, int, int *, int);
 /* populace.c */
 extern void populace(struct natstr *, register struct sctstr *, int);
 extern int prod_plane(int, int, int *, int);
 /* populace.c */
 extern void populace(struct natstr *, register struct sctstr *, int);
-extern int total_work(register int, register int, register int,
-                     register int, register int);
+extern int total_work(int, int, int, int, int, int);
 /* prepare.c */
 extern void tax(struct sctstr *, struct natstr *, int, long *, int *,
                int *, int *);
 /* prepare.c */
 extern void tax(struct sctstr *, struct natstr *, int, long *, int *,
                int *, int *);
index 0b82d3ff84d1dedd2594dfc3508467b1950a9e88..ea7a083dbcbd7ddfea7ba0ef0b0a4a61d977d199 100644 (file)
@@ -71,14 +71,12 @@ newe(void)
            uws = (1.0 + uwbrate * etu_per_update) * sect.sct_item[I_UW];
            natp = getnatp(sect.sct_own);
            maxpop = max_pop(natp->nat_level[NAT_RLEV], &sect);
            uws = (1.0 + uwbrate * etu_per_update) * sect.sct_item[I_UW];
            natp = getnatp(sect.sct_own);
            maxpop = max_pop(natp->nat_level[NAT_RLEV], &sect);
-           civs = min(civs, maxpop);
-           uws = min(uws, maxpop);
            /* This isn't quite right, since research might rise/fall */
            /* during the update, but it's the best we can really do  */
            /* This isn't quite right, since research might rise/fall */
            /* during the update, but it's the best we can really do  */
-           wforce = (int)((civs * sect.sct_work) / 100.0
-                          + uws + sect.sct_item[I_MILIT] * 2 / 5.0);
-
-           work = new_work(&sect, wforce * etu_per_update / 100);
+           work = new_work(&sect,
+                           total_work(sect.sct_work, etu_per_update,
+                                      civs, sect.sct_item[I_MILIT], uws,
+                                      maxpop));
            bwork = work / 2;
 
            type = sect.sct_type;
            bwork = work / 2;
 
            type = sect.sct_type;
index 3e2f97d9e5b6532d3220b455a7dc46cbce219476..eb425ca21ce13a0d09b9aa52d8e927e8674e9bdb 100644 (file)
@@ -84,7 +84,6 @@ prod(void)
     int there;
     int unit_work;             /* sum of component amounts */
     int used;                  /* production w/infinite workforce */
     int there;
     int unit_work;             /* sum of component amounts */
     int used;                  /* production w/infinite workforce */
-    int wforce;
     i_type it;
     i_type vtype;
     u_char *resource;
     i_type it;
     i_type vtype;
     u_char *resource;
@@ -113,15 +112,12 @@ prod(void)
        uws = (1.0 + uwbrate * etu_per_update) * sect.sct_item[I_UW];
        natp = getnatp(sect.sct_own);
        maxpop = max_pop(natp->nat_level[NAT_RLEV], &sect);
        uws = (1.0 + uwbrate * etu_per_update) * sect.sct_item[I_UW];
        natp = getnatp(sect.sct_own);
        maxpop = max_pop(natp->nat_level[NAT_RLEV], &sect);
-       civs = min(civs, maxpop);
-       uws = min(uws, maxpop);
 
        /* This isn't quite right, since research might rise/fall */
        /* during the update, but it's the best we can really do  */
 
        /* This isn't quite right, since research might rise/fall */
        /* during the update, but it's the best we can really do  */
-       wforce = (int)(((double)civs * sect.sct_work) / 100.0
-                      + uws
-                      + sect.sct_item[I_MILIT] * 2.0 / 5.0);
-       work = new_work(&sect, wforce * etu_per_update / 100);
+       work = new_work(&sect,
+                       total_work(sect.sct_work, etu_per_update,
+                                  civs, sect.sct_item[I_MILIT], uws, maxpop));
        bwork = work / 2;
 
        if (sect.sct_off)
        bwork = work / 2;
 
        if (sect.sct_off)
@@ -146,13 +142,11 @@ prod(void)
                    natp = getnatp(sect.sct_own);
                    maxpop = max_population(natp->nat_level[NAT_RLEV],
                                            type, eff);
                    natp = getnatp(sect.sct_own);
                    maxpop = max_population(natp->nat_level[NAT_RLEV],
                                            type, eff);
-                   civs = min(civs, maxpop);
-                   uws = min(uws, maxpop);
-                   wforce = (int)(((double)civs * sect.sct_work) / 100.0
-                                  + uws
-                                  + sect.sct_item[I_MILIT] * 2 / 5.0);
-                   work = etu_per_update * wforce / 100;
-                   bwork = min((int)(work / 2), bwork);
+                   work = new_work(&sect,
+                                   total_work(sect.sct_work, etu_per_update,
+                                              civs, sect.sct_item[I_MILIT],
+                                              uws, maxpop));
+                   bwork = min(work / 2, bwork);
                }
            }
            twork = 100 - eff;
                }
            }
            twork = 100 - eff;
index a06d34ef43f69cec5b4ad18b65ee20c0ca656f8b..ae4c752f3296559980fda8f8c3f7d58a6fe4cfdf 100644 (file)
@@ -65,19 +65,17 @@ do_feed(struct sctstr *sp, struct natstr *np, short *vec,
     int people;
     int work_avail;
     int starved, sctwork;
     int people;
     int work_avail;
     int starved, sctwork;
-    int needed, dummy;
-    int civvies, uws;
-    int mil;
+    int needed;
     int maxpop;
 
     /* grow people & stuff */
     sctwork = sp->sct_work;
 
     maxpop = max_pop(np->nat_level[NAT_RLEV], sp);
     int maxpop;
 
     /* grow people & stuff */
     sctwork = sp->sct_work;
 
     maxpop = max_pop(np->nat_level[NAT_RLEV], sp);
-    civvies = (vec[I_CIVIL] > maxpop) ? maxpop : vec[I_CIVIL];
-    uws = (vec[I_UW] > maxpop) ? maxpop : vec[I_UW];
-    mil = (vec[I_MILIT] > maxpop) ? maxpop : vec[I_MILIT];
-    work_avail = new_work(sp, total_work(sctwork, etu, civvies, mil, uws));
+    work_avail = new_work(sp,
+                         total_work(sctwork, etu,
+                                    vec[I_CIVIL], vec[I_MILIT], vec[I_UW],
+                                    maxpop));
 
     people = vec[I_CIVIL] + vec[I_MILIT] + vec[I_UW];
     if (sp->sct_type != SCT_SANCT) {
 
     people = vec[I_CIVIL] + vec[I_MILIT] + vec[I_UW];
     if (sp->sct_type != SCT_SANCT) {
@@ -126,7 +124,7 @@ do_feed(struct sctstr *sp, struct natstr *np, short *vec,
                sctwork = 100;
            if (!player->simulation)
                sp->sct_work = sctwork;
                sctwork = 100;
            if (!player->simulation)
                sp->sct_work = sctwork;
-           dummy = grow_people(sp, etu, np, &work_avail, sctwork, vec);
+           grow_people(sp, etu, np, &work_avail, sctwork, vec);
        }
     } else
        sctwork = sp->sct_work = 100;
        }
     } else
        sctwork = sp->sct_work = 100;
@@ -307,7 +305,7 @@ grow_people(struct sctstr *sp, int etu,
      */
     if (opt_NOFOOD == 0 && (newciv || newuw))
        vec[I_FOOD] -= roundavg((newciv + newuw) * babyeat);
      */
     if (opt_NOFOOD == 0 && (newciv || newuw))
        vec[I_FOOD] -= roundavg((newciv + newuw) * babyeat);
-    *workp += total_work(sctwork, etu, newciv, 0, newuw);
+    *workp += total_work(sctwork, etu, newciv, 0, newuw, ITEM_MAX);
     return newciv + newuw;
 }
 
     return newciv + newuw;
 }
 
index bbc8100b853cff7eef413d02dfb566318855ebbe..987362daddf35d776c4e092a76fa907f499375f7 100644 (file)
@@ -131,9 +131,14 @@ populace(struct natstr *np, struct sctstr *sp, int etu)
 }
 
 int
 }
 
 int
-total_work(int sctwork, int etu, int civil,
-          int milit, int uw)
+total_work(int sctwork, int etu, int civil, int milit, int uw, int maxpop)
 {
 {
-    return ((int)((((civil * sctwork) / 100.0 +
-                   (milit * 2 / 5.0) + uw)) * etu) / 100);
+    if (civil > maxpop)
+       civil = maxpop;
+    if (milit > maxpop)
+       milit = maxpop;
+    if (uw > maxpop)
+       uw = maxpop;
+
+    return (civil * sctwork / 100.0 + milit * 0.4 + uw) * etu / 100.0;
 }
 }
index dedd663442d8ea557f5bc677f39fa35ffe66bc88..0db3d727922d569af6774e859c66cee9266ed6da 100644 (file)
@@ -172,7 +172,8 @@ upd_ship(struct shpstr *sp, int etus,
                oil_gained = roundavg(total_work(100, etus,
                                                 sp->shp_item[I_CIVIL],
                                                 sp->shp_item[I_MILIT],
                oil_gained = roundavg(total_work(100, etus,
                                                 sp->shp_item[I_CIVIL],
                                                 sp->shp_item[I_MILIT],
-                                                sp->shp_item[I_UW])
+                                                sp->shp_item[I_UW],
+                                                ITEM_MAX)
                                      * (double)sp->shp_effic / 100.0
                                      * (double)sectp->sct_oil / 100.0
                                      * prod_eff(product, sp->shp_tech));
                                      * (double)sp->shp_effic / 100.0
                                      * (double)sectp->sct_oil / 100.0
                                      * prod_eff(product, sp->shp_tech));
@@ -190,13 +191,15 @@ upd_ship(struct shpstr *sp, int etus,
            }
            if ((mp->m_flags & M_FOOD) && sectp->sct_type == SCT_WATER) {
                product = &pchr[P_FOOD];
            }
            if ((mp->m_flags & M_FOOD) && sectp->sct_type == SCT_WATER) {
                product = &pchr[P_FOOD];
-               sp->shp_item[I_FOOD] += roundavg(total_work(100, etus,
-                                                           sp->shp_item[I_CIVIL],
-                                                           sp->shp_item[I_MILIT],
-                                                           sp->shp_item[I_UW])
-                                                * (double)sp->shp_effic / 100.0
-                                                * (double)sectp->sct_fertil / 100.0
-                                                * prod_eff(product, sp->shp_tech));
+               sp->shp_item[I_FOOD]
+                   += roundavg(total_work(100, etus,
+                                          sp->shp_item[I_CIVIL],
+                                          sp->shp_item[I_MILIT],
+                                          sp->shp_item[I_UW],
+                                          ITEM_MAX)
+                               * sp->shp_effic / 100.0
+                               * sectp->sct_fertil / 100.0
+                               * prod_eff(product, sp->shp_tech));
            }
            if ((n = feed_ship(sp, etus, &needed, 1)) > 0) {
                wu(0, sp->shp_own, "%d starved on %s\n", n, prship(sp));
            }
            if ((n = feed_ship(sp, etus, &needed, 1)) > 0) {
                wu(0, sp->shp_own, "%d starved on %s\n", n, prship(sp));