xref: /csrg-svn/games/sail/misc.c (revision 11595)
1*11595Sleres #ifndef lint
2*11595Sleres static	char *sccsid = "@(#)misc.c	1.1 83/03/17";
3*11595Sleres #endif
4*11595Sleres #include "externs.h"
5*11595Sleres 
6*11595Sleres #define distance(x,y) (abs(x) >= abs(y) ? abs(x) + abs(y)/2 : abs(y) + abs(x)/2)
7*11595Sleres 
8*11595Sleres range(fromship, toship)
9*11595Sleres register int fromship, toship;
10*11595Sleres {
11*11595Sleres     int bow1r, bow1c, bow2r, bow2c;
12*11595Sleres     int stern1r, stern1c, stern2c, stern2r;
13*11595Sleres     register int bb, bs, sb, ss, result;
14*11595Sleres 
15*11595Sleres     if (fromship > scene[game].vessels
16*11595Sleres 	    || toship > scene[game].vessels) /* just in case */
17*11595Sleres 	return(30000);
18*11595Sleres     if (!pos[toship].dir)
19*11595Sleres 	return(30000);
20*11595Sleres     stern1r = bow1r = pos[fromship].row;
21*11595Sleres     stern1c = bow1c = pos[fromship].col;
22*11595Sleres     stern2r = bow2r = pos[toship].row;
23*11595Sleres     stern2c = bow2c = pos[toship].col;
24*11595Sleres     result = bb = distance((bow2r - bow1r), (bow2c - bow1c));
25*11595Sleres     if (bb < 5)
26*11595Sleres 	{
27*11595Sleres 	drdc(&stern2r, &stern2c, pos[toship].dir);
28*11595Sleres 	drdc(&stern1r, &stern1c, pos[fromship].dir);
29*11595Sleres 	bs = distance((bow2r - stern1r) ,(bow2c - stern1c));
30*11595Sleres 	sb = distance((bow1r - stern2r) ,(bow1c - stern2c));
31*11595Sleres 	ss = distance((stern2r - stern1r) ,(stern2c - stern1c));
32*11595Sleres 	result = min(bb, min(bs, min(sb, ss)));
33*11595Sleres 	}
34*11595Sleres     return(result);
35*11595Sleres }
36*11595Sleres 
37*11595Sleres drdc(dr, dc, dir)
38*11595Sleres register int *dr, *dc;
39*11595Sleres int dir;
40*11595Sleres {
41*11595Sleres     switch (dir)
42*11595Sleres 	{
43*11595Sleres 	case 1:
44*11595Sleres 	    (*dr)++;
45*11595Sleres 	    break;
46*11595Sleres 	case 2:
47*11595Sleres 	    (*dr)++;
48*11595Sleres 	    (*dc)--;
49*11595Sleres 	    break;
50*11595Sleres 	case 3:
51*11595Sleres 	    (*dc)--;
52*11595Sleres 	    break;
53*11595Sleres 	case 4:
54*11595Sleres 	    (*dr)--;
55*11595Sleres 	    (*dc)--;
56*11595Sleres 	    break;
57*11595Sleres 	case 5:
58*11595Sleres 	    (*dr)--;
59*11595Sleres 	    break;
60*11595Sleres 	case 6:
61*11595Sleres 	    (*dr)--;
62*11595Sleres 	    (*dc)++;
63*11595Sleres 	    break;
64*11595Sleres 	case 7:
65*11595Sleres 	    (*dc)++;
66*11595Sleres 	    break;
67*11595Sleres 	case 8:
68*11595Sleres 	    (*dr)++;
69*11595Sleres 	    (*dc)++;
70*11595Sleres 	    break;
71*11595Sleres 	}
72*11595Sleres }
73