short pln_ship; /* pointer to carrier */
short pln_land; /* pointer to carrier */
signed char pln_harden; /* for missiles */
- signed char pln_nuketype; /* type of nuclear armament (if any) */
signed char pln_flags; /* State of the plane */
short pln_access; /* Last tick mob was updated (MOB_ACCESS) */
float pln_theta; /* position in orbital sine wave */
snprintf(buf, sizeof(buf), "armed on your %s in %s",
prplane(&pl), xyas(pl.pln_x, pl.pln_y, pl.pln_own));
gift(pl.pln_own, player->cnum, &nuke, buf);
- pl.pln_nuketype = nuke.nuk_type;
nuke.nuk_plane = pl.pln_uid;
putplane(pl.pln_uid, &pl);
putnuke(nuke.nuk_uid, &nuke);
xyas(sect.sct_x, sect.sct_y, sect.sct_own));
gift(sect.sct_own, player->cnum, &nuke, buf);
nuke.nuk_plane = -1;
- pl.pln_nuketype = -1;
pl.pln_flags &= ~PLN_AIRBURST;
putplane(pl.pln_uid, &pl);
putnuke(nuke.nuk_uid, &nuke);
#include "item.h"
#include "land.h"
#include "news.h"
+#include "nuke.h"
#include "optlist.h"
#include "path.h"
#include "plane.h"
plp = (struct plist *)qp;
if ((plp->pcp->pl_flags & P_C) && (!(plp->pcp->pl_flags & P_T)))
continue;
- if (plp->bombs || plp->plane.pln_nuketype != -1)
+ if (plp->bombs || nuk_on_plane(&plp->plane) >= 0)
dam += pln_damage(&plp->plane, target->sct_x, target->sct_y,
'p', &nukedam, 1);
}
plp = (struct plist *)qp;
if ((plp->pcp->pl_flags & P_C) && (!(plp->pcp->pl_flags & P_T)))
continue;
- if (plp->bombs || plp->plane.pln_nuketype != -1)
+ if (plp->bombs || nuk_on_plane(&plp->plane) >= 0)
dam += pln_damage(&plp->plane, target->sct_x, target->sct_y,
'p', &nukedam, 1);
}
}
dam = 0;
- if (plp->plane.pln_nuketype != -1)
+ if (nuk_on_plane(&plp->plane) >= 0)
hitchance = 100;
else {
hitchance = pln_hitchance(&plp->plane,
if (planeno < 0)
continue;
dam = 0;
- if (plp->plane.pln_nuketype != -1)
+ if (nuk_on_plane(&plp->plane) >= 0)
hitchance = 100;
else {
hitchance = pln_hitchance(&plp->plane, 0, EF_PLANE);
}
dam = 0;
- if (plp->plane.pln_nuketype != -1)
+ if (nuk_on_plane(&plp->plane) >= 0)
hitchance = 100;
else {
hitchance = pln_hitchance(&plp->plane,
plp = (struct plist *)qp;
if ((plp->pcp->pl_flags & P_C) && (!(plp->pcp->pl_flags & P_T)))
continue;
- if (plp->bombs || plp->plane.pln_nuketype != -1)
+ if (plp->bombs || nuk_on_plane(&plp->plane) >= 0)
dam += pln_damage(&plp->plane, target->sct_x, target->sct_y,
's', &nukedam, 1);
}
plane.pln_wing = 0;
plane.pln_ship = -1;
plane.pln_land = -1;
- plane.pln_nuketype = -1;
plane.pln_harden = 0;
plane.pln_flags = 0;
pln_set_tech(&plane, tlev);
pr("Flags <f>: %d\n", plane->pln_flags);
pr("Ship <s>: %d\t\t", plane->pln_ship);
pr("Land Unit <y>: %d\t", plane->pln_land);
- pr("Nuke Type <n>: %d\n", plane->pln_nuketype);
}
static void
switch (op) {
case 'n':
- plane->pln_nuketype = arg;
+ warn_deprecated(op);
break;
case 'U':
ef_set_uid(EF_PLANE, plane, arg);
int nplanes;
struct nstr_item np;
struct plnstr plane;
+ struct nukstr nuke;
int field[128];
struct natstr *natp;
int n, i;
? " Y" : " N");
break;
case 20:
- if (plane.pln_nuketype != -1) {
- pr(" %.5s", nchr[(int)plane.pln_nuketype].n_name);
+ if (getnuke(nuk_on_plane(&plane), &nuke)) {
+ pr(" %.5s", nchr[nuke.nuk_type].n_name);
break;
} else
pr(" N/A");
int nplanes, noff;
struct nstr_item np;
struct plnstr plane;
+ struct nukstr nuke;
if (!snxtitem(&np, EF_PLANE, player->argp[1], NULL))
return RET_SYN;
pr(" ");
if (pln_is_in_orbit(&plane))
pr((plane.pln_flags & PLN_SYNCHRONOUS) ? " geosync" : " orbit");
- else if (plane.pln_nuketype >= 0)
+ else if (getnuke(nuk_on_plane(&plane), &nuke))
pr(" %-5.5s %c",
- nchr[(int)plane.pln_nuketype].n_name,
+ nchr[nuke.nuk_type].n_name,
plane.pln_flags & PLN_AIRBURST ? 'A' : 'G');
pr("\n");
}
static void *nsc_sct_terr(struct valstr *, struct natstr *, void *);
static void *nsc_pln_att(struct valstr *, struct natstr *, void *);
static void *nsc_pln_def(struct valstr *, struct natstr *, void *);
+static void *nsc_pln_nuketype(struct valstr *, struct natstr *, void *);
static void *nsc_lnd_att(struct valstr *, struct natstr *, void *);
static void *nsc_lnd_def(struct valstr *, struct natstr *, void *);
static void *nsc_lnd_vul(struct valstr *, struct natstr *, void *);
{"ship", fldoff(pln_ship), NSC_SHORT, 0, NULL, EF_BAD, 0},
{"land", fldoff(pln_land), NSC_SHORT, 0, NULL, EF_BAD, 0},
{"harden", fldoff(pln_harden), NSC_CHAR, 0, NULL, EF_BAD, 0},
- {"nuketype", fldoff(pln_nuketype), NSC_CHAR, 0, NULL, EF_BAD, 0},
{"flags", fldoff(pln_flags), NSC_CHAR, 0, NULL,
EF_PLANE_FLAGS, NSC_BITS},
{"access", fldoff(pln_access), NSC_SHORT, 0, NULL, EF_BAD, 0},
{"theta", fldoff(pln_theta), NSC_FLOAT, 0, NULL, EF_BAD, 0},
{"att", 0, NSC_LONG, 0, nsc_pln_att, EF_BAD, NSC_EXTRA},
{"def", 0, NSC_LONG, 0, nsc_pln_def, EF_BAD, NSC_EXTRA},
+ {"nuketype", 0, NSC_LONG, 0, nsc_pln_nuketype, EF_BAD, NSC_EXTRA},
{NULL, 0, NSC_NOTYPE, 0, NULL, EF_BAD, 0}
#undef CURSTR
};
return NULL;
}
+static void *
+nsc_pln_nuketype(struct valstr *val, struct natstr *np, void *ptr)
+{
+ struct nukstr *nukp = getnukep(nuk_on_plane(ptr));
+ val->val_as.lng = nukp ? nukp->nuk_type : -1;
+ return NULL;
+}
+
static void *
nsc_lnd_att(struct valstr *val, struct natstr *np, void *ptr)
{
switch (mission) {
case 's': /* strategic bomb */
case 'p': /* pinpoint bomb */
- if (pp->pln_nuketype == -1) {
+ if (nuk_on_plane(pp) < 0) {
itype = I_SHELL;
needed = load;
}
prplane(pp), cname(victim), s, xyas(x, y, pp->pln_own));
}
hitchance = pln_hitchance(pp, hardtarget, EF_SHIP);
- if (plp->plane.pln_nuketype != -1)
+ if (nuk_on_plane(&plp->plane) >= 0)
hitchance = 100;
else if (hardtarget != SECT_HARDTARGET)
wu(0, pp->pln_own, "\t\t%d%% hitchance...", hitchance);
#include "nat.h"
#include "news.h"
#include "nsc.h"
+#include "nuke.h"
#include "optlist.h"
#include "path.h"
#include "plane.h"
putplane(pp->pln_uid, pp);
mpr(pp->pln_own, "\tSHWOOOOOSH! Missile launched!\n");
- if (pp->pln_nuketype != -1)
+ if (nuk_on_plane(pp) >= 0) {
mpr(pp->pln_own, "\tArming nuclear warheads...\n");
+ hitchance = 100;
+ }
if (pcp->pl_flags & P_T)
mpr(victim, "Incoming %s missile sighted at %s...\n",
}
}
- if (pp->pln_nuketype != -1)
- hitchance = 100;
-
mpr(pp->pln_own, "\t%d%% hitchance...", hitchance);
hit = (roll(100) <= hitchance);
switch (mission) {
case 's': /* strategic bomb */
case 'p': /* pinpoint bomb */
- if (pp->pln_nuketype == -1) {
+ if (nuk_on_plane(pp) < 0) {
itype = I_SHELL;
needed = load;
}
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");
- pp->pln_nuketype = -1;
*nukedamp = detonate(&nuke, x, y,
pp->pln_flags & PLN_AIRBURST);
return 0;
struct nstr_item ni;
struct plnstr plane;
struct lndstr land;
+ struct nukstr nuke;
switch (tp->trd_type) {
case EF_NUKE:
plane.pln_tech,
plane.pln_effic,
plchr[(int)plane.pln_type].pl_name, plane.pln_uid);
- if (plane.pln_nuketype != -1) {
- pr("(%s)", nchr[(int)plane.pln_nuketype].n_name);
- }
+ if (getnuke(nuk_on_plane(&plane), &nuke))
+ pr("(%s)", nchr[nuke.nuk_type].n_name);
}
}
snxtitem_all(&ni, EF_LAND);
plane.pln_effic,
plchr[(int)plane.pln_type].pl_name,
plane.pln_uid);
- if (plane.pln_nuketype != -1) {
- pr("(%s)",
- nchr[(int)plane.pln_nuketype].n_name);
- }
+ if (getnuke(nuk_on_plane(&plane), &nuke))
+ pr("(%s)", nchr[nuke.nuk_type].n_name);
}
}
}
plane.pln_tech,
plane.pln_effic,
plchr[(int)plane.pln_type].pl_name, plane.pln_uid);
- if (plane.pln_nuketype != -1) {
- pr("(%s)", nchr[(int)plane.pln_nuketype].n_name);
- }
+ if (getnuke(nuk_on_plane(&plane), &nuke))
+ pr("(%s)", nchr[nuke.nuk_type].n_name);
}
}
}
pp->pln_tech,
pp->pln_effic,
plchr[(int)pp->pln_type].pl_name, tp->trd_unitid);
- if (pp->pln_nuketype != -1) {
- pr("(%s)", nchr[(int)pp->pln_nuketype].n_name);
- }
+ if (getnuke(nuk_on_plane(pp), &nuke))
+ pr("(%s)", nchr[nuke.nuk_type].n_name);
break;
default:
pr("flaky unit type %d", tp->trd_type);
static void dump_table(int, int);
static void pln_fixup(void);
static void lnd_fixup(void);
-static void nuk_fixup(void);
int
main(int argc, char *argv[])
exit(1);
pln_fixup();
lnd_fixup();
- nuk_fixup();
}
if (ef_verify() < 0)
}
}
-static void
-nuk_fixup(void)
-{
- int i;
- struct nukstr *np;
- struct plnstr *cpp;
-
- for (i = 0; (np = ef_ptr(EF_NUKE, i)); i++) {
- if (!np->nuk_own)
- continue;
- cpp = ef_ptr(EF_PLANE, np->nuk_plane);
- if (cpp)
- cpp->pln_nuketype = np->nuk_type;
- }
-}
-
/* Temporarily copied from src/lib/subs/???sub.c */
/*