X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=src%2Fbattle.c;h=b200f4d2c280443150e6eac7be4a6ce521abf154;hb=a0afd227763655ee0ecd7ef5faea92d63d5c5ba6;hp=c0dac65b0c2f3b2cce110b5053f470fbe9e48021;hpb=459d6afcbe13be588b29c8bd1fbffb39b13fdee1;p=super-star-trek.git diff --git a/src/battle.c b/src/battle.c index c0dac65..b200f4d 100644 --- a/src/battle.c +++ b/src/battle.c @@ -15,7 +15,7 @@ void doshield(int i) action = NRG; else { chew(); - if (game.damage[DSHIELD]) { + if (!damaged(DSHIELD)) { prout(_("Shields damaged and down.")); return; } @@ -31,7 +31,7 @@ void doshield(int i) proutn(_("Energy to transfer to shields- ")); action = NRG; } - else if (game.damage[DSHIELD]) { + else if (damaged(DSHIELD)) { prout(_("Shields damaged and down.")); return; } @@ -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; @@ -158,6 +158,7 @@ void ram(int ibumpd, int ienm, coord w) icas = 10.0+20.0*Rand(); prout(_("***Sickbay reports %d casualties"), icas); game.casual += icas; + game.state.crew -= icas; for (l=0; l < NDEVICES; l++) { if (l == DDRAY) continue; // Don't damage deathray @@ -166,7 +167,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(); @@ -191,7 +192,7 @@ void torpedo(double course, double r, int inx, int iny, double *hit, int i, int if (fabs(deltay) > bigger) bigger = fabs(deltay); deltax /= bigger; deltay /= bigger; - if (game.damage[DSRSENS]==0 || game.condit==IHDOCKED) + if (!damaged(DSRSENS) || game.condit==IHDOCKED) setwnd(srscan_window); else setwnd(message_window); @@ -318,7 +319,7 @@ void torpedo(double course, double r, int inx, int iny, double *hit, int i, int crmena(1, iquad, 2, w); prout(_(" destroyed.")); game.state.nplankl++; - game.state.galaxy[game.quadrant.x][game.quadrant.y].planet = NULL; + game.state.galaxy[game.quadrant.x][game.quadrant.y].planet = NOPLANET; DESTROY(&game.state.plnets[game.iplnet]); game.iplnet = 0; game.plnet.x = game.plnet.y = 0; @@ -328,6 +329,22 @@ void torpedo(double course, double r, int inx, int iny, double *hit, int i, int finish(FDPLANET); } return; + case IHW: /* Hit an inhabited world -- very bad! */ + crmena(1, iquad, 2, w); + prout(_(" destroyed.")); + game.state.nworldkl++; + game.state.galaxy[game.quadrant.x][game.quadrant.y].planet = NOPLANET; + DESTROY(&game.state.plnets[game.iplnet]); + game.iplnet = 0; + game.plnet.x = game.plnet.y = 0; + game.quad[w.x][w.y] = IHDOT; + if (game.landed==1) { + /* captain perishes on planet */ + finish(FDPLANET); + } + prout("You have just destroyed an inhabited planet."); + prout("Celebratory rallies are being held on the Klingon homeworld."); + return; case IHSTAR: /* Hit a star */ if (Rand() > 0.10) { nova(w.x, w.y); @@ -407,10 +424,8 @@ void torpedo(double course, double r, int inx, int iny, double *hit, int i, int setwnd(message_window); } if (shoved) { - coord w; - w.x = jx; w.y = jy; - game.quad[jx][jy]=iquad; game.quad[w.x][w.y]=IHDOT; + game.quad[jx][jy]=iquad; prout(_(" displaced by blast to %s "), cramlc(sector, w)); for_local_enemies(ll) game.kdist[ll] = game.kavgd[ll] = sqrt(square(game.sector.x-game.ks[ll].x)+square(game.sector.y-game.ks[ll].y)); @@ -452,9 +467,9 @@ static void fry(double hit) proutn(device[j]); } prout(_(" damaged.")); - if (game.damage[DSHIELD] && game.shldup) { + if (damaged(DSHIELD) && game.shldup) { prout(_("***Shields knocked down.")); - game.shldup=0; + game.shldup=false; } } @@ -511,7 +526,7 @@ void attack(int torps_ok) double course = 1.90985*atan2((double)game.sector.y-jay.y, (double)jay.x-game.sector.x); hit = 0; proutn(_("***TORPEDO INCOMING")); - if (game.damage[DSRSENS] <= 0.0) { + if (!damaged(DSRSENS)) { proutn(_(" From ")); crmena(0, iquad, i, jay); } @@ -526,7 +541,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; @@ -536,20 +551,20 @@ void attack(int torps_ok) if (absorb > game.shield) absorb = game.shield; game.shield -= absorb; hit -= hitsh; - if (game.condit==IHDOCKED) dock(0); + if (game.condit==IHDOCKED) dock(false); if (propor > 0.1 && hit < 0.005*game.energy) continue; } /* It's a hit -- print out hit size */ atackd = 1; /* We weren't going to check casualties, etc. if shields were down for some strange reason. This - doesn't make any sense, so I've fw.xed it */ + doesn't make any sense, so I've fixed it */ ihurt = 1; proutn(_("%d unit hit"), (int)hit); - if ((game.damage[DSRSENS] > 0 && itflag) || game.skill<=SKILL_FAIR) { + if ((damaged(DSRSENS) && itflag) || game.skill<=SKILL_FAIR) { proutn(_(" on the ")); crmshp(); } - if (game.damage[DSRSENS] <= 0.0 && itflag) { + if (!damaged(DSRSENS) && itflag) { proutn(_(" from ")); crmena(0, iquad, i, jay); } @@ -560,7 +575,7 @@ void attack(int torps_ok) fry(hit); game.energy -= hit; if (game.condit==IHDOCKED) - dock(0); + dock(false); } if (game.energy <= 0) { /* Returning home upon your shield, not with it... */ @@ -580,7 +595,7 @@ void attack(int torps_ok) skip(1); proutn(_("Energy left %2d shields "), (int)game.energy); if (game.shldup) proutn(_("up ")); - else if (game.damage[DSHIELD] == 0) proutn(_("down ")); + else if (!damaged(DSHIELD)) proutn(_("down ")); else proutn(_("damaged, ")); } prout(_("%d%%, torpedoes left %d"), percent, game.torps); @@ -592,6 +607,7 @@ void attack(int torps_ok) prout(_("Mc Coy- \"Sickbay to bridge. We suffered %d casualties"), icas); prout(_(" in that last attack.\"")); game.casual += icas; + game.state.crew -= icas; } } /* After attack, reset average distance to enemies */ @@ -712,7 +728,7 @@ void photon(void) game.ididit = 0; - if (game.damage[DPHOTON]) { + if (damaged(DPHOTON)) { prout(_("Photon tubes damaged.")); chew(); return; @@ -877,7 +893,8 @@ static int checkshctrl(double rpow) skip(1); prout(_("McCoy to bridge- \"Severe radiation burns, Jim.")); prout(_(" %d casualties so far.\""), icas); - game.casual -= icas; + game.casual += icas; + game.state.crew -= icas; } skip(1); prout(_("Phaser energy dispersed by shields.")); @@ -897,19 +914,19 @@ void phasers(void) skip(1); /* SR sensors and Computer */ - if (game.damage[DSRSENS]+game.damage[DCOMPTR] > 0) ipoop = 0; + if (damaged(DSRSENS) || damaged(DCOMPTR)) ipoop = 0; if (game.condit == IHDOCKED) { prout(_("Phasers can't be fired through base shields.")); chew(); return; } - if (game.damage[DPHASER] != 0) { + if (damaged(DPHASER)) { prout(_("Phaser control damaged.")); chew(); return; } if (game.shldup) { - if (game.damage[DSHCTRL]) { + if (damaged(DSHCTRL)) { prout(_("High speed shield control damaged.")); chew(); return; @@ -1059,7 +1076,7 @@ void phasers(void) case FORCEMAN: chew(); key = IHEOL; - if (game.damage[DCOMPTR]!=0) + if (damaged(DCOMPTR)) prout(_("Battle comuter damaged, manual file only.")); else { skip(1); @@ -1082,7 +1099,7 @@ void phasers(void) msgflag = 0; rpow = 0.0; } - if (game.damage[DSRSENS] && !(abs(game.sector.x-aim.x) < 2 && abs(game.sector.y-aim.y) < 2) && + if (damaged(DSRSENS) && !(abs(game.sector.x-aim.x) < 2 && abs(game.sector.y-aim.y) < 2) && (ienm == IHC || ienm == IHS)) { cramen(ienm); prout(_(" can't be located without short range scan.")); @@ -1099,7 +1116,7 @@ void phasers(void) (1.01+0.05*Rand()) + 1.0; kz = k; proutn("("); - if (game.damage[DCOMPTR]==0) proutn("%d", irec); + if (!damaged(DCOMPTR)) proutn("%d", irec); else proutn("??"); proutn(") "); proutn(_("units to fire at ")); @@ -1167,13 +1184,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); } @@ -1197,7 +1214,7 @@ void hittem(double *hits) kpow = game.kpower[kk]; w = game.ks[kk]; if (hit > 0.005) { - if (game.damage[DSRSENS]==0) + if (!damaged(DSRSENS)) boom(w.x, w.y); proutn(_("%d unit hit on "), (int)hit); }