/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2009, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Copyright (C) 1986-2010, Dave Pare, Jeff Bailey, Thomas Ruschak,
* Ken Stevens, Steve McClure
*
* This program is free software; you can redistribute it and/or modify
#include "ship.h"
#include "xy.h"
-static int pln_equip(struct plist *, struct ichrstr *, char);
static int fit_plane_on_ship(struct plnstr *, struct shpstr *);
/*
amt = 0;
for (qp = list->q_forw; qp != list; qp = qp->q_forw) {
plp = (struct plist *)qp;
- amt += plp->misc;
+ amt += plp->load;
}
if (cno < 0) {
getsect(tx, ty, §);
amt = 0;
for (qp = list->q_forw; qp != list; qp = qp->q_forw) {
plp = (struct plist *)qp;
- amt += plp->misc;
+ amt += plp->load;
}
if (amt > 0) {
plane.pln_mission = 0;
putplane(plane.pln_uid, &plane);
plp = malloc(sizeof(struct plist));
- plp->misc = 0;
- plp->bombs = 0;
+ plp->load = 0;
plp->pcp = pcp;
plp->plane = plane;
emp_insque(&plp->queue, list);
}
}
-static int
+int
pln_equip(struct plist *plp, struct ichrstr *ip, char mission)
{
struct plchrstr *pcp;
switch (mission) {
case 's': /* strategic bomb */
case 'p': /* pinpoint bomb */
- if (nuk_on_plane(pp) >= 0)
- break;
itype = I_SHELL;
break;
case 't': /* transport */
case 'e': /* escort */
load = 0;
break;
+ case 'i': /* missile interception */
+ if (CANT_HAPPEN(!(pcp->pl_flags & P_M)
+ || !(pcp->pl_flags & (P_N | P_O))))
+ break;
+ if (load)
+ itype = I_SHELL;
+ break;
default:
CANT_REACH();
load = 0;
pr("%s can't contribute to mission\n", prplane(pp));
return -1;
}
+ if (nuk_on_plane(pp) >= 0) {
+ if (mission == 's' || mission == 't')
+ needed = 0;
+ else {
+ pr("%s can't fly this mission"
+ " while it is carrying a nuclear weapon",
+ prplane(pp));
+ return -1;
+ }
+ }
if (itype == I_CIVIL && pp->pln_own != own) {
pr("You don't control those civilians!\n");
return -1;
return -1;
}
item[itype] -= needed;
- if (itype == I_SHELL && (mission == 's' || mission == 'p'))
- plp->bombs = needed;
- else
- plp->misc = needed;
+ plp->load = needed;
}
if (pp->pln_ship >= 0) {
return hitchance;
}
-/* return 0 if there was a nuclear detonation */
-
int
-pln_damage(struct plnstr *pp, coord x, coord y, char type, int *nukedamp,
- int noisy)
+pln_damage(struct plnstr *pp, char type, int noisy)
{
- struct nukstr nuke;
struct plchrstr *pcp = plchr + pp->pln_type;
int load, i;
int hitroll;
int effective = 1;
int pinbomber = 0;
- if (getnuke(nuk_on_plane(pp), &nuke)) {
- mpr(pp->pln_own, "Releasing RV's for %s detonation...\n",
- pp->pln_flags & PLN_AIRBURST ? "airburst" : "groundburst");
- *nukedamp = detonate(&nuke, x, y,
- pp->pln_flags & PLN_AIRBURST);
+ if (CANT_HAPPEN(nuk_on_plane(pp) >= 0))
return 0;
- }
- *nukedamp = 0;
load = pln_load(pp);
if (!load) /* e.g. ab, blowing up on launch pad */