|
|
1.1 root 1: # include "trek.h"
2:
3: /**
4: ** move klingons around
5: **/
6:
7: klmove(fl)
8: int fl;
9: {
10: int n, i;
11: register KLINGONS *k;
12: double dx, dy;
13: int nextx, nexty;
14: register int lookx, looky;
15: int motion;
16: int fudgex, fudgey;
17: int qx, qy;
18: double bigger;
19:
20: #ifdef TRACE
21: if (tTf(20,0))
22: printf("entered klmove fl = %d, Nkling = %d\n", fl, Nkling);
23: #endif
24: for (n = 0; n < Nkling; k && n++)
25: {
26: k = &Kling[n];
27: i = 100;
28: if (fl)
29: if(Param.klingpwr != 0.)
30: i = 100.0 * k->power / Param.klingpwr;
31: if (ranf(i) >= Param.moveprob[2 * Move.newquad + fl])
32: continue;
33: /* compute distance to move */
34: motion = ranf(75) - 25;
35: motion =* k->avgdist * Param.movefac[2 * Move.newquad + fl];
36: /* compute direction */
37: dx = Sectx - k->x + ranf(3) - 1;
38: dy = Secty - k->y + ranf(3) - 1;
39: bigger = dx;
40: if (dy > bigger)
41: bigger = dy;
42: if(bigger == 0.)
43: bigger = 1.;
44: dx = dx / bigger + 0.5;
45: dy = dy / bigger + 0.5;
46: if (motion < 0)
47: {
48: motion = -motion;
49: dx = -dx;
50: dy = -dy;
51: }
52: fudgex = fudgey = 1;
53: /* try to move the klingon */
54: nextx = k->x;
55: nexty = k->y;
56: for (; motion > 0; motion--)
57: {
58: lookx = nextx + dx;
59: looky = nexty + dy;
60: if (lookx < 0 || lookx >= NSECTS || looky < 0 || looky >= NSECTS)
61: {
62: /* new quadrant */
63: qx = Quadx;
64: qy = Quady;
65: if (lookx < 0)
66: qx =- 1;
67: else
68: if (lookx >= NSECTS)
69: qx =+ 1;
70: if (looky < 0)
71: qy =- 1;
72: else
73: if (looky >= NSECTS)
74: qy =+ 1;
75: if(movkling(Quadx,Quady,qx,qy)) {
76: printf("Klingon at %d,%d escapes to quadrant %d,%d\n",
77: k->x, k->y, qx, qy);
78: Nkling =- 1;
79: Sect[k->x][k->y] = EMPTY;
80: bmove(&Kling[Nkling], k, sizeof *k);
81: }
82: k = 0;
83: break;
84: }
85: if (Sect[lookx][looky] != EMPTY)
86: {
87: lookx = nextx + fudgex;
88: if (lookx < 0 || lookx >= NSECTS)
89: lookx = nextx + dx;
90: if (Sect[lookx][looky] != EMPTY)
91: {
92: fudgex = -fudgex;
93: looky = nexty + fudgey;
94: if (looky < 0 || looky >= NSECTS || Sect[lookx][looky] != EMPTY)
95: {
96: fudgey = -fudgey;
97: break;
98: }
99: }
100: }
101: nextx = lookx;
102: nexty = looky;
103: }
104: if (k && (k->x != nextx || k->y != nexty))
105: {
106: printf("Klingon at %d,%d moves to %d,%d\n",
107: k->x, k->y, nextx, nexty);
108: Sect[k->x][k->y] = EMPTY;
109: Sect[k->x = nextx][k->y = nexty] = KLINGON;
110: }
111: }
112: compkldist(0);
113: }
114:
115:
116: movkling(fqx,fqy,qx,qy)
117: int fqx, fqy;
118: int qx, qy;
119: {
120: register int qs;
121:
122: if (qx < 0 || qx >= NQUADS || qy < 0 || qy >= NQUADS ||
123: Quad[qx][qy].stars < 0 || Quad[qx][qy].qkling > 8)
124: return(0);
125: qs = Quad[qx][qy].scanned;
126: if (qs >= 0 && qs < 1000)
127: Quad[qx][qy].scanned =+ 100;
128: qs = Quad[fqx][fqy].scanned;
129: if (qs >= 0 && qs < 1000)
130: Quad[fqx][fqy].scanned =- 100;
131: Quad[fqx][fqy].qkling =- 1;
132: Quad[qx][qy].qkling =+ 1;
133: return(1);
134: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.