Pilots and air cargo now spread the plague
Planes flying one-way with crew or cargo spread plague from their old base to their new base. Planes dropping cargo spread plague from their base to the drop's target sector.
This commit is contained in:
parent
a8739d86e3
commit
612ec6257d
7 changed files with 47 additions and 12 deletions
|
@ -30,7 +30,7 @@
|
|||
* Dave Pare, 1986
|
||||
* Ken Stevens, 1995
|
||||
* Steve McClure, 1998-2000
|
||||
* Markus Armbruster, 2005-2011
|
||||
* Markus Armbruster, 2005-2012
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
@ -42,6 +42,7 @@
|
|||
#include "nuke.h"
|
||||
#include "optlist.h"
|
||||
#include "path.h"
|
||||
#include "plague.h"
|
||||
#include "plane.h"
|
||||
#include "ship.h"
|
||||
|
||||
|
@ -355,6 +356,7 @@ msl_equip(struct plnstr *pp, char mission)
|
|||
struct plist pl;
|
||||
|
||||
pl.load = 0;
|
||||
pl.pstage = PLG_HEALTHY;
|
||||
pl.pcp = plchr + pp->pln_type;
|
||||
pl.plane = *pp;
|
||||
emp_initque(&pl.queue);
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
* Dave Pare, 1986
|
||||
* Thomas Ruschak, 1992
|
||||
* Steve McClure, 1996
|
||||
* Markus Armbruster, 2006-2011
|
||||
* Markus Armbruster, 2006-2012
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
@ -45,6 +45,7 @@
|
|||
#include "nsc.h"
|
||||
#include "optlist.h"
|
||||
#include "path.h"
|
||||
#include "plague.h"
|
||||
#include "plane.h"
|
||||
#include "player.h"
|
||||
#include "prototypes.h"
|
||||
|
@ -784,6 +785,7 @@ getilists(struct emp_qelem *list, unsigned char *rel, natid intruder)
|
|||
/* got one! */
|
||||
ip = malloc(sizeof(*ip));
|
||||
ip->load = 0;
|
||||
ip->pstage = PLG_HEALTHY;
|
||||
ip->pcp = &plchr[(int)plane.pln_type];
|
||||
ip->plane = plane;
|
||||
emp_insque(&ip->queue, &list[plane.pln_own]);
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
* Known contributors to this file:
|
||||
* Ken Stevens, 1995
|
||||
* Steve McClure, 1996-2000
|
||||
* Markus Armbruster, 2003-2011
|
||||
* Markus Armbruster, 2003-2012
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
@ -44,6 +44,7 @@
|
|||
#include "nsc.h"
|
||||
#include "optlist.h"
|
||||
#include "path.h"
|
||||
#include "plague.h"
|
||||
#include "prototypes.h"
|
||||
#include "queue.h"
|
||||
#include "xy.h"
|
||||
|
@ -330,6 +331,7 @@ find_escorts(coord x, coord y, natid cn, struct emp_qelem *escorts)
|
|||
continue;
|
||||
plp = malloc(sizeof(struct plist));
|
||||
plp->load = 0;
|
||||
plp->pstage = PLG_HEALTHY;
|
||||
plp->pcp = &plchr[(int)plane.pln_type];
|
||||
plp->plane = plane;
|
||||
emp_insque(&plp->queue, escorts);
|
||||
|
@ -372,6 +374,7 @@ perform_mission(coord x, coord y, natid victim, struct emp_qelem *list,
|
|||
/* save planes for later */
|
||||
plp = malloc(sizeof(struct plist));
|
||||
plp->load = 0;
|
||||
plp->pstage = PLG_HEALTHY;
|
||||
plp->pcp = pcp;
|
||||
memcpy(&plp->plane, glp->thing, sizeof(struct plnstr));
|
||||
if (plp->pcp->pl_flags & P_M)
|
||||
|
@ -893,12 +896,15 @@ mission_pln_equip(struct plist *plp, struct ichrstr *ip, char mission)
|
|||
pcp = plp->pcp;
|
||||
if (pp->pln_ship >= 0) {
|
||||
getship(pp->pln_ship, &ship);
|
||||
plp->pstage = ship.shp_pstage;
|
||||
item = ship.shp_item;
|
||||
} else if (pp->pln_land >= 0) {
|
||||
getland(pp->pln_land, &land);
|
||||
plp->pstage = land.lnd_pstage;
|
||||
item = land.lnd_item;
|
||||
} else {
|
||||
getsect(pp->pln_x, pp->pln_y, §);
|
||||
plp->pstage = sect.sct_pstage;
|
||||
item = sect.sct_item;
|
||||
}
|
||||
if (pcp->pl_fuel > item[I_PETROL]) {
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
* Known contributors to this file:
|
||||
* Ken Stevens, 1995
|
||||
* Steve McClure, 1996-2000
|
||||
* Markus Armbruster, 2004-2010
|
||||
* Markus Armbruster, 2004-2012
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
@ -42,6 +42,7 @@
|
|||
#include "nsc.h"
|
||||
#include "nuke.h"
|
||||
#include "optlist.h"
|
||||
#include "plague.h"
|
||||
#include "plane.h"
|
||||
#include "prototypes.h"
|
||||
#include "queue.h"
|
||||
|
@ -224,6 +225,7 @@ msl_sel(struct emp_qelem *list, coord x, coord y, natid victim,
|
|||
/* got a valid interceptor */
|
||||
irv = malloc(sizeof(*irv));
|
||||
irv->load = 0;
|
||||
irv->pstage = PLG_HEALTHY;
|
||||
irv->pcp = &plchr[(int)plane.pln_type];
|
||||
irv->plane = plane;
|
||||
emp_insque(&irv->queue, list);
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
#include "nsc.h"
|
||||
#include "nuke.h"
|
||||
#include "optlist.h"
|
||||
#include "plague.h"
|
||||
#include "plane.h"
|
||||
#include "player.h"
|
||||
#include "prototypes.h"
|
||||
|
@ -236,6 +237,9 @@ pln_newlanding(struct emp_qelem *list, coord tx, coord ty, int cno)
|
|||
cname(player->cnum), prplane(&plp->plane),
|
||||
prship(&ship));
|
||||
}
|
||||
if (plp->pcp->pl_crew && plp->pstage == PLG_INFECT
|
||||
&& ship.shp_pstage == PLG_HEALTHY)
|
||||
ship.shp_pstage = PLG_EXPOSED;
|
||||
}
|
||||
} else {
|
||||
plp->plane.pln_x = tx;
|
||||
|
@ -247,6 +251,9 @@ pln_newlanding(struct emp_qelem *list, coord tx, coord ty, int cno)
|
|||
cname(player->cnum),
|
||||
prplane(&plp->plane), xyas(tx, ty, sect.sct_own));
|
||||
}
|
||||
if (plp->pcp->pl_crew && plp->pstage == PLG_INFECT
|
||||
&& sect.sct_pstage == PLG_HEALTHY)
|
||||
sect.sct_pstage = PLG_EXPOSED;
|
||||
plp->plane.pln_ship = cno;
|
||||
}
|
||||
}
|
||||
|
@ -263,14 +270,10 @@ pln_dropoff(struct emp_qelem *list, struct ichrstr *ip, coord tx, coord ty,
|
|||
struct shpstr ship;
|
||||
int there;
|
||||
int max;
|
||||
int pstage;
|
||||
|
||||
if (!ip)
|
||||
return;
|
||||
amt = 0;
|
||||
for (qp = list->q_forw; qp != list; qp = qp->q_forw) {
|
||||
plp = (struct plist *)qp;
|
||||
amt += plp->load;
|
||||
}
|
||||
if (cno < 0) {
|
||||
getsect(tx, ty, §);
|
||||
if (!sect.sct_own) {
|
||||
|
@ -292,11 +295,23 @@ pln_dropoff(struct emp_qelem *list, struct ichrstr *ip, coord tx, coord ty,
|
|||
}
|
||||
there = sect.sct_item[ip->i_uid];
|
||||
max = ITEM_MAX;
|
||||
pstage = sect.sct_pstage;
|
||||
} else {
|
||||
getship(cno, &ship);
|
||||
there = ship.shp_item[ip->i_uid];
|
||||
max = mchr[ship.shp_type].m_item[ip->i_uid];
|
||||
pstage = ship.shp_pstage;
|
||||
}
|
||||
|
||||
amt = 0;
|
||||
for (qp = list->q_forw; qp != list; qp = qp->q_forw) {
|
||||
plp = (struct plist *)qp;
|
||||
amt += plp->load;
|
||||
if (plp->load
|
||||
&& plp->pstage == PLG_INFECT && pstage == PLG_HEALTHY)
|
||||
pstage = PLG_EXPOSED;
|
||||
}
|
||||
|
||||
there += amt;
|
||||
if (there > max) {
|
||||
pr("%d excess %s discarded\n", there - max, ip->i_name);
|
||||
|
@ -306,6 +321,7 @@ pln_dropoff(struct emp_qelem *list, struct ichrstr *ip, coord tx, coord ty,
|
|||
pr("%d %s landed safely", amt, ip->i_name);
|
||||
if (cno < 0) {
|
||||
sect.sct_item[ip->i_uid] = there;
|
||||
sect.sct_pstage = pstage;
|
||||
if (sect.sct_own != player->cnum)
|
||||
wu(0, sect.sct_own, "%s planes drop %d %s in %s\n",
|
||||
cname(player->cnum), amt, ip->i_name,
|
||||
|
@ -314,6 +330,7 @@ pln_dropoff(struct emp_qelem *list, struct ichrstr *ip, coord tx, coord ty,
|
|||
putsect(§);
|
||||
} else {
|
||||
ship.shp_item[ip->i_uid] = there;
|
||||
ship.shp_pstage = pstage;
|
||||
if (ship.shp_own != player->cnum)
|
||||
wu(0, ship.shp_own, "%s planes land %d %s on carrier %d\n",
|
||||
cname(player->cnum), amt, ip->i_name, ship.shp_uid);
|
||||
|
@ -576,6 +593,7 @@ pln_sel(struct nstr_item *ni, struct emp_qelem *list, struct sctstr *ap,
|
|||
putplane(plane.pln_uid, &plane);
|
||||
plp = malloc(sizeof(struct plist));
|
||||
plp->load = 0;
|
||||
plp->pstage = PLG_HEALTHY;
|
||||
plp->pcp = pcp;
|
||||
plp->plane = plane;
|
||||
emp_insque(&plp->queue, list);
|
||||
|
@ -626,14 +644,17 @@ pln_equip(struct plist *plp, struct ichrstr *ip, char mission)
|
|||
pcp = plp->pcp;
|
||||
if (pp->pln_ship >= 0) {
|
||||
getship(pp->pln_ship, &ship);
|
||||
plp->pstage = ship.shp_pstage;
|
||||
item = ship.shp_item;
|
||||
own = ship.shp_own;
|
||||
} else if (pp->pln_land >= 0) {
|
||||
getland(pp->pln_land, &land);
|
||||
plp->pstage = land.lnd_pstage;
|
||||
item = land.lnd_item;
|
||||
own = land.lnd_own;
|
||||
} else {
|
||||
getsect(pp->pln_x, pp->pln_y, §);
|
||||
plp->pstage = sect.sct_pstage;
|
||||
item = sect.sct_item;
|
||||
own = sect.sct_oldown;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue