(att_fight): Don't charge the defending sector any mobility when it's
already negative. Used to charge proportional to its absolute value, which makes no sense. (att_fight): Oops when attacker's mobility is negative rather than charging negative mobility. Remove superflous casts and parenthesis.
This commit is contained in:
parent
6bbd7ffdf3
commit
bcd35e15fb
1 changed files with 21 additions and 20 deletions
|
@ -103,7 +103,7 @@ char *att_mode[] = {
|
||||||
* the type of the object is determined by combat->type which can take the
|
* the type of the object is determined by combat->type which can take the
|
||||||
* values EF_SECTOR, EF_SHIP, EF_PLANE, or EF_BAD. Another important parameter
|
* values EF_SECTOR, EF_SHIP, EF_PLANE, or EF_BAD. Another important parameter
|
||||||
* which is often passed to these functions is combat_mode. This can take
|
* which is often passed to these functions is combat_mode. This can take
|
||||||
* the value A_DEFENSE, A_ATTACK, A_ASSAULT, A_PARA, A_BOARD and A_LBOARD.
|
* the value A_DEFEND, A_ATTACK, A_ASSAULT, A_PARA, A_BOARD and A_LBOARD.
|
||||||
* As these six modes of being in combat affect things like mobcost and combat
|
* As these six modes of being in combat affect things like mobcost and combat
|
||||||
* value, there are often switches made on combat_mode. Note that in all cases
|
* value, there are often switches made on combat_mode. Note that in all cases
|
||||||
* no mobility is taken from sectors, ships, or land units until the player
|
* no mobility is taken from sectors, ships, or land units until the player
|
||||||
|
@ -339,9 +339,9 @@ put_combat(struct combat *com)
|
||||||
sect.sct_type = com->sct_type;
|
sect.sct_type = com->sct_type;
|
||||||
deff = sect.sct_effic - com->eff;
|
deff = sect.sct_effic - com->eff;
|
||||||
if (deff > 0) {
|
if (deff > 0) {
|
||||||
sect.sct_road -= (sect.sct_road * deff / 100.0);
|
sect.sct_road -= sect.sct_road * deff / 100.0;
|
||||||
sect.sct_rail -= (sect.sct_rail * deff / 100.0);
|
sect.sct_rail -= sect.sct_rail * deff / 100.0;
|
||||||
sect.sct_defense -= (sect.sct_defense * deff / 100.0);
|
sect.sct_defense -= sect.sct_defense * deff / 100.0;
|
||||||
if (sect.sct_road <= 0)
|
if (sect.sct_road <= 0)
|
||||||
sect.sct_road = 0;
|
sect.sct_road = 0;
|
||||||
if (sect.sct_rail <= 0)
|
if (sect.sct_rail <= 0)
|
||||||
|
@ -796,7 +796,6 @@ get_mob_support(int combat_mode, struct combat *off, struct combat *def)
|
||||||
MOB_MOVE);
|
MOB_MOVE);
|
||||||
if (mob_support < 0)
|
if (mob_support < 0)
|
||||||
mob_support = 0;
|
mob_support = 0;
|
||||||
/* mob_support = off->mob / sector_mcost(def->sct_type, def->eff);*/
|
|
||||||
if (mob_support < off->troops)
|
if (mob_support < off->troops)
|
||||||
pr("Sector %s has %d mobility which can only support %d mil,\n", xyas(off->x, off->y, player->cnum), off->mob, mob_support);
|
pr("Sector %s has %d mobility which can only support %d mil,\n", xyas(off->x, off->y, player->cnum), off->mob, mob_support);
|
||||||
else
|
else
|
||||||
|
@ -1099,7 +1098,7 @@ att_combat_eff(struct combat *com)
|
||||||
/* str = com->sct_dcp->d_dstr;*/
|
/* str = com->sct_dcp->d_dstr;*/
|
||||||
} else if (com->type == EF_SHIP && com->own != player->cnum) {
|
} else if (com->type == EF_SHIP && com->own != player->cnum) {
|
||||||
getship(com->shp_uid, &ship);
|
getship(com->shp_uid, &ship);
|
||||||
eff = (1.0 + ship.shp_armor / 100.0);
|
eff = 1.0 + ship.shp_armor / 100.0;
|
||||||
}
|
}
|
||||||
return eff;
|
return eff;
|
||||||
}
|
}
|
||||||
|
@ -1528,8 +1527,7 @@ att_reacting_units(struct combat *def, struct emp_qelem *list, int a_spy,
|
||||||
wu(0, land.lnd_own, "%s reacts to %s.\n",
|
wu(0, land.lnd_own, "%s reacts to %s.\n",
|
||||||
prland(&land), xyas(land.lnd_x, land.lnd_y, land.lnd_own));
|
prland(&land), xyas(land.lnd_x, land.lnd_y, land.lnd_own));
|
||||||
|
|
||||||
llp = (struct llist *)
|
llp = malloc(sizeof(struct llist));
|
||||||
malloc(sizeof(struct llist));
|
|
||||||
|
|
||||||
memset(llp, 0, sizeof(struct llist));
|
memset(llp, 0, sizeof(struct llist));
|
||||||
llp->supplied = 1;
|
llp->supplied = 1;
|
||||||
|
@ -1771,6 +1769,7 @@ att_fight(int combat_mode, struct combat *off, struct emp_qelem *olist,
|
||||||
int news_item;
|
int news_item;
|
||||||
int recalctime;
|
int recalctime;
|
||||||
double odds;
|
double odds;
|
||||||
|
int newmob;
|
||||||
char *action;
|
char *action;
|
||||||
|
|
||||||
ototal = get_ototal(combat_mode, off, olist, osupport,
|
ototal = get_ototal(combat_mode, off, olist, osupport,
|
||||||
|
@ -1879,12 +1878,12 @@ att_fight(int combat_mode, struct combat *off, struct emp_qelem *olist,
|
||||||
def->mil = 0;
|
def->mil = 0;
|
||||||
else {
|
else {
|
||||||
if (def->type == EF_SECTOR && d_mil && d_cas) {
|
if (def->type == EF_SECTOR && d_mil && d_cas) {
|
||||||
int tmob;
|
if (def->mob < 0)
|
||||||
|
def->mobcost = 0;
|
||||||
/* Make sure we use a positive mobility here */
|
else {
|
||||||
tmob = ((def->mob < 0) ? -(def->mob) : (def->mob));
|
newmob = damage(def->mob, 100 * d_cas / d_mil);
|
||||||
def->mobcost =
|
def->mobcost = MIN(20, def->mob - newmob);
|
||||||
MIN(20, MIN(1, tmob - damage(tmob, 100 * d_cas / d_mil)));
|
}
|
||||||
}
|
}
|
||||||
def->mil = def->troops;
|
def->mil = def->troops;
|
||||||
}
|
}
|
||||||
|
@ -1892,12 +1891,14 @@ att_fight(int combat_mode, struct combat *off, struct emp_qelem *olist,
|
||||||
/* update attack mobility & mil */
|
/* update attack mobility & mil */
|
||||||
for (n = 0; n <= off->last; ++n)
|
for (n = 0; n <= off->last; ++n)
|
||||||
if (off[n].type != EF_BAD && off[n].troops < a_troops[n]) {
|
if (off[n].type != EF_BAD && off[n].troops < a_troops[n]) {
|
||||||
if (off[n].type == EF_SECTOR && off[n].mil)
|
if (off[n].type == EF_SECTOR && off[n].mil) {
|
||||||
off[n].mobcost +=
|
if (!CANT_HAPPEN(off[n].mob < 0)) {
|
||||||
MIN(20,
|
newmob = damage(off[n].mob,
|
||||||
off[n].mob - damage(off[n].mob,
|
100 * (a_troops[n] - off[n].troops)
|
||||||
100 * (a_troops[n] - off[n].troops)
|
/ off[n].mil);
|
||||||
/ off[n].mil));
|
off[n].mobcost += MIN(20, off[n].mob - newmob);
|
||||||
|
}
|
||||||
|
}
|
||||||
off[n].mil -= a_troops[n] - off[n].troops;
|
off[n].mil -= a_troops[n] - off[n].troops;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue