|
|
1.1 root 1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted provided
6: * that: (1) source distributions retain this entire copyright notice and
7: * comment, and (2) distributions including binaries display the following
8: * acknowledgement: ``This product includes software developed by the
9: * University of California, Berkeley and its contributors'' in the
10: * documentation or other materials provided with the distribution and in
11: * all advertising materials mentioning features or use of this software.
12: * Neither the name of the University nor the names of its contributors may
13: * be used to endorse or promote products derived from this software without
14: * specific prior written permission.
15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
16: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
17: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
18: */
19:
20: #ifndef lint
21: static char sccsid[] = "@(#)capture.c 5.4 (Berkeley) 6/1/90";
22: #endif /* not lint */
23:
24: # include "trek.h"
25:
26: /*
27: ** Ask a Klingon To Surrender
28: **
29: ** (Fat chance)
30: **
31: ** The Subspace Radio is needed to ask a Klingon if he will kindly
32: ** surrender. A random Klingon from the ones in the quadrant is
33: ** chosen.
34: **
35: ** The Klingon is requested to surrender. The probability of this
36: ** is a function of that Klingon's remaining power, our power,
37: ** etc.
38: */
39:
40: capture()
41: {
42: register int i;
43: register struct kling *k;
44: double x;
45: extern struct kling *selectklingon();
46:
47: /* check for not cloaked */
48: if (Ship.cloaked)
49: {
50: printf("Ship-ship communications out when cloaked\n");
51: return;
52: }
53: if (damaged(SSRADIO))
54: return (out(SSRADIO));
55: /* find out if there are any at all */
56: if (Etc.nkling <= 0)
57: {
58: printf("Uhura: Getting no response, sir\n");
59: return;
60: }
61:
62: /* if there is more than one Klingon, find out which one */
63: k = selectklingon();
64: Move.free = 0;
65: Move.time = 0.05;
66:
67: /* check out that Klingon */
68: k->srndreq++;
69: x = Param.klingpwr;
70: x *= Ship.energy;
71: x /= k->power * Etc.nkling;
72: x *= Param.srndrprob;
73: i = x;
74: # ifdef xTRACE
75: if (Trace)
76: printf("Prob = %d (%.4f)\n", i, x);
77: # endif
78: if (i > ranf(100))
79: {
80: /* guess what, he surrendered!!! */
81: printf("Klingon at %d,%d surrenders\n", k->x, k->y);
82: i = ranf(Param.klingcrew);
83: if ( i > 0 )
84: printf("%d klingons commit suicide rather than be taken captive\n", Param.klingcrew - i);
85: if (i > Ship.brigfree)
86: i = Ship.brigfree;
87: Ship.brigfree -= i;
88: printf("%d captives taken\n", i);
89: killk(k->x, k->y);
90: return;
91: }
92:
93: /* big surprise, he refuses to surrender */
94: printf("Fat chance, captain\n");
95: return;
96: }
97:
98:
99: /*
100: ** SELECT A KLINGON
101: **
102: ** Cruddy, just takes one at random. Should ask the captain.
103: */
104:
105: struct kling *selectklingon()
106: {
107: register int i;
108:
109: if (Etc.nkling < 2)
110: i = 0;
111: else
112: i = ranf(Etc.nkling);
113: return (&Etc.klingon[i]);
114: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.