Commit graph

560 commits

Author SHA1 Message Date
4a714a37da production: Use update code instead of duplicating it
prod() duplicates the update's sector production code, except it
computes both output with present materials ("make" output) and output
not limited by lack of materials or production backlog ("max" output).
It also rounds materials consumed up instead of randomly.

Factor prod_output() out of produce() for reuse by prod().  prod()
runs it twice: once for "make" output and once for "max" output.

Test output changes are due to random rounding.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-08-06 20:08:29 +02:00
d9e4677926 collect: Derive collection value from power value
The collection value of a sector is

    sector value = sector type value * (sector efficiency + 100)
                 + sum of item values
    item value = item type value * amount

The sector and item type values are configurable.

The item type collect values aren't too far off the power values:

    uid mnem  pow val pow/val
      0  "c"   50   1   50
      1  "m"  100   0  inf
      2  "s"  125   5   25
      3  "g"  950  60   15.8
      4  "p"    7   4    1.75
      5  "i"   10   2    5
      6  "d"  200  20   10
      7  "b" 2500 280    8.9
      8  "f"    0   0  NaN
      9  "o"   50   8    6.25
     10  "l"   20   2   10
     11  "h"   40   4   10
     12  "u"   50   1   50
     13  "r"   50 150    0.33

The power value is very roughly ten times the collect value, except
for civilians and uw it's 50, for rads its 0.33, and military are free
to collect.  The latter two make no sense.

Replace the item type collect value by the power value / 50 for
people, and by the power value / 10 for everything else.  This makes
collecting military, shells, guns and uw more expensive, and petrol,
bars, iron, oil and rads cheaper.

The sector type values are basically arbitrary.  For instance, an iron
mine costs five times as much as a wilderness, but a third of an
uranium mine, regardless of actual resource contents.

Replace this by different arbitrary values:

    sector value = (item value of materials necessary to build it
                    + build cost) * efficiency / 100
		 + sector type maximum population
                 + sum of item values

Some sector types become cheaper, some more expensive.

Drop sect-chr and item selector value.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-08-06 19:59:59 +02:00
6ec936a8d6 collect: Don't permit confiscation of active capital
The whole idea of a sector acquiescing to takeover by lawyers waving
loan documents "proving" it's rightfully theirs is pretty
preposterous.  But a capital giving itself up that way (and then
paying out half the nation's treasury on top) beggars belief.
Disallow it.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-08-06 19:59:59 +02:00
b422a282c5 collect: Don't disclose sector value when it exceeds loan
When collect refuses to confiscate a sector because it's value exceeds
the amount owed, it still tells the player the exact value.  Don't.
Don't give the player something for nothing.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-08-06 19:59:59 +02:00
cb32c60294 power: Include sector maximum population in power factor
Replace the term

    power value of materials and cost + 9

by

    power value of materials and cost + maximum population / 1000 * 8 + 1

The value of ordinary sectors (maximum population 1000) doesn't
change.  The stock game's mountains, plains and bridges are now worth
only 28% as much.

This concludes my tweaking of the power factor for now.  I tested it
with data from a real game (Hvy Metal II).  The effect is small: #5
overtakes #4, and the lead of #1 over #2 and #3 shrinks some.  Closer
analysis finds the following reasons.  The game had very expensive big
cities.  Valuing them correctly gives countries with many cities a
noticeable boost.  Planes are worth less than before, but the
difference is much larger for cheap planes.  Big piles of construction
materials are worth much less, and shells, guns and bars are worth
more.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-08-06 19:59:58 +02:00
e8451c7343 power: Include sector materials and cost in power factor
Building sectors can make you rate *lower* on the power chart, because
the power factor treats all sectors the same, regardless of build
materials and cost.

To avoid that, replace the term

   efficiency / 10.0

by

   (power value of materials + power value of cost + 9)
   * efficiency/100.0

The value of ordinary sectors, which take no materials and cost $100,
doesn't change.  The stock game's fortress is now worth 80% more due
to its materials and higher cost.  The stock game's wilderness is
worth 10% less, because it costs nothing.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-08-06 19:59:58 +02:00
16bf0d28b2 config: Add sect-chr flags, replace cost by flag "deity"
Give sector types capability flags (dchrstr member d_flags), like
ship, plane, land unit and nuke types have.

Member d_cost is effectively a flag since the previous commit.
Replace it by capability flag "deity".  This is an xdump compatibility
break.  To provide the customary grace period, we'd have make selector
cost virtual instead, and deprecate it.  But we're not bothering with
maintaining xdump compatibility in this release.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-08-06 19:59:58 +02:00
ba2795fbf7 designate: Drop support for designate costing money
Chainsaw 3 added the designate cost along with extra build cost and
materials, and used both to make fortresses expensive.  Unlike build
cost and materials, the cost to designate didn't pass the test of
time: it was set to zero in Empire 2.  Get rid of it.

sect-chr selector cost and struct dchrstr member d_cost have to stay,
because they're still used to configure whether a sector may be
designated by players (see commit 8d792e1).

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-08-06 19:59:58 +02:00
5635fc212f power: Include nukes in power factor, like other units
Building nukes makes you rate *lower* on the power chart, because the
power factor ignores nukes.  Fix that.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-08-06 19:59:55 +02:00
ea5c8a6598 power: Saner power for items, ships, planes and land units
Items, ships, planes and land units all contribute to the power
factor, which determines position on the power chart.

Items are worth

    amount * item value * (0.5 + nation tech level / 1000.0)

The item values aren't quite right: producing stuff can *hurt* your
position on the power chart.  Food, uw and rads are worth nothng.

Reduce the value of oil, and give rads the same value as oil.  Tweak
value of iron and oil products so that production's power change is
roughly zero around p.e. 0.9 (tech 110), except for construction
materials, where it's zero at p.e. 0.5 (tech 0).  Construction
materials become less valuable, shells, guns and petrol become more
valuable.  Increase value of bars to roughly match the other changes.
It may still be too low.  Halve the value of civilians, and give the
other half to uw.  Results:

            old     new     change
    civ      100     50   / 2
    mil      100    100
    shell     80    125   * 1.5625
    gun      400    950   * 2.375
    pet        2      7   * 3.5
    iron      10     10
    dust     200    200
    bar     1000   2500   * 2.5
    food       0      0
    oil      100     50   / 2
    lcm      100     20   / 5
    hcm      200     40   / 5
    uw         0     50   new
    rad        0     50   new

Ships, planes and land units are worth

    base value * effic/100.0 * (0.5 + unit tech level / 1000.0)

For ships and land units, the base value is

    lcm/5.0 + hcm/5.0

Build cost is ignored, but lcms are valued twice as much "loose" ones
(before this commit).  Therefore, building stuff can change your
position on the power chart in both directions, depending on the type
of build.

For planes, the base value is

    20 * (0.5 + nation tech level / 1000.0)

Build cost and materials are ignored, and tech is squared.  This
is plainly absurd.

Unify to

    (power value of money and materials to build) * effic/100.0

This formula is chosen so that building stuff doesn't change your
power factor.  Bonus: it doesn't assume anything about possible build
materials.

For ships and land units, factoring in build cost overcompensates the
discounted value of construction materials more often than not.

Noteworthy changes for the stock game:

    ship type          old     new    change
    ss   slave ship     20     5.8    * 0.29    largest decrease
    cs   cargo ship     20     7.8    * 0.39
    ts   trade ship     60    25.5    * 0.42
    frg  frigate        12     7.8    * 0.65
    bb   battleship     24    21.8    * 0.91
    cal  light carrier  22    30.4    * 1.38
    can  nuc carrier    30    84.6    * 2.82    largest increase

    land unit type     old     new    change
    hat  hvy artillery  12     9.6    * 0.8     largest decrease
    linf light infantry  2.4   3.32   * 1.38
    cav  cavalry         3     5.4    * 1.8
    inf  infantry        3     5.4    * 1.8
    lar  lt armor        3     6.4    * 2.13
    com  commando        3    15.4    * 5.13
    eng  engineer        3    30.4    * 10.13
    meng mech engineer   3    45.4    * 15.13   largest increase

For planes, the power value change depends on the type.  Below a
certain nation tech level, planes of this type become more valuable,
above less.

For the stock game, planes costing at most $1000 become less valuable
at any nation tech level that can build them, and planes costing at
least $1800 become more valuable at any practical tech level,
i.e. under 400.  Noteworthy planes:

    plane type                 new
    sam  Sea Sparrow           2.1              least valuable
    f2   P-51 Mustang          4.34
    lb   TBD-1 Devastator      5.92
    jf1  F-4 Phantom          10.6
    tr   C-56 Lodestar        10.78
    jt   C-141 Starlifter     15.86
    jhb  B-52 Strato-Fortress 33.54
    ss   KH-7 spysat          41.2              most valuable

The old value is a flat 12 at nation tech level 100, 15 at tech level
250, and 18 at tech level 400.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-08-06 19:59:55 +02:00
1307a3be6b show: Extend show item to show the power value
Also update "info power" to point to "show item" instead of the
formerly hardcoded values.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-08-06 19:59:55 +02:00
5917841bfc power: Use ship, plane, land unit tech instead of nation's
Actual abilities of ships, planes and land units depend almost
completely on the individual unit's tech, not the nation's tech.  The
power factor should reflect that.

The power value of a unit is of the form

    base value * (20 + nation's tech level) / 500

Change it to

    base value * (20 + unit's tech level) / 500

Note that a plane's base value still depends on the nation's tech
level.  This commit merely makes the absurdity stand out a bit more.
To be fixed later.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-08-06 14:05:31 +02:00
d48851c0ac power: Saner power value for tech, particularly at low tech
In the old times, power didn't consider tech at all.  Chainsaw's
option NEWPOWER (mandatory since v4.2.14, on by default before)
changed this dramatically: the power factor gets multiplied by
max(1, tech) / 500.

In the early game, small absolute tech differences yield large power
factor differences.  For instance, if country A has tech level 10, and
B has 5, then A gets a factor two boost.

As the game progresses, tech differences between viable countries tend
to grow, but only slowly.  The influence on power diminishes.  For
instance, if C has tech level 270 and D has 240 (quite a respectable
tech lead), then C gets a modest 1.125x boost over D.

Change the factor to (20 + tech) / 500.  Now A's advantage is only
1.2, and C's is 1.115.

You might think that's rather low.  However, tech is not power unless
you project it, and then it manifests itself as sectors, population
and other stuff power counts.

The same tech term occurs in plane power, except with just tech
instead of max(1, tech) .  Change it there as well, for consistency.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-08-06 14:05:30 +02:00
84ab8ed09e info/power: Rewrite power formula for clarity
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-08-06 14:05:30 +02:00
7d689bd6a3 power: Drop the RES_POP factor
If option RES_POP is enabled, the power factor is multiplied by a
"research factor" of 1.0 + maxpop / 10000.0, where maxpop is the
maximum population of a mine sector.

Back when this code was written (Chainsaw 3), all sectors had the same
population limit, so using a mine sector was as good as any.  Since
then, it has become configurable, and the stock game has both sector
types with lower (mountains, plains) and with higher (cities)
population limits.

Space for people is worth considering for power, but multiplying total
power by a fudge factor based on the most common sector type's maximum
population is silly.  Drop it.

Adjusting each sector's value for maximum population would make more
sense, with and without RES_POP.  Perhaps later.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-08-06 14:05:30 +02:00
68c7c08a58 config: Make work to build units independently configurable
The work required for build and repairs is traditionally a function of
build materials: 20 + lcm + 2*hcm for ships, planes and land units,
and (lcm + 2*hcm + oil + rad)/5 for nukes.  Make it independently
configurable instead, via new ship-chr, plane-chr, land-chr, nuke-chr
selector bwork, backed by new struct mchrstr member m_bwork, struct
plchrstr member pl_bwork, struct lchrstr member l_bwork, struct
nchrstr member n_bwork.  Keep the required work exactly the same for
now.

Clients that compute work from materials need to be updated.  Easy,
since build work is now exposed in xdump.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-08-06 14:04:32 +02:00
177929e80f info/launch: Clean up description of satellites a bit
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-08-06 14:03:21 +02:00
bae3f5447e Update copyright notice
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-07-02 17:45:44 +02:00
feb894cf1e info/Nuke-types: Document show columns avail, res, abilities
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-12-05 12:41:16 +01:00
659957c40c info/Unit-types: Belatedly remove capability xlight
L_XLIGHT was replaced in commit e28c14f, v4.3.0.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-12-05 12:41:16 +01:00
c0b41650c5 info/Plane-types: Belatedly remove stealth and half-stealth
P_X and P_H were removed in commit 61233e4, v4.3.23.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-12-05 12:41:16 +01:00
6787049ae5 info/Ship-types: Belatedly remove capability spy
M_SPY was removed in commit 498d9fb, v4.3.0.  It never did anything.

Reported-by: Harald Katzer
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-12-05 12:41:16 +01:00
5010240995 info: Belatedly update for change of stop prefix to '!'
Commit eb1512d (v4.3.6) added the '=' if stopped before efficiency.
Commit 016249c (v4.3.6) changed it to '!' without updating info ship,
plane, land, nuke.

Reported-by: Harald Katzer
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-12-05 12:41:16 +01:00
b031770040 info/version: Update example to current output
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-12-05 12:41:16 +01:00
58a6e7270f info: Fix option NOMOBCOST misinformation
The cost of firing naval guns is 15 mobility with option NOMOBCOST
disabled.  Mobility.t is correct.

Fix Options.t not to claim submarines pay half the sector movement
cost when NOMOBCOST is enabled.

Fix fire.t not to claim ships pay half the sector movement cost when
NOMOBCOST is disabled.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-12-05 12:41:15 +01:00
00abc9616d info/Options: Nicer markup, more consistent format
Don't list options separately for major server versions.  It's only of
historical interest, which "info History" satisfies.

Make it a list (.L) instead of preformatted text (.nf).

Fix up so the option explanations are full sentences, starting with a
capital letter and ending with a period.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-12-05 12:41:15 +01:00
b1525ef272 info/Options: Belatedly remove SAIL
Missed in commit dc73207.

Reported-by: Harald Katzer
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-12-05 12:41:15 +01:00
00985535de Update change log timestamp for 4.3.33
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-05-20 20:20:40 +02:00
5b9b4c3c89 Update change log again for 4.3.33
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-05-14 09:49:12 +02:00
05fe8b771c info/History: Cover removal of Autonav, SAIL and TREATIES
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-05-14 09:48:35 +02:00
953ff83fb1 Update change log again for 4.3.33
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-03-13 07:07:03 +01:00
c869c868e2 tests/README: Cover info.ps and document .NA use for commands
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-03-08 12:44:02 +01:00
8ca51001f0 tests/README: Update for replacement of info/checklist.pl
Replaced by tests/info-test in commit 90eaf9d.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-03-08 12:42:00 +01:00
bb3618929a Update change log for 4.3.33
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-03-02 08:20:53 +01:00
f150d9cb9f info/fire: Drop misinformation on damage varying with gun size
Goes all the way back to Empire 1, and as far as I can tell was
misleading there already.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-03-02 08:20:53 +01:00
51f101df21 info/fire info/torpedo: Purge references to option MULTIFIRE
MULTIFIRE became non-optional in Chainsaw 3, more than two decades
ago.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-03-02 08:20:53 +01:00
bb6c974ef2 info/torpedo: Fix misinformation on submarine identification
Claims the victim of a torpedo attack gets told the attacking ship's
number.  This hasn't been the case for submarines since Empire 2.3.
Recent commits again reveal the attacking submarine's number, but only
when it gets hit by return fire.  Update info accordingly.

Reported-by: Neeraj Jain <thisisfranz@gmail.com>
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-03-02 08:20:52 +01:00
05671c69b4 info/torpedo: Cover return torpedoes, drop depth charge details
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-03-02 08:20:52 +01:00
148af51ab3 retreat lretreat: Deprecate pseudo-condition 'c'
It's redundant; retreat path 'h' cancels orders just fine.  Document
that instead.  'c' still works, and I don't plan to break it as long
as it doesn't get in the way, which seems unlikely.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-03-02 08:20:49 +01:00
482d54c953 retreat lretreat: Change query syntax to match mission
Optional arguments can save typing.  Mandatory arguments are more
easily discoverable: just run the command and answer its prompts.
Empire traditionally uses optional arguments only for expert features.
Consider mission:

    [0:640] Command : mission
    Ship, plane or land unit (p,sh,la)? s
    ship(s)? 0
    Mission (int, sup, osup, dsup, esc, res, air, query, clear)? int
    operations point? .
    frg  frigate Early Bird(#0) on an interdiction mission, centered on 21,-3, radius 0
    1 ship

Compare retreat:

    [0:638] Command : retreat
    ship(s)? 0
    shp#     ship type       x,y   fl path       as flt?  flags
       0 frg  frigate       21,-3
    1 ship

Arguments are not discoverable this way.

Change retreat to work like mission: make the second argument
mandatory, and if it's 'q', show retreat orders, else treat it as path
and ask for conditions:

    [0:637] Command : retreat
    ship(s)? 0
    Retreat path, or q to query? jj
    Retreat conditions ('?' to list available ones)? i
    shp#     ship type       x,y   fl path       as flt?  flags
       0 frg  frigate       21,-3     jj                  i
    1 ship

To reduce smart client and script breakage, keep retreat with one
argument working as before, but print a deprecation warning.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-03-02 08:20:49 +01:00
d5757a4735 info torpedo: Say "torpedo", not "torp"
Documentation and player output should use proper words.  "torp" ain't
one.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-03-02 08:20:49 +01:00
b14f5276ab Update copyright notice
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-02-28 16:21:34 +01:00
0b40a88a37 Update known contributors comments
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-02-28 16:21:34 +01:00
4e0d02b359 info/retreat info/lretreat: Fix and clean up
.SY claims all arguments are individually optional.  Fix that, and
clarify that omitting the optional arguments shows current orders.

Don't complicate syntax with <SECTS>, <SHIP/FLEET> covers sectors.

The two pages are identical apart from header and footer.  They
mention land units briefly, then explain ship retreat.  Lazy.  Drop
the land unit mention from "info retreat", and rewrite "info lretreat"
for land units.

Update example output for current code.

Don't shout retreat conditions.  We've always accepted both lower and
upper case conditions.  Help has been advertising lower case since
commit bb5dfd8, v4.3.16.

While there, fix a few misspellings and such.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-02-28 16:21:34 +01:00
75a049515b info/lretreat: Resync with retreat.t
Commit 18ee9a2f (v4.2.21) and commit 18ee9a2f (v4.3.16) updated only
info/retreat.t, and missed info/lretreat.t.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-02-28 16:21:34 +01:00
b4bdd658bd info/retreat: De-document retreat condition help
Documented in commit dc41544, v4.3.16.  It actually worked only at the
condition prompt then.  No longer recognized elsewhere since commit
c699949.  The documentation is now misleading.  Simply drop it; the
prompt points out how to get help,

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-02-28 16:21:34 +01:00
eb903207a4 info/mission: Correct land unit missile interdiction limit
It's not 100 flat, it's 20 per interdicted land unit.  It's been that
way since Empire 2 at least.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-02-28 16:13:15 +01:00
6bd7c64341 info/navigate: Correct and clarify
Don't claim the lowest-numbered land unit is always the leader.

Reword the explanation of the prompt.

Update example output for current code.

Clarify that a destination sector is also accepted interactively, not
just on the command line.

Missiles interdict just the valuable ships, unlike other interdiction.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-02-28 16:13:15 +01:00
8971d1b7bf info/march: Correct and clarify
Don't claim the army stops when the leader stops.

Don't claim the lowest-numbered land unit is always the leader.

The prompt shows minimum mobility, not leader mobility.

Clarify that a destination sector is also accepted interactively, not
just on the command line.  Fix the example output, and update for
current code.

Replace incorrect landmine hit chance formula by a reference to "info
Hitchance".

Drop incorrect damage limit for missile interdiction, rely on the
reference to "info mission" instead.

The hit chance of missiles and pin-bombers interdicting land units is
not 100%, but depends on the marching land unit that is easiest to hit.

Clarify that interdiction damage is spread evenly among the marching
land units.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-02-28 16:13:15 +01:00
a024dbb8a3 navigate: Require all ships to start in the same sector
The capability to navigate ships spread over several sectors is
obscure and rarely useful.  Accidental use is probably more frequent
than intentional use.  Issues:

* Interactive prompts show only the flagship's position, and give no
  clue that some ships are actually elsewhere.

* Path finding is supported only when all navigating ships are in
  the same sector.

* Interdiction becomes rather complex.  For each movement, every
  sector entered is interdicted independently.  This means the same
  fort, ship, land unit or plane can interdict multiple times.
  Interdiction order depends on the order the code examines
  ships. which the player can control.  This is all pretty much
  undocumented.

* Complicates the code and its maintenance.  Multiplies the number of
  test cases needed to cover navigate.

I feel we're better off without this feature.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2015-02-28 16:13:14 +01:00