X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=src%2Fevents.c;h=3362fddf818368d526d4ceb6372207c797ac8502;hp=a35c690e4f61e735de9e18625959427fbd7f8d85;hb=c873e794bf5a029fef3a5ee5385cc0fec6220fa0;hpb=3e238aa49df1209b441034e2921fcc69dd331234 diff --git a/src/events.c b/src/events.c index a35c690..3362fdd 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,10 +62,11 @@ 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, istract = false; + bool ictbeam = false, istract = false; struct quadrant *pdest, *q; coord w, hold; event *ev, *ev2; + bool fixed_dev[NDEVICES]; if (idebug) { prout("=== EVENTS from %.2f to %.2f:", game.state.date, fintim); @@ -80,7 +81,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)) @@ -91,8 +92,6 @@ void events(void) } } - radio_was_broken = damaged(DRADIO); - hold.x = hold.y = 0; for (;;) { /* Select earliest extraneous event, evcode==0 if no events */ @@ -137,11 +136,18 @@ void events(void) if (game.condition == docked) repair /= game.docfac; /* Don't fix Deathray here */ - for (l=0; l 0.0 && l != DDRAY) - game.damage[l] -= (game.damage[l]-repair > 0.0 ? repair : game.damage[l]); + for (l=0; l 0.0 && l != DDRAY) { + double reminder = (game.damage[l] > repair ? + game.damage[l] - repair : .0); + game.damage[l] = reminder; + if (!(reminder > 0)) + fixed_dev[l] = true; + } + } /* If radio repaired, update star chart and attack reports */ - if (radio_was_broken && !damaged(DRADIO)) { + if (fixed_dev[DRADIO]) { prout(_("Lt. Uhura- \"Captain, the sub-space radio is working and")); prout(_(" surveillance reports are coming in.")); skip(1); @@ -149,10 +155,11 @@ void events(void) attackreport(false); game.iseenit = true; } - rechart(); prout(_(" The star chart is now up to date.\"")); skip(1); } + if (fixed_dev[DRADIO] || fixed_dev[DLRSENS] || fixed_dev[DSRSENS]) + rechart(); /* Cause extraneous event EVCODE to occur */ game.optime -= xtime; switch (evcode) { @@ -166,7 +173,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)) || @@ -540,7 +548,7 @@ void events(void) } else { prout(_("Uhura- Starfleet reports increased Klingon activity")); if (q->planet != NOPLANET) - proutn(_("near %s"), systnames[q->planet]); + proutn(_("near %s "), systnames[q->planet]); prout(_("in %s.\n"), cramlc(quadrant, w)); } } @@ -894,7 +902,11 @@ void supernova(bool induced, coord *w) game.state.nscrem = game.state.kscmdr.x = game.state.kscmdr.y = game.isatb = 0; game.iscate = false; unschedule(FSCMOVE); + } + if (same(nq, game.battle)) { unschedule(FSCDBAS); + unschedule(FCDBAS); + invalidate(game.battle); } if (game.state.remcom) { int maxloop = game.state.remcom, l;