X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=src%2Fevents.c;h=95a3c44517c1e37650a296e2321a4dec87c1f765;hp=5f1c6008604957c805d8960105454b9e13d9050b;hb=ad1478c7cc24b761592a1e355015b44b243aeeda;hpb=fec5bf04131385b55dc3b0ad9c7d8d245a7d07da diff --git a/src/events.c b/src/events.c index 5f1c600..95a3c44 100644 --- a/src/events.c +++ b/src/events.c @@ -42,11 +42,12 @@ void postpone(int evtype, double offset) } static bool cancelrest(void) +/* rest period is interrupted by event */ { if (game.resting) { skip(1); proutn(_("Mr. Spock- \"Captain, shall we cancel the rest period?\"")); - if (ja()) { + if (ja() == true) { game.resting = false; game.optime = 0.0; return true; @@ -57,10 +58,11 @@ static bool cancelrest(void) } void events(void) +/* run through the event queue looking for things to do */ { - int istract=0, evcode, i=0, j, k, l; + 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; + bool radio_was_broken, ictbeam = false, ipage = false, istract = false; struct quadrant *pdest, *q; coord w, hold; event *ev, *ev2; @@ -139,7 +141,7 @@ void events(void) prout(_(" surveillance reports are coming in.")); skip(1); if (game.iseenit==0) { - attakreport(0); + attakreport(false); game.iseenit = 1; } rechart(); @@ -152,13 +154,13 @@ void events(void) case FSNOVA: /* Supernova */ if (!ipage) pause_game(1); ipage=true; - snova(0,0); + snova(false, NULL); schedule(FSNOVA, expran(0.5*game.intime)); 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 || - ictbeam+istract > 0 || + ictbeam || istract || game.condit==IHDOCKED || game.isatb==1 || game.iscate==1) return; if (game.ientesc || (game.energy < 2000 && game.torps < 4 && game.shield < 1250) || @@ -167,7 +169,7 @@ void events(void) (game.energy < 2500 || damaged(DPHASER)) && (game.torps < 5 || damaged(DPHOTON)))) { /* Tractor-beam her! */ - istract=1; + istract = true; yank = square(game.state.kscmdr.x-game.quadrant.x) + square(game.state.kscmdr.y-game.quadrant.y); /********* fall through to FTBEAM code ***********/ } @@ -198,9 +200,9 @@ void events(void) crmshp(); prout(_(" caught in long range tractor beam--")); /* If Kirk & Co. screwing around on planet, handle */ - atover(1); /* atover(1) is Grab */ + atover(true); /* atover(true) is Grab */ if (game.alldone) return; - if (game.icraft == 1) { /* Caught in Galileo? */ + if (game.icraft) { /* Caught in Galileo? */ finish(FSTRACTOR); return; } @@ -361,9 +363,9 @@ void events(void) break; case FSCMOVE: /* Supercommander moves */ schedule(FSCMOVE, 0.2777); - if (game.ientesc+istract==0 && - game.isatb != 1 && - (game.iscate != 1 || !game.justin)) scom(&ipage); + if (!game.ientesc && !istract && game.isatb != 1 && + (game.iscate != 1 || !game.justin)) + scom(&ipage); break; case FDSPROB: /* Move deep space probe */ schedule(FDSPROB, 0.01); @@ -414,7 +416,7 @@ void events(void) game.proben--; // One less to travel if (game.proben == 0 && game.isarmed && pdest->stars) { /* lets blow the sucker! */ - snova(1,0); + snova(true, &game.probec); unschedule(FDSPROB); if (game.state.galaxy[game.quadrant.x][game.quadrant.y].supernova) return; @@ -543,11 +545,12 @@ void events(void) void wait(void) +/* wait on events */ { int key; double temp, delay, origTime; - game.ididit = 0; + game.ididit = false; for (;;) { key = scan(); if (key != IHEOL) break; @@ -562,7 +565,7 @@ void wait(void) if (delay <= 0.0) return; if (delay >= game.state.remtime || game.nenhere != 0) { proutn(_("Are you sure? ")); - if (ja() == 0) return; + if (ja() == false) return; } /* Alternate resting periods (events) with attacks */ @@ -584,7 +587,7 @@ void wait(void) if (game.optime < delay) attack(0); if (game.alldone) return; events(); - game.ididit = 1; + game.ididit = true; if (game.alldone) return; delay -= temp; /* Repair Deathray if long rest at starbase */ @@ -598,24 +601,24 @@ void wait(void) game.optime = 0; } -void nova(int ix, int iy) +void nova(coord nov) +/* star goes nova */ { static double course[] = {0.0, 10.5, 12.0, 1.5, 9.0, 0.0, 3.0, 7.5, 6.0, 4.5}; int bot, top, top2, hits[QUADSIZE+1][3], kount, icx, icy, mm, nn, j; int iquad, iquad1, i, ll; - coord newc, nov, scratch; + coord newc, scratch; - nov.x = ix; nov.y = iy; if (Rand() < 0.05) { /* Wow! We've supernova'ed */ - snova(ix, iy); + snova(false, &nov); return; } /* handle initial nova */ - game.quad[ix][iy] = IHDOT; - crmena(1, IHSTAR, 2, nov); + game.quad[nov.x][nov.y] = IHDOT; + crmena(false, IHSTAR, sector, nov); prout(_(" novas.")); game.state.galaxy[game.quadrant.x][game.quadrant.y].stars--; game.state.starkl++; @@ -624,8 +627,8 @@ void nova(int ix, int iy) bot = top = top2 = 1; kount = 0; icx = icy = 0; - hits[1][1] = ix; - hits[1][2] = iy; + hits[1][1] = nov.x; + hits[1][2] = nov.y; while (1) { for (mm = bot; mm <= top; mm++) for (nn = 1; nn <= 3; nn++) /* nn,j represents coordinates around current */ @@ -646,7 +649,7 @@ void nova(int ix, int iy) case IHSTAR: /* Affect another star */ if (Rand() < 0.05) { /* This star supernovas */ - snova(scratch.x,scratch.y); + snova(false, &scratch); return; } top2++; @@ -654,14 +657,14 @@ void nova(int ix, int iy) hits[top2][2]=scratch.y; game.state.galaxy[game.quadrant.x][game.quadrant.y].stars -= 1; game.state.starkl++; - crmena(1, IHSTAR, 2, scratch); + crmena(true, IHSTAR, sector, scratch); prout(_(" novas.")); game.quad[scratch.x][scratch.y] = IHDOT; break; case IHP: /* Destroy planet */ game.state.galaxy[game.quadrant.x][game.quadrant.y].planet = NOPLANET; game.state.nplankl++; - crmena(1, IHP, 2, scratch); + crmena(true, IHP, sector, scratch); prout(_(" destroyed.")); DESTROY(&game.state.plnets[game.iplnet]); game.iplnet = game.plnet.x = game.plnet.y = 0; @@ -674,14 +677,14 @@ void nova(int ix, int iy) case IHB: /* Destroy base */ game.state.galaxy[game.quadrant.x][game.quadrant.y].starbase = false; for_starbases(i) - if (game.state.baseq[i].x==game.quadrant.x && game.state.baseq[i].y==game.quadrant.y) + if (same(game.state.baseq[i], game.quadrant)) break; game.state.baseq[i] = game.state.baseq[game.state.rembase]; game.state.rembase--; game.base.x = game.base.y = 0; game.state.basekl++; newcnd(); - crmena(1, IHB, 2, scratch); + crmena(true, IHB, sector, scratch); prout(_(" destroyed.")); game.quad[scratch.x][scratch.y] = IHDOT; break; @@ -716,7 +719,7 @@ void nova(int ix, int iy) case IHS: case IHR: for_local_enemies(ll) - if (game.ks[ll].x==scratch.x && game.ks[ll].y==scratch.y) break; + 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.x, scratch.y); @@ -724,7 +727,7 @@ void nova(int ix, int iy) } newc.x = scratch.x + scratch.x - hits[mm][1]; newc.y = scratch.y + scratch.y - hits[mm][2]; - crmena(1, iquad, 2, scratch); + crmena(true, iquad, sector, scratch); proutn(_(" damaged")); if (!VALID_SECTOR(newc.x, newc.y)) { /* can't leave quadrant */ @@ -734,7 +737,7 @@ void nova(int ix, int iy) iquad1 = game.quad[newc.x][newc.y]; if (iquad1 == IHBLANK) { proutn(_(", blasted into ")); - crmena(0, IHBLANK, 2, newc); + crmena(false, IHBLANK, sector, newc); skip(1); deadkl(scratch, iquad, newc.x, newc.y); break; @@ -748,8 +751,7 @@ void nova(int ix, int iy) proutn(cramlc(sector, newc)); game.quad[scratch.x][scratch.y] = IHDOT; game.quad[newc.x][newc.y] = iquad; - game.ks[ll].x = newc.x; - game.ks[ll].y = newc.y; + game.ks[ll] = newc; game.kavgd[ll] = sqrt(square(game.sector.x-newc.x)+square(game.sector.y-newc.y)); game.kdist[ll] = game.kavgd[ll]; skip(1); @@ -781,86 +783,68 @@ void nova(int ix, int iy) } -void snova(int insx, int insy) +void snova(bool induced, coord *w) +/* star goes supernova */ { - int comdead, nsx, nsy, num=0, kldead, iscdead; - int nrmdead, npdead; - int incipient=0; + int num = 0, nrmdead, npdead, kldead; coord nq; - nq.x = nq.y = 0; - nsx = insy; - nsy = insy; - - if (insy== 0) { - if (insx == 1) - /* NOVAMAX being used */ - nq = game.probec; - else { - int stars = 0; - /* 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) { - 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) { - num -= game.state.galaxy[nq.x][nq.y].stars; - if (num <= 0) break; - } - if (num <=0) break; - } - if (idebug) { - proutn("=== Super nova here?"); - if (ja()==1) { - nq.x = game.quadrant.x; - nq.y = game.quadrant.y; - } + if (w != NULL) + nq = *w; + else { + int stars = 0; + /* 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) { + 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) { + num -= game.state.galaxy[nq.x][nq.y].stars; + if (num <= 0) break; + } + if (num <=0) break; + } + if (idebug) { + proutn("=== Super nova here?"); + if (ja() == true) + nq = game.quadrant; + } + } - if (nq.x != game.quadrant.y || nq.y != game.quadrant.y || game.justin != 0) { - /* it isn't here, or we just entered (treat as inroute) */ - if (!damaged(DRADIO) || game.condit == IHDOCKED) { - skip(1); - prout(_("Message from Starfleet Command Stardate %.2f"), game.state.date); - prout(_(" Supernova in %s; caution advised."), - cramlc(quadrant, nq)); - } + if (!same(nq, game.quadrant) || game.justin) { + /* it isn't here, or we just entered (treat as enroute) */ + if (!damaged(DRADIO) || game.condit == IHDOCKED) { + skip(1); + prout(_("Message from Starfleet Command Stardate %.2f"), game.state.date); + prout(_(" Supernova in %s; caution advised."), + cramlc(quadrant, nq)); } - else { - /* we are in the quadrant! */ - incipient = 1; - num = Rand()* game.state.galaxy[nq.x][nq.y].stars + 1; - for_sectors(nsx) { - for_sectors(nsy) { - if (game.quad[nsx][nsy]==IHSTAR) { - num--; - if (num==0) break; - } + } + else { + 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) { + if (game.quad[ns.x][ns.y]==IHSTAR) { + num--; + if (num==0) break; } - if (num==0) break; } + if (num==0) break; } - } - else { - incipient = 1; - } - if (incipient) { - coord nd; skip(1); prouts(_("***RED ALERT! RED ALERT!")); skip(1); - nd.x = nsx; nd.y = nsy; - prout(_("***Incipient supernova detected at "), cramlc(sector, nd)); - nq = game.quadrant; - if (square(nsx-game.sector.x) + square(nsy-game.sector.y) <= 2.1) { + prout(_("***Incipient supernova detected at "), cramlc(sector, ns)); + if (square(ns.x-game.sector.x) + square(ns.y-game.sector.y) <= 2.1) { proutn(_("Emergency override attempts t")); prouts("***************"); skip(1); @@ -868,14 +852,13 @@ void snova(int insx, int insy) game.alldone=1; } } + /* destroy any Klingons in supernovaed quadrant */ kldead = game.state.galaxy[nq.x][nq.y].klingons; game.state.galaxy[nq.x][nq.y].klingons = 0; - comdead = iscdead = 0; if (same(nq, game.state.kscmdr)) { /* did in the Supercommander! */ game.state.nscrem = game.state.kscmdr.x = game.state.kscmdr.y = game.isatb = game.iscate = 0; - iscdead = 1; unschedule(FSCMOVE); unschedule(FSCDBAS); } @@ -887,7 +870,6 @@ void snova(int insx, int insy) game.state.kcmdr[game.state.remcom].x = game.state.kcmdr[game.state.remcom].y = 0; game.state.remcom--; kldead--; - comdead++; if (game.state.remcom==0) unschedule(FTBEAM); break; } @@ -900,25 +882,25 @@ void snova(int insx, int insy) game.state.nromrem -= nrmdead; npdead = num - nrmdead*10; if (npdead) { - int l; - for (l = 0; l < game.inplan; l++) - if (same(game.state.plnets[l].w, nq)) { - DESTROY(&game.state.plnets[l]); + int loop; + for (loop = 0; loop < game.inplan; loop++) + if (same(game.state.plnets[loop].w, nq)) { + DESTROY(&game.state.plnets[loop]); } } /* Destroy any base in supernovaed quadrant */ if (game.state.rembase) { - int maxloop = game.state.rembase, l; - for (l = 1; l <= maxloop; l++) - if (same(game.state.baseq[l], nq)) { - game.state.baseq[l] = game.state.baseq[game.state.rembase]; + int maxloop = game.state.rembase, loop; + for (loop = 1; loop <= maxloop; loop++) + if (same(game.state.baseq[loop], nq)) { + game.state.baseq[loop] = game.state.baseq[game.state.rembase]; game.state.baseq[game.state.rembase].x = game.state.baseq[game.state.rembase].y = 0; game.state.rembase--; break; } } /* If starship caused supernova, tally up destruction */ - if (insx) { + if (induced) { game.state.starkl += game.state.galaxy[nq.x][nq.y].stars; game.state.basekl += game.state.galaxy[nq.x][nq.y].starbase; game.state.nplankl += npdead; @@ -927,9 +909,9 @@ void snova(int insx, int insy) if (same(game.quadrant, nq) || !damaged(DRADIO) || game.condit == IHDOCKED) game.state.galaxy[nq.x][nq.y].supernova = true; /* If supernova destroys last Klingons give special message */ - if (KLINGREM==0 && (nq.x != game.quadrant.x || nq.y != game.quadrant.y)) { + if (KLINGREM==0 && !same(nq, game.quadrant)) { skip(2); - if (insx == 0) prout(_("Lucky you!")); + if (!induced) prout(_("Lucky you!")); proutn(_("A supernova in %s has just destroyed the last Klingons."), cramlc(quadrant, nq)); finish(FWON); @@ -939,5 +921,3 @@ void snova(int insx, int insy) if (game.alldone) finish(FSNOVAED); return; } - -