X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=src%2Fevents.c;h=37a02d1bc92c93d81fc432fdd8a181e85fc26b32;hp=072c2e6d95a2b39e56b58caf8dc466fedbe6bc91;hb=a6dfef86203ce8cf59806554ce0239c54a1264ec;hpb=cbb2d987e8c23c6c25bd441fdef5401d5a89289e diff --git a/src/events.c b/src/events.c index 072c2e6..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; } @@ -67,8 +67,6 @@ void events(void) coord w, hold; event *ev, *ev2; - pause_reset(); - if (idebug) { prout("=== EVENTS from %.2f to %.2f:", game.state.date, fintim); for (i = 1; i < NEVENTS; i++) { @@ -82,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)) @@ -113,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; @@ -158,7 +157,7 @@ void events(void) game.optime -= xtime; switch (evcode) { case FSNOVA: /* Supernova */ - pause_game(true); + announce(); supernova(false, NULL); schedule(FSNOVA, expran(0.5*game.intime)); if (game.state.galaxy[game.quadrant.x][game.quadrant.y].supernova) @@ -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,7 +198,7 @@ void events(void) } /* tractor beaming cases merge here */ yank = sqrt(yank); - pause_game(true); + announce(); game.optime = (10.0/(7.5*7.5))*yank; /* 7.5 is yank rate (warp 7.5) */ ictbeam = true; skip(1); @@ -270,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)) { @@ -297,7 +297,7 @@ void events(void) if (!damaged(DRADIO) && game.condition != docked) break; /* No warning :-( */ game.iseenit = true; - pause_game(true); + announce(); skip(1); proutn(_("Lt. Uhura- \"Captain, the starbase in ")); prout(cramlc(quadrant, game.battle)); @@ -320,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 || @@ -344,7 +344,7 @@ void events(void) else if (game.state.rembase != 1 && (!damaged(DRADIO) || game.condition == docked)) { /* Get word via subspace radio */ - pause_game(true); + announce(); skip(1); prout(_("Lt. Uhura- \"Captain, Starfleet Command reports that")); proutn(_(" the starbase in ")); @@ -358,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--; @@ -389,7 +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) { - pause_game(true); + announce(); skip(1); proutn(_("Lt. Uhura- \"The deep space probe ")); if (!VALID_QUADRANT(j, i)) @@ -402,7 +402,7 @@ void events(void) break; } if (!damaged(DRADIO) || game.condition == docked) { - pause_game(true); + announce(); skip(1); proutn(_("Lt. Uhura- \"The deep space probe is now in ")); proutn(cramlc(quadrant, game.probec)); @@ -434,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 */ @@ -458,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; } @@ -482,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]; @@ -531,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; @@ -691,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) { @@ -702,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]; @@ -746,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 */ @@ -817,7 +817,7 @@ void nova(coord nov) 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) @@ -827,16 +827,14 @@ void supernova(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 */ 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; @@ -864,8 +862,8 @@ void supernova(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) @@ -918,13 +916,12 @@ void supernova(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) { @@ -947,7 +944,7 @@ void supernova(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!"));