Demonstrates that edit leaves a missile's hardening intact on load.
Loading fortified land units is already covered, and also leaves
fortification intact.
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>
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>
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>
The test covers only 'c' and 'l' with give, 'm' and 'g' with edit.
Cover the other item types, too.
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>
"torped" comes from symbol table retreat_flags. Visible in output of
edit, retreat, lretreat and xdump. Tolerable in edit, but player
commands like retreat should really use proper words.
Fixing it in retreat_flags changes xdump output, thus risks breaking
clients. Do it anyway, since no known client recognizes this
particular symbol value.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
It sets the new type, then falls through to setting tech if the new
type requires more than the plane currently has. Two problems with
that:
* If we fall through, the plane is invalid: it has less tech than
required. Its only use before it gets overwritten is pln_set_tech()
calling pln_range_max() to find out whether the range is limited.
Passes a negative number to log(). Not fatal, but pln_set_tech()'s
range adjustment is unlikely to work.
* If we don't fall through, the range may still need adjustment,
either up (to keep it unlimited if the new type has more range), or
down (to keep it within the new type's shorter range).
Screwed up when the key was added in commit 6b0b6f17. Fix by
adjusting tech first, then setting the type, then adjusting the range.
The latter relies on pln_set_tech() coping with ranges exceeding the
type's maximum, which it does.
Change the other type edits similarly for consistency.
When a type edit triggers a tech change, the tech change is now
silent.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Demonstrate bugs: doesn't always preserve unlimited range, and doesn't
always cut range back to maximum.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Commit 37ff377 stripped trailing white space in test output, except
for journal.log, where it stripped it only from player output. This
misses the space preceeding player empty output, and doesn't cover
equally annoying trailing white space elsewhere, such as the space
preceeding empty input and trailing white space in prompts. Testing
the latter could be marginally useful, but let's keep things simple,
and strip all trailing white space for now.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Units owned by POGO are not in use. Giving a unit to POGO destroys
it. The opposite doesn't work, however: the unit prewrite hooks give
it right back to POGO, because efficiency is below the minimum. Make
it work by also increasing efficiency to minimum.
Note that you can't use this to create a unit that doesn't already
exist in the respective file. That's because edit's second argument
selects from existing objects only.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
print_plane() ends its output with '\t' instead of '\n'. Next is a
prompt, which supplies the missing newline (see pr_id()).
Ugly, clean up.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Accept general <SECTS|SHIPS|PLANES|LANDS|NATS> argument instead of
just <SECT|SHIP|PLANE|LAND|NAT>.
edit with <KEY> <VALUE>... arguments applies the arguments to all
selected objects. Without such arguments, edit lets you edit the
selected objects interactively one after the other.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Interactive edit prints the edited object, then reads player input.
If it gets key and value, it applies them to the object, and repeats.
If it gets nothing, it prints the edited object again, and stops.
Remove this last print, because it's not really useful. The object is
commonly the same after reading input as before. Except when a nation
gets updated while "edit c" is waiting for input: then the second
print actually reflects the updates. Has always been that way.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Print a message describing the actual change for keys 't' (nat_tgms)
and 's' (nat_status). The message is necessary to give the deity a
chance to catch unexpected changes, e.g. a player reading telegrams
just before the deity edits nat_tgms.
Send a bulletin to the country for key 's'.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Print "FOO of CNAME (#CNUM)" instead of just "FOO". Print "unchanged"
instead of "changed from X to X" on no-op.
Send a bulletin to the country and report news when appropriate.
Affected keys:
key struct member before after notes
-------------------------------------------
n nat_cnam -- BN 1
r nat_pnam -- B- 2
b nat_btu -- BN 3
m nat_reserve BN BN
c nat_xcap,ycap -- B-
o nat_xorg,yorg -- B-
u nat_timeused -- BN
M nat_money B- BN
Notes:
1. Reports N_NAME_CHNG rather than N_AIDS/N_HURTS.
2. Message improved to accurately reflect string truncation.
3. Greengrocers' apostrophe in message fixed.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Print "Technology" instead of "Tech". Print "FOO of CNAME (#CNUM)"
instead of just "FOO". Print "unchanged" instead of "changed from X
to X" on no-op.
Send a bulletin to the unit owner and report news on change.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Print a message (always), send a bulletin to the unit owner and report
news (sometimes).
The message is necessary to give the deity a chance to catch
unexpected changes, e.g. a player spending mobility right before the
deity edits it. Watching out for such changes is especially important
with non-interactive edit.
Affected keys:
cmd key struct member action
----------------------------------
edit s L shp_x,y B-
E shp_effic BN
M shp_mobil BN
F shp_fleet B-
T shp_tech BN
a shp_pstage --
b shp_ptime --
R shp_rpath B-
edit p l pln_x,y B-
e pln_effic BN
m pln_mobil BN
w pln_wing B-
t pln_tech BN
r pln_range B-
edit u L lnd_x,y B-
e lnd_effic BN
M lnd_mobil BN
a lnd_army B-
t lnd_tech BN
F lnd_harden BN
Z lnd_retreat B-
R lnd_rpath B-
The two characters in column action show whether the command sends a
bulletin (B) or not (-), and whether it reports news (N) or not (-).
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Print a message, send bulletin to owner. Affects ship key 'W', land
unit key 'W', and plane key 'f'. The message is necessary to give the
deity a chance to catch unexpected changes, e.g. a player modifying
retreat conditions right before the deity edits them. Watching out
for such changes is especially important with non-interactive edit.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Edit lets deities load units onto remote carriers, resulting in a
carriers having cargo in another sector. Not good. Cargo gets
teleported to its carrier belatedly when the carrier moves.
Better let edit take care of the teleport.
Also tell the deity that he just caused a teleport. Necessary to give
the deity a chance to catch unexpected changes, e.g. a player moving a
plane right before the deity edits it. Watching out for such changes
is especially important with non-interactive edit.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
They really need to stay with their carrier. Else, cargo gets
silently teleported to its carrier when the carrier moves.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Print a message, send bulletin to owner. Affects plane keys 's', 'y',
and land unit keys 'S', 'Y'. The message is necessary to give the
deity a chance to catch unexpected changes, e.g. a player loading a
plane right before the deity edits it. Watching out for such changes
is especially important with non-interactive edit.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Send bulletin to owner and report news exactly like for key 'O' or
sector key 'L'.
Print a "duplicated" message, just for consistency with other keys.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Two failure modes:
* When the argument is negative, edit() attempts an invalid write,
triggering an oops. edit() detects the write failure, and returns
RET_FAIL.
Detect the negative argument instead, and return RET_SYN, like we do
for other invalid edit arguments.
* When the argument requires the table to be extended, but the
extension fails, edit() returns RET_FAIL.
Additionally report the failure to the player.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Print a message describing the actual change. Necessary to give the
deity a chance to catch unexpected changes, e.g. a player boarding a
ship right before the deity edits it. Watching out for such changes
is especially important with non-interactive edit.
Code already sends bulletins. Also report news.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Print a message describing the actual change. Necessary to give the
deity a chance to catch unexpected changes, e.g. a player unloading
stuff right before the deity edits it, leaving fewer items than the
deity intends to take. Watching out for such changes is especially
important with non-interactive edit.
Send bulletin to owner and report news exactly like the give command.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Print "unchanged" instead of "changed from X to X". Affects edit,
setresource, setsector. Suppress bulletin and news. Affects only
edit sector key 'L'.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Most places use "FOO of X,Y changed", some use "FOO in X,Y changed",
"FOO in X,Y was changed", "FOO of sector X,Y changed". Normalize to
the former.
Most places do not end the message with a period, some do. Normalize
to no period.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
edit, setresource and setsector report change in three ways:
* Print a message.
* Send a bulletin to the changed object's owner. This should be done
if and only if the change is visible to the owner, e.g. in census or
xdump.
* Report divine aid in news. This should be done if and only if a
bulletin was sent, except for changes that are neither negative nor
positive, such as changing the distribution sector.
Fix the places that don't get it right for sectors:
cmd key sctstr member before after notes
-------------------------------------------------
edit l O sct_oldown -- B-
edit l F sct_fallout -- BN 1
edit l M sct_mines -- BN 2 3
edit l D sct_dist_x,y -- B- 1
edit l s sct_type -- B- 1
edit l S sct_newtype -- B- 1
setse ow sct_own B- BN
setse ol sct_oldown -- B-
setse e sct_effic -- BN 2
setse mo sct_mobil -- BN 2
setse a sct_avail -- BN 2
setse w sct_work -- BN 2
The two characters in columns before, after show whether the command
sends a bulletin (B) or not (-), and whether it reports news (N) or
not (-).
Notes:
1. Printed message massaged slightly for consistency with other keys.
2. Printed message improved to show the old value, too. Necessary to
give the deity a chance to catch unexpected changes, e.g. a player
laying mines right before the deity edits them. Watching out for
such changes is especially important with non-interactive edit.
3. Bulletin and news suppressed for occupied sectors.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Send bulletin to owner and report news exactly like for key 'o'.
Also print a "sector duplicated" message, just for consistency with
other keys.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Back in Empire 1, resources were limited consistently: fertility to
120, all others to 100.
When Chainsaw added setresource, consistency was lost: fertility got
limited to 100 there.
Chainsaw 3 changed edit to limit all resources to 127.
Commit 3fcee8dd and commit 8e430ae2 (both v4.3.11) changed fairland
and setsector to limit fertility to 100, matching setresource.
Now only edit remains different. Change it to finally make things
consistent again.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
When the deity sets the number of mines with setsector, the sector
owner (if any) is told the resulting number of mines. Even for
occupied sectors, where mines belong to the old owner, and thus
shouldn't be disclosed. Oops.
Fix setsector not to tell the sector owner anything then.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
give already suppresses when the new value equals the old one, but
edit, setresource and setsector don't. Make them.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
In the beginning, all bulletins came from POGO. Chainsaw changed edit
and give to send them from the deity using the command. Its new
command setresource sent from POGO regardless. Its new command
setsector did both.
Go back to sending them only from POGO.
Some of the affected bulletins don't mention the acting deity. Reword
them so they do.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Empty key arguments work fine when passed as command arguments, but
not interactively. For example, 'edit s 42 R ""' clears the retreat
path, but in an interactive 'edit s 43', 'R ""' sets it to "".
In Empire 1, omitting the argument made it empty. Empire 2 turned
that into an error without providing an alternative.
Switch to the common command parser, so that quoting works, and "" is
parsed as empty argument.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Necessary to give the deity a chance to catch unexpected changes,
e.g. a player moving away stuff right before a give command, leaving
fewer items than the deity intends to take.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>