X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=src%2Fevents.c;h=7fdf27157544123fc86abd57e31ab597d2e4f206;hp=6f2cac95e9df814c0c607c192a738e90d0079524;hb=b57643c72bc33f1e2b1de642280d3060c5423d10;hpb=9529ed2b7b679ed190a8edd05997ffbc7e6b10c2 diff --git a/src/events.c b/src/events.c index 6f2cac9..7fdf271 100644 --- a/src/events.c +++ b/src/events.c @@ -58,9 +58,9 @@ static bool cancelrest(void) void events(void) { - int ictbeam=0, ipage=0, istract=0, line, i=0, j, k, l, ixhold=0, iyhold=0; + int istract=0, evcode, i=0, j, k, l; double fintim = game.state.date + game.optime, datemin, xtime, repair, yank=0; - int radio_was_broken; + bool radio_was_broken, ictbeam = false, ipage = false; struct quadrant *pdest, *q; coord w, hold; event *ev, *ev2; @@ -92,15 +92,15 @@ void events(void) radio_was_broken = (game.damage[DRADIO] != 0.0); for (;;) { - /* Select earliest extraneous event, line==0 if no events */ - line = FSPY; + /* Select earliest extraneous event, evcode==0 if no events */ + evcode = FSPY; if (game.alldone) return; datemin = fintim; for (l = 1; l < NEVENTS; l++) if (game.future[l].date < datemin) { - line = l; + evcode = l; if (idebug) - prout("== Event %d fires", line); + prout("== Event %d fires", evcode); datemin = game.future[l].date; } xtime = datemin-game.state.date; @@ -141,12 +141,12 @@ void events(void) prout(_(" The star chart is now up to date.\"")); skip(1); } - /* Cause extraneous event LINE to occur */ + /* Cause extraneous event EVCODE to occur */ game.optime -= xtime; - switch (line) { + switch (evcode) { case FSNOVA: /* Supernova */ - if (ipage==0) pause_game(1); - ipage=1; + if (!ipage) pause_game(1); + ipage=true; snova(0,0); schedule(FSNOVA, expran(0.5*game.intime)); if (game.state.galaxy[game.quadrant.x][game.quadrant.y].supernova) return; @@ -168,7 +168,7 @@ void events(void) } else return; case FTBEAM: /* Tractor beam */ - if (line==FTBEAM) { + if (evcode==FTBEAM) { if (game.state.remcom == 0) { unschedule(FTBEAM); break; @@ -184,8 +184,8 @@ void events(void) } /* tractor beaming cases merge here */ yank = sqrt(yank); - if (ipage==0) pause_game(1); - ipage=1; + if (!ipage) pause_game(1); + ipage=true; game.optime = (10.0/(7.5*7.5))*yank; /* 7.5 is yank rate (warp 7.5) */ ictbeam = 1; skip(1); @@ -212,7 +212,7 @@ void events(void) prout(_("Galileo, left on the planet surface, is well hidden.")); } } - if (line==0) + if (evcode==0) game.quadrant = game.state.kscmdr; else game.quadrant = game.state.kcmdr[i]; @@ -279,8 +279,8 @@ void events(void) if (game.damage[DRADIO] != 0.0 && game.condit != IHDOCKED) break; /* No warning :-( */ game.iseenit = 1; - if (ipage==0) pause_game(1); - ipage = 1; + if (!ipage) pause_game(1); + ipage = true; skip(1); proutn(_("Lt. Uhura- \"Captain, the starbase in ")); prout(cramlc(quadrant, game.battle)); @@ -296,12 +296,11 @@ void events(void) game.isatb = 2; if (!game.state.galaxy[game.state.kscmdr.x][game.state.kscmdr.y].starbase) break; /* WAS RETURN! */ - ixhold = game.battle.x; - iyhold = game.battle.y; + hold = game.battle; game.battle = game.state.kscmdr; /* FALL THROUGH */ case FCDBAS: /* Commander succeeds in destroying base */ - if (line==FCDBAS) { + if (evcode==FCDBAS) { unschedule(FCDBAS); /* find the lucky pair */ for_commanders(i) @@ -328,8 +327,8 @@ void events(void) else if (game.state.rembase != 1 && (game.damage[DRADIO] <= 0.0 || game.condit == IHDOCKED)) { /* Get word via subspace radio */ - if (ipage==0) pause_game(1); - ipage = 1; + if (!ipage) pause_game(1); + ipage = true; skip(1); prout(_("Lt. Uhura- \"Captain, Starfleet Command reports that")); proutn(_(" the starbase in ")); @@ -348,8 +347,7 @@ void events(void) game.state.rembase--; if (game.isatb == 2) { /* reinstate a commander's base attack */ - game.battle.x = ixhold; - game.battle.y = iyhold; + game.battle = hold; game.isatb = 0; } else { @@ -446,9 +444,9 @@ void events(void) /* tell the captain about it if we can */ if (game.damage[DRADIO] == 0.0 || game.condit == IHDOCKED) { - prout("Uhura- Captain, starsystem %s in quadrant %s", + prout("Uhura- Captain, %s in %s reports it is under attack", systemname(q->planet), cramlc(quadrant, w)); - prout("is under attack."); + prout("by a Klingon invasion fleet."); if (cancelrest()) return; } @@ -472,7 +470,7 @@ void events(void) { prout("Uhura- We've lost contact with starsystem %s", systemname(q->planet)); - prout("in quadrant %s.\n", cramlc(quadrant, ev->quadrant)); + prout("in %s.\n", cramlc(quadrant, ev->quadrant)); } break; case FREPRO: /* Klingon reproduces */ @@ -487,28 +485,30 @@ void events(void) q->status = secure; break; } - /* reproduce one Klingon */ - w = ev->quadrant; if (game.state.remkl >=MAXKLGAME) break; /* full right now */ - /* this quadrant not ok, pick an adjacent one */ - for (i = w.x - 1; i <= w.x + 1; i++) - { - for (j = w.y - 1; j <= w.y + 1; j++) + /* reproduce one Klingon */ + w = ev->quadrant; + if (game.klhere >= MAXKLQUAD) { + /* this quadrant not ok, pick an adjacent one */ + for (i = w.x - 1; i <= w.x + 1; i++) { - if (!VALID_QUADRANT(i, j)) - continue; - q = &game.state.galaxy[w.x][w.y]; - /* check for this quad ok (not full & no snova) */ - if (q->klingons >= MAXKLQUAD || !q->supernova) - continue; - goto foundit; + for (j = w.y - 1; j <= w.y + 1; j++) + { + if (!VALID_QUADRANT(i, j)) + continue; + q = &game.state.galaxy[w.x][w.y]; + /* check for this quad ok (not full & no snova) */ + if (q->klingons >= MAXKLQUAD || q->supernova) + continue; + goto foundit; + } } + break; /* search for eligible quadrant failed */ + foundit: + w.x = i; + w.y = j; } - break; /* search for eligible quadrant failed */ - foundit: - w.x = i; - w.y = j; /* deliver the child */ game.state.remkl++; @@ -518,6 +518,19 @@ void events(void) /* recompute time left */ game.state.remtime = game.state.remres/(game.state.remkl+4*game.state.remcom); + /* report the disaster if we can */ + if (game.damage[DRADIO] == 0.0 || game.condit == IHDOCKED) + { + if (same(game.quadrant, w)) { + prout("Spock- sensors indicate the Klingons have"); + prout("launched a warship from %s.",systemname(q->planet)); + } else { + prout("Uhura- Starfleet reports increased Klingon activity"); + if (q->planet != NOPLANET) + proutn("near %s", systemname(q->planet)); + prout("in %s.\n", cramlc(quadrant, w)); + } + } break; } }