From: Eric S. Raymond Date: Tue, 19 Sep 2006 06:27:07 +0000 (+0000) Subject: More int-to-boolean cleanup. Make the FDISTR event work. X-Git-Tag: 2.0~239 X-Git-Url: https://jxself.org/git/?a=commitdiff_plain;h=dc45b3ccf42344c238ddb146d79dc62086624848;p=super-star-trek.git More int-to-boolean cleanup. Make the FDISTR event work. --- diff --git a/src/ai.c b/src/ai.c index b753b86..9e6c310 100644 --- a/src/ai.c +++ b/src/ai.c @@ -130,7 +130,7 @@ static void movebaddy(coord com, int loccom, int ienm) */ forces = game.kpower[loccom]+100.0*game.nenhere+400*(nbaddys-1); - if (game.shldup==0) forces += 1000; /* Good for enemy if shield is down! */ + if (!game.shldup) forces += 1000; /* Good for enemy if shield is down! */ if (game.damage[DPHASER] == 0.0 || game.damage[DPHOTON] == 0.0) { if (game.damage[DPHASER] != 0) /* phasers damaged */ forces += 300.0; @@ -500,10 +500,10 @@ void scom(int *ipage) prout(_(" reports that it is under attack from the Klingon Super-commander.")); proutn(_(" It can survive until stardate %d.\""), (int)scheduled(FSCDBAS)); - if (game.resting==0) return; + if (!game.resting) return; prout(_("Mr. Spock- \"Captain, shall we cancel the rest period?\"")); if (ja()==0) return; - game.resting = 0; + game.resting = false; game.optime = 0.0; /* actually finished */ return; } diff --git a/src/battle.c b/src/battle.c index 343c05a..2977e6b 100644 --- a/src/battle.c +++ b/src/battle.c @@ -59,7 +59,7 @@ void doshield(int i) prout(_("Shields already up.")); return; } - game.shldup = 1; + game.shldup = true; game.shldchg = 1; if (game.condit != IHDOCKED) game.energy -= 50.0; prout(_("Shields raised.")); @@ -72,11 +72,11 @@ void doshield(int i) game.ididit=1; return; case SHDN: - if (game.shldup==0) { + if (!game.shldup) { prout(_("Shields already down.")); return; } - game.shldup=0; + game.shldup=false; game.shldchg=1; prout(_("Shields lowered.")); game.ididit=1; @@ -166,7 +166,7 @@ void ram(int ibumpd, int ienm, coord w) extradm = (10.0*type*Rand()+1.0)*game.damfac; game.damage[l] += game.optime + extradm; /* Damage for at least time of travel! */ } - game.shldup = 0; + game.shldup = false; if (KLINGREM) { pause_game(2); dreprt(); @@ -470,7 +470,7 @@ static void fry(double hit) prout(_(" damaged.")); if (game.damage[DSHIELD] && game.shldup) { prout(_("***Shields knocked down.")); - game.shldup=0; + game.shldup=false; } } @@ -542,7 +542,7 @@ void attack(int torps_ok) return; /* Supernova or finished */ if (hit == 0) continue; } - if (game.shldup != 0 || game.shldchg != 0 || game.condit==IHDOCKED) { + if (game.shldup || game.shldchg != 0 || game.condit==IHDOCKED) { /* shields will take hits */ double absorb, hitsh, propor = pfac*game.shield*(game.condit==IHDOCKED ? 2.1 : 1.0); if(propor < 0.1) propor = 0.1; @@ -1183,13 +1183,13 @@ void phasers(void) prout(_("Sulu- \"Sir, the high-speed shield control has malfunctioned . . .")); prouts(_(" CLICK CLICK POP . . .")); prout(_(" No response, sir!")); - game.shldup = 0; + game.shldup = false; } else prout(_("Shields raised.")); } else - game.shldup = 0; + game.shldup = false; } overheat(rpow); } diff --git a/src/events.c b/src/events.c index cc299cf..7d43921 100644 --- a/src/events.c +++ b/src/events.c @@ -39,7 +39,7 @@ static bool cancelrest(void) skip(1); proutn(_("Mr. Spock- \"Captain, shall we cancel the rest period?\"")); if (ja()) { - game.resting = 0; + game.resting = false; game.optime = 0.0; return true; } @@ -57,7 +57,29 @@ void events(void) coord w, hold; event *ev; - if (idebug) prout("=== EVENTS"); + if (idebug) { + prout("=== EVENTS from %.2f to %.2f:", game.state.date, fintim); + for (i = 1; i < NEVENTS; i++) { + switch (i) { + case FSNOVA: proutn("=== Supernova "); break; + case FTBEAM: proutn("=== T Beam "); break; + case FSNAP: proutn("=== Snapshot "); break; + case FBATTAK: proutn("=== Base Attack "); break; + case FCDBAS: proutn("=== Base Destroy "); break; + case FSCMOVE: proutn("=== SC Move "); break; + 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 FREPRO: proutn("=== Klingon Build "); break; + } + if (is_scheduled(i)) + prout("%.2f", scheduled(i)); + else + prout("never"); + + } + } radio_was_broken = (game.damage[DRADIO] != 0.0); @@ -69,6 +91,8 @@ void events(void) for (l = 1; l < NEVENTS; l++) if (game.future[l].date < datemin) { line = l; + if (idebug) + prout("== Event %d fires", line); datemin = game.future[l].date; } xtime = datemin-game.state.date; @@ -180,14 +204,10 @@ void events(void) prout(_("Galileo, left on the planet surface, is well hidden.")); } } - if (line==0) { - game.quadrant.x = game.state.kscmdr.x; - game.quadrant.y = game.state.kscmdr.y; - } - else { - game.quadrant.x = game.state.kcmdr[i].x; - game.quadrant.y = game.state.kcmdr[i].y; - } + if (line==0) + game.quadrant = game.state.kscmdr; + else + game.quadrant = game.state.kcmdr[i]; iran(QUADSIZE, &game.sector.x, &game.sector.y); crmshp(); proutn(_(" is pulled to ")); @@ -196,9 +216,9 @@ void events(void) prout(cramlc(sector, game.sector)); if (game.resting) { prout(_("(Remainder of rest/repair period cancelled.)")); - game.resting = 0; + game.resting = false; } - if (game.shldup==0) { + if (!game.shldup) { if (game.damage[DSHIELD]==0 && game.shield > 0) { doshield(2); /* Shldsup */ game.shldchg=0; @@ -227,9 +247,9 @@ void events(void) i = 0; for_starbases(j) { for_commanders(k) - if (game.state.baseq[j].x==game.state.kcmdr[k].x && game.state.baseq[j].y==game.state.kcmdr[k].y && - (game.state.baseq[j].x!=game.quadrant.x || game.state.baseq[j].y!=game.quadrant.y) && - (game.state.baseq[j].x!=game.state.kscmdr.x || game.state.baseq[j].y!=game.state.kscmdr.y)) { + 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; } @@ -242,8 +262,7 @@ void events(void) break; } /* commander + starbase combination found -- launch attack */ - game.battle.x = game.state.baseq[j].x; - game.battle.y = game.state.baseq[j].y; + game.battle = game.state.baseq[j]; schedule(FCDBAS, 1.0+3.0*Rand()); if (game.isatb) /* extra time if SC already attacking */ postpone(FCDBAS, scheduled(FSCDBAS)-game.state.date); @@ -271,14 +290,14 @@ void events(void) break; /* WAS RETURN! */ ixhold = game.battle.x; iyhold = game.battle.y; - game.battle.x = game.state.kscmdr.x; - game.battle.y = game.state.kscmdr.y; + game.battle = game.state.kscmdr; + /* FALL THROUGH */ case FCDBAS: /* Commander succeeds in destroying base */ if (line==FCDBAS) { unschedule(FCDBAS); /* find the lucky pair */ for_commanders(i) - if (game.state.kcmdr[i].x==game.battle.x && game.state.kcmdr[i].y==game.battle.y) + if (same(game.state.kcmdr[i], game.battle)) break; if (i > game.state.remcom || game.state.rembase == 0 || !game.state.galaxy[game.battle.x][game.battle.y].starbase) { @@ -290,7 +309,7 @@ void events(void) /* Code merges here for any commander destroying base */ /* Not perfect, but will have to do */ /* Handle case where base is in same quadrant as starship */ - if (game.battle.x==game.quadrant.x && game.battle.y==game.quadrant.y) { + if (same(game.battle, game.quadrant)) { game.state.chart[game.battle.x][game.battle.y].starbase = false; game.quad[game.base.x][game.base.y] = IHDOT; game.base.x=game.base.y=0; @@ -316,10 +335,8 @@ void events(void) /* Remove Starbase from galaxy */ game.state.galaxy[game.battle.x][game.battle.y].starbase = false; for_starbases(i) - if (game.state.baseq[i].x==game.battle.x && game.state.baseq[i].y==game.battle.y) { - game.state.baseq[i].x=game.state.baseq[game.state.rembase].x; - game.state.baseq[i].y=game.state.baseq[game.state.rembase].y; - } + if (same(game.state.baseq[i], game.battle)) + game.state.baseq[i] = game.state.baseq[game.state.rembase]; game.state.rembase--; if (game.isatb == 2) { /* reinstate a commander's base attack */ @@ -395,25 +412,30 @@ void events(void) case FDISTR: /* inhabited system issues distress call */ schedule(FDISTR, expran(0.5*game.intime)); /* try a whole bunch of times to find something suitable */ - for (i = 0; i < 100; i++) { - iran(GALSIZE, &w.x, &w.y); - q = &game.state.galaxy[game.quadrant.x][game.quadrant.y]; + 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 */ - if (!(same(game.quadrant, w) || q->stars<=0 || - q->supernova || q->status != secure || q->klingons <= 0)) - break; - } - if (i >= 100) + iran(GALSIZE, &w.x, &w.y); + q = &game.state.galaxy[w.x][w.y]; + } while (--i && + (same(game.quadrant, w) || q->planet == NOPLANET || + q->supernova || q->status!=secure || q->klingons<=0)); + if (i == 0) { /* can't seem to find one; ignore this call */ + if (idebug) + prout("=== Couldn't find location for distress event."); break; + } /* got one!! Schedule its enslavement */ ev = schedule(FENSLV, expran(game.intime)); ev->quadrant = w; q->status = distressed; + if (idebug) + prout("=== Distress call set at %d, %d.", w.x, w.y); /* tell the captain about it if we can */ if (game.damage[DRADIO] == 0.0 || game.condit == IHDOCKED) @@ -444,6 +466,7 @@ void events(void) systemname(q->planet)); prout(" in quadrant %d,%d.\n", ev->quadrant.x,ev->quadrant.y); } + break; case FREPRO: /* Klingon reproduces */ ev = schedule(FREPRO, expran(1.0 * game.intime)); /* see if current distress call still active */ @@ -465,7 +488,7 @@ void events(void) continue; q = &game.state.galaxy[w.x][w.y]; /* check for this quad ok (not full & no snova) */ - if (q->klingons >= MAXKLQUAD || q->stars < 0) + if (q->klingons >= MAXKLQUAD || !q->supernova) continue; goto foundit; } @@ -477,6 +500,7 @@ void events(void) /* deliver the child */ game.state.remkl++; + q->klingons++; if (same(game.quadrant, w)) newkling(++game.klhere, &hold); @@ -513,10 +537,10 @@ void wait(void) /* Alternate resting periods (events) with attacks */ - game.resting = 1; + game.resting = true; do { - if (delay <= 0) game.resting = 0; - if (game.resting == 0) { + if (delay <= 0) game.resting = false; + if (!game.resting) { prout(_("%d stardates left."), (int)game.state.remtime); return; } @@ -540,7 +564,7 @@ void wait(void) // leave if quadrant supernovas (!game.state.galaxy[game.quadrant.x][game.quadrant.y].supernova); - game.resting = 0; + game.resting = false; game.optime = 0; } @@ -640,7 +664,7 @@ void nova(int ix, int iy) double diff = 2000.0 - game.shield; game.energy -= diff; game.shield = 0.0; - game.shldup = 0; + game.shldup = false; prout(_("***Shields knocked out.")); game.damage[DSHIELD] += 0.005*game.damfac*Rand()*diff; } diff --git a/src/moving.c b/src/moving.c index 01958a1..e966bed 100644 --- a/src/moving.c +++ b/src/moving.c @@ -523,7 +523,7 @@ void warp(bool timewarp) game.ididit = 0; skip(1); prout("Engineering to bridge--"); - if (game.shldup==0 || 0.5*power > game.energy) { + if (!game.shldup || 0.5*power > game.energy) { iwarp = pow((game.energy/(game.dist+0.05)), 0.333333333); if (iwarp <= 0) { prout("We can't do it, Captain. We haven't the energy."); diff --git a/src/planets.c b/src/planets.c index 47140ea..0b55438 100644 --- a/src/planets.c +++ b/src/planets.c @@ -127,7 +127,7 @@ void beam(void) prout(" not in standard orbit."); return; } - if (game.shldup!=0) { + if (game.shldup) { prout("Impossible to transport through shields."); return; } @@ -312,7 +312,7 @@ void shuttle(void) prout("You will have to beam down to retrieve the shuttle craft."); return; } - if (game.shldup!=0 || game.condit == IHDOCKED) { + if (game.shldup || game.condit == IHDOCKED) { prout("Shuttle craft cannot pass through shields."); return; } diff --git a/src/reports.c b/src/reports.c index bca27e4..e1b6cc7 100644 --- a/src/reports.c +++ b/src/reports.c @@ -488,7 +488,7 @@ void eta(void) tpower = game.dist*twarp*twarp*twarp*(game.shldup+1); if (tpower >= game.energy) { prout("Insufficient energy, sir."); - if (game.shldup==0 || tpower > game.energy*2.0) { + if (!game.shldup || tpower > game.energy*2.0) { if (!wfl) return; proutn("New warp factor to try? "); if (scan() == IHREAL) { diff --git a/src/setup.c b/src/setup.c index 6aac361..77f58bd 100644 --- a/src/setup.c +++ b/src/setup.c @@ -185,7 +185,7 @@ void abandn(void) game.shield = game.inshld = 1250.0; game.torps = game.intorps = 6; game.lsupres=game.inlsr=3.0; - game.shldup=0; + game.shldup=false; game.warpfac=5.0; game.wfacsq=25.0; return; @@ -202,7 +202,8 @@ void setup(int needprompt) game.ship = IHE; game.energy = game.inenrg = 5000.0; game.shield = game.inshld = 2500.0; - game.shldchg = game.shldup = 0; + game.shldchg = 0; + game.shldup = false; game.inlsr = 4.0; game.lsupres = 4.0; iran(GALSIZE, &game.quadrant.x, &game.quadrant.y); @@ -216,7 +217,8 @@ void setup(int needprompt) // Set up assorted game parameters game.battle.x = game.battle.y = 0; game.state.date = game.indate = 100.0*(int)(31.0*Rand()+20.0); - game.nkinks = game.nhelp = game.resting = game.casual = 0; + game.nkinks = game.nhelp = game.casual = 0; + game.resting = false; game.isatb = game.iscate = game.imine = game.icrystl = game.icraft = game.state.nplankl = 0; game.state.starkl = game.state.basekl = 0; game.iscraft = 1; @@ -248,6 +250,8 @@ void setup(int needprompt) unschedule(FDSPROB); if ((game.options & OPTION_WORLDS) && game.skill >= SKILL_GOOD) schedule(FDISTR, expran(1.0 + game.intime)); + else + unschedule(FDISTR); unschedule(FENSLV); unschedule(FREPRO); // Starchart is functional but we've never seen it @@ -411,7 +415,7 @@ void setup(int needprompt) if (game.state.nscrem) prout(" YOU'LL NEED IT."); waitfor(); newqad(0); - if (game.nenhere-iqhere-game.ithere) game.shldup=1.0; + if (game.nenhere-iqhere-game.ithere) game.shldup = true; if (game.neutz) attack(0); // bad luck to start in a Romulan Neutral Zone } diff --git a/src/sst.c b/src/sst.c index 36f4449..90b2b30 100644 --- a/src/sst.c +++ b/src/sst.c @@ -871,7 +871,6 @@ void debugme(void) int i; for (i = 1; i < NEVENTS; i++) { int key; - if (!is_scheduled(i)) continue; switch (i) { case FSNOVA: proutn("Supernova "); break; case FTBEAM: proutn("T Beam "); break; @@ -880,16 +879,22 @@ void debugme(void) case FCDBAS: proutn("Base Destroy "); break; case FSCMOVE: proutn("SC Move "); break; case FSCDBAS: proutn("SC Base Destroy "); break; - //case FDSPROB:proutn("Probe Move "); break; + case FDSPROB: proutn("Probe Move "); break; case FDISTR: proutn("Distress Call "); break; case FENSLV: proutn("Enlavement "); break; case FREPRO: proutn("Klingon Build "); break; } - proutn("%.2f", scheduled(i)-game.state.date); + if (is_scheduled(i)) + proutn("%.2f", scheduled(i)-game.state.date); + else + proutn("never"); chew(); - proutn(" ?"); + proutn("? "); key = scan(); - if (key == IHREAL) { + if (key == 'n') { + unschedule(i); + chew(); + } else if (key == IHREAL) { ev = schedule(i, aaitem); if (i == FENSLV || i == FREPRO) { chew(); @@ -915,7 +920,7 @@ void debugme(void) chew(); } proutn("Induce supernova here? "); - if (ja() != 0) { + if (ja()) { game.state.galaxy[game.quadrant.x][game.quadrant.y].supernova = true; atover(1); } diff --git a/src/sst.h b/src/sst.h index 2b30d8b..6ecd3d3 100644 --- a/src/sst.h +++ b/src/sst.h @@ -204,6 +204,8 @@ struct game { ididit, // action taken -- allows enemy to attack alive, // we are alive (not killed) justin, // just entered quadrant + shldup, // shields are up + resting, // rest time alldone, // game is now finished neutz, // Romulan Neutral Zone isarmed, // probe is armed @@ -254,7 +256,6 @@ struct game { indate, // initial date energy, // energy level shield, // shield level - shldup, // shields are up warpfac, // warp speed wfacsq, // squared warp factor lsupres, // life support reserves @@ -262,7 +263,6 @@ struct game { direc, // movement direction optime, // time taken by current operation docfac, // repair factor when docking (constant?) - resting, // rest time damfac, // damage factor lastchart, // time star chart was last updated cryprob, // probability that crystal will work