Mercurial > repos > genjam1
annotate src/creep.c @ 14:5c7f33441e43
Creeps now move towards the goal
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 12 Jan 2014 18:16:51 -0800 |
parents | d118fe8fb1db |
children | 08f2bcf3447f |
rev | line source |
---|---|
9 | 1 #include <genesis.h> |
2 #include "creep.h" | |
3 | |
4 creep creeps[MAX_CREEPS]; | |
5 u16 cur_creeps; | |
6 extern u16 tilemap[40*28]; | |
7 | |
11
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
8 u16 distances[20*14]; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
9 |
14
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
10 const s16 speeds[NUM_SPECIES] = { 2 }; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
11 |
9 | 12 u16 spawn_creep(u8 species, s16 x, s16 y) |
13 { | |
14 u16 index; | |
15 for (index = 0; index < MAX_SPRITE; index++) | |
16 { | |
13
d118fe8fb1db
Make cursor and creeps play nice
Mike Pavone <pavone@retrodev.com>
parents:
11
diff
changeset
|
17 if (spriteDefCache[index].posx == -0x80) { |
9 | 18 break; |
19 } | |
20 } | |
21 if (index > 0) { | |
22 VDP_setSprite(index, x, y, SPRITE_SIZE(1, 1), TILE_ATTR_FULL(2, 0, 0, 0, 'C' + TILE_FONTINDEX), spriteDefCache[0].link); | |
23 spriteDefCache[0].link = index; | |
24 } else { | |
25 VDP_setSprite(index, x, y, SPRITE_SIZE(1, 1), TILE_ATTR_FULL(2, 0, 0, 0, 'C' + TILE_FONTINDEX), 0); | |
26 } | |
27 creeps[cur_creeps].index = index; | |
28 creeps[cur_creeps].health = 1000; | |
29 creeps[cur_creeps].species = species; | |
30 creeps[cur_creeps].direction = 0; | |
14
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
31 creeps[cur_creeps].targetx = x; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
32 creeps[cur_creeps].targety = y; |
9 | 33 return cur_creeps++; |
34 } | |
11
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
35 |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
36 typedef struct { |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
37 u16 index; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
38 u16 x; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
39 u16 y; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
40 } mpoint; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
41 |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
42 s16 explore(mpoint * points, s16 num_points, u16 src, u16 srcx, u16 srcy) |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
43 { |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
44 u16 x,y,index,cindex,xmax,ymax,ystrt,dist; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
45 dist = distances[src]+1; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
46 xmax = srcx < 19 ? srcx+1 : srcx; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
47 ymax = srcy < 13 ? srcy+1 : srcy; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
48 if (srcy) |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
49 { |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
50 ystrt = srcy-1; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
51 cindex = srcx ? src - 21 : src - 20; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
52 } else { |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
53 ystrt = srcy; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
54 cindex = srcx ? src - 1 : src; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
55 } |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
56 for (x = srcx ? srcx-1 : srcx; x <= xmax; x++, cindex++) |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
57 { |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
58 for (y = ystrt, index=cindex; y<=ymax; y++,index+=20) |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
59 { |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
60 if (distances[index] > dist && !tilemap[x*2+y*2*40]) |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
61 { |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
62 distances[index] = dist; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
63 if (dist == 0xFFFF) |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
64 { |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
65 tilemap[x*2 + y*2*40] = TILE_ATTR_FULL(2, 0, 0, 0, 'E' - 32 + TILE_FONTINDEX); |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
66 } |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
67 points[num_points].index = index; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
68 points[num_points].x = x; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
69 points[num_points++].y = y; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
70 } |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
71 } |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
72 } |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
73 return num_points; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
74 } |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
75 |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
76 void gen_distances(u16 x, u16 y) |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
77 { |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
78 //TODO: Figure out the actual maximum number of candidate points that can exist |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
79 mpoint pointsa[20*14]; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
80 mpoint pointsb[20*14]; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
81 mpoint *points=pointsa; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
82 mpoint *new_points; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
83 s16 num_points = 0, old_points; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
84 x /= 2; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
85 y /= 2; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
86 memset(distances, 0xFF, sizeof(distances)); |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
87 |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
88 distances[x + y*20] = 0; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
89 num_points = explore(points, num_points, x + y*20, x, y); |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
90 |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
91 while (num_points) |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
92 { |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
93 new_points = points == pointsa ? pointsb : pointsa; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
94 old_points = num_points; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
95 for (num_points = 0, old_points--; old_points >= 0; old_points--) |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
96 { |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
97 num_points = explore(new_points, num_points, points[old_points].index, points[old_points].x, points[old_points].y); |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
98 } |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
99 points = new_points; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
100 } |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
101 } |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
102 |
14
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
103 void print_distances(void) |
11
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
104 { |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
105 u16 x,y,tindex,dindex,dist; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
106 for (y = 0; y < 14; y++) |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
107 { |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
108 dindex = y * 20; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
109 tindex = y * 2 * 40; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
110 for (x = 0; x < 20; x++, dindex++, tindex += 2) |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
111 { |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
112 dist = distances[dindex]; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
113 if (dist < 10000) |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
114 { |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
115 tilemap[tindex+41] = TILE_ATTR_FULL(3, 0, 0, 0, '0' - 32 + dist % 10 + TILE_FONTINDEX); |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
116 dist /= 10; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
117 if (dist) |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
118 { |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
119 tilemap[tindex+40] = TILE_ATTR_FULL(3, 0, 0, 0, '0' - 32 + dist % 10 + TILE_FONTINDEX); |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
120 dist /= 10; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
121 if (dist) |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
122 { |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
123 tilemap[tindex+1] = TILE_ATTR_FULL(3, 0, 0, 0, '0' - 32 + dist % 10 + TILE_FONTINDEX); |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
124 dist /= 10; |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
125 if (dist) |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
126 tilemap[tindex] = TILE_ATTR_FULL(3, 0, 0, 0, '0' - 32 + dist % 10 + TILE_FONTINDEX); |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
127 } |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
128 } |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
129 } |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
130 } |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
131 } |
c0bb53eaa6f4
Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
132 } |
14
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
133 |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
134 void update_creeps(void) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
135 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
136 s16 i, disty, distx, mdist; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
137 for (i = cur_creeps-1; i >= 0; --i) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
138 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
139 creep *cur = creeps + i; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
140 SpriteDef * sprite = spriteDefCache + cur->index; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
141 distx = sprite->posx - cur->targetx; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
142 if (distx < 0) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
143 distx = -distx; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
144 disty = sprite->posy - cur->targety; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
145 if (disty < 0) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
146 disty = -disty; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
147 mdist = distx > disty ? distx : disty; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
148 if (mdist < speeds[cur->species]) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
149 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
150 s16 dindex = sprite->posx / 16 + (sprite->posy / 16) * 20; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
151 if (distances[dindex]) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
152 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
153 u16 bestdist = 0xFFFF; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
154 s16 bestindex = 0xFFFF,diff,next; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
155 if (sprite->posx > 8 && distances[dindex-1] < bestdist) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
156 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
157 bestindex = dindex-1; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
158 bestdist = distances[bestindex]; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
159 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
160 if (sprite->posx < (320-16) && distances[dindex+1] < bestdist) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
161 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
162 bestindex = dindex+1; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
163 bestdist = distances[bestindex]; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
164 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
165 if (sprite->posy > 8 && distances[dindex-20] < bestdist) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
166 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
167 bestindex = dindex-20; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
168 bestdist = distances[bestindex]; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
169 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
170 if (sprite->posy < (224-16) && distances[dindex+20] < bestdist) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
171 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
172 bestindex = dindex+20; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
173 bestdist = distances[bestindex]; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
174 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
175 diff = bestindex-dindex; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
176 next = bestindex + diff; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
177 while (next >= 0 && next < 20*14 && distances[next] < bestdist) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
178 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
179 bestindex = next; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
180 bestdist = distances[bestindex]; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
181 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
182 cur->targetx = (bestindex % 20) * 16 + 4; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
183 cur->targety = (bestindex / 20) * 16 + 4; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
184 } else { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
185 //creep is at the goal |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
186 VDP_setSpritePosition(cur->index, -0x80, -0x80); |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
187 cur_creeps--; |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
188 if (i != cur_creeps) |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
189 { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
190 memcpy(cur, creeps+cur_creeps, sizeof(creep)); |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
191 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
192 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
193 } else { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
194 if (distx > disty) { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
195 VDP_setSpritePosition(cur->index, |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
196 sprite->posx + (sprite->posx > cur->targetx ? -speeds[cur->species] : speeds[cur->species]), |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
197 sprite->posy); |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
198 } else { |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
199 VDP_setSpritePosition(cur->index, |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
200 sprite->posx, |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
201 sprite->posy + (sprite->posy > cur->targety ? -speeds[cur->species] : speeds[cur->species])); |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
202 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
203 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
204 } |
5c7f33441e43
Creeps now move towards the goal
Mike Pavone <pavone@retrodev.com>
parents:
13
diff
changeset
|
205 } |