load unload lload lunload: Fix for areas starting with a digit
load and lload skip foreign ships unless explicitly named, and
suppress some error messages for ships not explicitly named. Makes
sense, except the check for "explicitly named" is flawed: it checks
whether the argument starts with a digit. Works as intended for lists
like 1/2/3. Broken for areas that happen to start with a digit, such
as 0:9,0:5. Visible in the load-tend test.
Screwed up when the feature was added in Empire 2.
Fix the obvious way: test for NS_LIST instead. While there, drop the
p && *p guard, because it's always true after snxtitem().
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Unlike tend, ltend does nothing silently when asked to tend zero
commodities. This may leave the player guessing why the command did
nothing. Report the reason and fail the command, just like tend does.
While there, improve the prompt to match tend's.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
tend: Fail more nicely when target can't take more commodities
We silently ignore target ships that can't take any more of the tended
commodity. This may leave the player guessing why the command did
nothing. Report the reason like this:
cs cargo ship (#150) can't hold more guns
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Foreign target ships are silently ignored when tending civilians.
This may leave the player guessing why the command did nothing.
Report the reason similar to load does:
Your civilians refuse to board cs cargo ship (#162)!
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Target ships that can't be tended at all are silently ignored. This
may leave the player guessing why the command did nothing. Report
them, but only when explicitly named.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
tend ltend: Fix to skip dead ships and land units for deities
Tending to a dead ship destroys, and tending from a dead ship revives.
Has always been that way. Not actually a problem for ltend anymore,
because the dead can't carry or be carried since commit 64a53c90f0,
v4.3.17.
Fix by checking !own in addition to !player->owner
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
tend: Fix the amount tended in bulletin to recipient
The bulletin reports the total amount tended to all ships so far.
Broken in commit 1de48e53da (v4.3.0), not fixed in commit 7cc14a2c9a
(v4.3.1). Fix the bulletin to report the amount tended to this ship.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
tend ltend: Handle "cannot hold commodity" consistently
Transferring commodities from tenders to targets continues with the
next tender when a target can't hold this kind of commodity.
Transferring them from targets to tenders fails (ltend) or stops
tending (tend) when a tender can't hold this kind of commodity. Has
always been that way.
Change the latter to continue with the next tender.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
tend ltend: Handle "don't have commodity" consistently
Transferring commodities from tenders to targets fails when a tender
doesn't have any. Transferring them from targets to tenders continues
with the next target when a target doesn't have any. Has always been
that way.
Change the former to continue with the next tender.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
tend ltend: Reject foreign tenders and land units more nicely
We silently ignore foreign ships and land units. This may leave the
player guessing why the command did nothing. Report explicitly named
ones like this
You don't own ship #160!
except for tend's target ships. Nice reporting is a bit more involved
there, because you can tend to foreign target ships as long as they're
friendly. Left for later.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
ltend: Fail more nicely when land unit isn't on tender
Land units not on the tender are silently ignored. This may leave the
player guessing why the command did nothing. Reporting them all would
be annoying; I just changed tend to report only explicitly named ones.
Make ltend behave the same.
This does add a related annoyance: ltend can complain "not on ship"
when tending explicitly selected land units from multiple ships.
Tolerable.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
tend: Suppress "not on ship" unless land unit is selected by UID
The quickest way to tend all land units on a ship is to select all
land units with '*'. However, tend then prints a "not on ship"
message for every land unit not on the tender, as the load-tend test
demonstrates. Annoying. Suppress this message unless the land unit
was explictly selected by UID. Similar to how load and unload
suppress messages, only they get the condition wrong (to be fixed
soon).
A related annoyance remains, also visible in the load-tend test: tend
can still complain "not on ship" many times when tending explicitly
selected land units from multiple ships.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
tend: Don't tend land units to multiple target ships
Each land unit is tended to each target ship in turn, and ends up on
the last one that can take it.. The load-tend test demonstrates this
with command "tend land 173 s 150/165":
spy infiltrator #320 transferred from sbc cargo submarine (#173) to cs cargo ship (#150)
spy infiltrator #320 transferred from sbc cargo submarine (#173) to ls landing ship (#165)
spy infiltrator #321 is not on sbc cargo submarine (#173)!
spy infiltrator #322 transferred from sbc cargo submarine (#173) to cs cargo ship (#150)
spy infiltrator #322 transferred from sbc cargo submarine (#173) to ls landing ship (#165)
Has been that way ever since Empire 2 added tending of land units.
Fix by breaking tend_land()'s loop over all target ships after a
successful transfer.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
tests/load-tend: New; exercises load and tend commands
Exercise load, unload, lload, lunload, tend, and ltend.
Notable coverage gaps:
* Effect on land unit fortification
* Effect on mission and retreat orders
* Ships, land units and planes on sale (option MARKET 1)
* Transmission of plague (option NO_PLAGUE 0)
* Land units loading and unloading civilians (need a custom land unit
type capable of carrying civilians)
* load refusing to load x-light planes (need a custom ship type that
can carry helo but not x-light)
* load and lload refusing to load land units carrying land units, and
lload refusing to load land units onto land units that are being
carried (need a custom non-heavy land unit type that can carry land
units)
* tend refusing to tend non-light land units to non-supply ships, or
to supply ships without room (need custom a non-light assault land
unit type)
This test exposes bugs. They're marked "BUG:" in the test input.
There are also oddities marked "odd:", and usability issues marked
"usability:".
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Planes 7/8 aren't visible in output, because the test neglects to set
their owner. Messed up in commit commit efec441, v4.3.33. Correct
that oversight.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
edit: Implement editing bars on ships and land units
The edit command doesn't support editing bars on ships and land units.
Has always been that way. The stock game's ships have always been
unable to load bars. Not the case for land units.
Unfortunately, the obvious key 'b' for bars was burned on plague time
in 4.0.17. Use key 'B' instead.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
edit: Print ship and land unit items with field width 5
print_items() uses field widths between 3 and 5. They go back all the
way to Empire 1, and are fine for the stock game. Widen the narrower
ones to 5, because a consistent field width looks tidier, and can
avoid misaligned columns with customized ships and land units.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Fix the bug demonstrated by the previous commit:
take_casualties_from_lands() limits total casualties to @each. It
should limit each land unit's casualties, and only if !may_kill. This
can lead to fewer casualties than called for; oops in
take_casualties(). Broken in commit 025e9cc25, v4.4.0.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
tests/update: Belatedly update for commit 35ecc008c
Commit 35ecc008c fixed take_casualties() to destroy land units only
when casualties demand it. This test demonstrated the change: inf#29
no longer dies. Good. However, this lost coverage of land units
dying in a sucessful defense. Bad.
I could tweak inf#29 to get destroyed again, but that would lose
coverage of the bug fixed by commit 35ecc008c. Make linf#28 die
instead.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
info/retreat info/lretreat: Fix truncated glossary list items
Text after the first space is missing in the formatted output. That's
because .L takes just one argument, but we pass several. Broken in
commit 4e0d02b, v4.3.33. Fix by quoting the argument text.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
The test for -x uses non-portable operator ==. Screwed up in commit 63c6dd6. Fix by using getopts instead.
Missing mandatory arguments aren't diagnosed. Screwed up in initial
commit 1991652, v4.3.0. Fix by checking shift's return status.
The error message for missing argument of -C neglects to print $0 and
uses echo in a non-portable way. Also screwed up in commit 1991652.
Fix the obvious way.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
configure: Fix botched fix of .tarball-version access
Commit ece998e fixed .tarball-version access from separate build tree
by adding $srcdir/ to it. That's wrong in m4_esyscmd(), because there
it runs at autoconf time, where $srcdir isn't necessary and doesn't
exist. Revert that part.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Since commit 1ec9b94, we derive the version number from git tags with
build-aux/git-version-gen. When a shallow clone doesn't include a
suitable tag, this fails, and make refuses to build anything. Since
Travis uses git-clone --depth=50, it'll break as soon as we've got
more than 50 commits since the last release.
Support arbitrarily shallow clones for limited purposes like testing
by falling back from a proper V.N-H version number to UNKNOWN-H.
To guard against use of such builds for other purposes, log a warning
on server startup, and print one on player login.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
play.c needs <string.h> since commit f1fc0df. My version of
<readline/readline.h> pulls it in, but at least Apple's (derived from
NetBSD's) doesn't, and we get warnings then. Add the missing
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
configure: Fix .tarball-version access from separate build tree
configure reads .tarball-version when the source tree isn't
git-controlled. Fails when the build tree is separate. Fix it to
read $srcdir/.tarball-version.
The occurence in Make.mk isn't wrong, because VPATH applies there.
Change it anyway, for consistency and a bit of extra robustness.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
The build fails on Travis since we require autoconf 2.69 (commit
db055a). Travis still defaults to Ubuntu Precise, and Precise's
autoconf is too old. We could revert commit db055a and rely on Travis
to keep things working with old autoconf. But Precise reached end of
life a couple of months ago, and I suspect it's only a matter of time
until Travis drops it, too.
Fix the build on Travis by requesting Trusty. Its end of life is
planned for April 2019.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
As commit 1ec9b94 explains, the version reported by configure is fixed
at configure generation time. "make dist" happily distributes a stale
one. Not terrible, because all that's stale is the output of
configure --version, just embarrassing.
Make gen-tarball-version fail when the configure --version doesn't
match the tarball version.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Commit 1ec9b94 broke regeneration of configure for dist-client: it
uses .tarball-version, which exists only in the tarball, not in the
source tree.
Generating the client's autoconf stuff into the source tree is a
questionable idea anyway, as it won't run there. Generate it while
building the tarball instead.
Bonus: doesn't distribute a useless .dirty-stamp.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
tests: Normalize version numbers to 4.4.0 instead of 4.3.34
Commit 1ec9b94 normalized version numbers in test output to 4.3.34,
because that was thought to be the next version then. 4.3.34 has
become 4.4.0 meanwhile. Update the normalization just to avoid
mention of 4.3.34.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
The .NA header promises information on "Clients which communicate well
with the Empire4 Server". The page doesn't really deliver. It talks
about client support for asynchronous notifications. It stopped
listing separate client projects in 4.0.7 (1997). Not mentioning such
clients isn't just outdated, it's actively misleading.
Perhaps an up-to-date info page on clients would be useful, but I
can't write one right now. Delete.
Loses a bit of information for client developers that was tacked on in
4.0.7: pointers to dump commands, and an explanation of timestamps. I
trust client writers can find "info xdump" without this.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
info: Trim .SA of change log pages to just "Server"
Looks like an attempt was made to have .SA point to info pages for
significantly changed things. It wasn't done consistently, though,
and it's impractical for Empire 4. Drop these references, and keep
only "Server".
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
info: Improve .NA and first paragraph of change log pages
The .NA show up in "info Server", like this:
Chainsaw ! Changes from KSU Empire to Chainsaw code
Empire2 ! Changes from the Chainsaw server to the Empire2 Server
Empire3 Changes from the Empire2 server to the Empire3 Server
Empire4 ! Changes from the Empire3 server to the Empire4 Server
[...]
Merc Changes from KSU code to Merc code
Old-empire ! Differences from 1.2 to UCB Empire
Tweak them to look like this:
Chainsaw ! Changes from KSU Empire to Chainsaw (1992-93)
Empire2 ! Changes from Chainsaw to Empire 2 (1995)
Empire3 Changes in Empire 3 (1995-96)
Empire4 ! Changes in Empire 4 (1996-present)
[...]
Merc Changes from KSU code to Merc code (1992)
Old-empire ! Differences from 1.2 to UCB Empire
The first paragraph of Empire2.t refers to "the new Empire 2" server.
Drop "new", because it clearly ain't anymore. Same for Empire3.t.
The first paragraph of Empire4.t claims "several changes/fixes" have
been made. Umm, that's only tenuously connected to reality by now.
Rewrite the paragraph.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
The .TH and .NA header promise information about "Wolfpack Code" and
"The Wolfpack Project", but the body doesn't really deliver. It's
basically the first paragraph of Empire4.t plus pointers to Options.t
and Empire.t. Has been that way since it was added in 4.0.2.
History.t covers the Wolfpack project more usefully, so delete this
one.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
navigate march: Say "to sweep mines" instead of "to minesweep"
The choice of "to minesweep" in "`d' to drop mines, and `m' to
minesweep" is obviously intentional. But saying it in standard
English instead is at least as clear, so do that.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
show: Clean up long vs. int in fmttime2822() for Windows
fmttime2822() prints long with format %d, and passes long to abs().
Harmless, because both int and long are 32 bits in the Windows API.
Clean it up anyway.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>