ientesc=0;
isatb=0;
game.future[FSCMOVE]=0.2777+game.state.date;
- game.future[FSCDBAS]=1e30;
+ game.future[FSCDBAS]=FOREVER;
game.state.isx=iqx;
game.state.isy=iqy;
}
else {
if (forces > 1000.0) /* Very strong -- move in for kill */
motion = (1.0-square(Rand()))*dist1 + 1.0;
- if (condit==IHDOCKED) /* protected by base -- back off ! */
+ if (condit==IHDOCKED && (game.options & OPTION_BASE)) /* protected by base -- back off ! */
motion -= skill*(2.0-square(Rand()));
}
#ifdef DEBUG
nextx = comx;
nexty = comy;
/* main move loop */
- for (ll = 1; ll <= nsteps; ll++) {
+ for (ll = 0; ll < nsteps; ll++) {
#ifdef DEBUG
if (idebug) {
- prout("%d", ll);
+ prout("%d", ll+1);
}
#endif
/* Check if preferred position available */
looky = nexty + krawly;
krawly = -krawly;
}
- else if (game.quad[lookx][looky] != IHDOT) {
+ else if ((game.options & OPTION_RAMMING) && game.quad[lookx][looky] != IHDOT) {
/* See if we should ram ship */
if (game.quad[lookx][looky] == ship &&
(ienm == IHC || ienm == IHS)) {
/* Figure out which Klingon is the commander (or Supercommander)
and do move */
- if (comhere) for (i = 1; i <= nenhere; i++) {
- ix = game.kx[i];
- iy = game.ky[i];
- if (game.quad[ix][iy] == IHC) {
- movebaddy(ix, iy, i, IHC);
- break;
+ if (comhere)
+ for_local_enemies(i) {
+ ix = game.kx[i];
+ iy = game.ky[i];
+ if (game.quad[ix][iy] == IHC) {
+ movebaddy(ix, iy, i, IHC);
+ break;
+ }
}
- }
- if (ishere) for (i = 1; i <= nenhere; i++) {
- ix = game.kx[i];
- iy = game.ky[i];
- if (game.quad[ix][iy] == IHS) {
- movebaddy(ix, iy, i, IHS);
- break;
+ if (ishere)
+ for_local_enemies(i) {
+ ix = game.kx[i];
+ iy = game.ky[i];
+ if (game.quad[ix][iy] == IHS) {
+ movebaddy(ix, iy, i, IHS);
+ break;
+ }
}
- }
/* if skill level is high, move other Klingons and Romulans too!
Move these last so they can base their actions on what the
commander(s) do. */
- if (skill >= SKILL_EXPERT) for (i = 1; i <= nenhere; i++) {
- ix = game.kx[i];
- iy = game.ky[i];
- if (game.quad[ix][iy] == IHK || game.quad[ix][iy] == IHR)
- movebaddy(ix, iy, i, game.quad[ix][iy]);
- }
+ if (skill >= SKILL_EXPERT && (game.options & OPTION_MVBADDY))
+ for_local_enemies(i) {
+ ix = game.kx[i];
+ iy = game.ky[i];
+ if (game.quad[ix][iy] == IHK || game.quad[ix][iy] == IHR)
+ movebaddy(ix, iy, i, game.quad[ix][iy]);
+ }
sortkl();
}
return 1;
if (flag) {
/* Avoid quadrants with bases if we want to avoid Enterprise */
- for (i = 1; i <= game.state.rembase; i++)
+ for_starbases(i)
if (game.state.baseqx[i]==iqx && game.state.baseqy[i]==iqy) return 1;
}
if (justin && !iscate) return 1;
isatb=0;
ishere=0;
ientesc=0;
- game.future[FSCDBAS]=1e30;
- for (i = 1; i <= nenhere; i++)
+ game.future[FSCDBAS]=FOREVER;
+ for_local_enemies(i)
if (game.quad[game.kx[i]][game.ky[i]] == IHS) break;
game.quad[game.kx[i]][game.ky[i]] = IHDOT;
game.kx[i] = game.kx[nenhere];
{
int i, i2, j, ideltax, ideltay, ibqx, ibqy, sx, sy, ifindit, iwhichb;
int iqx, iqy;
- int basetbl[BASEMAX];
- double bdist[BASEMAX];
+ int basetbl[BASEMAX+1];
+ double bdist[BASEMAX+1];
int flag;
#ifdef DEBUG
if (idebug) prout("SCOM");
#endif
/* Decide on being active or passive */
- flag = ((game.state.killc+game.state.killk)/(game.state.date+0.01-indate) < 0.1*skill*(skill+1.0) ||
+ flag = ((NKILLC+NKILLK)/(game.state.date+0.01-indate) < 0.1*skill*(skill+1.0) ||
(game.state.date-indate) < 3.0);
if (iscate==0 && flag) {
/* compute move away from Enterprise */
/* compute distances to starbases */
if (game.state.rembase <= 0) {
/* nothing left to do */
- game.future[FSCMOVE] = 1e30;
+ game.future[FSCMOVE] = FOREVER;
return;
}
sx = game.state.isx;
sy = game.state.isy;
- for (i = 1; i <= game.state.rembase; i++) {
+ for_starbases(i) {
basetbl[i] = i;
ibqx = game.state.baseqx[i];
ibqy = game.state.baseqy[i];
without too many Klingons, and not already under attack. */
ifindit = iwhichb = 0;
- for (i2 = 1; i2 <= game.state.rembase; i2++) {
+ for_starbases(i2) {
i = basetbl[i2]; /* bug in original had it not finding nearest*/
ibqx = game.state.baseqx[i];
ibqy = game.state.baseqy[i];
}
/* check for a base */
if (game.state.rembase == 0) {
- game.future[FSCMOVE] = 1e30;
+ game.future[FSCMOVE] = FOREVER;
}
- else for (i=1; i<=game.state.rembase; i++) {
+ else for_starbases(i) {
ibqx = game.state.baseqx[i];
ibqy = game.state.baseqy[i];
if (ibqx==game.state.isx && ibqy == game.state.isy && game.state.isx != batx && game.state.isy != baty) {
iseenit = 0;
isatb=1;
game.future[FSCDBAS] = game.state.date + 1.0 +2.0*Rand();
- if (game.future[FCDBAS] < 1e30) game.future[FSCDBAS] +=
+ if (game.future[FCDBAS] < FOREVER) game.future[FSCDBAS] +=
game.future[FCDBAS]-game.state.date;
if (game.damage[DRADIO] > 0 && condit != IHDOCKED)
return; /* no warning */