Fix automatic supply of defending and reacting units
Being in supply is relevant for defending and reacting units. The code used has_supply() to check that. Contrary to its name, has_supply() does not check whether the land unit has enough supplies to be in supply, but whether it has or could draw enough. So, defending and reacting units did not actually draw any missing supplies. Fix that in get_dlist() and att_reacting_units() by calling resupply_all(), then checking with new lnd_in_supply() instead of has_supply(). The fix of att_reacting_units() is complicated by the fact that it is also used in the strength command, and should keep not drawing supplies there. Rename has_supply() to lnd_could_be_supplied(). Replace its uses immediately after resupply_all() by lnd_in_supply().
This commit is contained in:
parent
07561b4772
commit
5ea0d19c20
6 changed files with 30 additions and 10 deletions
|
@ -682,7 +682,8 @@ extern void snxtsct_dist(struct nstr_sect *, coord, coord, int);
|
||||||
extern void resupply_all(struct lndstr *);
|
extern void resupply_all(struct lndstr *);
|
||||||
extern void resupply_commod(struct lndstr *, i_type);
|
extern void resupply_commod(struct lndstr *, i_type);
|
||||||
extern int supply_commod(int, int, int, i_type, int);
|
extern int supply_commod(int, int, int, i_type, int);
|
||||||
extern int has_supply(struct lndstr *);
|
extern int lnd_in_supply(struct lndstr *);
|
||||||
|
extern int lnd_could_be_supplied(struct lndstr *);
|
||||||
/* takeover.c */
|
/* takeover.c */
|
||||||
extern void takeover_land(struct lndstr *, natid);
|
extern void takeover_land(struct lndstr *, natid);
|
||||||
extern void takeover(struct sctstr *, natid);
|
extern void takeover(struct sctstr *, natid);
|
||||||
|
|
|
@ -653,7 +653,7 @@ load_land_ship(struct sctstr *sectp, struct shpstr *sp, int noisy,
|
||||||
resupply_all(&land);
|
resupply_all(&land);
|
||||||
#endif
|
#endif
|
||||||
putland(land.lnd_uid, &land);
|
putland(land.lnd_uid, &land);
|
||||||
if (!has_supply(&land))
|
if (!lnd_in_supply(&land))
|
||||||
pr("WARNING: %s is out of supply!\n", prland(&land));
|
pr("WARNING: %s is out of supply!\n", prland(&land));
|
||||||
} else {
|
} else {
|
||||||
sprintf(buf, "unloaded in your %s at %s",
|
sprintf(buf, "unloaded in your %s at %s",
|
||||||
|
@ -999,7 +999,7 @@ load_land_land(struct sctstr *sectp, struct lndstr *lp, int noisy,
|
||||||
resupply_all(&land);
|
resupply_all(&land);
|
||||||
#endif
|
#endif
|
||||||
putland(land.lnd_uid, &land);
|
putland(land.lnd_uid, &land);
|
||||||
if (!has_supply(&land))
|
if (!lnd_in_supply(&land))
|
||||||
pr("WARNING: %s is out of supply!\n", prland(&land));
|
pr("WARNING: %s is out of supply!\n", prland(&land));
|
||||||
} else {
|
} else {
|
||||||
sprintf(buf, "unloaded in your %s at %s",
|
sprintf(buf, "unloaded in your %s at %s",
|
||||||
|
|
|
@ -138,7 +138,7 @@ units_in_sector(struct combat *def)
|
||||||
if (land.lnd_ship >= 0)
|
if (land.lnd_ship >= 0)
|
||||||
continue;
|
continue;
|
||||||
d_unit = defense_val(&land);
|
d_unit = defense_val(&land);
|
||||||
if (!has_supply(&land))
|
if (!lnd_could_be_supplied(&land))
|
||||||
d_unit /= 2.0;
|
d_unit /= 2.0;
|
||||||
dtotal += d_unit;
|
dtotal += d_unit;
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,7 @@ supp(void)
|
||||||
nunits++;
|
nunits++;
|
||||||
resupply_all(&land);
|
resupply_all(&land);
|
||||||
putland(land.lnd_uid, &land);
|
putland(land.lnd_uid, &land);
|
||||||
if (has_supply(&land))
|
if (lnd_in_supply(&land))
|
||||||
pr("%s has supplies\n", prland(&land));
|
pr("%s has supplies\n", prland(&land));
|
||||||
else
|
else
|
||||||
pr("%s is out of supply\n", prland(&land));
|
pr("%s is out of supply\n", prland(&land));
|
||||||
|
|
|
@ -1074,7 +1074,7 @@ ask_olist(int combat_mode, struct combat *off, struct combat *def,
|
||||||
}
|
}
|
||||||
resupply_all(&land);
|
resupply_all(&land);
|
||||||
putland(land.lnd_uid, &land);
|
putland(land.lnd_uid, &land);
|
||||||
if (!has_supply(&land)) {
|
if (!lnd_in_supply(&land)) {
|
||||||
pr("%s is out of supply, and cannot %s\n",
|
pr("%s is out of supply, and cannot %s\n",
|
||||||
prland(&land), att_mode[combat_mode]);
|
prland(&land), att_mode[combat_mode]);
|
||||||
continue;
|
continue;
|
||||||
|
@ -1235,7 +1235,9 @@ 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 = has_supply(&land);
|
resupply_all(&land);
|
||||||
|
putland(land.lnd_uid, &land);
|
||||||
|
llp->supplied = lnd_in_supply(&land);
|
||||||
if (!get_land(A_DEFEND, def, land.lnd_uid, llp, 1))
|
if (!get_land(A_DEFEND, def, land.lnd_uid, llp, 1))
|
||||||
continue;
|
continue;
|
||||||
if (lnd_spyval(&land) > *d_spyp)
|
if (lnd_spyval(&land) > *d_spyp)
|
||||||
|
@ -1499,8 +1501,15 @@ att_reacting_units(struct combat *def, struct emp_qelem *list, int a_spy,
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Only supplied units can react */
|
/* Only supplied units can react */
|
||||||
if (!has_supply(&land))
|
if (list) {
|
||||||
|
resupply_all(&land);
|
||||||
|
putland(land.lnd_uid, &land);
|
||||||
|
if (!lnd_in_supply(&land))
|
||||||
continue;
|
continue;
|
||||||
|
} else {
|
||||||
|
if (!lnd_could_be_supplied(&land))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!in_oparea((struct empobj *)&land, def->x, def->y))
|
if (!in_oparea((struct empobj *)&land, def->x, def->y))
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -86,6 +86,16 @@ resupply_commod(struct lndstr *lp, i_type type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
lnd_in_supply(struct lndstr *lp)
|
||||||
|
{
|
||||||
|
if (!opt_NOFOOD) {
|
||||||
|
if (lp->lnd_item[I_FOOD] < get_minimum(lp, I_FOOD))
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return lp->lnd_item[I_SHELL] >= get_minimum(lp, I_SHELL);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Actually get the commod
|
* Actually get the commod
|
||||||
*/
|
*/
|
||||||
|
@ -410,7 +420,7 @@ get_minimum(struct lndstr *lp, i_type type)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
has_supply(struct lndstr *lp)
|
lnd_could_be_supplied(struct lndstr *lp)
|
||||||
{
|
{
|
||||||
int shells_needed, shells, keepshells;
|
int shells_needed, shells, keepshells;
|
||||||
int food, food_needed, keepfood;
|
int food, food_needed, keepfood;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue