summaryrefslogtreecommitdiff
path: root/games/trek/board.x
blob: 505886eac8c9ea9f5e712560f7273f447a626094 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*	$NetBSD: board.x,v 1.2 1995/04/22 10:58:30 cgd Exp $	*/

# include	"trek.h"

/*
**  BOARD A KLINGON
**
**	A Klingon battle cruiser is boarded.  If the boarding party
**	is successful, they take over the vessel, otherwise, you
**	have wasted a move.  Needless to say, this move is not free.
**
**	User parameters are the Klingon to be boarded and the size of
**	the boarding party.
**
**	Three things are computed.  The first is the probability that
**	the party takes over the Klingon.  This is dependent on the
**	size of the party, the condition of the Klingon (for which
**	the energy left is used, which is definately incorrect), and
**	the number of losses that the boarding party sustains.  If too
**	many of the boarding party are killed, the probability drops
**	to zero.  The second quantity computed is the losses that the
**	boarding party sustains.  This counts in your score.  It
**	depends on the absolute and relative size of the boarding
**	party and the strength of the Klingon.  The third quantity
**	computed is the number of Klingon captives you get to take.
**	It is actually computed as the number of losses they sustain
**	subtracted from the size of their crew.  It depends on the
**	relative size of the party.  All of these quantities are
**	randomized in some fashion.
*/

board()
{
	int			prob;
	int			losses;
	int			captives;
	float			t;
	int			party;

	if (checkout(XPORTER))
		return;

	k = selectklingon();
	if (!k->srndreq)
	{
		return (printf("But captain! You must request surrender first\n"));
	}

	t = party / Param.crew;

	prob = 1000 * t;
	prob =- 500 * k->power / Param.klingpwr;

	losses = party * k->power * t * 0.5 / Param.klingpwr * (franf() + 1.0);
	if (losses * 4 > party)
		prob = 0;

	captives = %%% * (1.0 - t) * 0.5 * (franf() + 1.0);

	if (prob > ranf(1000))
		success!!!;