Simplify ask_olist and get_dlist() not to re-read land units

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.
This commit is contained in:
Markus Armbruster 2010-01-02 09:14:55 +01:00
parent ba0d4d0036
commit ec75a407c7

View file

@ -1107,7 +1107,7 @@ ask_olist(int combat_mode, struct combat *off, struct combat *def,
memset(llp, 0, sizeof(struct ulist)); memset(llp, 0, sizeof(struct ulist));
emp_insque(&llp->queue, olist); emp_insque(&llp->queue, olist);
llp->mobil = mobcost; llp->mobil = mobcost;
getland(land.lnd_uid, &llp->unit.land); llp->unit.land = land;
llp->x = llp->unit.land.lnd_x; llp->x = llp->unit.land.lnd_x;
llp->y = llp->unit.land.lnd_y; llp->y = llp->unit.land.lnd_y;
llp->chrp = (struct empobj_chr *)&lchr[(int)llp->unit.land.lnd_type]; 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)); memset(llp, 0, sizeof(struct ulist));
emp_insque(&llp->queue, list); emp_insque(&llp->queue, list);
llp->supplied = lnd_supply_all(&land); 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->x = llp->unit.land.lnd_x;
llp->y = llp->unit.land.lnd_y; llp->y = llp->unit.land.lnd_y;
llp->chrp = (struct empobj_chr *)&lchr[(int)llp->unit.land.lnd_type]; llp->chrp = (struct empobj_chr *)&lchr[(int)llp->unit.land.lnd_type];