action = NRG;\r
else {\r
chew();\r
- if (damage[DSHIELD]) {\r
+ if (frozen.damage[DSHIELD]) {\r
prout("Shields damaged and down.");\r
return;\r
}\r
proutn("Energy to transfer to shields- ");\r
action = NRG;\r
}\r
- else if (damage[DSHIELD]) {\r
+ else if (frozen.damage[DSHIELD]) {\r
prout("Shields damaged and down.");\r
return;\r
}\r
casual += icas;\r
for (l=1; l <= ndevice; l++) {\r
if (l == DDRAY) continue; // Don't damage deathray \r
- if (damage[l] < 0) continue;\r
+ if (frozen.damage[l] < 0) continue;\r
extradm = (10.0*type*Rand()+1.0)*damfac;\r
- damage[l] += Time + extradm; /* Damage for at least time of travel! */\r
+ frozen.damage[l] += Time + extradm; /* Damage for at least time of travel! */\r
}\r
shldup = 0;\r
if (state.remkl) {\r
case IHK:\r
/* find the enemy */\r
for (ll=1; ll <= nenhere; ll++)\r
- if (ix==kx[ll] && iy==ky[ll]) break;\r
- kp = fabs(kpower[ll]);\r
+ if (ix==frozen.kx[ll] && iy==frozen.ky[ll]) break;\r
+ kp = fabs(frozen.kpower[ll]);\r
h1 = 700.0 + 100.0*Rand() -\r
1000.0*sqrt(square(ix-inx)+square(iy-iny))*\r
fabs(sin(bullseye-angle));\r
h1 = fabs(h1);\r
if (kp < h1) h1 = kp;\r
- kpower[ll] -= (kpower[ll]<0 ? -h1 : h1);\r
- if (kpower[ll] == 0) {\r
+ frozen.kpower[ll] -= (frozen.kpower[ll]<0 ? -h1 : h1);\r
+ if (frozen.kpower[ll] == 0) {\r
deadkl(ix, iy, iquad, ix, iy);\r
return;\r
}\r
return;\r
}\r
prout(" damaged--");\r
- kx[ll] = jx;\r
- ky[ll] = jy;\r
+ frozen.kx[ll] = jx;\r
+ frozen.ky[ll] = jy;\r
shoved = 1;\r
break;\r
case IHB: /* Hit a base */\r
prout("***STARBASE DESTROYED..");\r
- if (starch[quadx][quady] < 0) starch[quadx][quady] = 0;\r
+ if (frozen.starch[quadx][quady] < 0) frozen.starch[quadx][quady] = 0;\r
for (ll=1; ll<=state.rembase; ll++) {\r
if (state.baseqx[ll]==quadx && state.baseqy[ll]==quady) {\r
state.baseqx[ll]=state.baseqx[state.rembase];\r
cramlc(2, jx, jy);\r
skip(1);\r
for (ll=1; ll<=nenhere; ll++)\r
- kdist[ll] = kavgd[ll] = sqrt(square(sectx-kx[ll])+square(secty-ky[ll]));\r
+ frozen.kdist[ll] = frozen.kavgd[ll] = sqrt(square(sectx-frozen.kx[ll])+square(secty-frozen.ky[ll]));\r
sortkl();\r
return;\r
}\r
do {\r
j = ndevice*Rand()+1.0;\r
/* Cheat to prevent shuttle damage unless on ship */\r
- } while (damage[j] < 0.0 || (j == DSHUTTL && iscraft != 1) ||\r
+ } while (frozen.damage[j] < 0.0 || (j == DSHUTTL && iscraft != 1) ||\r
j == DDRAY);\r
cdam[l] = j;\r
extradm = (hit*damfac)/(ncrit*(75.0+25.0*Rand()));\r
- damage[j] += extradm;\r
+ frozen.damage[j] += extradm;\r
if (l > 1) {\r
for (ll=2; ll<=l && j != cdam[ll-1]; ll++) ;\r
if (ll<=l) continue;\r
proutn(device[j]);\r
}\r
prout(" damaged.");\r
- if (damage[DSHIELD] && shldup) {\r
+ if (frozen.damage[DSHIELD] && shldup) {\r
prout("***Shields knocked down.");\r
shldup=0;\r
}\r
skip(1);\r
if (skill <= 2) i = 2;\r
for (l=1; l <= nenhere; l++) {\r
- if (kpower[l] < 0) continue; /* too weak to attack */\r
+ if (frozen.kpower[l] < 0) continue; /* too weak to attack */\r
/* compute hit strength and diminsh shield power */\r
r = Rand();\r
/* Increase chance of photon torpedos if docked or enemy energy low */\r
if (condit == IHDOCKED) r *= 0.25;\r
- if (kpower[l] < 500) r *= 0.25; \r
- jx = kx[l];\r
- jy = ky[l];\r
+ if (frozen.kpower[l] < 500) r *= 0.25; \r
+ jx = frozen.kx[l];\r
+ jy = frozen.ky[l];\r
iquad = frozen.quad[jx][jy];\r
itflag = (iquad == IHK && r > 0.0005) || k == 0 ||\r
(iquad==IHC && r > 0.015) ||\r
if (condit == IHDOCKED) continue; /* Don't waste the effort! */\r
attempt = 1; /* Attempt to attack */\r
dustfac = 0.8+0.05*Rand();\r
- hit = kpower[l]*pow(dustfac,kavgd[l]);\r
- kpower[l] *= 0.75;\r
+ hit = frozen.kpower[l]*pow(dustfac,frozen.kavgd[l]);\r
+ frozen.kpower[l] *= 0.75;\r
}\r
else { /* Enemy used photon torpedo */\r
double course = 1.90985*atan2((double)secty-jy, (double)jx-sectx);\r
hit = 0;\r
proutn("***TORPEDO INCOMING");\r
- if (damage[DSRSENS] <= 0.0) {\r
+ if (frozen.damage[DSRSENS] <= 0.0) {\r
proutn(" From ");\r
crmena(0, iquad, i, jx, jy);\r
}\r
attempt = 1;\r
prout("--");\r
r = (Rand()+Rand())*0.5 -0.5;\r
- r += 0.002*kpower[l]*r;\r
+ r += 0.002*frozen.kpower[l]*r;\r
torpedo(course, r, jx, jy, &hit);\r
if (state.remkl==0) finish(FWON); /* Klingons did themselves in! */\r
if (state.galaxy[quadx][quady] == 1000 ||\r
ihurt = 1;\r
cramf(hit, 0, 2);\r
proutn(" unit hit");\r
- if ((damage[DSRSENS] > 0 && itflag) || skill <= 2) {\r
+ if ((frozen.damage[DSRSENS] > 0 && itflag) || skill <= 2) {\r
proutn(" on the ");\r
crmshp();\r
}\r
- if (damage[DSRSENS] <= 0.0 && itflag) {\r
+ if (frozen.damage[DSRSENS] <= 0.0 && itflag) {\r
proutn(" from ");\r
crmena(0, iquad, i, jx, jy);\r
}\r
cramf(energy, 0, 2);\r
proutn(" shields ");\r
if (shldup) proutn("up, ");\r
- else if (damage[DSHIELD] == 0) proutn("down, ");\r
+ else if (frozen.damage[DSHIELD] == 0) proutn("down, ");\r
else proutn("damaged, ");\r
}\r
crami(percent, 1);\r
}\r
/* After attack, reset average distance to enemies */\r
for (l = 1; l <= nenhere; l++)\r
- kavgd[l] = kdist[l];\r
+ frozen.kavgd[l] = frozen.kdist[l];\r
sortkl();\r
return;\r
}\r
state.cx[state.remcom] = 0;\r
state.cy[state.remcom] = 0;\r
state.remcom--;\r
- future[FTBEAM] = 1e30;\r
+ frozen.future[FTBEAM] = 1e30;\r
if (state.remcom != 0)\r
- future[FTBEAM] = state.date + expran(1.0*incom/state.remcom);\r
+ frozen.future[FTBEAM] = state.date + expran(1.0*incom/state.remcom);\r
state.killc++;\r
break;\r
case IHK:\r
case IHS:\r
state.nscrem = ishere = state.isx = state.isy = isatb = iscate = 0;\r
state.nsckill = 1;\r
- future[FSCMOVE] = future[FSCDBAS] = 1e30;\r
+ frozen.future[FSCMOVE] = frozen.future[FSCDBAS] = 1e30;\r
break;\r
}\r
}\r
\r
/* For each kind of enemy, finish message to player */\r
- prout(" destroyestate.");\r
+ prout(" destroyed.");\r
frozen.quad[ix][iy] = IHDOT;\r
if (state.remkl==0) return;\r
\r
/* Remove enemy ship from arrays describing local conditions */\r
\r
for (i=1; i<=nenhere; i++)\r
- if (kx[i]==ix && ky[i]==iy) break;\r
+ if (frozen.kx[i]==ix && frozen.ky[i]==iy) break;\r
nenhere--;\r
if (i <= nenhere) {\r
for (j=i; j<=nenhere; j++) {\r
- kx[j] = kx[j+1];\r
- ky[j] = ky[j+1];\r
- kpower[j] = kpower[j+1];\r
- kavgd[j] = kdist[j] = kdist[j+1];\r
+ frozen.kx[j] = frozen.kx[j+1];\r
+ frozen.ky[j] = frozen.ky[j+1];\r
+ frozen.kpower[j] = frozen.kpower[j+1];\r
+ frozen.kavgd[j] = frozen.kdist[j] = frozen.kdist[j+1];\r
}\r
}\r
- kx[nenhere+1] = 0;\r
- ky[nenhere+1] = 0;\r
- kdist[nenhere+1] = 0;\r
- kavgd[nenhere+1] = 0;\r
- kpower[nenhere+1] = 0;\r
+ frozen.kx[nenhere+1] = 0;\r
+ frozen.ky[nenhere+1] = 0;\r
+ frozen.kdist[nenhere+1] = 0;\r
+ frozen.kavgd[nenhere+1] = 0;\r
+ frozen.kpower[nenhere+1] = 0;\r
return;\r
}\r
\r
\r
ididit = 0;\r
\r
- if (damage[DPHOTON]) {\r
+ if (frozen.damage[DPHOTON]) {\r
prout("Photon tubes damaged.");\r
chew();\r
return;\r
osuabor=1;\r
if (Rand() <= 0.2) {\r
prout("***Photon tubes damaged by misfire.");\r
- damage[DPHOTON] = damfac*(1.0+2.0*Rand());\r
+ frozen.damage[DPHOTON] = damfac*(1.0+2.0*Rand());\r
break;\r
}\r
}\r
double chekbrn = (rpow-1500.)*0.00038;\r
if (Rand() <= chekbrn) {\r
prout("Weapons officer Sulu- \"Phasers overheated, sir.\"");\r
- damage[DPHASER] = damfac*(1.0 + Rand()) * (1.0+chekbrn);\r
+ frozen.damage[DPHASER] = damfac*(1.0 + Rand()) * (1.0+chekbrn);\r
}\r
}\r
}\r
\r
skip(1);\r
/* SR sensors and Computer */\r
- if (damage[DSRSENS]+damage[DCOMPTR] > 0) ipoop = 0;\r
+ if (frozen.damage[DSRSENS]+frozen.damage[DCOMPTR] > 0) ipoop = 0;\r
if (condit == IHDOCKED) {\r
prout("Phasers can't be fired through base shields.");\r
chew();\r
return;\r
}\r
- if (damage[DPHASER] != 0) {\r
+ if (frozen.damage[DPHASER] != 0) {\r
prout("Phaser control damaged.");\r
chew();\r
return;\r
}\r
if (shldup) {\r
- if (damage[DSHCTRL]) {\r
+ if (frozen.damage[DSHCTRL]) {\r
prout("High speed shield control damaged.");\r
chew();\r
return;\r
for (i = 1; i <= nenhere; i++) {\r
hits[i] = 0.0;\r
if (powrem <= 0) continue;\r
- hits[i] = fabs(kpower[i])/(phasefac*pow(0.90,kdist[i]));\r
+ hits[i] = fabs(frozen.kpower[i])/(phasefac*pow(0.90,frozen.kdist[i]));\r
over = (0.01 + 0.05*Rand())*hits[i];\r
temp = powrem;\r
powrem -= hits[i] + over;\r
case FORCEMAN:\r
chew();\r
key = IHEOL;\r
- if (damage[DCOMPTR]!=0)\r
+ if (frozen.damage[DCOMPTR]!=0)\r
prout("Battle comuter damaged, manual file only.");\r
else {\r
skip(1);\r
case MANUAL:\r
rpow = 0.0;\r
for (k = 1; k <= nenhere;) {\r
- int ii = kx[k], jj = ky[k];\r
+ int ii = frozen.kx[k], jj = frozen.ky[k];\r
int ienm = frozen.quad[ii][jj];\r
if (msgflag) {\r
proutn("Energy available= ");\r
msgflag = 0;\r
rpow = 0.0;\r
}\r
- if (damage[DSRSENS] && !(abs(sectx-ii) < 2 && abs(secty-jj) < 2) &&\r
+ if (frozen.damage[DSRSENS] && !(abs(sectx-ii) < 2 && abs(secty-jj) < 2) &&\r
(ienm == IHC || ienm == IHS)) {\r
cramen(ienm);\r
prout(" can't be located without short range scan.");\r
if (key == IHEOL) {\r
chew();\r
if (ipoop && k > kz) {\r
- int irec=(fabs(kpower[k])/(phasefac*pow(0.9,kdist[k])))*\r
+ int irec=(fabs(frozen.kpower[k])/(phasefac*pow(0.9,frozen.kdist[k])))*\r
(1.01+0.05*Rand()) + 1.0;\r
kz = k;\r
proutn("(");\r
for (; k <= nenhr2; k++, kk++) {\r
if ((wham = hits[k])==0) continue;\r
dustfac = 0.9 + 0.01*Rand();\r
- hit = wham*pow(dustfac,kdist[kk]);\r
- kpini = kpower[kk];\r
+ hit = wham*pow(dustfac,frozen.kdist[kk]);\r
+ kpini = frozen.kpower[kk];\r
kp = fabs(kpini);\r
if (phasefac*hit < kp) kp = phasefac*hit;\r
- kpower[kk] -= (kpower[kk] < 0 ? -kp: kp);\r
- kpow = kpower[kk];\r
- ii = kx[kk];\r
- jj = ky[kk];\r
+ frozen.kpower[kk] -= (frozen.kpower[kk] < 0 ? -kp: kp);\r
+ kpow = frozen.kpower[kk];\r
+ ii = frozen.kx[kk];\r
+ jj = frozen.ky[kk];\r
if (hit > 0.005) {\r
cramf(hit, 0, 2);\r
proutn(" unit hit on ");\r
cramlc(2,ii,jj);\r
skip(1);\r
prout(" has just lost its firepower.\"");\r
- kpower[kk] = -kpow;\r
+ frozen.kpower[kk] = -kpow;\r
}\r
}\r
return;\r