Fix navigate and march not to lay mines free of charge
authorMarkus Armbruster <armbru@pond.sub.org>
Sat, 13 Mar 2010 21:47:13 +0000 (22:47 +0100)
committerMarkus Armbruster <armbru@pond.sub.org>
Sun, 21 Mar 2010 08:34:29 +0000 (09:34 +0100)
do_unit_move() reads the ships into a list.  It re-reads them when it
prompts for sub-commands.  shp_nav_one_sector() writes them back when
it moves ships.

Mine-laying (sub-command 'd') updates the minelayer, invalidating the
copy in the list.  Any movement sub-command before the next prompt for
sub-commands wiped out this update, triggering a seno mismatch oops.

Happens only if 'd' is used without arguments, because remaining
sub-commands are discarded when there are arguments.

Broken when mine-laying was added in commits 2438fe7c, v4.3.7.

Same for march, commit 274c8e42, v4.3.7.

Fix by stopping after 'd' regardless of arguments.
(cherry picked from commit 28cc236e1264d57a06dfb89cf43a600ba88d271c)

src/lib/commands/navi.c

index 0213be25900c06e3e5c7a5bf85a3b877d898bb39..745208e697e2a066b86732014ab23525b24471b8 100644 (file)
@@ -253,6 +253,7 @@ do_unit_move(struct emp_qelem *ulist, int *together,
                mine();
            else
                landmine();
+           stopping = 1;
            skip = 1;
            player->btused++;
            continue;