]> git.pond.sub.org Git - empserver/commitdiff
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>
Sat, 20 Mar 2010 13:57:05 +0000 (14:57 +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.

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;