]> git.pond.sub.org Git - empserver/commitdiff
config: Define infra build cost and mobility use per 100%
authorMarkus Armbruster <armbru@pond.sub.org>
Wed, 17 Aug 2016 18:00:02 +0000 (20:00 +0200)
committerMarkus Armbruster <armbru@pond.sub.org>
Sun, 6 Aug 2017 18:09:19 +0000 (20:09 +0200)
Infrastructure build cost is defined by infra column dcost (struct
sctintrins member in_dcost).  It's the cost per point of efficiency.
In contrast, sector and unit build cost is defined for 100%, by
sect-chr, ship-chr, plane-chr, land-chr, nuke-chr column cost.

Switch to build cost per 100%, for flexibility and consistency:
replace struct sctintrins member in_dcost by in_cost, and selector
dcost by cost.

With cost values that aren't multiple of 100, the build cost may have
to be rounded.  Do this exactly like we round sector build cost: the
amount is limited to money * 100 / cost rounded down, but the money
charged is actual amount * money / 100 rounded randomly.

Do the same for mobility use: replace struct sctintrins member
in_mcost by in_bmobil, and selector mcost by bmobil, with similar
rounding.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
include/sect.h
src/lib/commands/improve.c
src/lib/common/nsc.c
src/lib/global/infra.config
src/lib/subs/show.c
tests/empdump/xundump-errors/fld-conststr
tests/empdump/xundump-errors/ftr-mal2
tests/version/journal.log

index 06c799589d25a44ba6012c154b8e941418d9d155..a02d21d992216f47f018109b0a169a7c029cea27 100644 (file)
@@ -218,8 +218,8 @@ struct sctintrins {
     char *in_name;
     unsigned char in_lcms;     /* construction materials */
     unsigned char in_hcms;
-    unsigned char in_dcost;    /* dollars */
-    unsigned char in_mcost;    /* mobility */
+    short in_bmobil;           /* mobility to build 100% */
+    int in_cost;               /* cost to build 100% */
     unsigned char in_enable;   /* enabled iff non-zero */
 };
 
index ccf960db3e4f285fa61b1b7e959b0a22536ca6ea..b84b7d4a3aa7e1921a6d34cb20766ac03448fbfe 100644 (file)
  *
  *  Known contributors to this file:
  *     Steve McClure, 1996-2000
+ *     Markus Armbruster, 2004-2016
  */
 
 #include <config.h>
 
+#include "chance.h"
 #include "commands.h"
 
 int
@@ -47,12 +49,10 @@ improve(void)
     int type;
     int value;
     int ovalue;
-    int maxup;
+    int maxup, lim;
     struct natstr *natp;
     int lneeded;
     int hneeded;
-    int mneeded;
-    int dneeded;
     int wanted;
 
     p = getstarg(player->argp[1],
@@ -124,33 +124,32 @@ improve(void)
                continue;
            }
        }
-       mneeded = incp->in_mcost * maxup;
-       if ((sect.sct_mobil - 1) < mneeded) {
-           mneeded = sect.sct_mobil - 1;
-           if (mneeded < 0)
-               mneeded = 0;
-           maxup = mneeded / incp->in_mcost;
-           if (maxup <= 0) {
-               pr("Not enough mobility in %s\n",
-                  xyas(sect.sct_x, sect.sct_y, player->cnum));
-               continue;
-           }
+
+       lim = (sect. sct_mobil - 1) * 100 / incp->in_bmobil;
+       if (lim <= 0) {
+           pr("Not enough mobility in %s\n",
+              xyas(sect.sct_x, sect.sct_y, player->cnum));
+           continue;
        }
-       dneeded = incp->in_dcost * maxup;
+       if (maxup > lim)
+           maxup = lim;
+
        natp = getnatp(player->cnum);
-       if (player->dolcost + dneeded > natp->nat_money) {
+       lim = (natp->nat_money - player->dolcost) * 100 / incp->in_cost;
+       if (lim <= 0) {
            pr("Not enough money left to improve %s by %d%%\n",
               xyas(sect.sct_x, sect.sct_y, player->cnum), maxup);
            break;
        }
+       if (maxup > lim)
+           maxup = lim;
+
        lneeded = incp->in_lcms * maxup;
        hneeded = incp->in_hcms * maxup;
-       mneeded = incp->in_mcost * maxup;
-       dneeded = incp->in_dcost * maxup;
-       player->dolcost += dneeded;
        sect.sct_item[I_LCM] -= lneeded;
        sect.sct_item[I_HCM] -= hneeded;
-       sect.sct_mobil -= mneeded;
+       sect.sct_mobil -= roundavg(maxup * incp->in_bmobil / 100.0);
+       player->dolcost += maxup * incp->in_cost / 100.0;
        ovalue = value;
        value += maxup;
        if (CANT_HAPPEN(value > 100))
index 507a86849bacda450e7e57af0d1c09f848112f62..98836286bc8dbc349686e5d971261100ea764502 100644 (file)
@@ -690,8 +690,8 @@ struct castr intrchr_ca[] = {
      CA_DUMP_CONST},
     {"lcms", fldoff(in_lcms), NSC_UCHAR, 0, NULL, EF_BAD, 0, CA_DUMP},
     {"hcms", fldoff(in_hcms), NSC_UCHAR, 0, NULL, EF_BAD, 0, CA_DUMP},
-    {"dcost", fldoff(in_dcost), NSC_UCHAR, 0, NULL, EF_BAD, 0, CA_DUMP},
-    {"mcost", fldoff(in_mcost), NSC_UCHAR, 0, NULL, EF_BAD, 0, CA_DUMP},
+    {"bmobil", fldoff(in_bmobil), NSC_SHORT, 0, NULL, EF_BAD, 0, CA_DUMP},
+    {"cost", fldoff(in_cost), NSC_INT, 0, NULL, EF_BAD, 0, CA_DUMP},
     {"enable", fldoff(in_enable), NSC_UCHAR, 0, NULL, EF_BAD, 0, CA_DUMP},
     {NULL, 0, NSC_NOTYPE, 0, NULL, EF_BAD, 0, CA_DUMP}
 #undef CURSTR
index 4f388dbee1dc21ae6cd69f659fb5ea9647f5fa56..3f76bfe9d4aa247952e2927ed41b2c1a9a923f59 100644 (file)
@@ -27,7 +27,7 @@
 #   infra.config: Infrastructure characteristics
 #
 #   Known contributors to this file:
-#      Markus Armbruster, 2006-2011
+#      Markus Armbruster, 2006-2016
 #
 #   Derived from sect.c; known contributors:
 #      Dave Pare, 1986
@@ -45,8 +45,8 @@
 # econfig key custom_tables.
 
 config infrastructure
-name             lcm hcm dcost mcost enab
-"road network"     2   2     2     1   1
-"rail network"     1   1     1     1   1
-"defense factor"   1   1     1     1   0
+name             lcm hcm bmob cost enab
+"road network"     2   2  100  200    1
+"rail network"     1   1  100  100    1
+"defense factor"   1   1  100  100    0
 /config
index 0c660db7ebd22a2c325231cf75520b71d4c5db04..45e9126132a9c1af0709312cd60f5a51db961e96 100644 (file)
@@ -430,7 +430,7 @@ show_sect_build(int foo)
        pr("%-23.23s  %4d %4d %5d %5d\n",
           intrchr[i].in_name,
           intrchr[i].in_lcms * 100, intrchr[i].in_hcms * 100,
-          intrchr[i].in_mcost * 100, intrchr[i].in_dcost * 100);
+          intrchr[i].in_bmobil, intrchr[i].in_cost);
        first = 0;
     }
 }
index dfbbafd2af296e038ce37ea29e099963ba9189bc..787c1fd96709c7de2bbaf2212ccf4781f61d9fb5 100644 (file)
@@ -1,4 +1,4 @@
 config infrastructure
-name lcms hcms dcost mcost enable
+name lcms hcms bmobil cost enable
 "lala" 1 1 1 1 1
 # value for field 1 must be "road network"
index fa3ac45aaa6d2650944c5b6767bf9581c5304b59..700e0d91ce6bff5a22355f419d9ed4c541969319 100644 (file)
@@ -1,7 +1,7 @@
 config infrastructure
-name             lcm hcm dcost mcost enab
-"road network"     2   2     2     1   1
-"rail network"     1   1     1     1   1
-"defense factor"   1   1     1     1   0
+name             lcm hcm bmob cost enab
+"road network"     2   2  100  200    1
+"rail network"     1   1  100  100    1
+"defense factor"   1   1  100  100    0
 /con
 # malformed table footer
index c67f171a31fbbd8f75124fbb58e8b51642b25427..e3b2f1d2785bc9a33f80e5abb03290084bd7ebc5 100644 (file)
     Play#0 output Play#0 1 "name" 3 0 0 -1
     Play#0 output Play#0 1 "lcms" 1 0 0 -1
     Play#0 output Play#0 1 "hcms" 1 0 0 -1
-    Play#0 output Play#0 1 "dcost" 1 0 0 -1
-    Play#0 output Play#0 1 "mcost" 1 0 0 -1
+    Play#0 output Play#0 1 "bmobil" 1 0 0 -1
+    Play#0 output Play#0 1 "cost" 1 0 0 -1
     Play#0 output Play#0 1 "enable" 1 0 0 -1
     Play#0 output Play#0 1 /6
     Play#0 output Play#0 6 0 640
     Play#0 input xdump infrastructure *
     Play#0 command xdump
     Play#0 output Play#0 1 XDUMP infrastructure 0
-    Play#0 output Play#0 1 "road\\040network" 2 2 2 1 1
-    Play#0 output Play#0 1 "rail\\040network" 1 1 1 1 0
-    Play#0 output Play#0 1 "defense\\040factor" 1 1 1 1 0
+    Play#0 output Play#0 1 "road\\040network" 2 2 100 200 1
+    Play#0 output Play#0 1 "rail\\040network" 1 1 100 100 0
+    Play#0 output Play#0 1 "defense\\040factor" 1 1 100 100 0
     Play#0 output Play#0 1 /3
     Play#0 output Play#0 6 0 640
     Play#0 input xdump updates *
     Play#1 input xdump infrastructure *
     Play#1 command xdump
     Play#1 output Play#1 1 XDUMP infrastructure 0
-    Play#1 output Play#1 1 "road\\040network" 2 2 2 1 1
-    Play#1 output Play#1 1 "rail\\040network" 1 1 1 1 0
-    Play#1 output Play#1 1 "defense\\040factor" 1 1 1 1 0
+    Play#1 output Play#1 1 "road\\040network" 2 2 100 200 1
+    Play#1 output Play#1 1 "rail\\040network" 1 1 100 100 0
+    Play#1 output Play#1 1 "defense\\040factor" 1 1 100 100 0
     Play#1 output Play#1 1 /3
     Play#1 output Play#1 6 0 0
     Play#1 input xdump updates *