Commit | Line | Data |
---|---|---|

984263bc MD |
1 | /* |

2 | * Copyright (c) 1980, 1993 | |

3 | * The Regents of the University of California. All rights reserved. | |

4 | * | |

5 | * Redistribution and use in source and binary forms, with or without | |

6 | * modification, are permitted provided that the following conditions | |

7 | * are met: | |

8 | * 1. Redistributions of source code must retain the above copyright | |

9 | * notice, this list of conditions and the following disclaimer. | |

10 | * 2. Redistributions in binary form must reproduce the above copyright | |

11 | * notice, this list of conditions and the following disclaimer in the | |

12 | * documentation and/or other materials provided with the distribution. | |

13 | * 3. All advertising materials mentioning features or use of this software | |

14 | * must display the following acknowledgement: | |

15 | * This product includes software developed by the University of | |

16 | * California, Berkeley and its contributors. | |

17 | * 4. Neither the name of the University nor the names of its contributors | |

18 | * may be used to endorse or promote products derived from this software | |

19 | * without specific prior written permission. | |

20 | * | |

21 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |

22 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |

23 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |

24 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |

25 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |

26 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |

27 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |

28 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |

29 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |

30 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |

31 | * SUCH DAMAGE. | |

1de703da MD |
32 | * |

33 | * @(#)capture.c 8.1 (Berkeley) 5/31/93 | |

34 | * $FreeBSD: src/games/trek/capture.c,v 1.4 1999/11/30 03:49:43 billf Exp $ | |

35 | * $DragonFly: src/games/trek/capture.c,v 1.2 2003/06/17 04:25:25 dillon Exp $ | |

984263bc MD |
36 | */ |

37 | ||

984263bc MD |
38 | # include "trek.h" |

39 | ||

40 | /* | |

41 | ** Ask a Klingon To Surrender | |

42 | ** | |

43 | ** (Fat chance) | |

44 | ** | |

45 | ** The Subspace Radio is needed to ask a Klingon if he will kindly | |

46 | ** surrender. A random Klingon from the ones in the quadrant is | |

47 | ** chosen. | |

48 | ** | |

49 | ** The Klingon is requested to surrender. The probability of this | |

50 | ** is a function of that Klingon's remaining power, our power, | |

51 | ** etc. | |

52 | */ | |

53 | ||

54 | capture() | |

55 | { | |

56 | int i; | |

57 | struct kling *k; | |

58 | double x; | |

59 | extern struct kling *selectklingon(); | |

60 | ||

61 | /* check for not cloaked */ | |

62 | if (Ship.cloaked) | |

63 | { | |

64 | printf("Ship-ship communications out when cloaked\n"); | |

65 | return; | |

66 | } | |

67 | if (damaged(SSRADIO)) | |

68 | return (out(SSRADIO)); | |

69 | /* find out if there are any at all */ | |

70 | if (Etc.nkling <= 0) | |

71 | { | |

72 | printf("Uhura: Getting no response, sir\n"); | |

73 | return; | |

74 | } | |

75 | ||

76 | /* if there is more than one Klingon, find out which one */ | |

77 | k = selectklingon(); | |

78 | Move.free = 0; | |

79 | Move.time = 0.05; | |

80 | ||

81 | /* check out that Klingon */ | |

82 | k->srndreq++; | |

83 | x = Param.klingpwr; | |

84 | x *= Ship.energy; | |

85 | x /= k->power * Etc.nkling; | |

86 | x *= Param.srndrprob; | |

87 | i = x; | |

88 | # ifdef xTRACE | |

89 | if (Trace) | |

90 | printf("Prob = %d (%.4f)\n", i, x); | |

91 | # endif | |

92 | if (i > ranf(100)) | |

93 | { | |

94 | /* guess what, he surrendered!!! */ | |

95 | printf("Klingon at %d,%d surrenders\n", k->x, k->y); | |

96 | i = ranf(Param.klingcrew); | |

97 | if ( i > 0 ) | |

98 | printf("%d klingons commit suicide rather than be taken captive\n", Param.klingcrew - i); | |

99 | if (i > Ship.brigfree) | |

100 | i = Ship.brigfree; | |

101 | Ship.brigfree -= i; | |

102 | printf("%d captives taken\n", i); | |

103 | killk(k->x, k->y); | |

104 | return; | |

105 | } | |

106 | ||

107 | /* big surprise, he refuses to surrender */ | |

108 | printf("Fat chance, captain\n"); | |

109 | return; | |

110 | } | |

111 | ||

112 | ||

113 | /* | |

114 | ** SELECT A KLINGON | |

115 | ** | |

116 | ** Cruddy, just takes one at random. Should ask the captain. | |

117 | */ | |

118 | ||

119 | struct kling *selectklingon() | |

120 | { | |

121 | int i; | |

122 | ||

123 | if (Etc.nkling < 2) | |

124 | i = 0; | |

125 | else | |

126 | i = ranf(Etc.nkling); | |

127 | return (&Etc.klingon[i]); | |

128 | } |