Mercurial > repos > genjam1
annotate src/map.c @ 20:51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 12 Jan 2014 22:43:03 -0800 |
parents | |
children | bb7dfb42b320 |
rev | line source |
---|---|
20
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 #include <genesis.h> |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 #include "map.h" |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 u16 distances[20*14]; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 u16 tilemap[40*28]; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
7 typedef struct { |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
8 u16 index; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
9 u16 x; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
10 u16 y; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
11 } mpoint; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
13 s16 explore(mpoint * points, s16 num_points, u16 src, u16 srcx, u16 srcy) |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
14 { |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 u16 dist = distances[src]+1; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
16 if (srcx < 19 && distances[src + 1] > dist && !tilemap[(srcx+1)*2+srcy*2*40]) |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
17 { |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
18 distances[src + 1] = dist; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
19 points[num_points].index = src + 1; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
20 points[num_points].x = srcx+1; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
21 points[num_points++].y = srcy; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
22 } |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
23 if (srcx && distances[src - 1] > dist && !tilemap[(srcx-1)*2 + srcy*2*40]) |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
24 { |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
25 distances[src - 1] = dist; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
26 points[num_points].index = src - 1; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
27 points[num_points].x = srcx-1; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
28 points[num_points++].y = srcy; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
29 } |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
30 if (srcy < 13 && distances[src + 20] > dist && !tilemap[srcx*2+(srcy+1)*2*40]) |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
31 { |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
32 distances[src + 20] = dist; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
33 points[num_points].index = src + 20; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 points[num_points].x = srcx; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
35 points[num_points++].y = srcy+1; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
36 } |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
37 if (srcy && distances[src - 20] > dist && !tilemap[srcx*2 + (srcy-1)*2*40]) |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
38 { |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
39 distances[src - 20] = dist; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
40 points[num_points].index = src - 20; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
41 points[num_points].x = srcx; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
42 points[num_points++].y = srcy-1; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
43 } |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
44 return num_points; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 } |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
46 |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
47 void gen_distances(u16 x, u16 y) |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
48 { |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
49 //TODO: Figure out the actual maximum number of candidate points that can exist |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
50 mpoint pointsa[20*14]; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 mpoint pointsb[20*14]; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
52 mpoint *points=pointsa; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
53 mpoint *new_points; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
54 s16 num_points = 0, old_points; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
55 x /= 2; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
56 y /= 2; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
57 memset(distances, 0xFF, sizeof(distances)); |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
58 |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
59 distances[x + y*20] = 0; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
60 num_points = explore(points, num_points, x + y*20, x, y); |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
61 |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
62 while (num_points) |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
63 { |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
64 new_points = points == pointsa ? pointsb : pointsa; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
65 old_points = num_points; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
66 for (num_points = 0, old_points--; old_points >= 0; old_points--) |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
67 { |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
68 num_points = explore(new_points, num_points, points[old_points].index, points[old_points].x, points[old_points].y); |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
69 } |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
70 points = new_points; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
71 } |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
72 } |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
73 |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
74 void print_distances(void) |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
75 { |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
76 u16 x,y,tindex,dindex,dist; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
77 for (y = 0; y < 14; y++) |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
78 { |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
79 dindex = y * 20; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
80 tindex = y * 2 * 40; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
81 for (x = 0; x < 20; x++, dindex++, tindex += 2) |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
82 { |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
83 dist = distances[dindex]; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
84 if (dist < 10000) |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
85 { |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
86 tilemap[tindex+41] = TILE_ATTR_FULL(3, 0, 0, 0, '0' - 32 + dist % 10 + TILE_FONTINDEX); |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
87 dist /= 10; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
88 if (dist) |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
89 { |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
90 tilemap[tindex+40] = TILE_ATTR_FULL(3, 0, 0, 0, '0' - 32 + dist % 10 + TILE_FONTINDEX); |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
91 dist /= 10; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
92 if (dist) |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
93 { |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
94 tilemap[tindex+1] = TILE_ATTR_FULL(3, 0, 0, 0, '0' - 32 + dist % 10 + TILE_FONTINDEX); |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
95 dist /= 10; |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
96 if (dist) |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
97 tilemap[tindex] = TILE_ATTR_FULL(3, 0, 0, 0, '0' - 32 + dist % 10 + TILE_FONTINDEX); |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
98 } |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
99 } |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
100 } |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
101 } |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
102 } |
51a0972fcf76
Move some tilemap/distance stuff out of creep.c and main.c into a separate source file
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
103 } |