annotate src/creep.c @ 19:08f2bcf3447f

Skip diagonals when calculating distance
author Michael Pavone <pavone@retrodev.com>
date Sun, 12 Jan 2014 22:05:12 -0800
parents 5c7f33441e43
children 51a0972fcf76
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #include <genesis.h>
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
2 #include "creep.h"
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
3
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
4 creep creeps[MAX_CREEPS];
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
5 u16 cur_creeps;
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
6 extern u16 tilemap[40*28];
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
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
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
12 u16 spawn_creep(u8 species, s16 x, s16 y)
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
13 {
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
14 u16 index;
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
15 for (index = 0; index < MAX_SPRITE; index++)
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
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
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
18 break;
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
19 }
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
20 }
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
21 if (index > 0) {
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
22 VDP_setSprite(index, x, y, SPRITE_SIZE(1, 1), TILE_ATTR_FULL(2, 0, 0, 0, 'C' + TILE_FONTINDEX), spriteDefCache[0].link);
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
23 spriteDefCache[0].link = index;
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
24 } else {
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
25 VDP_setSprite(index, x, y, SPRITE_SIZE(1, 1), TILE_ATTR_FULL(2, 0, 0, 0, 'C' + TILE_FONTINDEX), 0);
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
26 }
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
27 creeps[cur_creeps].index = index;
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
28 creeps[cur_creeps].health = 1000;
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
29 creeps[cur_creeps].species = species;
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
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
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
33 return cur_creeps++;
5ec4707a3fd1 Forgot to add creep.c
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
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 {
19
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
44 u16 dist = distances[src]+1;
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
45 if (srcx < 19 && distances[src + 1] > dist && !tilemap[(srcx+1)*2+srcy*2*40])
11
c0bb53eaa6f4 Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents: 9
diff changeset
46 {
19
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
47 distances[src + 1] = dist;
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
48 points[num_points].index = src + 1;
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
49 points[num_points].x = srcx+1;
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
50 points[num_points++].y = srcy;
11
c0bb53eaa6f4 Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents: 9
diff changeset
51 }
19
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
52 if (srcx && distances[src - 1] > dist && !tilemap[(srcx-1)*2 + srcy*2*40])
11
c0bb53eaa6f4 Calculate distances from goal for all passible points for pathfinding purposes
Mike Pavone <pavone@retrodev.com>
parents: 9
diff changeset
53 {
19
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
54 distances[src - 1] = dist;
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
55 points[num_points].index = src - 1;
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
56 points[num_points].x = srcx-1;
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
57 points[num_points++].y = srcy;
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
58 }
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
59 if (srcy < 13 && distances[src + 20] > dist && !tilemap[srcx*2+(srcy+1)*2*40])
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
60 {
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
61 distances[src + 20] = dist;
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
62 points[num_points].index = src + 20;
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
63 points[num_points].x = srcx;
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
64 points[num_points++].y = srcy+1;
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
65 }
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
66 if (srcy && distances[src - 20] > dist && !tilemap[srcx*2 + (srcy-1)*2*40])
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
67 {
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
68 distances[src - 20] = dist;
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
69 points[num_points].index = src - 20;
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
70 points[num_points].x = srcx;
08f2bcf3447f Skip diagonals when calculating distance
Michael Pavone <pavone@retrodev.com>
parents: 14
diff changeset
71 points[num_points++].y = srcy-1;
11
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 }