if (idebug) prout("EVENTS");\r
#endif\r
\r
- if (stdamtim == 1e30 && damage[DRADIO] != 0.0) {\r
+ if (stdamtim == 1e30 && frozen.damage[DRADIO] != 0.0) {\r
/* chart will no longer be updated because radio is dead */\r
stdamtim = state.date;\r
for (i=1; i <= 8 ; i++)\r
for (j=1; j <= 8; j++)\r
- if (starch[i][j] == 1) starch[i][j] = state.galaxy[i][j]+1000;\r
+ if (frozen.starch[i][j] == 1) frozen.starch[i][j] = state.galaxy[i][j]+1000;\r
}\r
\r
for (;;) {\r
if (alldone) return;\r
datemin = fintim;\r
for (l=1; l<=NEVENTS; l++)\r
- if (future[l] <= datemin) {\r
+ if (frozen.future[l] <= datemin) {\r
line = l;\r
- datemin = future[l];\r
+ datemin = frozen.future[l];\r
}\r
xtime = datemin-state.date;\r
state.date = datemin;\r
return;\r
}\r
/* Is life support adequate? */\r
- if (damage[DLIFSUP] && condit != IHDOCKED) {\r
- if (lsupres < xtime && damage[DLIFSUP] > lsupres) {\r
+ if (frozen.damage[DLIFSUP] && condit != IHDOCKED) {\r
+ if (lsupres < xtime && frozen.damage[DLIFSUP] > lsupres) {\r
finish(FLIFESUP);\r
return;\r
}\r
lsupres -= xtime;\r
- if (damage[DLIFSUP] <= xtime) lsupres = inlsr;\r
+ if (frozen.damage[DLIFSUP] <= xtime) lsupres = inlsr;\r
}\r
/* Fix devices */\r
repair = xtime;\r
if (condit == IHDOCKED) repair /= docfac;\r
/* Don't fix Deathray here */\r
for (l=1; l<=ndevice; l++)\r
- if (damage[l] > 0.0 && l != DDRAY)\r
- damage[l] -= (damage[l]-repair > 0.0 ? repair : damage[l]);\r
+ if (frozen.damage[l] > 0.0 && l != DDRAY)\r
+ frozen.damage[l] -= (frozen.damage[l]-repair > 0.0 ? repair : frozen.damage[l]);\r
/* If radio repaired, update star chart and attack reports */\r
- if (stdamtim != 1e30 && damage[DRADIO] == 0.0) {\r
+ if (stdamtim != 1e30 && frozen.damage[DRADIO] == 0.0) {\r
stdamtim = 1e30;\r
prout("Lt. Uhura- \"Captain, the sub-space radio is working and");\r
prout(" surveillance reports are coming in.");\r
skip(1);\r
for (i=1; i <= 8 ; i++)\r
for (j=1; j <= 8; j++)\r
- if (starch[i][j] > 999) starch[i][j] = 1;\r
+ if (frozen.starch[i][j] > 999) frozen.starch[i][j] = 1;\r
if (iseenit==0) {\r
attakreport();\r
iseenit = 1;\r
if (ipage==0) pause(1);\r
ipage=1;\r
snova(0,0);\r
- future[FSNOVA] = state.date + expran(0.5*intime);\r
+ frozen.future[FSNOVA] = state.date + expran(0.5*intime);\r
if (state.galaxy[quadx][quady] == 1000) return;\r
break;\r
case FSPY: /* Check with spy to see if S.C. should tractor beam */\r
condit==IHDOCKED || isatb==1 || iscate==1) return;\r
if (ientesc ||\r
(energy < 2000 && torps < 4 && shield < 1250) ||\r
- (damage[DPHASER]>0 && (damage[DPHOTON]>0 || torps < 4)) ||\r
- (damage[DSHIELD] > 0 &&\r
- (energy < 2500 || damage[DPHASER] > 0) &&\r
- (torps < 5 || damage[DPHOTON] > 0))) {\r
+ (frozen.damage[DPHASER]>0 && (frozen.damage[DPHOTON]>0 || torps < 4)) ||\r
+ (frozen.damage[DSHIELD] > 0 &&\r
+ (energy < 2500 || frozen.damage[DPHASER] > 0) &&\r
+ (torps < 5 || frozen.damage[DPHOTON] > 0))) {\r
/* Tractor-beam her! */\r
istract=1;\r
yank = square(state.isx-quadx) + square(state.isy-quady);\r
case FTBEAM: /* Tractor beam */\r
if (line==FTBEAM) {\r
if (state.remcom == 0) {\r
- future[FTBEAM] = 1e30;\r
+ frozen.future[FTBEAM] = 1e30;\r
break;\r
}\r
i = Rand()*state.remcom+1.0;\r
yank = square(state.cx[i]-quadx) + square(state.cy[i]-quady);\r
if (istract || condit == IHDOCKED || yank == 0) {\r
/* Drats! Have to reschedule */\r
- future[FTBEAM] = state.date + Time +\r
+ frozen.future[FTBEAM] = state.date + Time +\r
expran(1.5*intime/state.remcom);\r
break;\r
}\r
if (Rand() >0.5) {\r
prout("Galileo, left on the planet surface, is captured");\r
prout("by aliens and made into a flying McDonald's.");\r
- damage[DSHUTTL] = -10;\r
+ frozen.damage[DSHUTTL] = -10;\r
iscraft = -1;\r
}\r
else {\r
resting = 0;\r
}\r
if (shldup==0) {\r
- if (damage[DSHIELD]==0 && shield > 0) {\r
+ if (frozen.damage[DSHIELD]==0 && shield > 0) {\r
doshield(2); /* Shldsup */\r
shldchg=0;\r
}\r
newqad(0);\r
/* Adjust finish time to time of tractor beaming */\r
fintim = state.date+Time;\r
- if (state.remcom <= 0) future[FTBEAM] = 1e30;\r
- else future[FTBEAM] = state.date+Time+expran(1.5*intime/state.remcom);\r
+ if (state.remcom <= 0) frozen.future[FTBEAM] = 1e30;\r
+ else frozen.future[FTBEAM] = state.date+Time+expran(1.5*intime/state.remcom);\r
break;\r
case FSNAP: /* Snapshot of the universe (for time warp) */\r
snapsht = state;\r
state.snap = 1;\r
- future[FSNAP] = state.date + expran(0.5 * intime);\r
+ frozen.future[FSNAP] = state.date + expran(0.5 * intime);\r
break;\r
case FBATTAK: /* Commander attacks starbase */\r
if (state.remcom==0 || state.rembase==0) {\r
/* no can do */\r
- future[FBATTAK] = future[FCDBAS] = 1e30;\r
+ frozen.future[FBATTAK] = frozen.future[FCDBAS] = 1e30;\r
break;\r
}\r
i = 0;\r
}\r
if (j>state.rembase) {\r
/* no match found -- try later */\r
- future[FBATTAK] = state.date + expran(0.3*intime);\r
- future[FCDBAS] = 1e30;\r
+ frozen.future[FBATTAK] = state.date + expran(0.3*intime);\r
+ frozen.future[FCDBAS] = 1e30;\r
break;\r
}\r
/* commander + starbase combination found -- launch attack */\r
batx = state.baseqx[j];\r
baty = state.baseqy[j];\r
- future[FCDBAS] = state.date+1.0+3.0*Rand();\r
+ frozen.future[FCDBAS] = state.date+1.0+3.0*Rand();\r
if (isatb) /* extra time if SC already attacking */\r
- future[FCDBAS] += future[FSCDBAS]-state.date;\r
- future[FBATTAK] = future[FCDBAS] +expran(0.3*intime);\r
+ frozen.future[FCDBAS] += frozen.future[FSCDBAS]-state.date;\r
+ frozen.future[FBATTAK] = frozen.future[FCDBAS] +expran(0.3*intime);\r
iseenit = 0;\r
- if (damage[DRADIO] != 0.0 &&\r
+ if (frozen.damage[DRADIO] != 0.0 &&\r
condit != IHDOCKED) break; /* No warning :-( */\r
iseenit = 1;\r
if (ipage==0) pause(1);\r
skip(1);\r
prout(" reports that it is under atttack and that it can");\r
proutn(" hold out only until stardate ");\r
- cramf(future[FCDBAS],1,1);\r
+ cramf(frozen.future[FCDBAS],1,1);\r
prout(".\"");\r
if (resting) {\r
skip(1);\r
}\r
break;\r
case FSCDBAS: /* Supercommander destroys base */\r
- future[FSCDBAS] = 1e30;\r
+ frozen.future[FSCDBAS] = 1e30;\r
isatb = 2;\r
if (state.galaxy[state.isx][state.isy]%100 < 10) break; /* WAS RETURN! */\r
ixhold = batx;\r
baty = state.isy;\r
case FCDBAS: /* Commander succeeds in destroying base */\r
if (line==FCDBAS) {\r
- future[FCDBAS] = 1e30;\r
+ frozen.future[FCDBAS] = 1e30;\r
/* find the lucky pair */\r
for (i = 1; i <= state.remcom; i++)\r
if (state.cx[i]==batx && state.cy[i]==baty) break;\r
}\r
/* Code merges here for any commander destroying base */\r
/* Not perfect, but will have to do */\r
- if (starch[batx][baty] == -1) starch[batx][baty] = 0;\r
+ if (frozen.starch[batx][baty] == -1) frozen.starch[batx][baty] = 0;\r
/* Handle case where base is in same quadrant as starship */\r
if (batx==quadx && baty==quady) {\r
- if (starch[batx][baty] > 999) starch[batx][baty] -= 10;\r
+ if (frozen.starch[batx][baty] > 999) frozen.starch[batx][baty] -= 10;\r
frozen.quad[basex][basey]= IHDOT;\r
basex=basey=0;\r
newcnd();\r
prout("Spock- \"Captain, I believe the starbase has been destroyestate.\"");\r
}\r
else if (state.rembase != 1 &&\r
- (damage[DRADIO] <= 0.0 || condit == IHDOCKED)) {\r
+ (frozen.damage[DRADIO] <= 0.0 || condit == IHDOCKED)) {\r
/* Get word via subspace radio */\r
if (ipage==0) pause(1);\r
ipage = 1;\r
}\r
break;\r
case FSCMOVE: /* Supercommander moves */\r
- future[FSCMOVE] = state.date+0.2777;\r
+ frozen.future[FSCMOVE] = state.date+0.2777;\r
if (ientesc+istract==0 &&\r
isatb!=1 &&\r
(iscate!=1 || justin==1)) scom(&ipage);\r
break;\r
case FDSPROB: /* Move deep space probe */\r
- future[FDSPROB] = state.date + 0.01;\r
+ frozen.future[FDSPROB] = state.date + 0.01;\r
probex += probeinx;\r
probey += probeiny;\r
i = (int)(probex/10 +0.05);\r
if (i < 1 || i > 8 || j < 1 || j > 8 ||\r
state.galaxy[probecx][probecy] == 1000) {\r
// Left galaxy or ran into supernova\r
- if (damage[DRADIO]==0.0 || condit == IHDOCKED) {\r
+ if (frozen.damage[DRADIO]==0.0 || condit == IHDOCKED) {\r
if (ipage==0) pause(1);\r
ipage = 1;\r
skip(1);\r
proutn("is no longer transmitting");\r
prout(".\"");\r
}\r
- future[FDSPROB] = 1e30;\r
+ frozen.future[FDSPROB] = 1e30;\r
break;\r
}\r
- if (damage[DRADIO]==0.0 || condit == IHDOCKED) {\r
+ if (frozen.damage[DRADIO]==0.0 || condit == IHDOCKED) {\r
if (ipage==0) pause(1);\r
ipage = 1;\r
skip(1);\r
}\r
/* Update star chart if Radio is working or have access to\r
radio. */\r
- if (damage[DRADIO] == 0.0 || condit == IHDOCKED)\r
- starch[probecx][probecy] = damage[DRADIO] > 0.0 ?\r
+ if (frozen.damage[DRADIO] == 0.0 || condit == IHDOCKED)\r
+ frozen.starch[probecx][probecy] = frozen.damage[DRADIO] > 0.0 ?\r
state.galaxy[probecx][probecy]+1000 : 1;\r
proben--; // One less to travel\r
if (proben == 0 && isarmed &&\r
state.galaxy[probecx][probecy] % 10 > 0) {\r
/* lets blow the sucker! */\r
snova(1,0);\r
- future[FDSPROB] = 1e30;\r
+ frozen.future[FDSPROB] = 1e30;\r
if (state.galaxy[quadx][quady] == 1000) return;\r
}\r
break;\r
delay -= temp;\r
/* Repair Deathray if long rest at starbase */\r
if (origTime-delay >= 9.99 && condit == IHDOCKED)\r
- damage[DDRAY] = 0.0;\r
+ frozen.damage[DDRAY] = 0.0;\r
} while (state.galaxy[quadx][quady] != 1000); // leave if quadrant supernovas\r
\r
resting = 0;\r
shield = 0.0;\r
shldup = 0;\r
prout("***Shields knocked out.");\r
- damage[DSHIELD] += 0.005*damfac*Rand()*diff;\r
+ frozen.damage[DSHIELD] += 0.005*damfac*Rand()*diff;\r
}\r
}\r
else energy -= 2000.0;\r
case IHS:\r
case IHR:\r
for (ll = 1; ll <= nenhere; ll++)\r
- if (kx[ll]==ii && ky[ll]==jj) break;\r
- kpower[ll] -= 800.0; /* If firepower is lost, die */\r
- if (kpower[ll] <= 0.0) {\r
+ if (frozen.kx[ll]==ii && frozen.ky[ll]==jj) break;\r
+ frozen.kpower[ll] -= 800.0; /* If firepower is lost, die */\r
+ if (frozen.kpower[ll] <= 0.0) {\r
deadkl(ii, jj, iquad, ii, jj);\r
break;\r
}\r
cramlc(2, newcx, newcy);\r
frozen.quad[ii][jj] = IHDOT;\r
frozen.quad[newcx][newcy] = iquad;\r
- kx[ll] = newcx;\r
- ky[ll] = newcy;\r
- kavgd[ll] = sqrt(square(sectx-newcx)+square(secty-newcy));\r
- kdist[ll] = kavgd[ll];\r
+ frozen.kx[ll] = newcx;\r
+ frozen.ky[ll] = newcy;\r
+ frozen.kavgd[ll] = sqrt(square(sectx-newcx)+square(secty-newcy));\r
+ frozen.kdist[ll] = frozen.kavgd[ll];\r
skip(1);\r
break;\r
}\r
\r
if (nqx != quady || nqy != quady || justin != 0) {\r
/* it isn't here, or we just entered (treat as inroute) */\r
- if (damage[DRADIO] == 0.0 || condit == IHDOCKED) {\r
+ if (frozen.damage[DRADIO] == 0.0 || condit == IHDOCKED) {\r
skip(1);\r
proutn("Message from Starfleet Command Stardate ");\r
cramf(state.date, 0, 1);\r
/* did in the Supercommander! */\r
state.nscrem = state.isx = state.isy = isatb = iscate = 0;\r
iscdead = 1;\r
- future[FSCMOVE] = future[FSCDBAS] = 1e30;\r
+ frozen.future[FSCMOVE] = frozen.future[FSCDBAS] = 1e30;\r
}\r
state.remkl -= kldead;\r
if (state.remcom) {\r
state.remcom--;\r
kldead--;\r
comdead++;\r
- if (state.remcom==0) future[FTBEAM] = 1e30;\r
+ if (state.remcom==0) frozen.future[FTBEAM] = 1e30;\r
break;\r
}\r
}\r
}\r
/* mark supernova in galaxy and in star chart */\r
if ((quadx == nqx && quady == nqy) ||\r
- damage[DRADIO] == 0 ||\r
+ frozen.damage[DRADIO] == 0 ||\r
condit == IHDOCKED)\r
- starch[nqx][nqy] = 1;\r
+ frozen.starch[nqx][nqy] = 1;\r
state.galaxy[nqx][nqy] = 1000;\r
/* If supernova destroys last klingons give special message */\r
if (state.remkl==0 && (nqx != quadx || nqy != quady)) {\r