+#ifdef SERGEEV\r
+#include <conio.h>\r
+#include <unistd.h>\r
+#include "sstlinux.h"\r
+#endif /* SERGEEV */\r
#include "sst.h"\r
\r
void doshield(int i) {\r
shield += aaitem;\r
energy -= aaitem;\r
return;\r
+ case NONE:; /* avoid gcc warning */\r
}\r
}\r
\r
case IHC: type = 2.0; break;\r
case IHS: type = 2.5; break;\r
case IHT: type = 0.5; break;\r
+ case IHQUEST: type = 4.0; break;\r
}\r
proutn(ibumpd ? " rammed by " : " rams ");\r
crmena(0, ienm, 2, ix, iy);\r
crmshp();\r
prout(" heavily damaged.");\r
icas = 10.0+20.0*Rand();\r
- proutn("***Sickbay reports ");\r
- crami(icas, 1);\r
- prout(" casualties.");\r
+ prout("***Sickbay reports %d casualties", icas);\r
casual += icas;\r
- for (l=1; l <= ndevice; l++) {\r
+ for (l=1; l <= NDEVICES; l++) {\r
if (l == DDRAY) continue; // Don't damage deathray \r
if (game.damage[l] < 0) continue;\r
extradm = (10.0*type*Rand()+1.0)*damfac;\r
}\r
shldup = 0;\r
if (game.state.remkl) {\r
- pause(2);\r
+ pause_game(2);\r
dreprt();\r
}\r
else finish(FWON);\r
return;\r
}\r
\r
-void torpedo(double course, double r, int inx, int iny, double *hit) {\r
- int l, iquad, ix, iy, jx, jy, shoved=0, ll;\r
+void torpedo(double course, double r, int inx, int iny, double *hit, int wait) {\r
+ int l, iquad=0, ix=0, iy=0, jx=0, jy=0, shoved=0, ll;\r
+#ifdef SERGEEV\r
+ int crx,cry;\r
+ \r
+#endif /* SERGEEV */\r
double ac=course + 0.25*r;\r
double angle = (15.0-ac)*0.5235988;\r
double bullseye = (15.0 - course)*0.5235988;\r
if (fabs(deltay) > bigger) bigger = fabs(deltay);\r
deltax /= bigger;\r
deltay /= bigger;\r
-\r
+#ifdef SERGEEV\r
+ crx=wherex();\r
+ cry=wherey();\r
+ if (game.damage[DSRSENS]==0 || condit==IHDOCKED) setwnd(1);\r
+ else setwnd(4);\r
+#endif /* SERGEEV */\r
/* Loop to move a single torpedo */\r
for (l=1; l <= 15; l++) {\r
x += deltax;\r
y += deltay;\r
iy = y + 0.5;\r
if (iy < 1 || iy > 10) break;\r
+#ifndef SERGEEV\r
if (l==4 || l==9) skip(1);\r
- cramf(x, 0, 1);\r
- proutn(" - ");\r
- cramf(y, 0, 1);\r
- proutn(" ");\r
+ proutn("%d - %d ", (int)x, (int)y);\r
iquad=game.quad[ix][iy];\r
+#else\r
+ iquad=game.quad[ix][iy];\r
+ if (game.damage[DSRSENS]==0 || condit==IHDOCKED){\r
+ drawmaps(2);\r
+ delay((wait!=1)*400);\r
+ wait=1;\r
+ gotoxy(iy*2+3,ix+2);\r
+ if ((game.quad[ix][iy]==IHDOT)||(game.quad[ix][iy]==IHBLANK)){\r
+ game.quad[ix][iy]='+';\r
+ drawmaps(2);\r
+ game.quad[ix][iy]=iquad;\r
+ sound(l*10);\r
+ delay(100);\r
+ nosound();\r
+ }\r
+ else {\r
+ game.quad[ix][iy]|=128;\r
+ drawmaps(2);\r
+ game.quad[ix][iy]=iquad;\r
+ _setcursortype(_NOCURSOR);\r
+ sound(500);\r
+ delay(1000);\r
+ nosound();\r
+ lowvideo();\r
+ _setcursortype(_NORMALCURSOR);\r
+ }\r
+ }\r
+ else {\r
+ proutn("%d - %d ", (int)x, (int)y);\r
+ }\r
+#endif /* SERGEEV */\r
if (iquad==IHDOT) continue;\r
/* hit something */\r
+#ifndef SERGEEV\r
skip(1);\r
+#else\r
+ setwnd(4);\r
+ gotoxy(crx,cry);\r
+#endif\r
switch(iquad) {\r
case IHE: /* Hit our ship */\r
case IHF:\r
1000.0*sqrt(square(ix-inx)+square(iy-iny))*\r
fabs(sin(bullseye-angle));\r
*hit = fabs(*hit);\r
+#ifndef SERGEEV\r
newcnd(); /* undock */\r
+#endif /* SERGEEV */\r
/* We may be displaced. */\r
- if (landed==1) return; /* Cheat if on a planet */\r
+ if (landed==1 || condit==IHDOCKED) return; /* Cheat if on a planet */\r
ang = angle + 2.5*(Rand()-0.5);\r
temp = fabs(sin(ang));\r
if (fabs(cos(ang)) > temp) temp = fabs(cos(ang));\r
prout(" damaged but not destroyed.");\r
return;\r
}\r
- prout(" damaged--");\r
+ proutn(" damaged--");\r
game.kx[ll] = jx;\r
game.ky[ll] = jy;\r
shoved = 1;\r
break;\r
case IHB: /* Hit a base */\r
+ skip(1);\r
prout("***STARBASE DESTROYED..");\r
if (game.starch[quadx][quady] < 0) game.starch[quadx][quady] = 0;\r
for (ll=1; ll<=game.state.rembase; ll++) {\r
prout(" destroyed.");\r
game.state.nplankl++;\r
game.state.newstuf[quadx][quady] -= 1;\r
- game.state.plnets[iplnet] = nulplanet;\r
+ DESTROY(&game.state.plnets[iplnet]);\r
iplnet = 0;\r
plnetx = plnety = 0;\r
game.quad[ix][iy] = IHDOT;\r
prout(" unaffected by photon blast.");\r
return;\r
case IHQUEST: /* Hit a thingy */\r
+ if (Rand()>0.7) { // Used to be certain death \r
skip(1);\r
prouts("AAAAIIIIEEEEEEEEAAAAAAAAUUUUUGGGGGHHHHHHHHHHHH!!!");\r
skip(1);\r
prouts(" HACK! HACK! HACK! *CHOKE!* ");\r
skip(1);\r
proutn("Mr. Spock-");\r
- prouts(" \"Facinating!\"");\r
+ prouts(" \"Fascinating!\"");\r
skip(1);\r
- game.quad[ix][iy] = IHDOT;\r
- return;\r
+ deadkl(ix, iy, iquad, ix, iy);\r
+ } else {\r
+ /*\r
+ * Stas Sergeev added the possibility that\r
+ * you can shove the Thingy.\r
+ */\r
+ iqengry=1;\r
+ shoved=1;\r
+ }\r
+ return;\r
case IHBLANK: /* Black hole */\r
skip(1);\r
crmena(1, IHBLANK, 2, ix, iy);\r
prout("***Torpedo absorbed by Tholian web.");\r
return;\r
case IHT: /* Hit a Tholian */\r
- skip(1);\r
- crmena(1, IHT, 2, ix, iy);\r
h1 = 700.0 + 100.0*Rand() -\r
1000.0*sqrt(square(ix-inx)+square(iy-iny))*\r
fabs(sin(bullseye-angle));\r
h1 = fabs(h1);\r
if (h1 >= 600) {\r
+#ifndef SERGEEV\r
prout(" destroyed.");\r
+#endif /* SERGEEV */\r
game.quad[ix][iy] = IHDOT;\r
ithere = 0;\r
ithx = ithy = 0;\r
+#ifdef SERGEEV\r
+ deadkl(ix, iy, iquad, ix, iy);\r
+#endif /* SERGEEV */\r
return;\r
}\r
+ skip(1);\r
+ crmena(1, IHT, 2, ix, iy);\r
if (Rand() > 0.05) {\r
prout(" survives photon blast.");\r
return;\r
prout(" disappears.");\r
game.quad[ix][iy] = IHWEB;\r
ithere = ithx = ithy = 0;\r
+ nenhere--;\r
{\r
int dum, my;\r
dropin(IHBLANK, &dum, &my);\r
}\r
break;\r
}\r
+#ifdef SERGEEV\r
+ if(curwnd!=4) {\r
+ setwnd(4);\r
+ gotoxy(crx,cry);\r
+ }\r
+#endif /* SERGEEV */\r
if (shoved) {\r
game.quad[jx][jy]=iquad;\r
game.quad[ix][iy]=IHDOT;\r
- proutn(" displaced by blast to");\r
- cramlc(2, jx, jy);\r
- skip(1);\r
+ prout(" displaced by blast to %s ", cramlc(sector, jx, jy));\r
for (ll=1; ll<=nenhere; ll++)\r
game.kdist[ll] = game.kavgd[ll] = sqrt(square(sectx-game.kx[ll])+square(secty-game.ky[ll]));\r
sortkl();\r
return;\r
}\r
+#ifndef SERGEEV\r
skip(1);\r
+#endif /* SERGEEV */\r
prout("Torpedo missed.");\r
return;\r
}\r
\r
static void fry(double hit) {\r
double ncrit, extradm;\r
- int ktr=1, l, ll, j, cdam[6], crptr;\r
+ int ktr=1, l, ll, j, cdam[NDEVICES+1];\r
\r
/* a critical hit occured */\r
if (hit < (275.0-25.0*skill)*(1.0+0.5*Rand())) return;\r
ncrit = 1.0 + hit/(500.0+100.0*Rand());\r
proutn("***CRITICAL HIT--");\r
/* Select devices and cause damage */\r
- for (l = 1; l <= ncrit; l++) {\r
+ for (l = 1; l <= ncrit && l <= NDEVICES; l++) {\r
do {\r
- j = ndevice*Rand()+1.0;\r
+ j = NDEVICES*Rand()+1.0;\r
/* Cheat to prevent shuttle damage unless on ship */\r
} while (game.damage[j] < 0.0 || (j == DSHUTTL && iscraft != 1) ||\r
j == DDRAY);\r
neutz = 0;\r
return;\r
}\r
- if (((comhere || ishere) && (justin == 0)) || skill == 5) movcom();\r
- if (nenhere==0) return;\r
+ if ((((comhere || ishere) && (justin == 0)) || skill == 5)&&(k!=0)) movcom();\r
+ if (nenhere==0 || (nenhere==1 && iqhere && iqengry==0)) return;\r
pfac = 1.0/inshld;\r
if (shldchg == 1) chgfac = 0.25+0.5*Rand();\r
skip(1);\r
jx = game.kx[l];\r
jy = game.ky[l];\r
iquad = game.quad[jx][jy];\r
+ if (iquad==IHT || (iquad==IHQUEST && !iqengry)) continue;\r
itflag = (iquad == IHK && r > 0.0005) || k == 0 ||\r
(iquad==IHC && r > 0.015) ||\r
(iquad==IHR && r > 0.3) ||\r
- (iquad==IHS && r > 0.07);\r
+ (iquad==IHS && r > 0.07) ||\r
+ (iquad==IHQUEST && r > 0.05);\r
if (itflag) {\r
/* Enemy uses phasers */\r
if (condit == IHDOCKED) continue; /* Don't waste the effort! */\r
crmena(0, iquad, i, jx, jy);\r
}\r
attempt = 1;\r
- prout("--");\r
+ prout(" ");\r
r = (Rand()+Rand())*0.5 -0.5;\r
r += 0.002*game.kpower[l]*r;\r
- torpedo(course, r, jx, jy, &hit);\r
+ torpedo(course, r, jx, jy, &hit, 0);\r
if (game.state.remkl==0) finish(FWON); /* Klingons did themselves in! */\r
if (game.state.galaxy[quadx][quady] == 1000 ||\r
alldone) return; /* Supernova or finished */\r
if (hit == 0) continue;\r
}\r
- if (shldup != 0 || shldchg != 0) {\r
+ if (shldup != 0 || shldchg != 0 || condit==IHDOCKED) {\r
/* shields will take hits */\r
- double absorb, hitsh, propor = pfac*shield;\r
+ double absorb, hitsh, propor = pfac*shield*(condit==IHDOCKED ? 2.1 : 1.0);\r
if(propor < 0.1) propor = 0.1;\r
hitsh = propor*chgfac*hit+1.0;\r
atackd=1;\r
if (absorb > shield) absorb = shield;\r
shield -= absorb;\r
hit -= hitsh;\r
+ if (condit==IHDOCKED) dock(0);\r
if (propor > 0.1 && hit < 0.005*energy) continue;\r
}\r
/* It's a hit -- print out hit size */\r
shields were down for some strange reason. This\r
doesn't make any sense, so I've fixed it */\r
ihurt = 1;\r
- cramf(hit, 0, 2);\r
- proutn(" unit hit");\r
+ proutn("%d unit hit", (int)hit);\r
if ((game.damage[DSRSENS] > 0 && itflag) || skill <= 2) {\r
proutn(" on the ");\r
crmshp();\r
if (hit > hitmax) hitmax = hit;\r
hittot += hit;\r
fry(hit);\r
- printf("Hit %g energy %g\n", hit, energy);\r
+ prout("Hit %g energy %g", hit, energy);\r
energy -= hit;\r
+ if (condit==IHDOCKED) dock(0);\r
}\r
if (energy <= 0) {\r
/* Returning home upon your shield, not with it... */\r
else {\r
/* Print message if starship suffered hit(s) */\r
skip(1);\r
- proutn("Energy left ");\r
- cramf(energy, 0, 2);\r
- proutn(" shields ");\r
- if (shldup) proutn("up, ");\r
- else if (game.damage[DSHIELD] == 0) proutn("down, ");\r
+ proutn("Energy left %2d shields ", (int)energy);\r
+ if (shldup) proutn("up ");\r
+ else if (game.damage[DSHIELD] == 0) proutn("down ");\r
else proutn("damaged, ");\r
}\r
- crami(percent, 1);\r
- proutn("% torpedoes left ");\r
- crami(torps, 1);\r
- skip(1);\r
+ prout("%d%%, torpedoes left %d", percent, torps);\r
/* Check if anyone was hurt */\r
if (hitmax >= 200 || hittot >= 500) {\r
int icas= hittot*Rand()*0.015;\r
if (icas >= 2) {\r
skip(1);\r
- proutn("Mc Coy- \"Sickbay to bridge. We suffered ");\r
- crami(icas, 1);\r
- prout(" casualties");\r
+ prout("Mc Coy- \"Sickbay to bridge. We suffered %d casualties", icas);\r
prout(" in that last attack.\"");\r
casual += icas;\r
}\r
/* Added ixx and iyy allow enemy to "move" before dying */\r
\r
int i,j;\r
- \r
+\r
+#ifdef SERGEEV \r
+ skip(1);\r
+#endif /* SERGEEV */\r
crmena(1, type, 2, ixx, iyy);\r
/* Decide what kind of enemy it is and update approriately */\r
if (type == IHR) {\r
/* Killed a Tholian */\r
ithere = 0;\r
}\r
+ else if (type == IHQUEST) {\r
+ /* Killed a Thingy */\r
+ iqhere=iqengry=thingx=thingy=0;\r
+ }\r
else {\r
/* Some type of a Klingon */\r
game.state.galaxy[quadx][quady] -= 100;\r
\r
game.state.remtime = game.state.remres/(game.state.remkl + 4*game.state.remcom);\r
\r
- if (type == IHT) return;\r
-\r
/* Remove enemy ship from arrays describing local conditions */\r
-\r
+ if (game.future[FCDBAS] < 1e30 && batx==quadx && baty==quady && type==IHC)\r
+ game.future[FCDBAS] = 1e30;\r
for (i=1; i<=nenhere; i++)\r
if (game.kx[i]==ix && game.ky[i]==iy) break;\r
nenhere--;\r
skip(1);\r
prout("Spock- \"Bridge to sickbay. Dr. McCoy,");\r
prout(" I recommend an immediate review of");\r
- prout(" the Captain's psychological profile.");\r
+ prout(" the Captain's psychological profile.\"");\r
chew();\r
return 1;\r
}\r
return;\r
}\r
else if (key == IHEOL) {\r
- crami(torps,1);\r
- prout(" torpedoes left.");\r
+ prout("%d torpedoes left.", torps);\r
proutn("Number of torpedoes to fire- ");\r
key = scan();\r
}\r
chew();\r
prout("Maximum of 3 torpedoes per burst.");\r
key = IHEOL;\r
+ return;\r
}\r
if (n <= torps) break;\r
chew();\r
if (i == 1 && key == IHEOL) {\r
/* prompt for each one */\r
for (i = 1; i <= n; i++) {\r
- proutn("Target sector for torpedo number");\r
- crami(i, 2);\r
- proutn("- ");\r
+ proutn("Target sector for torpedo number %d- ", i);\r
key = scan();\r
if (key != IHREAL) {\r
huh();\r
/* misfire! */\r
r = (Rand()+1.2) * r;\r
if (n>1) {\r
- prouts("***TORPEDO NUMBER");\r
- crami(i, 2);\r
- prouts(" MISFIRES.");\r
+ prouts("***TORPEDO NUMBER %d MISFIRES", i);\r
}\r
else prouts("***TORPEDO MISFIRES.");\r
skip(1);\r
break;\r
}\r
}\r
- if (shldup != 0 || condit == IHDOCKED) r *= 1.0 + 0.0001*shield;\r
+ if (shldup || condit == IHDOCKED) r *= 1.0 + 0.0001*shield;\r
+#ifndef SERGEEV\r
if (n != 1) {\r
skip(1);\r
- proutn("Track for torpedo number");\r
- crami(i, 2);\r
- proutn("- ");\r
+ proutn("Track for torpedo number %d- ", i);\r
}\r
else {\r
skip(1);\r
proutn("Torpedo track- ");\r
}\r
- torpedo(course[i], r, sectx, secty, &dummy);\r
+#endif /* SERGEEV */\r
+ torpedo(course[i], r, sectx, secty, &dummy, i);\r
if (alldone || game.state.galaxy[quadx][quady]==1000) return;\r
}\r
if (game.state.remkl==0) finish(FWON);\r
if (icas) {\r
skip(1);\r
prout("McCoy to bridge- \"Severe radiation burns, Jim.");\r
- proutn(" ");\r
- crami(icas, 1);\r
- prout(" casualties so far.\"");\r
+ prout(" %d casualties so far.\"", icas);\r
casual -= icas;\r
}\r
skip(1);\r
\r
\r
void phasers(void) {\r
- double hits[21], rpow, extra, powrem, over, temp;\r
- int kz = 0, k=1, i; /* Cheating inhibitor */\r
+ double hits[21], rpow=0, extra, powrem, over, temp;\r
+ int kz = 0, k=1, i, irec=0; /* Cheating inhibitor */\r
int ifast=0, no=0, ipoop=1, msgflag = 1;\r
enum {NOTSET, MANUAL, FORCEMAN, AUTOMATIC} automode = NOTSET;\r
- int key;\r
+ int key=0;\r
\r
skip(1);\r
/* SR sensors and Computer */\r
ifast = 1;\r
\r
}\r
- ididit = 1;\r
/* Original code so convoluted, I re-did it all */\r
while (automode==NOTSET) {\r
key=scan();\r
}\r
else {\r
huh();\r
- ididit = 0;\r
return;\r
}\r
}\r
key = scan();\r
}\r
if (key != IHREAL && nenhere != 0) {\r
- proutn("Phasers locked on target. Energy available =");\r
- cramf(ifast?energy-200.0:energy,1,2);\r
- skip(1);\r
+ prout("Phasers locked on target. Energy available: %.2f",\r
+ ifast?energy-200.0:energy,1,2);\r
}\r
+ irec=0;\r
do {\r
- while (key != IHREAL) {\r
+ chew();\r
+ if (!kz) for (i = 1; i <= nenhere; i++)\r
+ irec+=fabs(game.kpower[i])/(PHASEFAC*pow(0.90,game.kdist[i]))*\r
+ (1.01+0.05*Rand()) + 1.0;\r
+ kz=1;\r
+ proutn("(%d) units required. ", irec);\r
chew();\r
- proutn("Units to fire=");\r
+ proutn("Units to fire= ");\r
key = scan();\r
- }\r
- rpow = aaitem;\r
- if (rpow >= (ifast?energy-200:energy)) {\r
- proutn("Energy available= ");\r
- cramf(ifast?energy-200:energy, 1,2);\r
+ if (key!=IHREAL) return;\r
+ rpow = aaitem;\r
+ if (rpow > (ifast?energy-200:energy)) {\r
+ proutn("Energy available= %.2f",\r
+ ifast?energy-200:energy);\r
skip(1);\r
key = IHEOL;\r
}\r
- } while (rpow >= (ifast?energy-200:energy));\r
+ } while (rpow > (ifast?energy-200:energy));\r
if (rpow<=0) {\r
/* chicken out */\r
- ididit = 0;\r
chew();\r
return;\r
}\r
for (i = 1; i <= nenhere; i++) {\r
hits[i] = 0.0;\r
if (powrem <= 0) continue;\r
- hits[i] = fabs(game.kpower[i])/(phasefac*pow(0.90,game.kdist[i]));\r
+ hits[i] = fabs(game.kpower[i])/(PHASEFAC*pow(0.90,game.kdist[i]));\r
over = (0.01 + 0.05*Rand())*hits[i];\r
temp = powrem;\r
powrem -= hits[i] + over;\r
}\r
if (powrem > 0.0) extra += powrem;\r
hittem(hits);\r
+ ididit=1;\r
}\r
if (extra > 0 && alldone == 0) {\r
if (ithere) {\r
prout("phaser energy.");\r
}\r
else {\r
- cramf(extra, 0, 2);\r
- prout(" expended on empty space.");\r
+ prout("%d expended on empty space.", (int)extra);\r
}\r
}\r
break;\r
int ii = game.kx[k], jj = game.ky[k];\r
int ienm = game.quad[ii][jj];\r
if (msgflag) {\r
- proutn("Energy available= ");\r
- cramf(energy-.006-(ifast?200:0), 0, 2);\r
+ proutn("Energy available= %.2f",\r
+ energy-.006-(ifast?200:0));\r
skip(1);\r
msgflag = 0;\r
rpow = 0.0;\r
}\r
if (key == IHEOL) {\r
chew();\r
- if (ipoop && k > kz) {\r
- int irec=(fabs(game.kpower[k])/(phasefac*pow(0.9,game.kdist[k])))*\r
+ if (ipoop && k > kz)\r
+ irec=(fabs(game.kpower[k])/(PHASEFAC*pow(0.9,game.kdist[k])))*\r
(1.01+0.05*Rand()) + 1.0;\r
- kz = k;\r
- proutn("(");\r
- crami(irec, 1);\r
- proutn(") ");\r
- }\r
+ kz = k;\r
+ proutn("(");\r
+ if (game.damage[DCOMPTR]==0) proutn("%d", irec);\r
+ else proutn("??");\r
+ proutn(") ");\r
proutn("units to fire at ");\r
crmena(0, ienm, 2, ii, jj);\r
proutn("- ");\r
}\r
if (key == IHALPHA) {\r
huh();\r
- ididit = 0;\r
return;\r
}\r
if (key == IHEOL) {\r
}\r
if (aaitem < 0) {\r
/* abort out */\r
- ididit = 0;\r
chew();\r
return;\r
}\r
rpow += aaitem;\r
/* If total requested is too much, inform and start over */\r
\r
- if (rpow >= (ifast?energy-200:energy)) {\r
+ if (rpow > (ifast?energy-200:energy)) {\r
prout("Available energy exceeded -- try again.");\r
chew();\r
- key = IHEOL;\r
- k = 1;\r
- msgflag = 1;\r
- continue;\r
+ return;\r
}\r
key = scan(); /* scan for next value */\r
k++;\r
}\r
if (rpow == 0.0) {\r
/* zero energy -- abort */\r
- ididit = 0;\r
chew();\r
return;\r
}\r
- if (key == IHALPHA & isit("no")) {\r
+ if (key == IHALPHA && isit("no")) {\r
no = 1;\r
}\r
energy -= rpow;\r
}\r
hittem(hits);\r
ididit=1;\r
+ case NOTSET:; /* avoid gcc warning */\r
}\r
/* Say shield raised or malfunction, if necessary */\r
if (alldone) return;\r
\r
void hittem(double *hits) {\r
double kp, kpow, wham, hit, dustfac, kpini;\r
+#ifdef SERGEEV\r
+ int cx, cy;\r
+#endif /* SERGEEV */\r
int nenhr2=nenhere, k=1, kk=1, ii, jj, ienm;\r
\r
skip(1);\r
hit = wham*pow(dustfac,game.kdist[kk]);\r
kpini = game.kpower[kk];\r
kp = fabs(kpini);\r
- if (phasefac*hit < kp) kp = phasefac*hit;\r
+ if (PHASEFAC*hit < kp) kp = PHASEFAC*hit;\r
game.kpower[kk] -= (game.kpower[kk] < 0 ? -kp: kp);\r
kpow = game.kpower[kk];\r
ii = game.kx[kk];\r
jj = game.ky[kk];\r
if (hit > 0.005) {\r
- cramf(hit, 0, 2);\r
- proutn(" unit hit on ");\r
+#ifdef SERGEEV\r
+ if (game.damage[DSRSENS]==0){\r
+ crx=wherex();\r
+ cry=wherey();\r
+ setwnd(1);\r
+ drawmaps(2);\r
+ gotoxy(jj*2+3,ii+2);\r
+ highvideo();\r
+ proutn("%c", game.quad[ii][jj]);\r
+ gotoxy(wherex()-1,wherey());\r
+ sound(500);\r
+ delay(1000);\r
+ nosound();\r
+ lowvideo();\r
+ proutn("%c", game.quad[ii][jj]);\r
+ setwnd(4);\r
+ gotoxy(crx,cry);\r
+ _setcursortype(_NORMALCURSOR);\r
+ delay(500);\r
+ }\r
+#endif /* SERGEEV */\r
+ proutn("%d unit hit on ", (int)hit);\r
}\r
else\r
proutn("Very small hit on ");\r
ienm = game.quad[ii][jj];\r
+ if (ienm==IHQUEST) iqengry=1;\r
crmena(0,ienm,2,ii,jj);\r
skip(1);\r
if (kpow == 0) {\r
else /* decide whether or not to emasculate klingon */\r
if (kpow > 0 && Rand() >= 0.9 &&\r
kpow <= ((0.4 + 0.4*Rand())*kpini)) {\r
- proutn("***Mr. Spock- \"Captain, the vessel at");\r
- cramlc(2,ii,jj);\r
- skip(1);\r
+ prout("***Mr. Spock- \"Captain, the vessel at ",\r
+ cramlc(sector,ii,jj));\r
prout(" has just lost its firepower.\"");\r
game.kpower[kk] = -kpow;\r
}\r