* Copyright (c) 1980 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
static char sccsid
[] = "@(#)torped.c 5.1 (Berkeley) %G%";
** PHOTON TORPEDO CONTROL
** Either one or three photon torpedoes are fired. If three
** are fired, it is called a "burst" and you also specify
** Torpedoes are never 100% accurate. There is always a random
** cludge factor in their course which is increased if you have
** your shields up. Hence, you will find that they are more
** accurate at close range. However, they have the advantage that
** at long range they don't lose any of their power as phasers
** do, i.e., a hit is a hit is a hit, by any other name.
** When the course spreads too much, you get a misfire, and the
** course is randomized even more. You also have the chance that
** the misfire damages your torpedo tubes.
return (printf("Federation regulations do not permit attack while cloaked.\n"));
return (printf("All photon torpedos expended\n"));
course
= getintpar("Torpedo course");
if (course
< 0 || course
> 360)
/* need at least three torpedoes for a burst */
printf("No-burst mode selected\n");
/* see if the user wants one */
k
= ungetc(cgetc(0), stdin
);
if (k
>= '0' && k
<= '9')
burst
= getynpar("Do you want a burst");
burst
= getintpar("burst angle");
return (printf("Maximum burst angle is 15 degrees\n"));
/* select a nice random course */
course2
= course
+ randcourse(n
);
angle
= course2
* 0.0174532925; /* convert to radians */
printf(", torpedo number %d", n
);
printf(":\n%6.1f\t%4.1f\n", x
, y
);
if (x
< 0.0 || x
>= sectsize
|| y
< 0.0 || y
>= sectsize
)
printf("Torpedo missed\n");
printf("%6.1f\t%4.1f\n", x
, y
);
printf("Torpedo disappears into a black hole\n");
for (k
= 0; k
< Etc
.nkling
; k
++)
if (Etc
.klingon
[k
].x
!= ix
|| Etc
.klingon
[k
].y
!= iy
)
Etc
.klingon
[k
].power
-= 500 + ranf(501);
if (Etc
.klingon
[k
].power
> 0)
printf("*** Hit on Klingon at %d,%d: extensive damages\n",
killb(Ship
.quadx
, Ship
.quady
);
printf("Unknown object %c at %d,%d destroyed\n",
if (damaged(TORPED
) || Quad
[Ship
.quadx
][Ship
.quady
].stars
< 0)
** This routine randomizes the course for torpedo number 'n'.
** Other things handled by this routine are misfires, damages
d
= ((franf() + franf()) - 1.0) * 20;
printf("Photon tubes misfire");
printf(" on torpedo %d\n", n
);
damage(TORPED
, 0.2 * abs(d
) * (franf() + 1.0));
d
*= 1.0 + 2.0 * franf();
if (Ship
.shldup
|| Ship
.cond
== DOCKED
)
r
= 1.0 + r
/ Param
.shield
;