X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=src%2Fbattle.c;h=2977e6bbc7972e70315589f8c527cb8787b4b5a4;hb=5191195da307757c381ca209d5b7f3e947dbd9ee;hp=01365f52fc5bf1b3f92590bd2c0602c6326c00b4;hpb=c81e0f1dc6cd1fe5c56e9d521ee1d262932e3a2b;p=super-star-trek.git diff --git a/src/battle.c b/src/battle.c index 01365f5..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; @@ -151,7 +151,7 @@ void ram(int ibumpd, int ienm, coord w) crmena(0, ienm, 2, w); if (ibumpd) proutn(_(" (original position)")); skip(1); - deadkl(w.x, w.y, ienm, game.sector.x, game.sector.y); + deadkl(w, ienm, game.sector.x, game.sector.y); proutn("***"); crmshp(); prout(_(" heavily damaged.")); @@ -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(); @@ -265,7 +265,7 @@ void torpedo(double course, double r, int inx, int iny, double *hit, int i, int if (kp < h1) h1 = kp; game.kpower[ll] -= (game.kpower[ll]<0 ? -h1 : h1); if (game.kpower[ll] == 0) { - deadkl(w.x, w.y, iquad, w.x, w.y); + deadkl(w, iquad, w.x, w.y); return; } crmena(1, iquad, 2, w); @@ -283,7 +283,7 @@ void torpedo(double course, double r, int inx, int iny, double *hit, int i, int } if (game.quad[jx][jy]==IHBLANK) { prout(_(" buffeted into black hole.")); - deadkl(w.x, w.y, iquad, jx, jy); + deadkl(w, iquad, jx, jy); return; } if (game.quad[jx][jy]!=IHDOT) { @@ -318,7 +318,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 +328,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); @@ -346,7 +362,7 @@ void torpedo(double course, double r, int inx, int iny, double *hit, int i, int proutn(_("Mr. Spock-")); prouts(_(" \"Fascinating!\"")); skip(1); - deadkl(w.x, w.y, iquad, w.x, w.y); + deadkl(w, iquad, w.x, w.y); } else { /* * Stas Sergeev added the possibility that @@ -375,7 +391,7 @@ void torpedo(double course, double r, int inx, int iny, double *hit, int i, int game.quad[w.x][w.y] = IHDOT; game.ithere = 0; game.tholian.x = game.tholian.y = 0; - deadkl(w.x, w.y, iquad, w.x, w.y); + deadkl(w, iquad, w.x, w.y); return; } skip(1); @@ -454,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; } } @@ -469,9 +485,7 @@ void attack(int torps_ok) game.iattak = 1; if (game.alldone) return; -#ifdef DEBUG - if (game.idebug) prout("ATTACK!"); -#endif + if (idebug) prout("=== ATTACK!"); if (game.ithere) movetho(); @@ -528,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; @@ -603,7 +617,7 @@ void attack(int torps_ok) return; } -void deadkl(int ix, int iy, int type, int ixx, int iyy) +void deadkl(coord w, int type, int ixx, int iyy) { /* Added ixx and iyy allow enemy to "move" before dying */ coord mv; @@ -658,7 +672,7 @@ void deadkl(int ix, int iy, int type, int ixx, int iyy) /* For each kind of enemy, finish message to player */ prout(_(" destroyed.")); - game.quad[ix][iy] = IHDOT; + game.quad[w.x][w.y] = IHDOT; if (KLINGREM==0) return; game.state.remtime = game.state.remres/(game.state.remkl + 4*game.state.remcom); @@ -667,7 +681,7 @@ void deadkl(int ix, int iy, int type, int ixx, int iyy) if (is_scheduled(FCDBAS) && game.battle.x==game.quadrant.x && game.battle.y==game.quadrant.y && type==IHC) unschedule(FCDBAS); for_local_enemies(i) - if (game.ks[i].x==ix && game.ks[i].y==iy) break; + if (same(game.ks[i], w)) break; game.nenhere--; if (i <= game.nenhere) { for (j=i; j<=game.nenhere; j++) { @@ -684,13 +698,13 @@ void deadkl(int ix, int iy, int type, int ixx, int iyy) return; } -static int targetcheck(double x, double y, double *course) +static bool targetcheck(double x, double y, double *course) { double deltx, delty; - /* Return TRUE if target is invalid */ + /* Return true if target is invalid */ if (!VALID_SECTOR(x, y)) { huh(); - return 1; + return true; } deltx = 0.1*(y - game.sector.y); delty = 0.1*(game.sector.x - x); @@ -700,10 +714,10 @@ static int targetcheck(double x, double y, double *course) prout(_(" I recommend an immediate review of")); prout(_(" the Captain's psychological profile.\"")); chew(); - return 1; + return true; } *course = 1.90985932*atan2(deltx, delty); - return 0; + return false; } void photon(void) @@ -1169,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); } @@ -1210,7 +1224,7 @@ void hittem(double *hits) crmena(0,ienm,2,w); skip(1); if (kpow == 0) { - deadkl(w.x, w.y, ienm, w.x, w.y); + deadkl(w, ienm, w.x, w.y); if (KLINGREM==0) finish(FWON); if (game.alldone) return; kk--; /* don't do the increment */