X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=src%2Fevents.c;h=37a02d1bc92c93d81fc432fdd8a181e85fc26b32;hp=746911a3b9ff60071eb4bb4b16c535ee4df7f325;hb=a6dfef86203ce8cf59806554ce0239c54a1264ec;hpb=2e04509ec9be1e3ad2a1f8a7e84552d6896f89ab diff --git a/src/events.c b/src/events.c index 746911a..37a02d1 100644 --- a/src/events.c +++ b/src/events.c @@ -22,7 +22,7 @@ int is_scheduled(int evtype) return game.future[evtype].date != FOREVER; } -extern double scheduled(int evtype) +double scheduled(int evtype) /* when will this event happen? */ { return game.future[evtype].date; @@ -36,7 +36,7 @@ event *schedule(int evtype, double offset) } void postpone(int evtype, double offset) -/* poistpone a scheduled event */ +/* postpone a scheduled event */ { game.future[evtype].date += offset; } @@ -62,7 +62,7 @@ void events(void) { 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, istract = false; + bool radio_was_broken, ictbeam = false, istract = false; struct quadrant *pdest, *q; coord w, hold; event *ev, *ev2; @@ -80,7 +80,7 @@ void events(void) case FSCDBAS: proutn("=== SC Base Destroy "); break; case FDSPROB: proutn("=== Probe Move "); break; case FDISTR: proutn("=== Distress Call "); break; - case FENSLV: proutn("=== Enlavement "); break; + case FENSLV: proutn("=== Enslavement "); break; case FREPRO: proutn("=== Klingon Build "); break; } if (is_scheduled(i)) @@ -111,7 +111,8 @@ void events(void) game.state.date = datemin; /* Decrement Federation resources and recompute remaining time */ game.state.remres -= (game.state.remkl+4*game.state.remcom)*xtime; - game.state.remtime = game.state.remres/(game.state.remkl+4*game.state.remcom); + game.state.remtime = game.state.remkl + game.state.remcom > 0 ? + game.state.remres/(game.state.remkl + 4*game.state.remcom) : 99; if (game.state.remtime <=0) { finish(FDEPLETE); return; @@ -145,7 +146,7 @@ void events(void) prout(_(" surveillance reports are coming in.")); skip(1); if (!game.iseenit) { - attakreport(false); + attackreport(false); game.iseenit = true; } rechart(); @@ -156,10 +157,8 @@ void events(void) game.optime -= xtime; switch (evcode) { case FSNOVA: /* Supernova */ - if (!ipage) - pause_game(true); - ipage=true; - snova(false, NULL); + announce(); + supernova(false, NULL); schedule(FSNOVA, expran(0.5*game.intime)); if (game.state.galaxy[game.quadrant.x][game.quadrant.y].supernova) return; @@ -167,7 +166,8 @@ void events(void) case FSPY: /* Check with spy to see if S.C. should tractor beam */ if (game.state.nscrem == 0 || ictbeam || istract || - game.condition==docked || game.isatb==1 || game.iscate) return; + 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)) || @@ -198,9 +198,7 @@ void events(void) } /* tractor beaming cases merge here */ yank = sqrt(yank); - if (!ipage) - pause_game(true); - ipage=true; + announce(); game.optime = (10.0/(7.5*7.5))*yank; /* 7.5 is yank rate (warp 7.5) */ ictbeam = true; skip(1); @@ -272,8 +270,8 @@ void events(void) break; } i = 0; - for_starbases(j) { - for_commanders(k) + for (j = 1; j <= game.state.rembase; j++) { + for (k = 1; k <= game.state.remcom; k++) if (same(game.state.baseq[j], game.state.kcmdr[k]) && !same(game.state.baseq[j], game.quadrant) && !same(game.state.baseq[j], game.state.kscmdr)) { @@ -299,9 +297,7 @@ void events(void) if (!damaged(DRADIO) && game.condition != docked) break; /* No warning :-( */ game.iseenit = true; - if (!ipage) - pause_game(true); - ipage = true; + announce(); skip(1); proutn(_("Lt. Uhura- \"Captain, the starbase in ")); prout(cramlc(quadrant, game.battle)); @@ -324,7 +320,7 @@ void events(void) if (evcode==FCDBAS) { unschedule(FCDBAS); /* find the lucky pair */ - for_commanders(i) + for (i = 1; i <= game.state.remcom; i++) if (same(game.state.kcmdr[i], game.battle)) break; if (i > game.state.remcom || game.state.rembase == 0 || @@ -348,9 +344,7 @@ void events(void) else if (game.state.rembase != 1 && (!damaged(DRADIO) || game.condition == docked)) { /* Get word via subspace radio */ - if (!ipage) - pause_game(true); - ipage = true; + announce(); skip(1); prout(_("Lt. Uhura- \"Captain, Starfleet Command reports that")); proutn(_(" the starbase in ")); @@ -364,7 +358,7 @@ void events(void) } /* Remove Starbase from galaxy */ game.state.galaxy[game.battle.x][game.battle.y].starbase = false; - for_starbases(i) + for (i = 1; i <= game.state.rembase; i++) if (same(game.state.baseq[i], game.battle)) game.state.baseq[i] = game.state.baseq[game.state.rembase]; game.state.rembase--; @@ -380,7 +374,7 @@ void events(void) schedule(FSCMOVE, 0.2777); if (!game.ientesc && !istract && game.isatb != 1 && (!game.iscate || !game.justin)) - scom(&ipage); + supercommander(); break; case FDSPROB: /* Move deep space probe */ schedule(FDSPROB, 0.01); @@ -395,9 +389,7 @@ void events(void) game.state.galaxy[game.probec.x][game.probec.y].supernova) { // Left galaxy or ran into supernova if (!damaged(DRADIO) || game.condition == docked) { - if (!ipage) - pause_game(true); - ipage = true; + announce(); skip(1); proutn(_("Lt. Uhura- \"The deep space probe ")); if (!VALID_QUADRANT(j, i)) @@ -410,9 +402,7 @@ void events(void) break; } if (!damaged(DRADIO) || game.condition == docked) { - if (!ipage) - pause_game(true); - ipage = true; + announce(); skip(1); proutn(_("Lt. Uhura- \"The deep space probe is now in ")); proutn(cramlc(quadrant, game.probec)); @@ -433,7 +423,7 @@ void events(void) game.proben--; // One less to travel if (game.proben == 0 && game.isarmed && pdest->stars) { /* lets blow the sucker! */ - snova(true, &game.probec); + supernova(true, &game.probec); unschedule(FDSPROB); if (game.state.galaxy[game.quadrant.x][game.quadrant.y].supernova) return; @@ -444,14 +434,15 @@ void events(void) /* try a whole bunch of times to find something suitable */ i = 100; do { - /* need a quadrant which is not the current one, - which has some stars which are inhabited and - not already under attack, which is not - supernova'ed, and which has some Klingons in it */ + // need a quadrant which is not the current one, + // which has some stars which are inhabited and + // not already under attack, which is not + // supernova'ed, and which has some Klingons in it w = randplace(GALSIZE); q = &game.state.galaxy[w.x][w.y]; } while (--i && (same(game.quadrant, w) || q->planet == NOPLANET || + game.state.planets[q->planet].inhabited == UNINHABITED || q->supernova || q->status!=secure || q->klingons<=0)); if (i == 0) { /* can't seem to find one; ignore this call */ @@ -468,9 +459,9 @@ void events(void) /* tell the captain about it if we can */ if (!damaged(DRADIO) || game.condition == docked) { - prout("Uhura- Captain, %s in %s reports it is under attack", + prout(_("Uhura- Captain, %s in %s reports it is under attack"), systnames[q->planet], cramlc(quadrant, w)); - prout("by a Klingon invasion fleet."); + prout(_("by a Klingon invasion fleet.")); if (cancelrest()) return; } @@ -492,16 +483,14 @@ void events(void) /* report the disaster if we can */ if (!damaged(DRADIO) || game.condition == docked) { - prout("Uhura- We've lost contact with starsystem %s", + prout(_("Uhura- We've lost contact with starsystem %s"), systnames[q->planet]); - prout("in %s.\n", cramlc(quadrant, ev->quadrant)); + prout(_("in %s.\n"), cramlc(quadrant, ev->quadrant)); } break; case FREPRO: /* Klingon reproduces */ - /* - * If we ever switch to a real event queue, we'll need to - * explicitly retrieve and restore the x and y. - */ + // If we ever switch to a real event queue, we'll need to + // explicitly retrieve and restore the x and y. ev = schedule(FREPRO, expran(1.0 * game.intime)); /* see if current distress call still active */ q = &game.state.galaxy[ev->quadrant.x][ev->quadrant.y]; @@ -541,18 +530,19 @@ void events(void) newkling(++game.klhere); /* recompute time left */ - game.state.remtime = game.state.remres/(game.state.remkl+4*game.state.remcom); + game.state.remtime = game.state.remkl + game.state.remcom > 0 ? + game.state.remres/(game.state.remkl + 4*game.state.remcom) : 99; /* report the disaster if we can */ if (!damaged(DRADIO) || game.condition == docked) { if (same(game.quadrant, w)) { - prout("Spock- sensors indicate the Klingons have"); - prout("launched a warship from %s.", systnames[q->planet]); + prout(_("Spock- sensors indicate the Klingons have")); + prout(_("launched a warship from %s."), systnames[q->planet]); } else { - prout("Uhura- Starfleet reports increased Klingon activity"); + prout(_("Uhura- Starfleet reports increased Klingon activity")); if (q->planet != NOPLANET) - proutn("near %s", systnames[q->planet]); - prout("in %s.\n", cramlc(quadrant, w)); + proutn(_("near %s"), systnames[q->planet]); + prout(_("in %s.\n"), cramlc(quadrant, w)); } } break; @@ -645,7 +635,7 @@ void nova(coord nov) if (Rand() < 0.05) { /* Wow! We've supernova'ed */ - snova(false, &nov); + supernova(false, &nov); return; } @@ -684,7 +674,7 @@ void nova(coord nov) case IHSTAR: /* Affect another star */ if (Rand() < 0.05) { /* This star supernovas */ - snova(false, &scratch); + supernova(false, &scratch); return; } top2++; @@ -701,7 +691,7 @@ void nova(coord nov) game.state.nplankl++; crmena(true, IHP, sector, scratch); prout(_(" destroyed.")); - DESTROY(&game.state.planets[game.iplnet]); + game.state.planets[game.iplnet].pclass = destroyed; game.iplnet = 0; invalidate(game.plnet); if (game.landed) { @@ -712,7 +702,7 @@ void nova(coord nov) break; case IHB: /* Destroy base */ game.state.galaxy[game.quadrant.x][game.quadrant.y].starbase = false; - for_starbases(i) + for (i = 1; i <= game.state.rembase; i++) if (same(game.state.baseq[i], game.quadrant)) break; game.state.baseq[i] = game.state.baseq[game.state.rembase]; @@ -756,7 +746,7 @@ void nova(coord nov) case IHC: /* Damage/destroy big enemies */ case IHS: case IHR: - for_local_enemies(ll) + for (ll = 1; ll <= game.nenhere; ll++) if (same(game.ks[ll], scratch)) break; game.kpower[ll] -= 800.0; /* If firepower is lost, die */ @@ -824,10 +814,10 @@ void nova(coord nov) } -void snova(bool induced, coord *w) +void supernova(bool induced, coord *w) /* star goes supernova */ { - int num = 0, nrmdead, npdead, kldead; + int num = 0, nrmdead, npdead = 0, kldead, loop; coord nq; if (w != NULL) @@ -837,15 +827,14 @@ void snova(bool induced, coord *w) /* Scheduled supernova -- select star */ /* logic changed here so that we won't favor quadrants in top left of universe */ - for_quadrants(nq.x) { - for_quadrants(nq.y) { + for (nq.x = 1; nq.x <= GALSIZE; nq.x++) + for (nq.y = 1; nq.y <= GALSIZE; nq.y++) stars += game.state.galaxy[nq.x][nq.y].stars; - } - } - if (stars == 0) return; /* nothing to supernova exists */ + if (stars == 0) + return; /* nothing to supernova exists */ num = Rand()*stars + 1; - for_quadrants(nq.x) { - for_quadrants(nq.y) { + for (nq.x = 1; nq.x <= GALSIZE; nq.x++) { + for (nq.y = 1; nq.y <= GALSIZE; nq.y++) { num -= game.state.galaxy[nq.x][nq.y].stars; if (num <= 0) break; @@ -873,8 +862,8 @@ void snova(bool induced, coord *w) coord ns; /* we are in the quadrant! */ num = Rand()* game.state.galaxy[nq.x][nq.y].stars + 1; - for_sectors(ns.x) { - for_sectors(ns.y) { + for (ns.x = 1; ns.x <= QUADSIZE; ns.x++) { + for (ns.y = 1; ns.y <= QUADSIZE; ns.y++) { if (game.quad[ns.x][ns.y]==IHSTAR) { num--; if (num==0) @@ -927,13 +916,12 @@ void snova(bool induced, coord *w) nrmdead = game.state.galaxy[nq.x][nq.y].romulans; game.state.galaxy[nq.x][nq.y].romulans = 0; game.state.nromrem -= nrmdead; - npdead = num - nrmdead*10; - if (npdead) { - int loop; - for (loop = 0; loop < game.inplan; loop++) - if (same(game.state.planets[loop].w, nq)) { - DESTROY(&game.state.planets[loop]); - } + /* Destroy planets */ + for (loop = 0; loop < game.inplan; loop++) { + if (same(game.state.planets[loop].w, nq)) { + game.state.planets[loop].pclass = destroyed; + npdead++; + } } /* Destroy any base in supernovaed quadrant */ if (game.state.rembase) { @@ -956,7 +944,7 @@ void snova(bool induced, coord *w) 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)) { + if ((game.state.remkl + game.state.remcom + game.state.nscrem)==0 && !same(nq, game.quadrant)) { skip(2); if (!induced) prout(_("Lucky you!"));