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>
Report the exact ship, like
frg frigate (#170) cannot hold any uncompensated workers
instead of reporting just the ship type, like
A frg frigate cannot hold any uncompensated workers
This is a bit more useful when tending to more than one ship.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
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>
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>
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>
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>
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>
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>
The edit command doesn't support editing plane fortification. Has
always been that way. Implement it as key 'F'.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
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>
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>
check_trade() sets plane and land unit mobility to zero on trade.
Even when it's negative. Fix to leave it alone then.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Most uses of getrel() have been replaced by the safer relations_with()
in commit 0c60e57..67b9135, v4.3.27. Eliminate the remaining ones:
* Convert rela() to use relations_with(). The case of relations to
self, where the two differ, doesn't occur. The code becomes more
easier to understand, even.
* relations_with() is then getrel()'s last user. Inline.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
All callers of getrejects() also check whether the sender is a deity.
Factor out the common code into nat_accepts(), and drop getrejects().
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Communications from deities can't be rejected, but the accept command
fails to consider that detail. Should not normally matter, because
the reject command doesn't let you reject deities. Fix it anyway.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Announcement rejection is completely broken for deities.
Additionally, deity announcements aren't exempted from rejection, but
that should not normally matter, because the reject command doesn't
let you reject deities.
Broken when announcements were separated from telegrams in Empire 3.
Fix to test the sender's instead of the player's divinity.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Fix do_loan() to check !player->god instead of player->cnum != 0.
Screwed up when rejecting was added in Merc Empire.
Should not normally matter, because the reject command doesn't let you
reject deities.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Instead of enumerating all eight combinations of the three flags in a
table, simply print each flag on its own, and drop the table. The old
table depends on the flag encoding, the new code doesn't.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
The next commit will create a contact file, and the macro to get a
contact entry will be named getcontact(). Rename the existing
getcontact() out of the way.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Interactive edit shows what can be edited, with edit keys and current
values. When option HIDDEN is enabled, "edit c" additionally shows
contact information like "Countries contacted: 1(6) 2(6) 4(5) ".
Lists the numbers of contacted countries and, in parenthesis, how many
updates contact is going to last if option LOSE_CONTACT is enabled.
The line was added along with option HIDDEN in Empire 2. As long as
editing contact isn't implemented, it doesn't belong here. Drop it.
If deities need contact information, we'll have to show it elsewhere.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Land units with capability security reduce the mobility cost and have
their military count double, regardless of efficiency. This lets
players get the benefits of a security unit at a discount: just don't
build it beyond 10%.
Count security unit's military times 1 + eff/100 instead of double.
Change the mobility bonus term from number of security units to sum of
security unit efficiency / 100. Partial fix for bug#64.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Put the new function security_strength() next to military_control(),
because that one does a similar count.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Infrastructure requires lcms and hcms to build. The build materials
are exposed as infrastructure columns lcms, hcms (struct sctintrins
members in_lcms, in_hcms). They are per point of efficiency. In
contrast, sector and unit build materials are defined for 100%.
We want to define build materials for 100% now, for flexibility and
consistency, and we want to optionally support more build materials in
the future. Replace members in_lcms and in_hcms by array in_mat[],
and provide selectors l_build and h_build.
Additionally provide selectors for all other item types, with value
zero, to help clients prepare for future additional materials. Use
CA_DUMP_ONLY to keep them out of configuration tables until they
actually work.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
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>
Spies assaulting a foreign sector have only a 10% chance to evade
detection, regardless of efficiency. With odds like that, players
basically don't bother.
All the other spy detection checks use LND_SPY_DETECT_CHANCE(eff),
which gives 100% spies a 90% chance to evade detection. That's
perhaps a bit to good here, so let's try LND_SPY_DETECT_CHANCE(eff/2).
A 100% spy now has a 40% chance to sneak ashore undetected.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>