icas = 10.0+20.0*Rand();
prout("***Sickbay reports %d casualties", icas);
casual += icas;
- for (l=1; l <= NDEVICES; l++) {
- if (l == DDRAY) continue; // Don't damage deathray
- if (game.damage[l] < 0) continue;
+ for (l=0; l < NDEVICES; l++) {
+ if (l == DDRAY)
+ continue; // Don't damage deathray
+ if (game.damage[l] < 0)
+ continue;
extradm = (10.0*type*Rand()+1.0)*damfac;
game.damage[l] += Time + extradm; /* Damage for at least time of travel! */
}
for (l=1; l <= 15; l++) {
x += deltax;
ix = x + 0.5;
- if (ix < 1 || ix > QUADSIZE) break;
y += deltay;
iy = y + 0.5;
- if (iy < 1 || iy > QUADSIZE) break;
+ if (!VALID_SECTOR(ix, iy)) break;
iquad=game.quad[ix][iy];
tracktorpedo(x, y, ix, iy, wait, l, i, n, iquad);
wait = 1;
yy = cos(ang)/temp;
jx=ix+xx+0.5;
jy=iy+yy+0.5;
- if (jx<1 || jx>QUADSIZE || jy<1 ||jy > QUADSIZE) return;
+ if (!VALID_SECTOR(jx, jy)) return;
if (game.quad[jx][jy]==IHBLANK) {
finish(FHOLE);
return;
yy = cos(ang)/temp;
jx=ix+xx+0.5;
jy=iy+yy+0.5;
- if (jx<1 || jx>QUADSIZE || jy<1 ||jy > QUADSIZE) {
+ if (!VALID_SECTOR(jx, jy)) {
prout(" damaged but not destroyed.");
return;
}
case IHB: /* Hit a base */
skip(1);
prout("***STARBASE DESTROYED..");
- if (game.starch[quadx][quady] < 0) game.starch[quadx][quady] = 0;
for (ll=1; ll<=game.state.rembase; ll++) {
if (game.state.baseqx[ll]==quadx && game.state.baseqy[ll]==quady) {
game.state.baseqx[ll]=game.state.baseqx[game.state.rembase];
game.quad[ix][iy]=IHDOT;
game.state.rembase--;
basex=basey=0;
- game.state.galaxy[quadx][quady] -= BASE_PLACE;
+ game.state.galaxy[quadx][quady].starbase--;
+ game.state.chart[quadx][quady].starbase--;
game.state.basekl++;
newcnd();
return;
crmena(1, iquad, 2, ix, iy);
prout(" destroyed.");
game.state.nplankl++;
- game.state.newstuf[quadx][quady] -= 1;
+ game.state.galaxy[quadx][quady].planets--;
DESTROY(&game.state.plnets[iplnet]);
iplnet = 0;
plnetx = plnety = 0;
static void fry(double hit)
{
double ncrit, extradm;
- int ktr=1, l, ll, j, cdam[NDEVICES+1];
+ int ktr=1, l, ll, j, cdam[NDEVICES];
/* a critical hit occured */
if (hit < (275.0-25.0*skill)*(1.0+0.5*Rand())) return;
ncrit = 1.0 + hit/(500.0+100.0*Rand());
proutn("***CRITICAL HIT--");
/* Select devices and cause damage */
- for (l = 1; l <= ncrit && l <= NDEVICES; l++) {
+ for (l = 0; l < ncrit && 0 < NDEVICES; l++) {
do {
- j = NDEVICES*Rand()+1.0;
+ j = NDEVICES*Rand();
/* Cheat to prevent shuttle damage unless on ship */
- } while (game.damage[j] < 0.0 || (j == DSHUTTL && iscraft != 1) ||
- j == DDRAY);
+ } while
+ (game.damage[j]<0.0 || (j==DSHUTTL && iscraft!=1) || j==DDRAY);
cdam[l] = j;
extradm = (hit*damfac)/(ncrit*(75.0+25.0*Rand()));
game.damage[j] += extradm;
- if (l > 1) {
+ if (l > 0) {
for (ll=2; ll<=l && j != cdam[ll-1]; ll++) ;
if (ll<=l) continue;
ktr += 1;
r = (Rand()+Rand())*0.5 -0.5;
r += 0.002*game.kpower[l]*r;
torpedo(course, r, jx, jy, &hit, 0, 1, 1);
- if (game.state.remkl==0) finish(FWON); /* Klingons did themselves in! */
- if (game.state.galaxy[quadx][quady] == SUPERNOVA_PLACE ||
- alldone) return; /* Supernova or finished */
+ if (game.state.remkl==0)
+ finish(FWON); /* Klingons did themselves in! */
+ if (game.state.galaxy[quadx][quady].supernova || alldone)
+ return; /* Supernova or finished */
if (hit == 0) continue;
}
if (shldup != 0 || shldchg != 0 || condit==IHDOCKED) {
/* Decide what kind of enemy it is and update approriately */
if (type == IHR) {
/* chalk up a Romulan */
- game.state.newstuf[quadx][quady] -= ROMULAN_PLACE;
+ game.state.galaxy[quadx][quady].romulans--;
irhere--;
game.state.nromkl++;
game.state.nromrem--;
}
else {
/* Some type of a Klingon */
- game.state.galaxy[quadx][quady] -= KLINGON_PLACE;
+ game.state.galaxy[quadx][quady].klingons--;
klhere--;
game.state.remkl--;
switch (type) {
{
double deltx, delty;
/* Return TRUE if target is invalid */
- if (x < 1.0 || x > QUADSIZE || y < 1.0 || y > QUADSIZE) {
+ if (!VALID_SECTOR(x, y)) {
huh();
return 1;
}
if (shldup || condit == IHDOCKED)
r *= 1.0 + 0.0001*shield;
torpedo(course[i], r, sectx, secty, &dummy, 0, i, n);
- if (alldone||game.state.galaxy[quadx][quady]==SUPERNOVA_PLACE)
+ if (alldone || game.state.galaxy[quadx][quady].supernova)
return;
}
if (game.state.remkl==0) finish(FWON);