void events(void) {\r
\r
int ictbeam=0, ipage=0, istract=0, line, i, j, k, l, ixhold, iyhold;\r
- double fintim = d.date + Time, datemin, xtime, repair, yank;\r
+ double fintim = state.date + Time, datemin, xtime, repair, yank;\r
\r
\r
#ifdef DEBUG\r
\r
if (stdamtim == 1e30 && damage[DRADIO] != 0.0) {\r
/* chart will no longer be updated because radio is dead */\r
- stdamtim = d.date;\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] = d.galaxy[i][j]+1000;\r
+ if (starch[i][j] == 1) starch[i][j] = state.galaxy[i][j]+1000;\r
}\r
\r
for (;;) {\r
line = l;\r
datemin = future[l];\r
}\r
- xtime = datemin-d.date;\r
- d.date = datemin;\r
+ xtime = datemin-state.date;\r
+ state.date = datemin;\r
/* Decrement Federation resources and recompute remaining time */\r
- d.remres -= (d.remkl+4*d.remcom)*xtime;\r
- d.remtime = d.remres/(d.remkl+4*d.remcom);\r
- if (d.remtime <=0) {\r
+ state.remres -= (state.remkl+4*state.remcom)*xtime;\r
+ state.remtime = state.remres/(state.remkl+4*state.remcom);\r
+ if (state.remtime <=0) {\r
finish(FDEPLETE);\r
return;\r
}\r
if (ipage==0) pause(1);\r
ipage=1;\r
snova(0,0);\r
- future[FSNOVA] = d.date + expran(0.5*intime);\r
- if (d.galaxy[quadx][quady] == 1000) return;\r
+ 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
- if (d.nscrem == 0 ||\r
+ if (state.nscrem == 0 ||\r
ictbeam+istract > 0 ||\r
condit==IHDOCKED || isatb==1 || iscate==1) return;\r
if (ientesc ||\r
(torps < 5 || damage[DPHOTON] > 0))) {\r
/* Tractor-beam her! */\r
istract=1;\r
- yank = square(d.isx-quadx) + square(d.isy-quady);\r
+ yank = square(state.isx-quadx) + square(state.isy-quady);\r
/*********TBEAM CODE***********/\r
}\r
else return;\r
case FTBEAM: /* Tractor beam */\r
if (line==FTBEAM) {\r
- if (d.remcom == 0) {\r
+ if (state.remcom == 0) {\r
future[FTBEAM] = 1e30;\r
break;\r
}\r
- i = Rand()*d.remcom+1.0;\r
- yank = square(d.cx[i]-quadx) + square(d.cy[i]-quady);\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] = d.date + Time +\r
- expran(1.5*intime/d.remcom);\r
+ future[FTBEAM] = state.date + Time +\r
+ expran(1.5*intime/state.remcom);\r
break;\r
}\r
}\r
}\r
}\r
if (line==0) {\r
- quadx = d.isx;\r
- quady = d.isy;\r
+ quadx = state.isx;\r
+ quady = state.isy;\r
}\r
else {\r
- quadx = d.cx[i];\r
- quady = d.cy[i];\r
+ quadx = state.cx[i];\r
+ quady = state.cy[i];\r
}\r
iran10(§x, §y);\r
crmshp();\r
cramlc(2, sectx, secty);\r
skip(1);\r
if (resting) {\r
- prout("(Remainder of rest/repair period cancelled.)");\r
+ prout("(Remainder of rest/repair period cancellestate.)");\r
resting = 0;\r
}\r
if (shldup==0) {\r
}\r
newqad(0);\r
/* Adjust finish time to time of tractor beaming */\r
- fintim = d.date+Time;\r
- if (d.remcom <= 0) future[FTBEAM] = 1e30;\r
- else future[FTBEAM] = d.date+Time+expran(1.5*intime/d.remcom);\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
break;\r
case FSNAP: /* Snapshot of the universe (for time warp) */\r
- snapsht = d;\r
- d.snap = 1;\r
- future[FSNAP] = d.date + expran(0.5 * intime);\r
+ snapsht = state;\r
+ state.snap = 1;\r
+ future[FSNAP] = state.date + expran(0.5 * intime);\r
break;\r
case FBATTAK: /* Commander attacks starbase */\r
- if (d.remcom==0 || d.rembase==0) {\r
+ if (state.remcom==0 || state.rembase==0) {\r
/* no can do */\r
future[FBATTAK] = future[FCDBAS] = 1e30;\r
break;\r
}\r
i = 0;\r
- for (j=1; j<=d.rembase; j++) {\r
- for (k=1; k<=d.remcom; k++)\r
- if (d.baseqx[j]==d.cx[k] && d.baseqy[j]==d.cy[k] &&\r
- (d.baseqx[j]!=quadx || d.baseqy[j]!=quady) &&\r
- (d.baseqx[j]!=d.isx || d.baseqy[j]!=d.isy)) {\r
+ for (j=1; j<=state.rembase; j++) {\r
+ for (k=1; k<=state.remcom; k++)\r
+ if (state.baseqx[j]==state.cx[k] && state.baseqy[j]==state.cy[k] &&\r
+ (state.baseqx[j]!=quadx || state.baseqy[j]!=quady) &&\r
+ (state.baseqx[j]!=state.isx || state.baseqy[j]!=state.isy)) {\r
i = 1;\r
break;\r
}\r
if (i == 1) break;\r
}\r
- if (j>d.rembase) {\r
+ if (j>state.rembase) {\r
/* no match found -- try later */\r
- future[FBATTAK] = d.date + expran(0.3*intime);\r
+ future[FBATTAK] = state.date + expran(0.3*intime);\r
future[FCDBAS] = 1e30;\r
break;\r
}\r
/* commander + starbase combination found -- launch attack */\r
- batx = d.baseqx[j];\r
- baty = d.baseqy[j];\r
- future[FCDBAS] = d.date+1.0+3.0*Rand();\r
+ batx = state.baseqx[j];\r
+ baty = state.baseqy[j];\r
+ future[FCDBAS] = state.date+1.0+3.0*Rand();\r
if (isatb) /* extra time if SC already attacking */\r
- future[FCDBAS] += future[FSCDBAS]-d.date;\r
+ future[FCDBAS] += future[FSCDBAS]-state.date;\r
future[FBATTAK] = future[FCDBAS] +expran(0.3*intime);\r
iseenit = 0;\r
if (damage[DRADIO] != 0.0 &&\r
case FSCDBAS: /* Supercommander destroys base */\r
future[FSCDBAS] = 1e30;\r
isatb = 2;\r
- if (d.galaxy[d.isx][d.isy]%100 < 10) break; /* WAS RETURN! */\r
+ if (state.galaxy[state.isx][state.isy]%100 < 10) break; /* WAS RETURN! */\r
ixhold = batx;\r
iyhold = baty;\r
- batx = d.isx;\r
- baty = d.isy;\r
+ batx = state.isx;\r
+ baty = state.isy;\r
case FCDBAS: /* Commander succeeds in destroying base */\r
if (line==FCDBAS) {\r
future[FCDBAS] = 1e30;\r
/* find the lucky pair */\r
- for (i = 1; i <= d.remcom; i++)\r
- if (d.cx[i]==batx && d.cy[i]==baty) break;\r
- if (i > d.remcom || d.rembase == 0 ||\r
- d.galaxy[batx][baty] % 100 < 10) {\r
+ for (i = 1; i <= state.remcom; i++)\r
+ if (state.cx[i]==batx && state.cy[i]==baty) break;\r
+ if (i > state.remcom || state.rembase == 0 ||\r
+ state.galaxy[batx][baty] % 100 < 10) {\r
/* No action to take after all */\r
batx = baty = 0;\r
break;\r
basex=basey=0;\r
newcnd();\r
skip(1);\r
- prout("Spock- \"Captain, I believe the starbase has been destroyed.\"");\r
+ prout("Spock- \"Captain, I believe the starbase has been destroyestate.\"");\r
}\r
- else if (d.rembase != 1 &&\r
+ else if (state.rembase != 1 &&\r
(damage[DRADIO] <= 0.0 || condit == IHDOCKED)) {\r
/* Get word via subspace radio */\r
if (ipage==0) pause(1);\r
else prout("a Klingon Commander");\r
}\r
/* Remove Starbase from galaxy */\r
- d.galaxy[batx][baty] -= 10;\r
- for (i=1; i <= d.rembase; i++)\r
- if (d.baseqx[i]==batx && d.baseqy[i]==baty) {\r
- d.baseqx[i]=d.baseqx[d.rembase];\r
- d.baseqy[i]=d.baseqy[d.rembase];\r
+ state.galaxy[batx][baty] -= 10;\r
+ for (i=1; i <= state.rembase; i++)\r
+ if (state.baseqx[i]==batx && state.baseqy[i]==baty) {\r
+ state.baseqx[i]=state.baseqx[state.rembase];\r
+ state.baseqy[i]=state.baseqy[state.rembase];\r
}\r
- d.rembase--;\r
+ state.rembase--;\r
if (isatb == 2) {\r
/* reinstate a commander's base attack */\r
batx = ixhold;\r
}\r
break;\r
case FSCMOVE: /* Supercommander moves */\r
- future[FSCMOVE] = d.date+0.2777;\r
+ 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] = d.date + 0.01;\r
+ future[FDSPROB] = state.date + 0.01;\r
probex += probeinx;\r
probey += probeiny;\r
i = (int)(probex/10 +0.05);\r
probecx = i;\r
probecy = j;\r
if (i < 1 || i > 8 || j < 1 || j > 8 ||\r
- d.galaxy[probecx][probecy] == 1000) {\r
+ state.galaxy[probecx][probecy] == 1000) {\r
// Left galaxy or ran into supernova\r
if (damage[DRADIO]==0.0 || condit == IHDOCKED) {\r
if (ipage==0) pause(1);\r
radio. */\r
if (damage[DRADIO] == 0.0 || condit == IHDOCKED)\r
starch[probecx][probecy] = damage[DRADIO] > 0.0 ?\r
- d.galaxy[probecx][probecy]+1000 : 1;\r
+ state.galaxy[probecx][probecy]+1000 : 1;\r
proben--; // One less to travel\r
if (proben == 0 && isarmed &&\r
- d.galaxy[probecx][probecy] % 10 > 0) {\r
+ state.galaxy[probecx][probecy] % 10 > 0) {\r
/* lets blow the sucker! */\r
snova(1,0);\r
future[FDSPROB] = 1e30;\r
- if (d.galaxy[quadx][quady] == 1000) return;\r
+ if (state.galaxy[quadx][quady] == 1000) return;\r
}\r
break;\r
}\r
}\r
origTime = delay = aaitem;\r
if (delay <= 0.0) return;\r
- if (delay >= d.remtime || nenhere != 0) {\r
+ if (delay >= state.remtime || nenhere != 0) {\r
prout("Are you sure? ");\r
if (ja() == 0) return;\r
}\r
do {\r
if (delay <= 0) resting = 0;\r
if (resting == 0) {\r
- cramf(d.remtime, 0, 2);\r
+ cramf(state.remtime, 0, 2);\r
prout(" stardates left.");\r
return;\r
}\r
/* Repair Deathray if long rest at starbase */\r
if (origTime-delay >= 9.99 && condit == IHDOCKED)\r
damage[DDRAY] = 0.0;\r
- } while (d.galaxy[quadx][quady] != 1000); // leave if quadrant supernovas\r
+ } while (state.galaxy[quadx][quady] != 1000); // leave if quadrant supernovas\r
\r
resting = 0;\r
Time = 0;\r
quad[ix][iy] = IHDOT;\r
crmena(1, IHSTAR, 2, ix, iy);\r
prout(" novas.");\r
- d.galaxy[quadx][quady] -= 1;\r
- d.starkl++;\r
+ state.galaxy[quadx][quady] -= 1;\r
+ state.starkl++;\r
\r
/* Set up stack to recursively trigger adjacent stars */\r
bot = top = top2 = 1;\r
top2++;\r
hits[top2][1]=ii;\r
hits[top2][2]=jj;\r
- d.galaxy[quadx][quady] -= 1;\r
- d.starkl++;\r
+ state.galaxy[quadx][quady] -= 1;\r
+ state.starkl++;\r
crmena(1, IHSTAR, 2, ii, jj);\r
prout(" novas.");\r
quad[ii][jj] = IHDOT;\r
break;\r
case IHP: /* Destroy planet */\r
- d.newstuf[quadx][quady] -= 1;\r
- d.nplankl++;\r
+ state.newstuf[quadx][quady] -= 1;\r
+ state.nplankl++;\r
crmena(1, IHP, 2, ii, jj);\r
prout(" destroyed.");\r
- d.plnets[iplnet] = nulplanet;\r
+ state.plnets[iplnet] = nulplanet;\r
iplnet = plnetx = plnety = 0;\r
if (landed == 1) {\r
finish(FPNOVA);\r
quad[ii][jj] = IHDOT;\r
break;\r
case IHB: /* Destroy base */\r
- d.galaxy[quadx][quady] -= 10;\r
- for (i = 1; i <= d.rembase; i++)\r
- if (d.baseqx[i]==quadx && d.baseqy[i]==quady) break;\r
- d.baseqx[i] = d.baseqx[d.rembase];\r
- d.baseqy[i] = d.baseqy[d.rembase];\r
- d.rembase--;\r
+ state.galaxy[quadx][quady] -= 10;\r
+ for (i = 1; i <= state.rembase; i++)\r
+ if (state.baseqx[i]==quadx && state.baseqy[i]==quady) break;\r
+ state.baseqx[i] = state.baseqx[state.rembase];\r
+ state.baseqy[i] = state.baseqy[state.rembase];\r
+ state.rembase--;\r
basex = basey = 0;\r
- d.basekl++;\r
+ state.basekl++;\r
newcnd();\r
crmena(1, IHB, 2, ii, jj);\r
prout(" destroyed.");\r
left of universe */\r
for (nqx = 1; nqx<=8; nqx++) {\r
for (nqy = 1; nqy<=8; nqy++) {\r
- stars += d.galaxy[nqx][nqy] % 10;\r
+ stars += state.galaxy[nqx][nqy] % 10;\r
}\r
}\r
if (stars == 0) return; /* nothing to supernova exists */\r
num = Rand()*stars + 1;\r
for (nqx = 1; nqx<=8; nqx++) {\r
for (nqy = 1; nqy<=8; nqy++) {\r
- num -= d.galaxy[nqx][nqy] % 10;\r
+ num -= state.galaxy[nqx][nqy] % 10;\r
if (num <= 0) break;\r
}\r
if (num <=0) break;\r
if (damage[DRADIO] == 0.0 || condit == IHDOCKED) {\r
skip(1);\r
proutn("Message from Starfleet Command Stardate ");\r
- cramf(d.date, 0, 1);\r
+ cramf(state.date, 0, 1);\r
skip(1);\r
proutn(" Supernova in");\r
cramlc(1, nqx, nqy);\r
else {\r
/* we are in the quadrant! */\r
insipient = 1;\r
- num = Rand()* (d.galaxy[nqx][nqy]%10) + 1;\r
+ num = Rand()* (state.galaxy[nqx][nqy]%10) + 1;\r
for (nsx=1; nsx < 10; nsx++) {\r
for (nsy=1; nsy < 10; nsy++) {\r
if (quad[nsx][nsy]==IHSTAR) {\r
}\r
}\r
/* destroy any Klingons in supernovaed quadrant */\r
- num=d.galaxy[nqx][nqy];\r
+ num=state.galaxy[nqx][nqy];\r
kldead = num/100;\r
comdead = iscdead = 0;\r
- if (nqx==d.isx && nqy == d.isy) {\r
+ if (nqx==state.isx && nqy == state.isy) {\r
/* did in the Supercommander! */\r
- d.nscrem = d.isx = d.isy = isatb = iscate = 0;\r
+ state.nscrem = state.isx = state.isy = isatb = iscate = 0;\r
iscdead = 1;\r
future[FSCMOVE] = future[FSCDBAS] = 1e30;\r
}\r
- d.remkl -= kldead;\r
- if (d.remcom) {\r
- int maxloop = d.remcom, l;\r
+ state.remkl -= kldead;\r
+ if (state.remcom) {\r
+ int maxloop = state.remcom, l;\r
for (l = 1; l <= maxloop; l++) {\r
- if (d.cx[l] == nqx && d.cy[l] == nqy) {\r
- d.cx[l] = d.cx[d.remcom];\r
- d.cy[l] = d.cy[d.remcom];\r
- d.cx[d.remcom] = d.cy[d.remcom] = 0;\r
- d.remcom--;\r
+ if (state.cx[l] == nqx && state.cy[l] == nqy) {\r
+ state.cx[l] = state.cx[state.remcom];\r
+ state.cy[l] = state.cy[state.remcom];\r
+ state.cx[state.remcom] = state.cy[state.remcom] = 0;\r
+ state.remcom--;\r
kldead--;\r
comdead++;\r
- if (d.remcom==0) future[FTBEAM] = 1e30;\r
+ if (state.remcom==0) future[FTBEAM] = 1e30;\r
break;\r
}\r
}\r
}\r
/* destroy Romulans and planets in supernovaed quadrant */\r
- num = d.newstuf[nqx][nqy];\r
- d.newstuf[nqx][nqy] = 0;\r
+ num = state.newstuf[nqx][nqy];\r
+ state.newstuf[nqx][nqy] = 0;\r
nrmdead = num/10;\r
- d.nromrem -= nrmdead;\r
+ state.nromrem -= nrmdead;\r
npdead = num - nrmdead*10;\r
if (npdead) {\r
int l;\r
for (l = 1; l <= inplan; l++)\r
- if (d.plnets[l].x == nqx && d.plnets[l].y == nqy) {\r
- d.plnets[l] = nulplanet;\r
+ if (state.plnets[l].x == nqx && state.plnets[l].y == nqy) {\r
+ state.plnets[l] = nulplanet;\r
}\r
}\r
/* Destroy any base in supernovaed quadrant */\r
- if (d.rembase) {\r
- int maxloop = d.rembase, l;\r
+ if (state.rembase) {\r
+ int maxloop = state.rembase, l;\r
for (l = 1; l <= maxloop; l++)\r
- if (d.baseqx[l]==nqx && d.baseqy[l]==nqy) {\r
- d.baseqx[l] = d.baseqx[d.rembase];\r
- d.baseqy[l] = d.baseqy[d.rembase];\r
- d.baseqx[d.rembase] = d.baseqy[d.rembase] = 0;\r
- d.rembase--;\r
+ if (state.baseqx[l]==nqx && state.baseqy[l]==nqy) {\r
+ state.baseqx[l] = state.baseqx[state.rembase];\r
+ state.baseqy[l] = state.baseqy[state.rembase];\r
+ state.baseqx[state.rembase] = state.baseqy[state.rembase] = 0;\r
+ state.rembase--;\r
break;\r
}\r
}\r
/* If starship caused supernova, tally up destruction */\r
if (insx) {\r
- num = d.galaxy[nqx][nqy] % 100;\r
- d.starkl += num % 10;\r
- d.basekl += num/10;\r
- d.killk += kldead;\r
- d.killc += comdead;\r
- d.nromkl += nrmdead;\r
- d.nplankl += npdead;\r
- d.nsckill += iscdead;\r
+ num = state.galaxy[nqx][nqy] % 100;\r
+ state.starkl += num % 10;\r
+ state.basekl += num/10;\r
+ state.killk += kldead;\r
+ state.killc += comdead;\r
+ state.nromkl += nrmdead;\r
+ state.nplankl += npdead;\r
+ state.nsckill += iscdead;\r
}\r
/* mark supernova in galaxy and in star chart */\r
if ((quadx == nqx && quady == nqy) ||\r
damage[DRADIO] == 0 ||\r
condit == IHDOCKED)\r
starch[nqx][nqy] = 1;\r
- d.galaxy[nqx][nqy] = 1000;\r
+ state.galaxy[nqx][nqy] = 1000;\r
/* If supernova destroys last klingons give special message */\r
- if (d.remkl==0 && (nqx != quadx || nqy != quady)) {\r
+ if (state.remkl==0 && (nqx != quadx || nqy != quady)) {\r
skip(2);\r
if (insx == 0) prout("Lucky you!");\r
proutn("A supernova in");\r