(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_nav_one_sector(struct emp_qelem *, int, natid, int);
|
||||||
extern int shp_missile_defense(coord, coord, natid, int);
|
extern int shp_missile_defense(coord, coord, natid, int);
|
||||||
extern void shp_missdef(struct shpstr *, natid);
|
extern void shp_missdef(struct shpstr *, natid);
|
||||||
|
extern double shp_mobcost(struct shpstr *);
|
||||||
extern void shp_set_tech(struct shpstr *, int);
|
extern void shp_set_tech(struct shpstr *, int);
|
||||||
/* snxtitem.c */
|
/* snxtitem.c */
|
||||||
extern int snxtitem(struct nstr_item *, int, char *);
|
extern int snxtitem(struct nstr_item *, int, char *);
|
||||||
|
|
|
@ -958,8 +958,6 @@ use_ammo(struct emp_qelem *list)
|
||||||
struct sctstr sect;
|
struct sctstr sect;
|
||||||
int shell;
|
int shell;
|
||||||
short *item;
|
short *item;
|
||||||
double mobcost;
|
|
||||||
struct mchrstr *mcp;
|
|
||||||
|
|
||||||
/* use 1 shell from everyone */
|
/* use 1 shell from everyone */
|
||||||
for (qp = list->q_forw; qp != list; qp = next) {
|
for (qp = list->q_forw; qp != list; qp = next) {
|
||||||
|
@ -975,13 +973,8 @@ use_ammo(struct emp_qelem *list)
|
||||||
shell = 0;
|
shell = 0;
|
||||||
item[I_SHELL] = shell;
|
item[I_SHELL] = shell;
|
||||||
putship(ship.shp_uid, &ship);
|
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 */
|
/* mob cost = 1/2 a sect's mob */
|
||||||
mobcost /= 2.0;
|
ship.shp_mobil -= shp_mobcost(&ship) / 2.0;
|
||||||
ship.shp_mobil -= mobcost;
|
|
||||||
}
|
}
|
||||||
} else if (fp->type == targ_land) {
|
} else if (fp->type == targ_land) {
|
||||||
getsect(fp->x, fp->y, §);
|
getsect(fp->x, fp->y, §);
|
||||||
|
|
|
@ -330,8 +330,7 @@ eta_calc(struct shpstr *sp, char *path, int *len, int *nupdates)
|
||||||
*len = i;
|
*len = i;
|
||||||
*nupdates = 1;
|
*nupdates = 1;
|
||||||
|
|
||||||
mobcost = sp->shp_effic * 0.01 * sp->shp_speed;
|
mobcost = shp_mobcost(sp);
|
||||||
mobcost = 480.0 / (mobcost + techfact(sp->shp_tech, mobcost));
|
|
||||||
mobil = sp->shp_mobil;
|
mobil = sp->shp_mobil;
|
||||||
while (i) {
|
while (i) {
|
||||||
if (mobil > 0) {
|
if (mobil > 0) {
|
||||||
|
|
|
@ -71,8 +71,6 @@ torp(void)
|
||||||
struct shpstr vship;
|
struct shpstr vship;
|
||||||
struct shpstr sub;
|
struct shpstr sub;
|
||||||
char *ptr;
|
char *ptr;
|
||||||
double mobcost;
|
|
||||||
struct mchrstr *mcp;
|
|
||||||
struct nstr_item nbst;
|
struct nstr_item nbst;
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
char *sav;
|
char *sav;
|
||||||
|
@ -169,13 +167,8 @@ torp(void)
|
||||||
shells -= SHP_TORP_SHELLS;
|
shells -= SHP_TORP_SHELLS;
|
||||||
sub.shp_item[I_SHELL] = shells;
|
sub.shp_item[I_SHELL] = shells;
|
||||||
putship(sub.shp_uid, &sub);
|
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 */
|
/* Mob cost for a torp is equal to the cost of 1/2 sector of movement */
|
||||||
mobcost /= 2.0;
|
sub.shp_mobil -= shp_mobcost(&sub) / 2.0;
|
||||||
sub.shp_mobil -= mobcost;
|
|
||||||
pr("Whooosh... ");
|
pr("Whooosh... ");
|
||||||
getship(victno, &vship);
|
getship(victno, &vship);
|
||||||
vshipown = vship.shp_own;
|
vshipown = vship.shp_own;
|
||||||
|
@ -389,8 +382,6 @@ fire_torp(struct shpstr *sp, struct shpstr *targ, int range, int ntargets)
|
||||||
int dam;
|
int dam;
|
||||||
int shells;
|
int shells;
|
||||||
double hitchance;
|
double hitchance;
|
||||||
double mobcost;
|
|
||||||
struct mchrstr *mcp;
|
|
||||||
|
|
||||||
shells = sp->shp_item[I_SHELL];
|
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;
|
sp->shp_item[I_SHELL] = shells;
|
||||||
putship(sp->shp_uid, sp);
|
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 */
|
/* Mob cost for a torp is equal to the cost of 1/2 sector of movement */
|
||||||
mobcost /= 2.0;
|
sp->shp_mobil -= shp_mobcost(sp) / 2.0;
|
||||||
sp->shp_mobil -= mobcost;
|
|
||||||
|
|
||||||
hitchance = DTORP_HITCHANCE(range, sp->shp_visib);
|
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;
|
int dam = 0, dam2, mission_flags, tech;
|
||||||
natid plane_owner = 0;
|
natid plane_owner = 0;
|
||||||
int gun, shell, md, range, air_dam = 0;
|
int gun, shell, md, range, air_dam = 0;
|
||||||
double prb, mobcost, hitchance, vrange;
|
double prb, hitchance, vrange;
|
||||||
|
|
||||||
getsect(x, y, §);
|
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))
|
if (!line_of_sight(NULL, x, y, gp->x, gp->y))
|
||||||
continue;
|
continue;
|
||||||
sp->shp_item[I_SHELL] = shell - SHP_TORP_SHELLS;
|
sp->shp_item[I_SHELL] = shell - SHP_TORP_SHELLS;
|
||||||
mobcost = sp->shp_effic * 0.01 * sp->shp_speed;
|
sp->shp_mobil -= shp_mobcost(sp) / 2.0;
|
||||||
mobcost = (480.0 / (mobcost +
|
|
||||||
techfact(sp->shp_tech, mobcost)));
|
|
||||||
sp->shp_mobil -= mobcost;
|
|
||||||
putship(sp->shp_uid, sp);
|
putship(sp->shp_uid, sp);
|
||||||
hitchance = DTORP_HITCHANCE(md, sp->shp_visib);
|
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];
|
mcp = &mchr[(int)sp->shp_type];
|
||||||
newx = xnorm(sp->shp_x + dx);
|
newx = xnorm(sp->shp_x + dx);
|
||||||
newy = ynorm(sp->shp_y + dy);
|
newy = ynorm(sp->shp_y + dy);
|
||||||
mobcost = sp->shp_effic * 0.01 * sp->shp_speed;
|
mobcost = shp_mobcost(sp);
|
||||||
mobcost = 480.0 / (mobcost + techfact(sp->shp_tech, mobcost));
|
|
||||||
|
|
||||||
getsect(newx, newy, §);
|
getsect(newx, newy, §);
|
||||||
if (shp_check_nav(§, sp) != CN_NAVIGABLE ||
|
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 mines, m, max, shells;
|
||||||
int changed = 0;
|
int changed = 0;
|
||||||
int stopping = 0;
|
int stopping = 0;
|
||||||
double mobcost;
|
|
||||||
|
|
||||||
for (qp = ship_list->q_back; qp != ship_list; qp = next) {
|
for (qp = ship_list->q_back; qp != ship_list; qp = next) {
|
||||||
next = qp->q_back;
|
next = qp->q_back;
|
||||||
|
@ -242,10 +241,7 @@ shp_sweep(struct emp_qelem *ship_list, int verbose, natid actor)
|
||||||
prship(&mlp->ship));
|
prship(&mlp->ship));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
mobcost = mlp->ship.shp_effic * 0.01 * mlp->ship.shp_speed;
|
mlp->mobil -= shp_mobcost(&mlp->ship);
|
||||||
mobcost = 480.0 / (mobcost +
|
|
||||||
techfact(mlp->ship.shp_tech, mobcost));
|
|
||||||
mlp->mobil -= mobcost;
|
|
||||||
mlp->ship.shp_mobil = (int)mlp->mobil;
|
mlp->ship.shp_mobil = (int)mlp->mobil;
|
||||||
putship(mlp->ship.shp_uid, &mlp->ship);
|
putship(mlp->ship.shp_uid, &mlp->ship);
|
||||||
if (!(mines = sect.sct_mines))
|
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);
|
shp_mess("is out of mobility", mlp);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
mobcost = mlp->ship.shp_effic * 0.01 * mlp->ship.shp_speed;
|
mobcost = shp_mobcost(&mlp->ship);
|
||||||
mobcost = 480.0 /
|
|
||||||
(mobcost + techfact(mlp->ship.shp_tech, mobcost));
|
|
||||||
mlp->ship.shp_x = newx;
|
mlp->ship.shp_x = newx;
|
||||||
mlp->ship.shp_y = newy;
|
mlp->ship.shp_y = newy;
|
||||||
if (mlp->mobil - mobcost < -127) {
|
if (mlp->mobil - mobcost < -127) {
|
||||||
|
@ -1062,6 +1056,13 @@ shp_missdef(struct shpstr *sp, natid victim)
|
||||||
free(mlp);
|
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.
|
* 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
|
static void
|
||||||
cost_ship(struct shpstr *sp, struct fltelemstr *ep, struct fltheadstr *fp)
|
cost_ship(struct shpstr *sp, struct fltelemstr *ep, struct fltheadstr *fp)
|
||||||
{
|
{
|
||||||
double mobcost;
|
double mobcost = shp_mobcost(sp);
|
||||||
int howfar;
|
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;
|
howfar = 0;
|
||||||
if (mobcost > 0) {
|
if (mobcost > 0) {
|
||||||
howfar = (int)sp->shp_mobil - (int)sp->shp_mobquota;
|
howfar = (int)sp->shp_mobil - (int)sp->shp_mobquota;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue