#include "sst.h" static char classes[4][2]={"","M","N","O"}; static int height; static int consumeTime(void) { /* I think most of this avoidance was caused by overlay scheme. Let's see what happens if all events can occur here */ // double asave; ididit = 1; #if 0 /* Don't wory about this */ if (future[FTBEAM] <= d.date+Time && d.remcom != 0 && condit != IHDOCKED) { /* We are about to be tractor beamed -- operation fails */ return 1; } #endif // asave = future[FSNOVA]; // future[FSNOVA] = 1e30; /* defer supernovas */ events(); /* Used to avoid if future[FSCMOVE] within time */ // future[FSNOVA] = asave; /*fails if game over, quadrant super-novas or we've moved to new quadrant*/ if (alldone || d.galaxy[quadx][quady] == 1000 || justin != 0) return 1; return 0; } void preport(void) { int iknow = 0, i; skip(1); chew(); prout("Spock- \"Planet report follows, Captain.\""); skip(1); for (i = 1; i <= inplan; i++) { if (d.plnets[i].known #ifdef DEBUG || ( idebug && d.plnets[i].x !=0) #endif ) { iknow = 1; #ifdef DEBUG if (idebug && d.plnets[i].known==0) proutn("(Unknown) "); #endif cramlc(1, d.plnets[i].x, d.plnets[i].y); proutn(" class "); proutn(classes[d.plnets[i].pclass]); proutn(" "); if (d.plnets[i].crystals == 0) proutn("no "); prout("dilithium crystals present."); if (d.plnets[i].known==2) prout(" Shuttle Craft Galileo on surface."); } } if (iknow==0) prout("No information available."); } void orbit(void) { double asave; skip(1); chew(); ididit=0; if (inorbit!=0) { prout("Already in standard orbit."); return; } if (damage[DWARPEN] != 0 && damage[DIMPULS] != 0) { prout("Both warp and impulse engines damaged."); return; } if (plnetx == 0 || abs(sectx-plnetx) > 1 || abs(secty-plnety) > 1) { crmshp(); prout(" not adjacent to planet.\n"); return; } Time = 0.02+0.03*Rand(); prout("Helmsman Sulu- \"Entering standard orbit, Sir.\""); newcnd(); if (consumeTime()) return; proutn("Sulu- \"Entered orbit at altitude "); cramf(height = (1400.+7200.*Rand()), 0, 2); prout(" kilometers.\""); inorbit = 1; return; } void sensor(void) { skip(1); chew(); if (damage[DSRSENS] != 0.0) { prout("Short range sensors damaged."); return; } if (plnetx == 0) { prout("No planet in this quadrant."); return; } proutn("Spock- \"Sensor scan for"); cramlc(1, quadx, quady); prout("-"); skip(1); proutn(" Planet at"); cramlc(2, plnetx, plnety); proutn(" is of class "); proutn(classes[d.plnets[iplnet].pclass]); prout("."); if (d.plnets[iplnet].known==2) prout(" Sensors show Galileo still on surface."); proutn(" Readings indicate"); if (d.plnets[iplnet].crystals == 0) proutn(" no"); prout(" dilithium crystals present.\""); if (d.plnets[iplnet].known == 0) d.plnets[iplnet].known = 1; return; } void beam(void) { chew(); skip(1); if (damage[DTRANSP] != 0) { prout("Transporter damaged."); if (damage[DSHUTTL]==0 && (d.plnets[iplnet].known==2 || iscraft == 1)) { skip(1); prout("Spock- \"May I suggest the shuttle craft, Sir?\" "); if (ja() != 0) shuttle(); } return; } if (inorbit==0) { crmshp(); prout(" not in standard orbit."); return; } if (shldup!=0) { prout("Impossible to transport through shields."); return; } if (d.plnets[iplnet].known==0) { prout("Spock- \"Captain, we have no information on this planet"); prout(" and Starfleet Regulations clearly state that in this situation"); prout(" you may not go down.\""); return; } if (landed==1) { /* Coming from planet */ if (d.plnets[iplnet].known==2) { proutn("Spock- \"Wouldn't you rather take the Galileo?\" "); if (ja() != 0) { chew(); return; } prout("Your crew hides the Galileo to prevent capture by aliens."); } prout("Landing party assembled, ready to beam up."); skip(1); prout("Kirk whips out communicator..."); prouts("BEEP BEEP BEEP"); skip(2); prout("\"Kirk to enterprise- Lock on coordinates...energize.\""); } else { /* Going to planet */ if (d.plnets[iplnet].crystals==0) { prout("Spock- \"Captain, I fail to see the logic in"); prout(" exploring a planet with no dilithium crystals."); proutn(" Are you sure this is wise?\" "); if (ja()==0) { chew(); return; } } prout("Scotty- \"Transporter room ready, Sir.\""); skip(1); prout("Kirk, and landing party prepare to beam down to planet surface."); skip(1); prout("Kirk- \"Energize.\""); } skip(1); prouts("WWHOOOIIIIIRRRRREEEE.E.E. . . . . . ."); skip(2); if (Rand() > 0.98) { prouts("BOOOIIIOOOIIOOOOIIIOIING . . ."); skip(2); prout("Scotty- \"Oh my God! I've lost them.\""); finish(FLOST); return; } prouts(". . . . . . .E.E.EEEERRRRRIIIIIOOOHWW"); skip(2); prout("Transport complete."); landed = -landed; if (landed==1 && d.plnets[iplnet].known==2) { prout("The shuttle craft Galileo is here!"); } if (landed!=1 && imine==1) { icrystl = 1; cryprob = 0.05; } imine = 0; return; } void mine(void) { ididit = 0; skip(1); chew(); if (landed!= 1) { prout("Mining party not on planet."); return; } if (d.plnets[iplnet].crystals == 0) { prout("No dilithium crystals on this planet."); return; } if (imine == 1) { prout("You've already mined enough crystals for this trip."); return; } if (icrystl == 1 && cryprob == 0.05) { proutn("With all those fresh crystals aboard the "); crmshp(); skip(1); prout("there's no reason to mine more at this time."); return; } Time = (0.1+0.2*Rand())*d.plnets[iplnet].pclass; if (consumeTime()) return; prout("Mining operation complete."); imine = 1; return; } void usecrystals(void) { skip(1); chew(); if (icrystl!=1) { prout("No dilithium crystals available."); return; } if (energy >= 1000) { prout("Spock- \"Captain, Starfleet Regulations prohibit such an operation"); prout(" except when condition Yellow exists."); return; } prout("Spock- \"Captain, I must warn you that loading"); prout(" raw dilithium crystals into the ship's power"); prout(" system may risk a severe explosion."); proutn(" Are you sure this is wise?\" "); if (ja()==0) { chew(); return; } skip(1); prout("Engineering Officer Scott- \"(GULP) Aye Sir."); prout(" Mr. Spock and I will try it.\""); skip(1); prout("Spock- \"Crystals in place, Sir."); prout(" Ready to activate circuit.\""); skip(1); prouts("Scotty- \"Keep your fingers crossed, Sir!\""); skip(1); if (Rand() <= cryprob) { prouts(" \"Activating now! - - No good! It's***"); skip(2); prouts("***RED ALERT! RED A*L********************************"); skip(1); stars(); prouts("****************** KA-BOOM!!!! *******************"); skip(1); kaboom(); return; } energy += 5000.0*(1.0 + 0.9*Rand()); prouts(" \"Activating now! - - "); prout("The instruments"); prout(" are going crazy, but I think it's"); prout(" going to work!! Congratulations, Sir!\""); cryprob *= 2.0; return; } void shuttle(void) { chew(); skip(1); ididit = 0; if(damage[DSHUTTL] != 0.0) { if (damage[DSHUTTL] == -1.0) { if (inorbit && d.plnets[iplnet].known == 2) prout("Ye Faerie Queene has no shuttle craft bay to dock it at."); else prout("Ye Faerie Queene had no shuttle craft."); } else if (damage[DSHUTTL] > 0) prout("The Galileo is damaged."); else prout("Shuttle craft is now serving Big Mac's."); return; } if (inorbit==0) { crmshp(); prout(" not in standard orbit."); return; } if ((d.plnets[iplnet].known != 2) && iscraft != 1) { prout("Shuttle craft not currently available."); return; } if (landed==-1 && d.plnets[iplnet].known==2) { prout("You will have to beam down to retrieve the shuttle craft."); return; } if (shldup!=0 || condit == IHDOCKED) { prout("Shuttle craft cannot pass through shields."); return; } if (d.plnets[iplnet].known==0) { prout("Spock- \"Captain, we have no information on this planet"); prout(" and Starfleet Regulations clearly state that in this situation"); prout(" you may not fly down.\""); return; } Time = 3.0e-5*height; if (Time >= 0.8*d.remtime) { prout("First Officer Spock- \"Captain, I compute that such"); prout(" a maneuver would require approximately "); cramf(100*Time/d.remtime,0,4); prout("% of our"); prout("remaining time."); prout("Are you sure this is wise?\" "); if (ja()==0) { Time = 0.0; return; } } if (landed == 1) { /* Kirk on planet */ if (iscraft==1) { /* Galileo on ship! */ if (damage[DTRANSP]==0) { proutn("Spock- \"Would you rather use the transporter?\" "); if (ja() != 0) { beam(); return; } proutn("Shuttle crew"); } else proutn("Rescue party"); prout(" boards Galileo and swoops toward planet surface."); iscraft = 0; skip(1); if (consumeTime()) return; d.plnets[iplnet].known=2; prout("Trip complete."); return; } else { /* Ready to go back to ship */ prout("You and your mining party board the"); prout("shuttle craft for the trip back to the Enterprise."); skip(1); prout("The short hop begins . . ."); d.plnets[iplnet].known=1; icraft = 1; skip(1); landed = -1; if (consumeTime()) return; iscraft = 1; icraft = 0; if (imine!=0) { icrystl = 1; cryprob = 0.05; } imine = 0; prout("Trip complete."); return; } } else { /* Kirk on ship */ /* and so is Galileo */ prout("Mining party assembles in the hangar deck,"); prout("ready to board the shuttle craft \"Galileo\"."); skip(1); prouts("The hangar doors open; the trip begins."); skip(1); icraft = 1; iscraft = 0; if (consumeTime()) return; d.plnets[iplnet].known = 2; landed = 1; icraft = 0; prout("Trip complete"); return; } } void deathray(void) { double r = Rand(); ididit = 0; skip(1); chew(); if (ship != IHE) { prout("Ye Faerie Queene has no death ray."); return; } if (nenhere==0) { prout("Sulu- \"But Sir, there are no enemies in this quadrant.\""); return; } if (damage[DDRAY] > 0.0) { prout("Death Ray is damaged."); return; } prout("Spock- \"Captain, the 'Experimental Death Ray'"); prout(" is highly unpredictable. Considering the alternatives,"); prout(" are you sure this is wise?\" "); if (ja()==0) return; prout("Spock- \"Acknowledged.\""); skip(1); ididit=1; prouts("WHOOEE ... WHOOEE ... WHOOEE ... WHOOEE"); skip(1); prout("Crew scrambles in emergency preparation."); prout("Spock and Scotty ready the death ray and"); prout("prepare to channel all ship's power to the device."); skip(1); prout("Spock- \"Preparations complete, sir.\""); prout("Kirk- \"Engage!\""); skip(1); prouts("WHIRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR"); skip(1); if (r > .30) { prouts("Sulu- \"Captain! It's working!\""); skip(2); while (nenhere > 0) { deadkl(kx[1],ky[1],quad[kx[1]][ky[1]],kx[1],ky[1]); } prout("Ensign Chekov- \"Congratulations, Captain!\""); if (d.remkl == 0) finish(FWON); prout("Spock- \"Captain, I believe the `Experimental Death Ray'"); if (Rand() <= 0.05) { prout(" is still operational.\""); } else { prout(" has been rendered dysfunctional.\""); damage[DDRAY] = 39.95; } return; } r = Rand(); // Pick failure method if (r <= .30) { prouts("Sulu- \"Captain! It's working!\""); skip(1); prouts("***RED ALERT! RED ALERT!"); skip(1); prout("***MATTER-ANTIMATTER IMPLOSION IMMINENT!"); skip(1); prouts("***RED ALERT! RED A*L********************************"); skip(1); stars(); prouts("****************** KA-BOOM!!!! *******************"); skip(1); kaboom(); return; } if (r <= .55) { prouts("Sulu- \"Captain! Yagabandaghangrapl, brachriigringlanbla!\""); skip(1); prout("Lt. Uhura- \"Graaeek! Graaeek!\""); skip(1); prout("Spock- \"Fascinating! . . . All humans aboard"); prout(" have apparently been transformed into strange mutations."); prout(" Vulcans do not seem to be affected."); skip(1); prout("Kirk- \"Raauch! Raauch!\""); finish(FDRAY); return; } if (r <= 0.75) { int i,j; prouts("Sulu- \"Captain! It's --WHAT?!?!\""); skip(2); proutn("Spock- \"I believe the word is"); prouts(" *ASTONISHING*"); prout(" Mr. Sulu."); for (i=1; i<=10; i++) for (j=1; j<=10; j++) if (quad[i][j] == IHDOT) quad[i][j] = IHQUEST; prout(" Captain, our quadrant is now infested with"); prouts(" - - - - - - *THINGS*."); skip(1); prout(" I have no logical explanation.\""); return; } prouts("Sulu- \"Captain! The Death Ray is creating tribbles!\""); skip(1); prout("Scotty- \"There are so many tribbles down here"); prout(" in Engineering, we can't move for 'em, Captain.\""); finish(FTRIBBLE); return; }