From c8b51ec1a81833df35d1776ad1ae30695faca297 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Wed, 17 Aug 2016 20:00:02 +0200 Subject: [PATCH] config: Define infra build cost and mobility use per 100% 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 --- include/sect.h | 4 +-- src/lib/commands/improve.c | 39 +++++++++++------------ src/lib/common/nsc.c | 4 +-- src/lib/global/infra.config | 10 +++--- src/lib/subs/show.c | 2 +- tests/empdump/xundump-errors/fld-conststr | 2 +- tests/empdump/xundump-errors/ftr-mal2 | 8 ++--- tests/version/journal.log | 16 +++++----- 8 files changed, 42 insertions(+), 43 deletions(-) diff --git a/include/sect.h b/include/sect.h index 06c79958..a02d21d9 100644 --- a/include/sect.h +++ b/include/sect.h @@ -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 */ }; diff --git a/src/lib/commands/improve.c b/src/lib/commands/improve.c index ccf960db..b84b7d4a 100644 --- a/src/lib/commands/improve.c +++ b/src/lib/commands/improve.c @@ -28,10 +28,12 @@ * * Known contributors to this file: * Steve McClure, 1996-2000 + * Markus Armbruster, 2004-2016 */ #include +#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)) diff --git a/src/lib/common/nsc.c b/src/lib/common/nsc.c index 507a8684..98836286 100644 --- a/src/lib/common/nsc.c +++ b/src/lib/common/nsc.c @@ -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 diff --git a/src/lib/global/infra.config b/src/lib/global/infra.config index 4f388dbe..3f76bfe9 100644 --- a/src/lib/global/infra.config +++ b/src/lib/global/infra.config @@ -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 diff --git a/src/lib/subs/show.c b/src/lib/subs/show.c index 0c660db7..45e91261 100644 --- a/src/lib/subs/show.c +++ b/src/lib/subs/show.c @@ -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; } } diff --git a/tests/empdump/xundump-errors/fld-conststr b/tests/empdump/xundump-errors/fld-conststr index dfbbafd2..787c1fd9 100644 --- a/tests/empdump/xundump-errors/fld-conststr +++ b/tests/empdump/xundump-errors/fld-conststr @@ -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" diff --git a/tests/empdump/xundump-errors/ftr-mal2 b/tests/empdump/xundump-errors/ftr-mal2 index fa3ac45a..700e0d91 100644 --- a/tests/empdump/xundump-errors/ftr-mal2 +++ b/tests/empdump/xundump-errors/ftr-mal2 @@ -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 diff --git a/tests/version/journal.log b/tests/version/journal.log index c67f171a..e3b2f1d2 100644 --- a/tests/version/journal.log +++ b/tests/version/journal.log @@ -1196,8 +1196,8 @@ 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 @@ -1801,9 +1801,9 @@ 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 * @@ -2451,9 +2451,9 @@ 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 *