X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=src%2Fbattle.c;h=223a981b094037ef038a5584f44999b1b7f12f73;hp=836f1e7702dd0cd12c2de9140df591960f3a7dda;hb=0498b9784da3c7b012bd1b5d0f694d40c28d7466;hpb=74121a21cca010c891ef19a178f9b9acf4d473eb diff --git a/src/battle.c b/src/battle.c index 836f1e7..223a981 100644 --- a/src/battle.c +++ b/src/battle.c @@ -239,9 +239,9 @@ void ram(bool ibumpd, feature ienm, coord w) } game.shldup = false; prout(_("***Shields are down.")); - if (KLINGREM) { - pause_game(true); - dreprt(); + if (game.state.remkl + game.state.remcom + game.state.nscrem) { + announce(); + damagereport(); } else finish(FWON); @@ -335,7 +335,7 @@ void torpedo(double course, double r, coord in, double *hit, int i, int n) case IHR: /* Hit a regular enemy */ case IHK: /* find the enemy */ - for_local_enemies(ll) + for (ll = 1; ll <= game.nenhere; ll++) if (same(w, game.ks[ll])) break; kp = fabs(game.kpower[ll]); @@ -380,7 +380,7 @@ void torpedo(double course, double r, coord in, double *hit, int i, int n) case IHB: /* Hit a base */ skip(1); prout(_("***STARBASE DESTROYED..")); - for_starbases(ll) { + for (ll = 1; ll <= game.state.rembase; ll++) { if (same(game.state.baseq[ll], game.quadrant)) { game.state.baseq[ll]=game.state.baseq[game.state.rembase]; break; @@ -399,7 +399,7 @@ void torpedo(double course, double r, coord in, double *hit, int i, int n) prout(_(" destroyed.")); game.state.nplankl++; q->planet = NOPLANET; - DESTROY(&game.state.planets[game.iplnet]); + game.state.planets[game.iplnet].pclass = destroyed; game.iplnet = 0; invalidate(game.plnet); game.quad[w.x][w.y] = IHDOT; @@ -413,7 +413,7 @@ void torpedo(double course, double r, coord in, double *hit, int i, int n) prout(_(" destroyed.")); game.state.nworldkl++; q->planet = NOPLANET; - DESTROY(&game.state.planets[game.iplnet]); + game.state.planets[game.iplnet].pclass = destroyed; game.iplnet = 0; invalidate(game.plnet); game.quad[w.x][w.y] = IHDOT; @@ -501,9 +501,9 @@ void torpedo(double course, double r, coord in, double *hit, int i, int n) game.quad[w.x][w.y]=IHDOT; game.quad[jw.x][jw.y]=iquad; prout(_(" displaced by blast to %s "), cramlc(sector, jw)); - for_local_enemies(ll) + for (ll = 1; ll <= game.nenhere; ll++) game.kdist[ll] = game.kavgd[ll] = distance(game.sector,game.ks[ll]); - sortkl(); + sortklings(); return; } skip(1); @@ -570,7 +570,7 @@ void attack(bool torps_ok) /* Tholian gewts to move before attacking */ if (game.ithere) - movetho(); + movetholian(); /* if you have just entered the RNZ, you'll get a warning */ if (game.neutz) { /* The one chance not to be attacked */ @@ -597,7 +597,7 @@ void attack(bool torps_ok) if (game.skill <= SKILL_FAIR) where = sector; - for_local_enemies(loop) { + for (loop = 1; loop <= game.nenhere; loop++) { if (game.kpower[loop] < 0) continue; /* too weak to attack */ /* compute hit strength and diminish shield power */ @@ -639,7 +639,7 @@ void attack(bool torps_ok) r = (Rand()+Rand())*0.5 -0.5; r += 0.002*game.kpower[loop]*r; torpedo(course, r, jay, &hit, 1, 1); - if (KLINGREM==0) + if ((game.state.remkl + game.state.remcom + game.state.nscrem)==0) finish(FWON); /* Klingons did themselves in! */ if (game.state.galaxy[game.quadrant.x][game.quadrant.y].supernova || game.alldone) return; /* Supernova or finished */ @@ -722,9 +722,9 @@ void attack(bool torps_ok) } } /* After attack, reset average distance to enemies */ - for_local_enemies(loop) + for (loop = 1; loop <= game.nenhere; loop++) game.kavgd[loop] = game.kdist[loop]; - sortkl(); + sortklings(); return; } @@ -758,7 +758,7 @@ void deadkl(coord w, feature type, coord mv) switch (type) { case IHC: game.comhere = false; - for_commanders (i) + for (i = 1; i <= game.state.remcom; i++) if (same(game.state.kcmdr[i], game.quadrant)) break; game.state.kcmdr[i] = game.state.kcmdr[game.state.remcom]; @@ -789,15 +789,16 @@ void deadkl(coord w, feature type, coord mv) /* For each kind of enemy, finish message to player */ prout(_(" destroyed.")); game.quad[w.x][w.y] = IHDOT; - if (KLINGREM==0) + if ((game.state.remkl + game.state.remcom + game.state.nscrem)==0) return; - game.state.remtime = game.state.remres/(game.state.remkl + 4*game.state.remcom); + game.state.remtime = game.state.remkl + game.state.remcom > 0 ? + game.state.remres/(game.state.remkl + 4*game.state.remcom) : 99; /* Remove enemy ship from arrays describing local conditions */ if (is_scheduled(FCDBAS) && same(game.battle, game.quadrant) && type==IHC) unschedule(FCDBAS); - for_local_enemies(i) + for (i = 1; i <= game.nenhere; i++) if (same(game.ks[i], w)) break; game.nenhere--; @@ -838,8 +839,8 @@ static bool targetcheck(double x, double y, double *course) return false; } -void photon(void) -/* launch photon torpedo */ +void torps(void) +/* launch photon torpedo salvo */ { double targ[4][3], course[4]; double r, dummy; @@ -966,7 +967,7 @@ void photon(void) if (game.alldone || game.state.galaxy[game.quadrant.x][game.quadrant.y].supernova) return; } - if (KLINGREM==0) + if ((game.state.remkl + game.state.remcom + game.state.nscrem)==0) finish(FWON); } @@ -1138,9 +1139,10 @@ void phasers(void) irec=0; do { chew(); - if (!kz) for_local_enemies(i) - irec+=fabs(game.kpower[i])/(PHASEFAC*pow(0.90,game.kdist[i]))* - (1.01+0.05*Rand()) + 1.0; + if (!kz) + for (i = 1; i <= game.nenhere; i++) + irec += fabs(game.kpower[i])/(PHASEFAC*pow(0.90,game.kdist[i]))* + (1.01+0.05*Rand()) + 1.0; kz=1; proutn(_("%d units required. "), irec); chew(); @@ -1175,7 +1177,7 @@ void phasers(void) if (game.nenhere) { extra = 0.0; powrem = rpow; - for_local_enemies(i) { + for (i = 1; i <= game.nenhere; i++) { hits[i] = 0.0; if (powrem <= 0) continue; @@ -1367,7 +1369,7 @@ void hittem(double *hits) skip(1); if (kpow == 0) { deadkl(w, ienm, w); - if (KLINGREM==0) + if ((game.state.remkl + game.state.remcom + game.state.nscrem)==0) finish(FWON); if (game.alldone) return;