Commit graph

4007 commits

Author SHA1 Message Date
0846ebb440 Rewrite implementation of toggle techlists in show
To get rid of the ugly global variables.

Unlike before, the sort by tech is stable.
2011-04-23 07:04:42 +02:00
746aa60530 Fuse a few pr() in show_ship_stats() & friends
Also trim trailing space in output.
2011-04-23 07:04:42 +02:00
a474791e7b Belatedly clean up after commit 3b4de2fe Remove option FUEL 2011-04-23 07:04:42 +02:00
c15df51e27 Fix "show land s" to show columns xpl and lnd again
Broken in commit 3b4de2fe, v4.3.15.
2011-04-23 07:04:42 +02:00
02837d2b02 Factor show_load() out of show_ship_capab(), show_land_capab() 2011-04-23 07:04:42 +02:00
d4818ddb3b Simplify show_capab(), don't print trailing space 2011-04-23 07:04:42 +02:00
5f7b92e3ee Factor show_capab() out of show_ship_capab() & friends 2011-04-23 07:04:42 +02:00
6dd3097e78 Bump version to 4.3.28 2011-04-22 17:24:05 +02:00
Ron Koenderink
fc779dd47a Fix compile under Window MinGW environment
Switch to __int64 from _int64.  Change the constant
declaration to use LL instead of a cast.
2011-04-18 19:17:12 +02:00
61fa1c026b Clean up extra headline in info Bridges 2011-04-18 19:17:12 +02:00
4078c31713 Update info History and Overview to cover 1998-present 2011-04-18 19:17:11 +02:00
c1cdc7aa22 Clean up info Bugs
Add bug reporting instructions.

Drop the bugs documented as fixed.  File was last changed in Empire 2,
so these have been fixed for a while...

Remaining bugs:

    The classification scheme used by report is dumb.

It still is.

    You can make a sector temporarily useless by filling up all its
    fields with delivery and distribution information.  This is useful
    when an enemy is trying to capture the sector (his mil don't have
    room to move in :-) You have to halt some of the deliveries or
    distributions to make room for the military to move in.  (Mostly
    fixed by changing the number of available fields)

Fixed since 4.2.14 eliminated `variables'.  Delete.

    Warehouses can't distribute all commodities simultaneously, due to
    limited fields for this information.  This becomes a problem if
    you have a countrywide network of warehouses distributing to each
    other.  (Mostly fixed by changing the number of available fields)

Fixed since 4.2.14 eliminated `variables'.  Delete.

    You can sometimes move small quantities of certain items from
    warehouses at no mobility cost, even into mountains (this is my
    favorite bug, I'd hate to see it fixed :-)

Feature; delete.

    Guerrillas don't seem to carry the plague.

They still don't.

    You can sometimes trick someone into paying a huge price for
    commodities by changing the price suddenly.  Therefore one should
    always check prices when buying commodities.

You can't increase prices anymore.  Delete.

    When two countries are attacking each other simultaneously, you
    can sometimes move into a sector he is in the process of
    attacking.  If you get the timing right, he will take the sector
    but you will get it back, along with all his military.

Can't reproduce; delete.

    If a plane is out to trade, and gets shot down, it can still be
    bought until the next update.  If another country builds a new
    plane that gets the number of the plane that was shot down, the
    new plane will go on the trading market automatically.  Then if
    that plane is bought, the money goes to the country whose plane
    was shot down, not the country that built the plane.  I stole
    numerous planes (including nuclear missiles :-) this way (by
    deliberately putting low numbered planes up for trade, then having
    them shot down).

Planes on a trading block can't get shot down, because they can't fly.
They can get destroyed on the ground, though.  A new plane with the
same number still goes on the market automatically.  Same for ships,
land units and nukes.  check_trade() deletes a trade when the object's
owner changed.  Reword the paragraph accordingly.

    If a plane has negative mobility, then gets traded, mobility goes to 0.

Still correct.

    Firing on sectors with land-locked sunken ships does strange
    things.

Can't reproduce; delete.

    If two countries are cooperating, its possible to raid an enemy
    airport and steal the planes by putting them out to trade.

Still correct.

    You can also strip enemy sectors of commodities using "sell", if
    you have military control temporarily.

Requires mobility now.  Delete.

    One can make work go back to 100 everywhere in a country by moving
    all civil- ians in low-work sectors onto a bridge, then collapsing
    the bridge.  Work then goes to 100 at the next update, if you
    leave some mil in the vacated sectors.  Or you can move mil out
    too, letting the sector ownership change to the Deity, then move
    back in from a 100% working sector, and work goes immediately to
    100.

Feature; delete.

    Two cooperative countries can move commodities around at no
    mobility cost using the market.

Still correct.

    You can collapse enemy bridges by making a lightning raid on his
    bridgeheads and redesignating them, even if you only hold the
    bridgehead for a short time.  (In this games, bridges work
    differently, see info build, info bridges")

Still correct.  The parenthesis is cryptic, though; delete it.

    You can map out enemy territory by raiding his radar stations.

Feature; delete.

    Condition checking is very treacherous.  Global commands with
    conditions are unreliable.  I never figured out exactly what was
    wrong, although I think your method of putting conditions towards
    the front of the line helped sometimes.

Can't reproduce; delete.

    You can have more than 26 ships in a fleet, but only the first 26
    will move when you navigate the fleet (I think 26 is the right
    number, but I'm not cer- tain.  It might be 32).

Can't reproduce; delete.

    "Look" only spots subs (from destroyers) at a certain distance.
    If you are too close you won't see them (unless you are in the
    same sector).

Can't reproduce; delete.

    You can only fly as many planes on a mission as you can fit on the
    command line (so low numbered planes have an advantage this way).
    USE WINGS

The real issue here is truncation of long input lines.  Replace.

    When a sector has a visible ship, radar doesn't show whether the
    sector is land or sea, just the ship.  This has interesting
    possibilities for exploita- tion (like land-locking a battleship
    in your capital in order to deceive the enemy :-)

Feature; delete.

    I don't think you can land planes on a land-locked aircraft
    carrier anymore.

Yes, you can.  Is that good or bad?  Anyway, delete.

    Its common to mistakenly set the price of a plane or ship
    incorrectly so one should check trade after using set.

Pilot error; delete.

    The "must be accepted by" date on offered loans is bogus.

Why is it bogus?  The date looks good to me.  The offer expires at
that time.  Delete.

    "Turn off" doesn't stop updates.

Feature; delete.
2011-04-18 19:17:11 +02:00
631e55bf54 Update change log again for 4.3.27 2011-04-17 18:20:34 +02:00
ea7a741b32 Don't .ds <= and >=, use \(<= and \)>= directly
The symbols work fine even with CRT.MAC.  In fact, they've been used
by Food.t since Empire 2.
2011-04-17 17:52:31 +02:00
b42748001a Clarify info turn: turn off doesn't disable updates 2011-04-17 17:52:31 +02:00
eec6de50c8 Belatedly update designate's c_form
Commit 8227d8c8 (v4.3.12) removed its optional argument without
updating c_form.
2011-04-17 17:52:31 +02:00
c45a3bb923 Make option RAILWAYS disable rail infrastructure
Rail infrastructure isn't used with RAILWAYS.  Disable, to make the
improve command reject it.
2011-04-17 17:52:31 +02:00
81d80109ed Clean up mark()'s test for its optional argument
Commit 60bbb6b0 (v4.2.15) accidentally changed the test from "absent
or empty" to "absent".  Leave it that way, just clean it up.
2011-04-17 17:52:31 +02:00
40b11c098c Fix buy not to wipe out concurrent updates
buy() reads the lot, prompts for input, then writes back the lot,
triggering a generation oops.  Any updates made by other threads while
buy() waits for input are wiped out, triggering a seqno mismatch oops.

Since commodities are taken from the seller when he puts them on the
market, and given to the buyer when the trade executes, the wiped out
lot's seller loses his goods without compensation, the other seller
gets to keep his goods, and the buyer receives their duplicates.

This can be abused by two conspiring countries to duplicate
commodities.  The seller puts them on the market (say 100 gold bars).
The buyer starts a buy command, and waits at its last prompt for the
lot to be replaced.  The seller takes them off the market (possible,
since there's no bid, yet), and sells something else (say one food)
quickly enough to get the same lot number assigned.  The buyer then
completes the buy command.  The seller loses one food, the buyer gains
100 gold bars.

Replaces a partial fix from v4.0.1, which only caught lots gone away,
not lots replaced by new ones.
2011-04-17 17:48:18 +02:00
0563101703 Use SECS_PER_DAY instead of literal 86400 2011-04-17 17:48:18 +02:00
2f05b844c1 Don't let planes on trading block intercept or interdict
Fighters, SAMs, ABMs and anti-sats could intercept, and tactical
missiles could interdict ships or land units.

Missed when the other missions were fixed in v4.2.7.
2011-04-17 17:45:50 +02:00
04a332a89d Fix setsector and setres not to wipe out concurrent updates
setsector() reads the sector, prompts for input, then writes back the
sector, triggering a generation oops.  Any updates made by other
threads while setsector() waits for input are wiped out, triggering a
seqno mismatch oops.

Same for setres().
2011-04-17 10:47:57 +02:00
f4db90c849 Reduce massive code duplication in setsector(), setres()
There's the same sector loop in every switch case.  Loop around the
switch instead.
2011-04-17 10:47:23 +02:00
9afc6a8e5c Make info pray point to version (for e-mail) and flash 2011-04-16 15:53:01 +02:00
577c74b739 Commit 44db5453 added a FIXME comment accidentally, drop it 2011-04-16 14:50:51 +02:00
0d16b832d7 Commit f04d1ae0 made journal escape '\t' again, fix 2011-04-16 13:25:47 +02:00
05fc6523d5 Clean up write-only variable in path_find_to() 2011-04-14 21:20:09 +02:00
baae04ba29 Update change log for 4.3.27 2011-04-14 20:54:16 +02:00
8de0869a21 Clean up getcommand(): use sizeof() instead of literal 1024 2011-04-14 20:47:20 +02:00
e8b98f308e Fix client to log long input lines untruncated
They can still get split by output arriving between two reads from
input, but that's unavoidable, because the client is designed to read
and write big chunks, not lines.
2011-04-14 20:42:47 +02:00
819e28421e Fix client crash for long input lines
recv_input() misued lbuf_putc() and passed truncated lines without a
final newline to save_input(), failing the assertion in save_input().
2011-04-14 20:28:31 +02:00
4c0b4c0416 Mark long info pages with `!' in subject pages 2011-04-14 20:21:23 +02:00
7c8eef0525 Update info version example to current output 2011-04-14 20:21:23 +02:00
a93c8f628f Remove edit keys deprecated in 4.3.15, 4.3.17 and 4.3.20
These are: ship and land 'B', land 'P', and plane 'n'.
2011-04-14 20:21:23 +02:00
98cd2a3a70 Update known contributors comments 2011-04-14 20:21:23 +02:00
b58c37e296 Fix give not to wipe out concurrect updates
give() reads the sector, prompts for input, updates the sector and
writes it back, triggering a generation oops.  Any updates made by
other threads during the yield are wiped out, triggering a seqno
mismatch oops.
2011-04-14 20:21:23 +02:00
e3cf1e3280 Make generation numbers catch more potential yields on input
getstarg(), snxtitem() and snxtsct() can yield the processor, because
they call getstring().  But only for null or empty arguments.  For
other arguments, we should call ef_make_stale(), to catch errors.
Problem: if a caller never passes null or empty arguments, it may rely
on these functions not yielding.  We'd get false positives.  In
general, we can't know whether that's the case.  But we do know in the
common special case of player arguments.  Call ef_make_stale() for
those.
2011-04-14 20:21:23 +02:00
47b68a1c1f Document sequence numbers and generation numbers better 2011-04-14 20:21:23 +02:00
12a0279a80 Simplify map(): use getstarg() instead of getstring() 2011-04-14 20:21:23 +02:00
96d1039c24 Simplify execute(): use getstarg() instead of getstring() 2011-04-14 20:21:23 +02:00
437f16a4d4 Clean up display_region_map()
Without ARG1, display_region_map() formats a rectangular area around
CURX,CURY, so it can use do_map().  Ugly, and duplicates some
unit_map() functionality.

Factor snxtsct_around() out of unit_map().  Inline do_map() into
display_region_map(), so we can use snxtsct_around().

Don't mess with player->condarg.  Leftover from when we abused map()
here.
2011-04-14 20:21:23 +02:00
619b3def31 Factor parse_map_arg() out of do_map() 2011-04-14 20:21:23 +02:00
78fd95f67c Switch do_unit_move() over to display_region_map()
Just to make it more obviously consistent with map() callbacks used
with move_ground().
2011-04-14 20:21:23 +02:00
28d4847416 Clean up move_ground()'s parsing of DIR_MAP
Split with parse() and pass first two arguments instead of the raw
tail to the map() callback.  Advantages:

* Consistent with do_unit_move().

* Does the right thing when the tail is just spaces.  Before, the
  spaces got passed to the map() callback, which complained about
  syntax.  Now, they are ignored.  This is what the commit I just
  reverted tried to fix.

* Works better when the tail splits into more than two arguments.
  Except for explore_map(), which ignores the argument(s), the map()
  callbacks use display_region_map(), which split the tail at the
  first space, and complained about any spaces in the second part.
  Now, display_region_map() takes two argument strings instead of a
  single, unsplit argument string, and extra arguments get silently
  ignored, as usual.
2011-04-14 20:21:23 +02:00
40cfb41b4e Revert "(move_ground): Passed junk to map callback when 'm' sub-command"
It ignores all embedded space, not just trailing space after 'm'.

This reverts commit f65b255d18.
2011-04-14 20:21:23 +02:00
d59e19f5c2 Collapse duplicated code in draw_map()
One loop for maps and one for bmaps suffice.  Before, we had two
similar ones for each.
2011-04-14 20:21:22 +02:00
10f6ffde62 Fix map drawing commands to report bad unit arguments
Before, they failed without explanation when they interpreted the
argument as unit number, but the player didn't own that unit.
2011-04-14 20:21:22 +02:00
d3004510c8 Change unit_map() not to use RET_OK and RET_FAIL as return values
Returning 0 and -1 is simpler.
2011-04-14 20:21:22 +02:00
a00f9e200e Clean up bmap commands' flags argument
parse_map_flags() silently truncates map flags after the first 't' or
'r'.  This makes it accept arguments "true" and "revert".  However, it
also breaks the perfectly sensible argument "ts", which should show
ships just like "st", but doesn't.

info bmap & friends document arguments "true" and "revert", and also
suggest flags 't' and 'r'.  What a mess.

Make argument "revert" a special case.  Deprecate flag 'r', and clean
up truncation there.

Don't truncate after flag 't'.  If any bad flags follow, ignore
everything after 't', but deprecate that usage.
2011-04-14 20:21:22 +02:00
457f797972 Factor parse_map_flags() out of do_map() 2011-04-14 20:21:22 +02:00