X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=src%2Fevents.c;h=207df90b66088ecba942b22b2b5763d7ae719536;hp=d4eac3f688803d965e05a1c123bbbe3629b82046;hb=ad6b6f3e8316dc43c8f80ca8bc57be091b0076c6;hpb=ac174cf8ec82d71fe16ca5d4318c288586053b6f diff --git a/src/events.c b/src/events.c index d4eac3f..207df90 100644 --- a/src/events.c +++ b/src/events.c @@ -60,9 +60,9 @@ static bool cancelrest(void) void events(void) /* run through the event queue looking for things to do */ { - int istract=0, evcode, i=0, j, k, l; + int evcode, i=0, j, k, l; double fintim = game.state.date + game.optime, datemin, xtime, repair, yank=0; - bool radio_was_broken, ictbeam = false, ipage = false; + bool radio_was_broken, ictbeam = false, ipage = false, istract = false; struct quadrant *pdest, *q; coord w, hold; event *ev, *ev2; @@ -93,6 +93,7 @@ void events(void) radio_was_broken = damaged(DRADIO); + hold.x = hold.y = 0; for (;;) { /* Select earliest extraneous event, evcode==0 if no events */ evcode = FSPY; @@ -120,7 +121,7 @@ void events(void) return; } /* Is life support adequate? */ - if (damaged(DLIFSUP) && game.condit != IHDOCKED) { + if (damaged(DLIFSUP) && game.condition != docked) { if (game.lsupres < xtime && game.damage[DLIFSUP] > game.lsupres) { finish(FLIFESUP); return; @@ -130,7 +131,7 @@ void events(void) } /* Fix devices */ repair = xtime; - if (game.condit == IHDOCKED) repair /= game.docfac; + if (game.condition == docked) repair /= game.docfac; /* Don't fix Deathray here */ for (l=0; l 0.0 && l != DDRAY) @@ -140,9 +141,9 @@ void events(void) prout(_("Lt. Uhura- \"Captain, the sub-space radio is working and")); prout(_(" surveillance reports are coming in.")); skip(1); - if (game.iseenit==0) { + if (!game.iseenit) { attakreport(false); - game.iseenit = 1; + game.iseenit = true; } rechart(); prout(_(" The star chart is now up to date.\"")); @@ -152,7 +153,7 @@ void events(void) game.optime -= xtime; switch (evcode) { case FSNOVA: /* Supernova */ - if (!ipage) pause_game(1); + if (!ipage) pause_game(true); ipage=true; snova(false, NULL); schedule(FSNOVA, expran(0.5*game.intime)); @@ -160,8 +161,8 @@ void events(void) break; case FSPY: /* Check with spy to see if S.C. should tractor beam */ if (game.state.nscrem == 0 || - ictbeam+istract > 0 || - game.condit==IHDOCKED || game.isatb==1 || game.iscate==1) return; + ictbeam || istract || + game.condition==docked || game.isatb==1 || game.iscate) return; if (game.ientesc || (game.energy < 2000 && game.torps < 4 && game.shield < 1250) || (damaged(DPHASER) && (damaged(DPHOTON) || game.torps < 4)) || @@ -169,8 +170,8 @@ void events(void) (game.energy < 2500 || damaged(DPHASER)) && (game.torps < 5 || damaged(DPHOTON)))) { /* Tractor-beam her! */ - istract=1; - yank = square(game.state.kscmdr.x-game.quadrant.x) + square(game.state.kscmdr.y-game.quadrant.y); + istract = true; + yank = distance(game.state.kscmdr, game.quadrant); /********* fall through to FTBEAM code ***********/ } else return; @@ -182,7 +183,7 @@ void events(void) } i = Rand()*game.state.remcom+1.0; yank = square(game.state.kcmdr[i].x-game.quadrant.x) + square(game.state.kcmdr[i].y-game.quadrant.y); - if (istract || game.condit == IHDOCKED || yank == 0) { + if (istract || game.condition == docked || yank == 0) { /* Drats! Have to reschedule */ schedule(FTBEAM, game.optime + expran(1.5*game.intime/game.state.remcom)); @@ -191,10 +192,10 @@ void events(void) } /* tractor beaming cases merge here */ yank = sqrt(yank); - if (!ipage) pause_game(1); + if (!ipage) pause_game(true); ipage=true; game.optime = (10.0/(7.5*7.5))*yank; /* 7.5 is yank rate (warp 7.5) */ - ictbeam = 1; + ictbeam = true; skip(1); proutn("***"); crmshp(); @@ -202,18 +203,18 @@ void events(void) /* If Kirk & Co. screwing around on planet, handle */ atover(true); /* atover(true) is Grab */ if (game.alldone) return; - if (game.icraft == 1) { /* Caught in Galileo? */ + if (game.icraft) { /* Caught in Galileo? */ finish(FSTRACTOR); return; } /* Check to see if shuttle is aboard */ - if (game.iscraft==0) { + if (game.iscraft == offship) { skip(1); if (Rand() > 0.5) { prout(_("Galileo, left on the planet surface, is captured")); prout(_("by aliens and made into a flying McDonald's.")); game.damage[DSHUTTL] = -10; - game.iscraft = -1; + game.iscraft = removed; } else { prout(_("Galileo, left on the planet surface, is well hidden.")); @@ -223,7 +224,7 @@ void events(void) game.quadrant = game.state.kscmdr; else game.quadrant = game.state.kcmdr[i]; - iran(QUADSIZE, &game.sector.x, &game.sector.y); + game.sector = randplace(QUADSIZE); crmshp(); proutn(_(" is pulled to ")); proutn(cramlc(quadrant, game.quadrant)); @@ -235,8 +236,8 @@ void events(void) } if (!game.shldup) { if (!damaged(DSHIELD) && game.shield > 0) { - doshield(2); /* Shldsup */ - game.shldchg=0; + doshield(true); /* raise shields */ + game.shldchg=false; } else prout(_("(Shields not currently useable.)")); } @@ -249,7 +250,7 @@ void events(void) break; case FSNAP: /* Snapshot of the universe (for time warp) */ game.snapsht = game.state; - game.state.snap = 1; + game.state.snap = true; schedule(FSNAP, expran(0.5 * game.intime)); break; case FBATTAK: /* Commander attacks starbase */ @@ -282,11 +283,11 @@ void events(void) if (game.isatb) /* extra time if SC already attacking */ postpone(FCDBAS, scheduled(FSCDBAS)-game.state.date); game.future[FBATTAK].date = game.future[FCDBAS].date + expran(0.3*game.intime); - game.iseenit = 0; - if (!damaged(DRADIO) && game.condit != IHDOCKED) + game.iseenit = false; + if (!damaged(DRADIO) && game.condition != docked) break; /* No warning :-( */ - game.iseenit = 1; - if (!ipage) pause_game(1); + game.iseenit = true; + if (!ipage) pause_game(true); ipage = true; skip(1); proutn(_("Lt. Uhura- \"Captain, the starbase in ")); @@ -332,9 +333,9 @@ void events(void) prout(_("Spock- \"Captain, I believe the starbase has been destroyed.\"")); } else if (game.state.rembase != 1 && - (!damaged(DRADIO) || game.condit == IHDOCKED)) { + (!damaged(DRADIO) || game.condition == docked)) { /* Get word via subspace radio */ - if (!ipage) pause_game(1); + if (!ipage) pause_game(true); ipage = true; skip(1); prout(_("Lt. Uhura- \"Captain, Starfleet Command reports that")); @@ -363,9 +364,9 @@ void events(void) break; case FSCMOVE: /* Supercommander moves */ schedule(FSCMOVE, 0.2777); - if (game.ientesc+istract==0 && - game.isatb != 1 && - (game.iscate != 1 || !game.justin)) scom(&ipage); + if (!game.ientesc && !istract && game.isatb != 1 && + (!game.iscate || !game.justin)) + scom(&ipage); break; case FDSPROB: /* Move deep space probe */ schedule(FDSPROB, 0.01); @@ -379,9 +380,9 @@ void events(void) if (!VALID_QUADRANT(i, j) || game.state.galaxy[game.probec.x][game.probec.y].supernova) { // Left galaxy or ran into supernova - if (!damaged(DRADIO) || game.condit == IHDOCKED) { - if (ipage==0) pause_game(1); - ipage = 1; + if (!damaged(DRADIO) || game.condition == docked) { + if (!ipage) pause_game(true); + ipage = true; skip(1); proutn(_("Lt. Uhura- \"The deep space probe ")); if (!VALID_QUADRANT(j, i)) @@ -393,9 +394,9 @@ void events(void) unschedule(FDSPROB); break; } - if (!damaged(DRADIO) || game.condit == IHDOCKED) { - if (ipage==0) pause_game(1); - ipage = 1; + if (!damaged(DRADIO) || game.condition == docked) { + if (!ipage) pause_game(true); + ipage = true; skip(1); proutn(_("Lt. Uhura- \"The deep space probe is now in ")); proutn(cramlc(quadrant, game.probec)); @@ -405,7 +406,7 @@ void events(void) pdest = &game.state.galaxy[game.probec.x][game.probec.y]; /* Update star chart if Radio is working or have access to radio. */ - if (!damaged(DRADIO) || game.condit == IHDOCKED) { + if (!damaged(DRADIO) || game.condition == docked) { struct page *chp = &game.state.chart[game.probec.x][game.probec.y]; chp->klingons = pdest->klingons; @@ -431,7 +432,7 @@ void events(void) which has some stars which are inhabited and not already under attack, which is not supernova'ed, and which has some Klingons in it */ - iran(GALSIZE, &w.x, &w.y); + w = randplace(GALSIZE); q = &game.state.galaxy[w.x][w.y]; } while (--i && (same(game.quadrant, w) || q->planet == NOPLANET || @@ -449,10 +450,10 @@ void events(void) q->status = distressed; /* tell the captain about it if we can */ - if (!damaged(DRADIO) || game.condit == IHDOCKED) + if (!damaged(DRADIO) || game.condition == docked) { prout("Uhura- Captain, %s in %s reports it is under attack", - systemname(q->planet), cramlc(quadrant, w)); + systnames[q->planet], cramlc(quadrant, w)); prout("by a Klingon invasion fleet."); if (cancelrest()) return; @@ -473,10 +474,10 @@ void events(void) ev2->quadrant = ev->quadrant; /* report the disaster if we can */ - if (!damaged(DRADIO) || game.condit == IHDOCKED) + if (!damaged(DRADIO) || game.condition == docked) { prout("Uhura- We've lost contact with starsystem %s", - systemname(q->planet)); + systnames[q->planet]); prout("in %s.\n", cramlc(quadrant, ev->quadrant)); } break; @@ -521,20 +522,20 @@ void events(void) game.state.remkl++; q->klingons++; if (same(game.quadrant, w)) - newkling(++game.klhere, &hold); + newkling(++game.klhere); /* recompute time left */ game.state.remtime = game.state.remres/(game.state.remkl+4*game.state.remcom); /* report the disaster if we can */ - if (!damaged(DRADIO) || game.condit == IHDOCKED) + if (!damaged(DRADIO) || game.condition == docked) { if (same(game.quadrant, w)) { prout("Spock- sensors indicate the Klingons have"); - prout("launched a warship from %s.",systemname(q->planet)); + prout("launched a warship from %s.", systnames[q->planet]); } else { prout("Uhura- Starfleet reports increased Klingon activity"); if (q->planet != NOPLANET) - proutn("near %s", systemname(q->planet)); + proutn("near %s", systnames[q->planet]); prout("in %s.\n", cramlc(quadrant, w)); } } @@ -591,7 +592,7 @@ void wait(void) if (game.alldone) return; delay -= temp; /* Repair Deathray if long rest at starbase */ - if (origTime-delay >= 9.99 && game.condit == IHDOCKED) + if (origTime-delay >= 9.99 && game.condition == docked) game.damage[DDRAY] = 0.0; } while // leave if quadrant supernovas @@ -601,6 +602,14 @@ void wait(void) game.optime = 0; } +/* + * A nova occurs. It is the result of having a star hit with a + * photon torpedo, or possibly of a probe warhead going off. + * Stars that go nova cause stars which surround them to undergo + * the same probabilistic process. Klingons next to them are + * destroyed. And if the starship is next to it, it gets zapped. + * If the zap is too much, it gets destroyed. + */ void nova(coord nov) /* star goes nova */ { @@ -668,7 +677,7 @@ void nova(coord nov) prout(_(" destroyed.")); DESTROY(&game.state.plnets[game.iplnet]); game.iplnet = game.plnet.x = game.plnet.y = 0; - if (game.landed == 1) { + if (game.landed) { finish(FPNOVA); return; } @@ -713,7 +722,7 @@ void nova(coord nov) kount++; break; case IHK: /* kill klingon */ - deadkl(scratch,iquad, scratch.x, scratch.y); + deadkl(scratch,iquad, scratch); break; case IHC: /* Damage/destroy big enemies */ case IHS: @@ -722,7 +731,7 @@ void nova(coord nov) if (same(game.ks[ll], scratch)) break; game.kpower[ll] -= 800.0; /* If firepower is lost, die */ if (game.kpower[ll] <= 0.0) { - deadkl(scratch, iquad, scratch.x, scratch.y); + deadkl(scratch, iquad, scratch); break; } newc.x = scratch.x + scratch.x - hits[mm][1]; @@ -739,7 +748,7 @@ void nova(coord nov) proutn(_(", blasted into ")); crmena(false, IHBLANK, sector, newc); skip(1); - deadkl(scratch, iquad, newc.x, newc.y); + deadkl(scratch, iquad, newc); break; } if (iquad1 != IHDOT) { @@ -752,8 +761,7 @@ void nova(coord nov) game.quad[scratch.x][scratch.y] = IHDOT; game.quad[newc.x][newc.y] = iquad; game.ks[ll] = newc; - game.kavgd[ll] = sqrt(square(game.sector.x-newc.x)+square(game.sector.y-newc.y)); - game.kdist[ll] = game.kavgd[ll]; + game.kdist[ll] = game.kavgd[ll] = distance(game.sector, newc); skip(1); break; } @@ -819,7 +827,7 @@ void snova(bool induced, coord *w) if (!same(nq, game.quadrant) || game.justin) { /* it isn't here, or we just entered (treat as enroute) */ - if (!damaged(DRADIO) || game.condit == IHDOCKED) { + if (!damaged(DRADIO) || game.condition == docked) { skip(1); prout(_("Message from Starfleet Command Stardate %.2f"), game.state.date); prout(_(" Supernova in %s; caution advised."), @@ -849,7 +857,7 @@ void snova(bool induced, coord *w) prouts("***************"); skip(1); stars(); - game.alldone=1; + game.alldone = true; } } @@ -858,7 +866,8 @@ void snova(bool induced, coord *w) game.state.galaxy[nq.x][nq.y].klingons = 0; if (same(nq, game.state.kscmdr)) { /* did in the Supercommander! */ - game.state.nscrem = game.state.kscmdr.x = game.state.kscmdr.y = game.isatb = game.iscate = 0; + game.state.nscrem = game.state.kscmdr.x = game.state.kscmdr.y = game.isatb = 0; + game.iscate = false; unschedule(FSCMOVE); unschedule(FSCDBAS); } @@ -906,7 +915,7 @@ void snova(bool induced, coord *w) game.state.nplankl += npdead; } /* mark supernova in galaxy and in star chart */ - if (same(game.quadrant, nq) || !damaged(DRADIO) || game.condit == IHDOCKED) + if (same(game.quadrant, nq) || !damaged(DRADIO) || game.condition == docked) game.state.galaxy[nq.x][nq.y].supernova = true; /* If supernova destroys last Klingons give special message */ if (KLINGREM==0 && !same(nq, game.quadrant)) {