xref: /original-bsd/games/sail/game.c (revision 0842ddeb)
1 /*
2  * Copyright (c) 1983, 1993
3  *	The Regents of the University of California.  All rights reserved.
4  *
5  * %sccs.include.redist.c%
6  */
7 
8 #ifndef lint
9 static char sccsid[] = "@(#)game.c	8.2 (Berkeley) 04/28/95";
10 #endif /* not lint */
11 
12 #include "extern.h"
13 
14 maxturns(ship, af)
15 register struct ship *ship;
16 char *af;
17 {
18 	register int turns;
19 
20 	turns = ship->specs->ta;
21 	if (*af = (ship->file->drift > 1 && turns)) {
22 		turns--;
23 		if (ship->file->FS == 1)
24 			turns = 0;
25 	}
26 	return turns;
27 }
28 
29 maxmove(ship, dir, fs)
30 register struct ship *ship;
31 int dir, fs;
32 {
33 	register int riggone = 0, Move, flank = 0;
34 
35 	Move = ship->specs->bs;
36 	if (!ship->specs->rig1)
37 		riggone++;
38 	if (!ship->specs->rig2)
39 		riggone++;
40 	if (!ship->specs->rig3)
41 		riggone++;
42 	if (!ship->specs->rig4)
43 		riggone++;
44 	if ((ship->file->FS || fs) && fs != -1) {
45 		flank = 1;
46 		Move = ship->specs->fs;
47 	}
48 	if (dir == winddir)
49 		Move -= 1 + WET[windspeed][ship->specs->class-1].B;
50 	else if (dir == winddir + 2 || dir == winddir - 2 || dir == winddir - 6 || dir == winddir + 6)
51 		Move -= 1 + WET[windspeed][ship->specs->class-1].C;
52 	else if (dir == winddir + 3 || dir == winddir - 3 || dir == winddir - 5 || dir == winddir + 5)
53 		Move = (flank ? 2 : 1) - WET[windspeed][ship->specs->class-1].D;
54 	else if (dir == winddir + 4 || dir == winddir - 4)
55 		Move = 0;
56 	else
57 		Move -= WET[windspeed][ship->specs->class-1].A;
58 	Move -= riggone;
59 	Move = Move < 0 ? 0 : Move;
60 	return(Move);
61 }
62