comparison src/map.c @ 21:bb7dfb42b320

Small refactor to object placement. Add spawn point object
author Michael Pavone <pavone@retrodev.com>
date Sun, 12 Jan 2014 23:53:18 -0800
parents 51a0972fcf76
children
comparison
equal deleted inserted replaced
20:51a0972fcf76 21:bb7dfb42b320
8 u16 index; 8 u16 index;
9 u16 x; 9 u16 x;
10 u16 y; 10 u16 y;
11 } mpoint; 11 } mpoint;
12 12
13 #define is_empty(tindex) (tilemap[tindex] == EMPTY_TA || tilemap[tindex] == SPAWN_UL)
14
13 s16 explore(mpoint * points, s16 num_points, u16 src, u16 srcx, u16 srcy) 15 s16 explore(mpoint * points, s16 num_points, u16 src, u16 srcx, u16 srcy)
14 { 16 {
15 u16 dist = distances[src]+1; 17 u16 dist = distances[src]+1;
16 if (srcx < 19 && distances[src + 1] > dist && !tilemap[(srcx+1)*2+srcy*2*40]) 18 if (srcx < 19 && distances[src + 1] > dist && is_empty((srcx+1)*2+srcy*2*40))
17 { 19 {
18 distances[src + 1] = dist; 20 distances[src + 1] = dist;
19 points[num_points].index = src + 1; 21 points[num_points].index = src + 1;
20 points[num_points].x = srcx+1; 22 points[num_points].x = srcx+1;
21 points[num_points++].y = srcy; 23 points[num_points++].y = srcy;
22 } 24 }
23 if (srcx && distances[src - 1] > dist && !tilemap[(srcx-1)*2 + srcy*2*40]) 25 if (srcx && distances[src - 1] > dist && is_empty((srcx-1)*2 + srcy*2*40))
24 { 26 {
25 distances[src - 1] = dist; 27 distances[src - 1] = dist;
26 points[num_points].index = src - 1; 28 points[num_points].index = src - 1;
27 points[num_points].x = srcx-1; 29 points[num_points].x = srcx-1;
28 points[num_points++].y = srcy; 30 points[num_points++].y = srcy;
29 } 31 }
30 if (srcy < 13 && distances[src + 20] > dist && !tilemap[srcx*2+(srcy+1)*2*40]) 32 if (srcy < 13 && distances[src + 20] > dist && is_empty(srcx*2+(srcy+1)*2*40))
31 { 33 {
32 distances[src + 20] = dist; 34 distances[src + 20] = dist;
33 points[num_points].index = src + 20; 35 points[num_points].index = src + 20;
34 points[num_points].x = srcx; 36 points[num_points].x = srcx;
35 points[num_points++].y = srcy+1; 37 points[num_points++].y = srcy+1;
36 } 38 }
37 if (srcy && distances[src - 20] > dist && !tilemap[srcx*2 + (srcy-1)*2*40]) 39 if (srcy && distances[src - 20] > dist && is_empty(srcx*2 + (srcy-1)*2*40))
38 { 40 {
39 distances[src - 20] = dist; 41 distances[src - 20] = dist;
40 points[num_points].index = src - 20; 42 points[num_points].index = src - 20;
41 points[num_points].x = srcx; 43 points[num_points].x = srcx;
42 points[num_points++].y = srcy-1; 44 points[num_points++].y = srcy-1;
99 } 101 }
100 } 102 }
101 } 103 }
102 } 104 }
103 } 105 }
106
107 u16 tileinfo[OBJECT_TYPES][4] = {
108 {EMPTY_TA, EMPTY_TA, EMPTY_TA, EMPTY_TA},
109 {WALL_UL, WALL_UL, WALL_UL, WALL_UL},
110 {TOWER_UL, TOWER_UL, TOWER_UL, TOWER_UL},
111 {GOAL_UL, GOAL_UL, GOAL_UL, GOAL_UL},
112 {SPAWN_UL, SPAWN_UL, SPAWN_UL, SPAWN_UL}
113 };
114
115 void place_object(u16 type, u16 x, u16 y)
116 {
117 u16 tindex = x + y*40;
118 tilemap[tindex] = tileinfo[type][0];
119 tilemap[tindex + 1] = tileinfo[type][1];
120 tilemap[tindex + 40] = tileinfo[type][2];
121 tilemap[tindex + 41] = tileinfo[type][3];
122 }