Simplify ask_olist and get_dlist() not to re-read land units
authorMarkus Armbruster <armbru@pond.sub.org>
Sat, 2 Jan 2010 08:14:55 +0000 (09:14 +0100)
committerMarkus Armbruster <armbru@pond.sub.org>
Tue, 19 Jan 2010 07:37:05 +0000 (08:37 +0100)
getland() is obviously redundant in get_dlist(), because the land unit
can't have changed since the previous read.

What's up with ask_olist() is less obvious.  For each capable land
unit, ask_olist() asks the player whether to attack with it.  If it
attacks, it gets copied into olist.  Since asking the player yields
the processor, these copies can become stale.  However, re-reading
fixes that just for the last one.  Moreover, the code copes with stale
copies just fine: ask_olist() is always directly followed by
att_get_offense() or att_move_in_off(), and both replace the
potentially stale copy in olist.

src/lib/subs/attsub.c

index ebf3f65a088c0824124b5e5575d4a7c540f41557..dcf62b9925a378b97f681e807a91421373e3e00f 100644 (file)
@@ -1107,7 +1107,7 @@ ask_olist(int combat_mode, struct combat *off, struct combat *def,
        memset(llp, 0, sizeof(struct ulist));
        emp_insque(&llp->queue, olist);
        llp->mobil = mobcost;
-       getland(land.lnd_uid, &llp->unit.land);
+       llp->unit.land = land;
        llp->x = llp->unit.land.lnd_x;
        llp->y = llp->unit.land.lnd_y;
        llp->chrp = (struct empobj_chr *)&lchr[(int)llp->unit.land.lnd_type];
@@ -1237,7 +1237,7 @@ get_dlist(struct combat *def, struct emp_qelem *list, int a_spy,
        memset(llp, 0, sizeof(struct ulist));
        emp_insque(&llp->queue, list);
        llp->supplied = lnd_supply_all(&land);
-       getland(land.lnd_uid, &llp->unit.land);
+       llp->unit.land = land;
        llp->x = llp->unit.land.lnd_x;
        llp->y = llp->unit.land.lnd_y;
        llp->chrp = (struct empobj_chr *)&lchr[(int)llp->unit.land.lnd_type];