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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }