(sector_mcost): New, simpler sector mobility cost formula. The cost

is a linear function of sector efficiency, with cost at 0% given by
dchstr member d_mcst and cost at 100% given by d_emcst.  The latter
used to be d_mcst - 1.  Mountain cost is no longer a special case.
Road infrastructure now reduces cost up to 90%, linear in road
efficiency (used to be close to that, but non-linear).  Same for rail
infrastructure, but 99%.  Double land unit minimum cost to 0.02.
Change land unit cost penalty in newly taken land to an extra 0.2
instead of a minimum of 0.2.
(dchrstr): New member d_emcst.  sector.config updated, with some
changes: cost of mountain now ranges from 2.4 to 1.2 instead of 2.174
to 1.304, wildernes 0.4 instead of 0.6 to 0.4, highway, bridge head,
bridge span and tower from 0.4 to 0.001 instead of 0.2 to 0.001.
While I'm at it, make bridge head match highway stats (dstr and value
reduced).
(show_sect_stats): Show d_emcst.
(dchr_ca): New selector emcst for d_emcst.
This commit is contained in:
Markus Armbruster 2006-06-15 21:12:53 +00:00
parent 89022fbc42
commit 083003ad82
5 changed files with 63 additions and 59 deletions

View file

@ -100,7 +100,7 @@ struct dchrstr {
char d_mnem; /* map symbol */
int d_prd; /* product type */
int d_peffic; /* process efficiency, in percent */
int d_mcst; /* movement cost */
int d_mcst, d_emcst; /* movement cost at 0 and 100% eff */
d_navigation d_nav; /* navigation capability */
i_packing d_pkg; /* type of packaging in these sects */
float d_ostr; /* offensive strength */

View file

@ -43,34 +43,37 @@
double
sector_mcost(struct sctstr *sp, int mobtype)
{
double d;
double base, cost;
d = dchr[sp->sct_type].d_mcst;
if (d <= 0)
base = dchr[sp->sct_type].d_mcst;
if (base <= 0)
return -1.0;
/* linear function in eff, d_mcst at 0%, d_emcst at 100% */
base += (dchr[sp->sct_type].d_emcst - base) * sp->sct_effic / 100;
base /= 5;
if (CANT_HAPPEN(base < 0))
base = 0;
if (mobtype == MOB_MOVE || mobtype == MOB_MARCH) {
d = d / (1.0 + sp->sct_road / 122.0);
/* linear function in road, base at 0%, base/10 at 100% */
cost = base * (1.0 - 0.009 * sp->sct_road);
} else if (mobtype == MOB_RAIL) {
if (sp->sct_rail <= 0)
return -1.0;
d = d / (1.0 + sp->sct_rail / 100.0);
/* linear function in rail, base at 0%, base/100 at 100% */
cost = base * (1.0 - 0.0099 * sp->sct_rail);
} else
CANT_REACH();
if (d < 1.0)
d = 1.0;
if (dchr[sp->sct_type].d_mcst < 25)
d = (d * 100.0 - sp->sct_effic) / 500.0;
else
d = (d * 10.0 - sp->sct_effic) / 115;
if (CANT_HAPPEN(cost < 0))
cost = 0;
if (mobtype == MOB_MOVE)
return MAX(d, 0.001);
if (sp->sct_own != sp->sct_oldown && sp->sct_mobil <= 0
&& mobtype != MOB_RAIL)
return MAX(d, 0.2);
return MAX(d, 0.01);
return MAX(cost, 0.001);
if (sp->sct_own != sp->sct_oldown && sp->sct_mobil <= 0)
/* slow down land units in newly taken sectors */
return cost + 0.2;
return MAX(cost, 0.02);
}
double

View file

@ -173,6 +173,7 @@ struct castr dchr_ca[] = {
{NSC_INT, 0, 0, offsetof(struct dchrstr, d_prd), "prd", EF_PRODUCT},
{NSC_INT, 0, 0, offsetof(struct dchrstr, d_peffic), "peffic", EF_BAD},
{NSC_INT, 0, 0, offsetof(struct dchrstr, d_mcst), "mcst", EF_BAD},
{NSC_INT, 0, 0, offsetof(struct dchrstr, d_emcst), "emcst", EF_BAD},
{NSC_SITYPE(d_navigation), 0, 0, offsetof(struct dchrstr, d_nav), "nav",
EF_SECTOR_NAVIGATION},
{NSC_SITYPE(i_packing), 0, 0, offsetof(struct dchrstr, d_pkg), "pkg",

View file

@ -56,41 +56,41 @@
# econfig key custom_tables.
config sect-chr
uid mnem prd peff mcst nav pkg ostr dstr val cost bui lcm hcm maxp name
0 "." -1 0 0 sea norm 0.0 0.0 0 -1 0 0 0 0 "sea"
1 "^" dust 75 25 land norm 1.0 4.0 5 -1 1 0 0 100 "mountain"
2 "s" -1 0 0 land norm 0.0 99.0 127 -1 0 0 0 1000 "sanctuary"
3 "\134" -1 0 0 land norm 0.0 99.0 0 -1 0 0 0 0 "wasteland"
4 "-" -1 0 3 land norm 1.0 2.0 1 0 0 0 0 1000 "wilderness"
uid mnem prd peff mcst emcs nav pkg ostr dstr val cost bui lcm hcm maxp name
0 "." -1 0 0 -1 sea norm 0.0 0.0 0 -1 0 0 0 0 "sea"
1 "^" dust 75 12 6 land norm 1.0 4.0 5 -1 1 0 0 100 "mountain"
2 "s" -1 0 0 -1 land norm 0.0 99.0 127 -1 0 0 0 1000 "sanctuary"
3 "\134" -1 0 0 -1 land norm 0.0 99.0 0 -1 0 0 0 0 "wasteland"
4 "-" -1 0 2 2 land norm 1.0 2.0 1 0 0 0 0 1000 "wilderness"
# Uncomment one of the following two. The second one is for big cities.
5 "c" -1 0 2 land norm 1.0 2.0 30 0 1 0 0 1000 "capital"
# 5 "c" -1 0 2 cana urba 1.0 2.0 30 0 10 1 2 1000 "city"
6 "u" rad 100 2 land norm 1.0 2.0 15 0 1 0 0 1000 "uranium mine"
7 "p" hap 100 2 land norm 1.0 1.5 5 0 1 0 0 1000 "park"
8 "d" gun 100 2 land norm 1.0 1.5 7 0 1 0 0 1000 "defense plant"
9 "i" sh 100 2 land norm 1.0 1.5 6 0 1 0 0 1000 "shell industry"
10 "m" iron 100 2 land norm 1.0 2.0 5 0 1 0 0 1000 "mine"
11 "g" dust 100 2 land norm 1.0 2.0 8 0 1 0 0 1000 "gold mine"
12 "h" -1 0 2 harb ware 1.0 1.5 12 0 1 0 0 1000 "harbor"
13 "w" -1 0 2 land ware 1.0 1.5 7 0 1 0 0 1000 "warehouse"
14 "*" -1 0 2 land norm 1.0 1.25 12 0 1 0 0 1000 "airfield"
15 "a" food 900 2 land norm 1.0 1.5 2 0 1 0 0 1000 "agribusiness"
16 "o" oil 100 2 land norm 1.0 1.5 5 0 1 0 0 1000 "oil field"
17 "j" lcm 100 2 land norm 1.0 1.5 3 0 1 0 0 1000 "light manufacturing"
18 "k" hcm 100 2 land norm 1.0 1.5 4 0 1 0 0 1000 "heavy manufacturing"
19 "f" -1 0 2 land norm 2.0 4.0 10 0 5 0 1 1000 "fortress"
20 "t" tech 100 2 land norm 1.0 1.5 10 0 1 0 0 1000 "technical center"
21 "r" med 100 2 land norm 1.0 1.5 9 0 1 0 0 1000 "research lab"
22 "n" -1 0 2 land norm 1.0 2.0 10 0 1 0 0 1000 "nuclear plant"
23 "l" edu 100 2 land norm 1.0 1.5 4 0 1 0 0 1000 "library/school"
24 "+" -1 0 1 land norm 1.0 1.0 3 0 1 0 0 1000 "highway"
25 ")" -1 0 2 land norm 1.0 1.5 4 0 1 0 0 1000 "radar installation"
26 "!" -1 0 2 land norm 1.0 1.5 12 0 1 0 0 1000 "headquarters"
27 "#" -1 0 1 land norm 1.0 1.5 4 0 1 0 0 1000 "bridge head"
28 "=" -1 0 1 brid norm 1.0 1.0 5 -1 1 0 0 100 "bridge span"
29 "b" bars 100 2 land bank 1.0 2.25 10 0 1 0 0 1000 "bank"
30 "%" pet 1000 2 land norm 1.0 1.5 2 0 1 0 0 1000 "refinery"
31 "e" -1 0 2 land norm 1.0 2.0 7 0 1 0 0 1000 "enlistment center"
32 "~" -1 0 2 land norm 1.0 1.5 1 -1 1 0 0 100 "plains"
33 "@" -1 0 1 land norm 1.0 1.5 4 -1 1 0 0 100 "bridge tower"
5 "c" -1 0 2 1 land norm 1.0 2.0 30 0 1 0 0 1000 "capital"
# 5 "c" -1 0 2 1 cana urba 1.0 2.0 30 0 10 1 2 1000 "city"
6 "u" rad 100 2 1 land norm 1.0 2.0 15 0 1 0 0 1000 "uranium mine"
7 "p" hap 100 2 1 land norm 1.0 1.5 5 0 1 0 0 1000 "park"
8 "d" gun 100 2 1 land norm 1.0 1.5 7 0 1 0 0 1000 "defense plant"
9 "i" sh 100 2 1 land norm 1.0 1.5 6 0 1 0 0 1000 "shell industry"
10 "m" iron 100 2 1 land norm 1.0 2.0 5 0 1 0 0 1000 "mine"
11 "g" dust 100 2 1 land norm 1.0 2.0 8 0 1 0 0 1000 "gold mine"
12 "h" -1 0 2 1 harb ware 1.0 1.5 12 0 1 0 0 1000 "harbor"
13 "w" -1 0 2 1 land ware 1.0 1.5 7 0 1 0 0 1000 "warehouse"
14 "*" -1 0 2 1 land norm 1.0 1.25 12 0 1 0 0 1000 "airfield"
15 "a" food 900 2 1 land norm 1.0 1.5 2 0 1 0 0 1000 "agribusiness"
16 "o" oil 100 2 1 land norm 1.0 1.5 5 0 1 0 0 1000 "oil field"
17 "j" lcm 100 2 1 land norm 1.0 1.5 3 0 1 0 0 1000 "light manufacturing"
18 "k" hcm 100 2 1 land norm 1.0 1.5 4 0 1 0 0 1000 "heavy manufacturing"
19 "f" -1 0 2 1 land norm 2.0 4.0 10 0 5 0 1 1000 "fortress"
20 "t" tech 100 2 1 land norm 1.0 1.5 10 0 1 0 0 1000 "technical center"
21 "r" med 100 2 1 land norm 1.0 1.5 9 0 1 0 0 1000 "research lab"
22 "n" -1 0 2 1 land norm 1.0 2.0 10 0 1 0 0 1000 "nuclear plant"
23 "l" edu 100 2 1 land norm 1.0 1.5 4 0 1 0 0 1000 "library/school"
24 "+" -1 0 1 0 land norm 1.0 1.0 3 0 1 0 0 1000 "highway"
25 ")" -1 0 2 1 land norm 1.0 1.5 4 0 1 0 0 1000 "radar installation"
26 "!" -1 0 2 1 land norm 1.0 1.5 12 0 1 0 0 1000 "headquarters"
27 "#" -1 0 1 0 land norm 1.0 1.0 3 0 1 0 0 1000 "bridge head"
28 "=" -1 0 1 0 brid norm 1.0 1.0 5 -1 1 0 0 100 "bridge span"
29 "b" bars 100 2 1 land bank 1.0 2.25 10 0 1 0 0 1000 "bank"
30 "%" pet 1000 2 1 land norm 1.0 1.5 2 0 1 0 0 1000 "refinery"
31 "e" -1 0 2 1 land norm 1.0 2.0 7 0 1 0 0 1000 "enlistment center"
32 "~" -1 0 2 1 land norm 1.0 1.5 1 -1 1 0 0 100 "plains"
33 "@" -1 0 1 0 land norm 1.0 1.5 4 -1 1 0 0 100 "bridge tower"
/config

View file

@ -535,14 +535,14 @@ show_sect_stats(int foo)
if (dchr[x].d_mnem == 0)
continue;
if (first) {
pr(" base max max -- packing bonus -- max\n");
pr(" sector type mcost off def mil uw civ bar other pop\n");
pr(" mob.cost max max -- packing bonus -- max\n");
pr(" sector type base min off def mil uw civ bar other pop\n");
first = 0;
}
pr("%c %-23s %3d %5.2f %5.2f %3d %3d %3d %3d %5d %5d\n",
pr("%c %-23s %2d %2d %5.2f %5.2f %3d %3d %3d %3d %5d %5d\n",
dchr[x].d_mnem, dchr[x].d_name,
dchr[x].d_mcst, dchr[x].d_ostr,
dchr[x].d_dstr,
dchr[x].d_mcst, dchr[x].d_emcst,
dchr[x].d_ostr, dchr[x].d_dstr,
ichr[I_MILIT].i_pkg[dchr[x].d_pkg],
ichr[I_UW].i_pkg[dchr[x].d_pkg],
ichr[I_CIVIL].i_pkg[dchr[x].d_pkg],