Mercurial > repos > genjam1
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 } |