(shp_mobcost): New.
(use_ammo, eta_calc, torp, fire_torp, perform_mission, retreat_ship1) (shp_sweep, shp_nav_one_sector, cost_ship): Use it. (perform_mission): Fix mobility cost of torpedo: charged full sector cost instead of half.
This commit is contained in:
parent
2cd8e99f49
commit
16b9c41b39
8 changed files with 18 additions and 54 deletions
|
@ -673,6 +673,7 @@ extern void shp_view(struct emp_qelem *);
|
|||
extern int shp_nav_one_sector(struct emp_qelem *, int, natid, int);
|
||||
extern int shp_missile_defense(coord, coord, natid, int);
|
||||
extern void shp_missdef(struct shpstr *, natid);
|
||||
extern double shp_mobcost(struct shpstr *);
|
||||
extern void shp_set_tech(struct shpstr *, int);
|
||||
/* snxtitem.c */
|
||||
extern int snxtitem(struct nstr_item *, int, char *);
|
||||
|
|
|
@ -958,8 +958,6 @@ use_ammo(struct emp_qelem *list)
|
|||
struct sctstr sect;
|
||||
int shell;
|
||||
short *item;
|
||||
double mobcost;
|
||||
struct mchrstr *mcp;
|
||||
|
||||
/* use 1 shell from everyone */
|
||||
for (qp = list->q_forw; qp != list; qp = next) {
|
||||
|
@ -975,13 +973,8 @@ use_ammo(struct emp_qelem *list)
|
|||
shell = 0;
|
||||
item[I_SHELL] = shell;
|
||||
putship(ship.shp_uid, &ship);
|
||||
mcp = &mchr[(int)ship.shp_type];
|
||||
mobcost = ship.shp_effic * 0.01 * ship.shp_speed;
|
||||
mobcost = (480.0 / (mobcost +
|
||||
techfact(ship.shp_tech, mobcost)));
|
||||
/* mob cost = 1/2 a sect's mob */
|
||||
mobcost /= 2.0;
|
||||
ship.shp_mobil -= mobcost;
|
||||
ship.shp_mobil -= shp_mobcost(&ship) / 2.0;
|
||||
}
|
||||
} else if (fp->type == targ_land) {
|
||||
getsect(fp->x, fp->y, §);
|
||||
|
|
|
@ -330,8 +330,7 @@ eta_calc(struct shpstr *sp, char *path, int *len, int *nupdates)
|
|||
*len = i;
|
||||
*nupdates = 1;
|
||||
|
||||
mobcost = sp->shp_effic * 0.01 * sp->shp_speed;
|
||||
mobcost = 480.0 / (mobcost + techfact(sp->shp_tech, mobcost));
|
||||
mobcost = shp_mobcost(sp);
|
||||
mobil = sp->shp_mobil;
|
||||
while (i) {
|
||||
if (mobil > 0) {
|
||||
|
|
|
@ -71,8 +71,6 @@ torp(void)
|
|||
struct shpstr vship;
|
||||
struct shpstr sub;
|
||||
char *ptr;
|
||||
double mobcost;
|
||||
struct mchrstr *mcp;
|
||||
struct nstr_item nbst;
|
||||
char buf[1024];
|
||||
char *sav;
|
||||
|
@ -169,13 +167,8 @@ torp(void)
|
|||
shells -= SHP_TORP_SHELLS;
|
||||
sub.shp_item[I_SHELL] = shells;
|
||||
putship(sub.shp_uid, &sub);
|
||||
mcp = &mchr[(int)sub.shp_type];
|
||||
mobcost = sub.shp_effic * 0.01 * sub.shp_speed;
|
||||
mobcost = (480.0 / (mobcost + techfact(sub.shp_tech, mobcost)));
|
||||
|
||||
/* Mob cost for a torp is equal to the cost of 1/2 sector of movement */
|
||||
mobcost /= 2.0;
|
||||
sub.shp_mobil -= mobcost;
|
||||
sub.shp_mobil -= shp_mobcost(&sub) / 2.0;
|
||||
pr("Whooosh... ");
|
||||
getship(victno, &vship);
|
||||
vshipown = vship.shp_own;
|
||||
|
@ -389,8 +382,6 @@ fire_torp(struct shpstr *sp, struct shpstr *targ, int range, int ntargets)
|
|||
int dam;
|
||||
int shells;
|
||||
double hitchance;
|
||||
double mobcost;
|
||||
struct mchrstr *mcp;
|
||||
|
||||
shells = sp->shp_item[I_SHELL];
|
||||
|
||||
|
@ -415,13 +406,8 @@ fire_torp(struct shpstr *sp, struct shpstr *targ, int range, int ntargets)
|
|||
sp->shp_item[I_SHELL] = shells;
|
||||
putship(sp->shp_uid, sp);
|
||||
|
||||
mcp = &mchr[(int)sp->shp_type];
|
||||
mobcost = sp->shp_effic * 0.01 * sp->shp_speed;
|
||||
mobcost = (480.0 / (mobcost + techfact(sp->shp_tech, mobcost)));
|
||||
|
||||
/* Mob cost for a torp is equal to the cost of 1/2 sector of movement */
|
||||
mobcost /= 2.0;
|
||||
sp->shp_mobil -= mobcost;
|
||||
sp->shp_mobil -= shp_mobcost(sp) / 2.0;
|
||||
|
||||
hitchance = DTORP_HITCHANCE(range, sp->shp_visib);
|
||||
|
||||
|
|
|
@ -437,7 +437,7 @@ perform_mission(coord x, coord y, natid victim, struct emp_qelem *list,
|
|||
int dam = 0, dam2, mission_flags, tech;
|
||||
natid plane_owner = 0;
|
||||
int gun, shell, md, range, air_dam = 0;
|
||||
double prb, mobcost, hitchance, vrange;
|
||||
double prb, hitchance, vrange;
|
||||
|
||||
getsect(x, y, §);
|
||||
|
||||
|
@ -559,10 +559,7 @@ perform_mission(coord x, coord y, natid victim, struct emp_qelem *list,
|
|||
if (!line_of_sight(NULL, x, y, gp->x, gp->y))
|
||||
continue;
|
||||
sp->shp_item[I_SHELL] = shell - SHP_TORP_SHELLS;
|
||||
mobcost = sp->shp_effic * 0.01 * sp->shp_speed;
|
||||
mobcost = (480.0 / (mobcost +
|
||||
techfact(sp->shp_tech, mobcost)));
|
||||
sp->shp_mobil -= mobcost;
|
||||
sp->shp_mobil -= shp_mobcost(sp) / 2.0;
|
||||
putship(sp->shp_uid, sp);
|
||||
hitchance = DTORP_HITCHANCE(md, sp->shp_visib);
|
||||
|
||||
|
|
|
@ -246,8 +246,7 @@ retreat_ship1(struct shpstr *sp, char code, int orig)
|
|||
mcp = &mchr[(int)sp->shp_type];
|
||||
newx = xnorm(sp->shp_x + dx);
|
||||
newy = ynorm(sp->shp_y + dy);
|
||||
mobcost = sp->shp_effic * 0.01 * sp->shp_speed;
|
||||
mobcost = 480.0 / (mobcost + techfact(sp->shp_tech, mobcost));
|
||||
mobcost = shp_mobcost(sp);
|
||||
|
||||
getsect(newx, newy, §);
|
||||
if (shp_check_nav(§, sp) != CN_NAVIGABLE ||
|
||||
|
|
|
@ -219,7 +219,6 @@ shp_sweep(struct emp_qelem *ship_list, int verbose, natid actor)
|
|||
int mines, m, max, shells;
|
||||
int changed = 0;
|
||||
int stopping = 0;
|
||||
double mobcost;
|
||||
|
||||
for (qp = ship_list->q_back; qp != ship_list; qp = next) {
|
||||
next = qp->q_back;
|
||||
|
@ -242,10 +241,7 @@ shp_sweep(struct emp_qelem *ship_list, int verbose, natid actor)
|
|||
prship(&mlp->ship));
|
||||
continue;
|
||||
}
|
||||
mobcost = mlp->ship.shp_effic * 0.01 * mlp->ship.shp_speed;
|
||||
mobcost = 480.0 / (mobcost +
|
||||
techfact(mlp->ship.shp_tech, mobcost));
|
||||
mlp->mobil -= mobcost;
|
||||
mlp->mobil -= shp_mobcost(&mlp->ship);
|
||||
mlp->ship.shp_mobil = (int)mlp->mobil;
|
||||
putship(mlp->ship.shp_uid, &mlp->ship);
|
||||
if (!(mines = sect.sct_mines))
|
||||
|
@ -859,9 +855,7 @@ shp_nav_one_sector(struct emp_qelem *list, int dir, natid actor,
|
|||
shp_mess("is out of mobility", mlp);
|
||||
continue;
|
||||
}
|
||||
mobcost = mlp->ship.shp_effic * 0.01 * mlp->ship.shp_speed;
|
||||
mobcost = 480.0 /
|
||||
(mobcost + techfact(mlp->ship.shp_tech, mobcost));
|
||||
mobcost = shp_mobcost(&mlp->ship);
|
||||
mlp->ship.shp_x = newx;
|
||||
mlp->ship.shp_y = newy;
|
||||
if (mlp->mobil - mobcost < -127) {
|
||||
|
@ -1062,6 +1056,13 @@ shp_missdef(struct shpstr *sp, natid victim)
|
|||
free(mlp);
|
||||
}
|
||||
|
||||
double
|
||||
shp_mobcost(struct shpstr *sp)
|
||||
{
|
||||
double effspd = sp->shp_effic * 0.01 * sp->shp_speed;
|
||||
return 480.0 / (effspd + techfact(sp->shp_tech, effspd));
|
||||
}
|
||||
|
||||
/*
|
||||
* Set SP's tech to TLEV along with everything else that depends on it.
|
||||
*/
|
||||
|
|
|
@ -55,21 +55,9 @@ static void fltp_to_list(struct fltheadstr *, struct emp_qelem *);
|
|||
static void
|
||||
cost_ship(struct shpstr *sp, struct fltelemstr *ep, struct fltheadstr *fp)
|
||||
{
|
||||
double mobcost;
|
||||
double mobcost = shp_mobcost(sp);
|
||||
int howfar;
|
||||
|
||||
mobcost = 0.0;
|
||||
if (sp->shp_effic > 0) {
|
||||
mobcost = sp->shp_effic * sp->shp_speed * 0.01;
|
||||
mobcost = 480.0 / (mobcost * (1 + (50 + sp->shp_tech) /
|
||||
(double)(200 + sp->shp_tech)));
|
||||
}
|
||||
/* the next two lines are not necessary since shp_mobquota is unsigned
|
||||
and therefore cannot be less than 0.
|
||||
if (sp->shp_mobquota<0)
|
||||
sp->shp_mobquota=0;
|
||||
*/
|
||||
|
||||
howfar = 0;
|
||||
if (mobcost > 0) {
|
||||
howfar = (int)sp->shp_mobil - (int)sp->shp_mobquota;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue