X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=src%2Fevents.c;h=b4b61214b14cecd18efcb09c2c836c9b7c9aa153;hp=b934b8d88690bd44569cfa4233c3c5bd333c70f6;hb=2c5438d3c22fe863ad8054d214f2afdd061ad43a;hpb=c2847bb7511b0cf8472ba3a0a170a4fedd3b2861 diff --git a/src/events.c b/src/events.c index b934b8d..b4b6121 100644 --- a/src/events.c +++ b/src/events.c @@ -62,11 +62,13 @@ 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; + pause_reset(); + if (idebug) { prout("=== EVENTS from %.2f to %.2f:", game.state.date, fintim); for (i = 1; i < NEVENTS; i++) { @@ -97,7 +99,8 @@ void events(void) for (;;) { /* Select earliest extraneous event, evcode==0 if no events */ evcode = FSPY; - if (game.alldone) return; + if (game.alldone) + return; datemin = fintim; for (l = 1; l < NEVENTS; l++) if (game.future[l].date < datemin) { @@ -127,11 +130,13 @@ void events(void) return; } game.lsupres -= xtime; - if (game.damage[DLIFSUP] <= xtime) game.lsupres = game.inlsr; + if (game.damage[DLIFSUP] <= xtime) + game.lsupres = game.inlsr; } /* Fix devices */ repair = xtime; - if (game.condition == docked) repair /= game.docfac; + if (game.condition == docked) + repair /= game.docfac; /* Don't fix Deathray here */ for (l=0; l 0.0 && l != DDRAY) @@ -142,7 +147,7 @@ void events(void) prout(_(" surveillance reports are coming in.")); skip(1); if (!game.iseenit) { - attakreport(false); + attackreport(false); game.iseenit = true; } rechart(); @@ -153,11 +158,11 @@ void events(void) game.optime -= xtime; switch (evcode) { case FSNOVA: /* Supernova */ - if (!ipage) pause_game(true); - ipage=true; - snova(false, NULL); + pause_game(true); + supernova(false, NULL); schedule(FSNOVA, expran(0.5*game.intime)); - if (game.state.galaxy[game.quadrant.x][game.quadrant.y].supernova) return; + if (game.state.galaxy[game.quadrant.x][game.quadrant.y].supernova) + return; break; case FSPY: /* Check with spy to see if S.C. should tractor beam */ if (game.state.nscrem == 0 || @@ -174,7 +179,8 @@ void events(void) yank = distance(game.state.kscmdr, game.quadrant); /********* fall through to FTBEAM code ***********/ } - else return; + else + return; case FTBEAM: /* Tractor beam */ if (evcode==FTBEAM) { if (game.state.remcom == 0) { @@ -192,8 +198,7 @@ void events(void) } /* tractor beaming cases merge here */ yank = sqrt(yank); - if (!ipage) pause_game(true); - ipage=true; + pause_game(true); game.optime = (10.0/(7.5*7.5))*yank; /* 7.5 is yank rate (warp 7.5) */ ictbeam = true; skip(1); @@ -202,7 +207,8 @@ void events(void) prout(_(" caught in long range tractor beam--")); /* If Kirk & Co. screwing around on planet, handle */ atover(true); /* atover(true) is Grab */ - if (game.alldone) return; + if (game.alldone) + return; if (game.icraft) { /* Caught in Galileo? */ finish(FSTRACTOR); return; @@ -239,14 +245,17 @@ void events(void) doshield(true); /* raise shields */ game.shldchg=false; } - else prout(_("(Shields not currently useable.)")); + else + prout(_("(Shields not currently useable.)")); } newqad(false); /* Adjust finish time to time of tractor beaming */ fintim = game.state.date+game.optime; attack(false); - if (game.state.remcom <= 0) unschedule(FTBEAM); - else schedule(FTBEAM, game.optime+expran(1.5*game.intime/game.state.remcom)); + if (game.state.remcom <= 0) + unschedule(FTBEAM); + else + schedule(FTBEAM, game.optime+expran(1.5*game.intime/game.state.remcom)); break; case FSNAP: /* Snapshot of the universe (for time warp) */ game.snapsht = game.state; @@ -261,15 +270,16 @@ 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)) { i = 1; break; } - if (i == 1) break; + if (i == 1) + break; } if (j>game.state.rembase) { /* no match found -- try later */ @@ -287,8 +297,7 @@ void events(void) if (!damaged(DRADIO) && game.condition != docked) break; /* No warning :-( */ game.iseenit = true; - if (!ipage) pause_game(true); - ipage = true; + pause_game(true); skip(1); proutn(_("Lt. Uhura- \"Captain, the starbase in ")); prout(cramlc(quadrant, game.battle)); @@ -311,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 || @@ -335,8 +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; + pause_game(true); skip(1); prout(_("Lt. Uhura- \"Captain, Starfleet Command reports that")); proutn(_(" the starbase in ")); @@ -344,12 +352,13 @@ void events(void) prout(_(" has been destroyed by")); if (game.isatb == 2) prout(_("the Klingon Super-Commander")); - else prout(_("a Klingon Commander")); + else + prout(_("a Klingon Commander")); game.state.chart[game.battle.x][game.battle.y].starbase = false; } /* 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--; @@ -365,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); @@ -380,8 +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; + pause_game(true); skip(1); proutn(_("Lt. Uhura- \"The deep space probe ")); if (!VALID_QUADRANT(j, i)) @@ -394,8 +402,7 @@ void events(void) break; } if (!damaged(DRADIO) || game.condition == docked) { - if (!ipage) pause_game(true); - ipage = true; + pause_game(true); skip(1); proutn(_("Lt. Uhura- \"The deep space probe is now in ")); proutn(cramlc(quadrant, game.probec)); @@ -416,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; @@ -427,10 +434,10 @@ 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 && @@ -481,10 +488,8 @@ void events(void) } 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]; @@ -553,7 +558,8 @@ void wait(void) game.ididit = false; for (;;) { key = scan(); - if (key != IHEOL) break; + if (key != IHEOL) + break; proutn(_("How long? ")); } chew(); @@ -562,17 +568,20 @@ void wait(void) return; } origTime = delay = aaitem; - if (delay <= 0.0) return; + if (delay <= 0.0) + return; if (delay >= game.state.remtime || game.nenhere != 0) { proutn(_("Are you sure? ")); - if (ja() == false) return; + if (ja() == false) + return; } /* Alternate resting periods (events) with attacks */ game.resting = true; do { - if (delay <= 0) game.resting = false; + if (delay <= 0) + game.resting = false; if (!game.resting) { prout(_("%d stardates left."), (int)game.state.remtime); return; @@ -581,14 +590,18 @@ void wait(void) if (game.nenhere) { double rtime = 1.0 + Rand(); - if (rtime < temp) temp = rtime; + if (rtime < temp) + temp = rtime; game.optime = temp; } - if (game.optime < delay) attack(false); - if (game.alldone) return; + if (game.optime < delay) + attack(false); + if (game.alldone) + return; events(); game.ididit = true; - if (game.alldone) return; + if (game.alldone) + return; delay -= temp; /* Repair Deathray if long rest at starbase */ if (origTime-delay >= 9.99 && game.condition == docked) @@ -620,7 +633,7 @@ void nova(coord nov) if (Rand() < 0.05) { /* Wow! We've supernova'ed */ - snova(false, &nov); + supernova(false, &nov); return; } @@ -641,10 +654,12 @@ void nova(coord nov) for (mm = bot; mm <= top; mm++) for (nn = 1; nn <= 3; nn++) /* nn,j represents coordinates around current */ for (j = 1; j <= 3; j++) { - if (j==2 && nn== 2) continue; + if (j==2 && nn== 2) + continue; scratch.x = hits[mm][1]+nn-2; scratch.y = hits[mm][2]+j-2; - if (!VALID_SECTOR(scratch.y, scratch.x)) continue; + if (!VALID_SECTOR(scratch.y, scratch.x)) + continue; iquad = game.quad[scratch.x][scratch.y]; switch (iquad) { // case IHDOT: /* Empty space ends reaction @@ -657,7 +672,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++; @@ -674,7 +689,7 @@ void nova(coord nov) game.state.nplankl++; crmena(true, IHP, sector, scratch); prout(_(" destroyed.")); - DESTROY(&game.state.plnets[game.iplnet]); + game.state.planets[game.iplnet].pclass = destroyed; game.iplnet = 0; invalidate(game.plnet); if (game.landed) { @@ -685,7 +700,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]; @@ -701,7 +716,8 @@ void nova(coord nov) case IHF: prout(_("***Starship buffeted by nova.")); if (game.shldup) { - if (game.shield >= 2000.0) game.shield -= 2000.0; + if (game.shield >= 2000.0) + game.shield -= 2000.0; else { double diff = 2000.0 - game.shield; game.energy -= diff; @@ -711,7 +727,8 @@ void nova(coord nov) game.damage[DSHIELD] += 0.005*game.damfac*Rand()*diff; } } - else game.energy -= 2000.0; + else + game.energy -= 2000.0; if (game.energy <= 0) { finish(FNOVA); return; @@ -727,8 +744,9 @@ void nova(coord nov) case IHC: /* Damage/destroy big enemies */ case IHS: case IHR: - for_local_enemies(ll) - if (same(game.ks[ll], scratch)) break; + for (ll = 1; ll <= game.nenhere; ll++) + 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); @@ -776,11 +794,15 @@ void nova(coord nov) /* Starship affected by nova -- kick it away. */ game.dist = kount*0.1; - if (icx) icx = (icx < 0 ? -1 : 1); - if (icy) icy = (icy < 0 ? -1 : 1); + if (icx) + icx = (icx < 0 ? -1 : 1); + if (icy) + icy = (icy < 0 ? -1 : 1); game.direc = course[3*(icx+1)+icy+2]; - if (game.direc == 0.0) game.dist = 0.0; - if (game.dist == 0.0) return; + if (game.direc == 0.0) + game.dist = 0.0; + if (game.dist == 0.0) + return; game.optime = 10.0*game.dist/16.0; skip(1); prout(_("Force of nova displaces starship.")); @@ -790,7 +812,7 @@ 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; @@ -803,19 +825,20 @@ 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; + if (num <= 0) + break; } - if (num <=0) break; + if (num <=0) + break; } if (idebug) { proutn("=== Super nova here?"); @@ -837,14 +860,16 @@ 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) break; + if (num==0) + break; } } - if (num==0) break; + if (num==0) + break; } skip(1); @@ -878,7 +903,8 @@ void snova(bool induced, coord *w) invalidate(game.state.kcmdr[game.state.remcom]); game.state.remcom--; kldead--; - if (game.state.remcom==0) unschedule(FTBEAM); + if (game.state.remcom==0) + unschedule(FTBEAM); break; } } @@ -892,8 +918,8 @@ void snova(bool induced, coord *w) if (npdead) { int loop; for (loop = 0; loop < game.inplan; loop++) - if (same(game.state.plnets[loop].w, nq)) { - DESTROY(&game.state.plnets[loop]); + if (same(game.state.planets[loop].w, nq)) { + game.state.planets[loop].pclass = destroyed; } } /* Destroy any base in supernovaed quadrant */ @@ -919,13 +945,15 @@ void snova(bool induced, coord *w) /* If supernova destroys last Klingons give special message */ if (KLINGREM==0 && !same(nq, game.quadrant)) { skip(2); - if (!induced) prout(_("Lucky you!")); + if (!induced) + prout(_("Lucky you!")); proutn(_("A supernova in %s has just destroyed the last Klingons."), cramlc(quadrant, nq)); finish(FWON); return; } /* if some Klingons remain, continue or die in supernova */ - if (game.alldone) finish(FSNOVAED); + if (game.alldone) + finish(FSNOVAED); return; }