Adventure game written for ECE2035 at the Georgia Institute of Technology

Dependencies:   mbed wave_player 4DGL-uLCD-SE MMA8452

Committer:
trmontgomery
Date:
Sat Oct 26 15:44:26 2019 +0000
Revision:
5:93a4c396c1af
Parent:
4:cdc54191ff07
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rconnorlawson 0:35660d7952f7 1 #include "map.h"
rconnorlawson 0:35660d7952f7 2
rconnorlawson 0:35660d7952f7 3 #include "globals.h"
rconnorlawson 0:35660d7952f7 4 #include "graphics.h"
rconnorlawson 0:35660d7952f7 5
rconnorlawson 0:35660d7952f7 6 /**
rconnorlawson 0:35660d7952f7 7 * The Map structure. This holds a HashTable for all the MapItems, along with
rconnorlawson 0:35660d7952f7 8 * values for the width and height of the Map.
rconnorlawson 0:35660d7952f7 9 */
trmontgomery 3:289762133fd6 10
rconnorlawson 0:35660d7952f7 11
rconnorlawson 0:35660d7952f7 12 /**
rconnorlawson 0:35660d7952f7 13 * Storage area for the maps.
rconnorlawson 0:35660d7952f7 14 * This is a global variable, but can only be access from this file because it
rconnorlawson 0:35660d7952f7 15 * is static.
rconnorlawson 0:35660d7952f7 16 */
trmontgomery 4:cdc54191ff07 17 static Map maps[3];
rconnorlawson 0:35660d7952f7 18 static int active_map;
rconnorlawson 0:35660d7952f7 19
rconnorlawson 0:35660d7952f7 20 /**
rconnorlawson 0:35660d7952f7 21 * The first step in HashTable access for the map is turning the two-dimensional
rconnorlawson 0:35660d7952f7 22 * key information (x, y) into a one-dimensional unsigned integer.
rconnorlawson 0:35660d7952f7 23 * This function should uniquely map (x,y) onto the space of unsigned integers.
rconnorlawson 0:35660d7952f7 24 */
rconnorlawson 0:35660d7952f7 25 static unsigned XY_KEY(int X, int Y) {
trmontgomery 3:289762133fd6 26 Map * m = get_active_map();
trmontgomery 3:289762133fd6 27 return (m->w)*Y + X;
rconnorlawson 0:35660d7952f7 28 }
rconnorlawson 0:35660d7952f7 29
rconnorlawson 0:35660d7952f7 30 /**
rconnorlawson 0:35660d7952f7 31 * This is the hash function actually passed into createHashTable. It takes an
rconnorlawson 0:35660d7952f7 32 * unsigned key (the output of XY_KEY) and turns it into a hash value (some
rconnorlawson 0:35660d7952f7 33 * small non-negative integer).
rconnorlawson 0:35660d7952f7 34 */
rconnorlawson 0:35660d7952f7 35 unsigned map_hash(unsigned key)
rconnorlawson 0:35660d7952f7 36 {
rconnorlawson 0:35660d7952f7 37 // TODO: Fix me!
trmontgomery 2:0876296d9473 38 return key%5;
rconnorlawson 0:35660d7952f7 39 }
rconnorlawson 0:35660d7952f7 40
trmontgomery 3:289762133fd6 41 void maps_init(int h, int w, int buckets)
rconnorlawson 0:35660d7952f7 42 {
trmontgomery 3:289762133fd6 43 Map * m = get_active_map();
trmontgomery 3:289762133fd6 44 m->items = createHashTable(map_hash, buckets);
trmontgomery 3:289762133fd6 45 m->w = w;
trmontgomery 3:289762133fd6 46 m->h = h;
rconnorlawson 0:35660d7952f7 47 }
rconnorlawson 0:35660d7952f7 48
rconnorlawson 0:35660d7952f7 49 Map* get_active_map()
rconnorlawson 0:35660d7952f7 50 {
trmontgomery 3:289762133fd6 51
trmontgomery 3:289762133fd6 52 return &(maps[active_map]);
rconnorlawson 0:35660d7952f7 53 }
rconnorlawson 0:35660d7952f7 54
rconnorlawson 0:35660d7952f7 55 Map* set_active_map(int m)
rconnorlawson 0:35660d7952f7 56 {
rconnorlawson 0:35660d7952f7 57 active_map = m;
trmontgomery 3:289762133fd6 58 return &(maps[active_map]);
rconnorlawson 0:35660d7952f7 59 }
rconnorlawson 0:35660d7952f7 60
rconnorlawson 0:35660d7952f7 61 void print_map()
rconnorlawson 0:35660d7952f7 62 {
rconnorlawson 0:35660d7952f7 63 // As you add more types, you'll need to add more items to this array.
rconnorlawson 0:35660d7952f7 64 char lookup[] = {'W', 'P'};
rconnorlawson 0:35660d7952f7 65 for(int y = 0; y < map_height(); y++)
rconnorlawson 0:35660d7952f7 66 {
rconnorlawson 0:35660d7952f7 67 for (int x = 0; x < map_width(); x++)
rconnorlawson 0:35660d7952f7 68 {
rconnorlawson 0:35660d7952f7 69 MapItem* item = get_here(x,y);
rconnorlawson 0:35660d7952f7 70 if (item) pc.printf("%c", lookup[item->type]);
rconnorlawson 0:35660d7952f7 71 else pc.printf(" ");
rconnorlawson 0:35660d7952f7 72 }
rconnorlawson 0:35660d7952f7 73 pc.printf("\r\n");
rconnorlawson 0:35660d7952f7 74 }
rconnorlawson 0:35660d7952f7 75 }
rconnorlawson 0:35660d7952f7 76
rconnorlawson 0:35660d7952f7 77 int map_width()
rconnorlawson 0:35660d7952f7 78 {
trmontgomery 3:289762133fd6 79 Map * m = get_active_map();
trmontgomery 3:289762133fd6 80 return m->w;
rconnorlawson 0:35660d7952f7 81 }
rconnorlawson 0:35660d7952f7 82
rconnorlawson 0:35660d7952f7 83 int map_height()
rconnorlawson 0:35660d7952f7 84 {
trmontgomery 3:289762133fd6 85 Map * m = get_active_map();
trmontgomery 3:289762133fd6 86 return m->h;
rconnorlawson 0:35660d7952f7 87 }
rconnorlawson 0:35660d7952f7 88
rconnorlawson 0:35660d7952f7 89 int map_area()
rconnorlawson 0:35660d7952f7 90 {
trmontgomery 3:289762133fd6 91 Map * m = get_active_map();
trmontgomery 3:289762133fd6 92 return (m->h)*(m->w);
rconnorlawson 0:35660d7952f7 93 }
rconnorlawson 0:35660d7952f7 94
rconnorlawson 0:35660d7952f7 95 MapItem* get_north(int x, int y)
rconnorlawson 0:35660d7952f7 96 {
trmontgomery 2:0876296d9473 97 Map* map = get_active_map();
trmontgomery 2:0876296d9473 98 //get key of item north of the location
trmontgomery 2:0876296d9473 99 int index = XY_KEY(x, y-1);
trmontgomery 2:0876296d9473 100 return (MapItem*)getItem(map->items, index);
rconnorlawson 0:35660d7952f7 101 }
rconnorlawson 0:35660d7952f7 102
rconnorlawson 0:35660d7952f7 103 MapItem* get_south(int x, int y)
rconnorlawson 0:35660d7952f7 104 {
trmontgomery 2:0876296d9473 105 Map* map = get_active_map();
trmontgomery 2:0876296d9473 106 int index = XY_KEY(x, y+1);
trmontgomery 2:0876296d9473 107 return (MapItem*)getItem(map->items, index);
rconnorlawson 0:35660d7952f7 108 }
rconnorlawson 0:35660d7952f7 109
rconnorlawson 0:35660d7952f7 110 MapItem* get_east(int x, int y)
rconnorlawson 0:35660d7952f7 111 {
trmontgomery 2:0876296d9473 112 Map* map = get_active_map();
trmontgomery 2:0876296d9473 113 int index = XY_KEY(x-1, y); //wtf why does this work boi
trmontgomery 2:0876296d9473 114 return (MapItem*)getItem(map->items, index);
rconnorlawson 0:35660d7952f7 115 }
rconnorlawson 0:35660d7952f7 116
rconnorlawson 0:35660d7952f7 117 MapItem* get_west(int x, int y)
rconnorlawson 0:35660d7952f7 118 {
trmontgomery 2:0876296d9473 119 Map* map = get_active_map();
trmontgomery 2:0876296d9473 120 int index = XY_KEY(x+1, y); //shouldn't this be minus?
trmontgomery 2:0876296d9473 121 return (MapItem*)getItem(map->items, index);
rconnorlawson 0:35660d7952f7 122 }
rconnorlawson 0:35660d7952f7 123
rconnorlawson 0:35660d7952f7 124 MapItem* get_here(int x, int y)
rconnorlawson 0:35660d7952f7 125 {
trmontgomery 2:0876296d9473 126 Map* map = get_active_map();
trmontgomery 2:0876296d9473 127 int index = XY_KEY(x, y);
trmontgomery 2:0876296d9473 128 return (MapItem*)getItem(map->items, index);
rconnorlawson 0:35660d7952f7 129 }
rconnorlawson 0:35660d7952f7 130
rconnorlawson 0:35660d7952f7 131
rconnorlawson 0:35660d7952f7 132 void map_erase(int x, int y)
rconnorlawson 0:35660d7952f7 133 {
trmontgomery 2:0876296d9473 134 Map* map = get_active_map();
trmontgomery 2:0876296d9473 135 int index = XY_KEY(x, y);
trmontgomery 2:0876296d9473 136 deleteItem(map->items, index);
trmontgomery 2:0876296d9473 137 }
trmontgomery 2:0876296d9473 138
rconnorlawson 0:35660d7952f7 139
rconnorlawson 0:35660d7952f7 140 void add_wall(int x, int y, int dir, int len)
rconnorlawson 0:35660d7952f7 141 {
rconnorlawson 0:35660d7952f7 142 for(int i = 0; i < len; i++)
rconnorlawson 0:35660d7952f7 143 {
rconnorlawson 0:35660d7952f7 144 MapItem* w1 = (MapItem*) malloc(sizeof(MapItem));
rconnorlawson 0:35660d7952f7 145 w1->type = WALL;
rconnorlawson 0:35660d7952f7 146 w1->draw = draw_wall;
rconnorlawson 0:35660d7952f7 147 w1->walkable = false;
rconnorlawson 0:35660d7952f7 148 w1->data = NULL;
rconnorlawson 0:35660d7952f7 149 unsigned key = (dir == HORIZONTAL) ? XY_KEY(x+i, y) : XY_KEY(x, y+i);
rconnorlawson 0:35660d7952f7 150 void* val = insertItem(get_active_map()->items, key, w1);
rconnorlawson 0:35660d7952f7 151 if (val) free(val); // If something is already there, free it
rconnorlawson 0:35660d7952f7 152 }
rconnorlawson 0:35660d7952f7 153 }
rconnorlawson 0:35660d7952f7 154
trmontgomery 4:cdc54191ff07 155 /*void add_road(int x, int y, int dir, int len)
trmontgomery 4:cdc54191ff07 156 {
trmontgomery 4:cdc54191ff07 157 for(int i = 0; i < len; i++)
trmontgomery 4:cdc54191ff07 158 {
trmontgomery 4:cdc54191ff07 159 MapItem* w1 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 4:cdc54191ff07 160 w1->type = ROAD;
trmontgomery 4:cdc54191ff07 161 w1->draw = draw_wall;
trmontgomery 4:cdc54191ff07 162 w1->walkable = true;
trmontgomery 4:cdc54191ff07 163 w1->data = NULL;
trmontgomery 4:cdc54191ff07 164 unsigned key = (dir == HORIZONTAL) ? XY_KEY(x+i, y) : XY_KEY(x, y+i);
trmontgomery 4:cdc54191ff07 165 void* val = insertItem(get_active_map()->items, key, w1);
trmontgomery 4:cdc54191ff07 166 if (val) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 167 }
trmontgomery 4:cdc54191ff07 168 }*/
trmontgomery 4:cdc54191ff07 169
trmontgomery 4:cdc54191ff07 170 void add_lbush(int x, int y, int key){
trmontgomery 4:cdc54191ff07 171 MapItem* w1 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 4:cdc54191ff07 172 w1->type = LBUSH;
trmontgomery 4:cdc54191ff07 173 w1->draw = draw_lbush;
trmontgomery 4:cdc54191ff07 174 w1->walkable = true;
trmontgomery 4:cdc54191ff07 175 MapItem* w2 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 4:cdc54191ff07 176 w2->type = LBUSH;
trmontgomery 4:cdc54191ff07 177 w2->draw = draw_lbush;
trmontgomery 4:cdc54191ff07 178 w2->walkable = true;
trmontgomery 4:cdc54191ff07 179 MapItem* w3 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 4:cdc54191ff07 180 w3->type = LBUSH;
trmontgomery 4:cdc54191ff07 181 w3->draw = draw_lbush;
trmontgomery 4:cdc54191ff07 182 w3->walkable = true;
trmontgomery 4:cdc54191ff07 183 MapItem* w4 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 4:cdc54191ff07 184 w4->type = LBUSH;
trmontgomery 4:cdc54191ff07 185 w4->draw = draw_lbush;
trmontgomery 4:cdc54191ff07 186 w4->walkable = true;
trmontgomery 4:cdc54191ff07 187
trmontgomery 4:cdc54191ff07 188 Lbush* b1 = (Lbush*)malloc(sizeof(Lbush));
trmontgomery 4:cdc54191ff07 189 b1 -> key = key;
trmontgomery 4:cdc54191ff07 190
trmontgomery 4:cdc54191ff07 191 w1 -> data = b1;
trmontgomery 4:cdc54191ff07 192 w2 -> data = b1;
trmontgomery 4:cdc54191ff07 193 w3 -> data = b1;
trmontgomery 4:cdc54191ff07 194 w4 -> data = b1;
trmontgomery 4:cdc54191ff07 195 void* val = insertItem(get_active_map()->items, XY_KEY(x, y), w1);
trmontgomery 4:cdc54191ff07 196 if (val) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 197 void* val1 = insertItem(get_active_map()->items, XY_KEY(x+1, y), w2);
trmontgomery 4:cdc54191ff07 198 if (val1) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 199 void* val2 = insertItem(get_active_map()->items, XY_KEY(x, y+1), w3);
trmontgomery 4:cdc54191ff07 200 if (val2) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 201 void* val3 = insertItem(get_active_map()->items, XY_KEY(x+1, y+1), w4);
trmontgomery 4:cdc54191ff07 202 if (val3) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 203 }
trmontgomery 4:cdc54191ff07 204
trmontgomery 4:cdc54191ff07 205 void add_bush_rect(int a, int b, int c, int d){
trmontgomery 4:cdc54191ff07 206
trmontgomery 4:cdc54191ff07 207 for(int i = a; i < c; i++){
trmontgomery 4:cdc54191ff07 208 for(int j = b; j < d; j++){
trmontgomery 4:cdc54191ff07 209 MapItem* b = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 4:cdc54191ff07 210 b->type = LBUSH;
trmontgomery 4:cdc54191ff07 211 b->draw = draw_lbush;
trmontgomery 4:cdc54191ff07 212 b->walkable = true;
trmontgomery 4:cdc54191ff07 213
trmontgomery 4:cdc54191ff07 214 Lbush* bush = (Lbush*)malloc(sizeof(Lbush));
trmontgomery 4:cdc54191ff07 215 bush -> key = XY_KEY(i,j);
trmontgomery 4:cdc54191ff07 216 b -> data = bush;
trmontgomery 4:cdc54191ff07 217 void* val = insertItem(get_active_map()->items, XY_KEY(i, j), b);
trmontgomery 4:cdc54191ff07 218 if (val) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 219 }
trmontgomery 4:cdc54191ff07 220 }
trmontgomery 4:cdc54191ff07 221 }
trmontgomery 4:cdc54191ff07 222
rconnorlawson 0:35660d7952f7 223 void add_plant(int x, int y)
rconnorlawson 0:35660d7952f7 224 {
rconnorlawson 0:35660d7952f7 225 MapItem* w1 = (MapItem*) malloc(sizeof(MapItem));
rconnorlawson 0:35660d7952f7 226 w1->type = PLANT;
rconnorlawson 0:35660d7952f7 227 w1->draw = draw_plant;
rconnorlawson 0:35660d7952f7 228 w1->walkable = true;
rconnorlawson 0:35660d7952f7 229 w1->data = NULL;
rconnorlawson 0:35660d7952f7 230 void* val = insertItem(get_active_map()->items, XY_KEY(x, y), w1);
rconnorlawson 0:35660d7952f7 231 if (val) free(val); // If something is already there, free it
trmontgomery 2:0876296d9473 232 }
trmontgomery 2:0876296d9473 233
trmontgomery 2:0876296d9473 234 void add_rock(int x, int y)
trmontgomery 2:0876296d9473 235 {
trmontgomery 2:0876296d9473 236 MapItem* w1 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 2:0876296d9473 237 w1->type = ROCK;
trmontgomery 2:0876296d9473 238 w1->draw = draw_rock;
trmontgomery 2:0876296d9473 239 w1->walkable = false;
trmontgomery 2:0876296d9473 240 Rock* r = (Rock*) malloc(sizeof(Rock));
trmontgomery 2:0876296d9473 241 //r -> is_pushed = false;
trmontgomery 2:0876296d9473 242 //r -> wall_touch = false;
trmontgomery 2:0876296d9473 243 //r -> x = x;
trmontgomery 2:0876296d9473 244 //r -> y = y;
trmontgomery 2:0876296d9473 245 w1->data = r;
trmontgomery 2:0876296d9473 246 void* val = insertItem(get_active_map()->items, XY_KEY(x, y), w1);
trmontgomery 2:0876296d9473 247 if (val) free(val); // If something is already there, free it
trmontgomery 2:0876296d9473 248 }
trmontgomery 2:0876296d9473 249
trmontgomery 2:0876296d9473 250 void add_npc(int x, int y)
trmontgomery 2:0876296d9473 251 {
trmontgomery 2:0876296d9473 252 MapItem* w1 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 2:0876296d9473 253 w1->type = NPC;
trmontgomery 2:0876296d9473 254 w1->draw = draw_npc;
trmontgomery 2:0876296d9473 255 w1->walkable = false;
trmontgomery 2:0876296d9473 256 NonPlayer* npc = (NonPlayer*) malloc(sizeof(NonPlayer));
trmontgomery 2:0876296d9473 257 npc->quest_requested = false;
trmontgomery 2:0876296d9473 258 npc->quest_complete = false;
trmontgomery 2:0876296d9473 259 npc->has_key = true;
trmontgomery 2:0876296d9473 260 w1->data = npc;
trmontgomery 2:0876296d9473 261 void* val = insertItem(get_active_map()->items, XY_KEY(x, y), w1);
trmontgomery 2:0876296d9473 262 if (val) free(val); // If something is already there, free it
trmontgomery 2:0876296d9473 263 }
trmontgomery 2:0876296d9473 264
trmontgomery 4:cdc54191ff07 265 void add_extra(int x, int y)
trmontgomery 4:cdc54191ff07 266 {
trmontgomery 4:cdc54191ff07 267 MapItem* w1 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 4:cdc54191ff07 268 w1->type = EXTRA;
trmontgomery 4:cdc54191ff07 269 w1->draw = draw_npc;
trmontgomery 4:cdc54191ff07 270 w1->walkable = false;
trmontgomery 4:cdc54191ff07 271 Extra* npc = (Extra*) malloc(sizeof(Extra));
trmontgomery 4:cdc54191ff07 272 npc -> x = x;
trmontgomery 4:cdc54191ff07 273 npc -> y = y;
trmontgomery 4:cdc54191ff07 274 npc -> e = false;
trmontgomery 4:cdc54191ff07 275 w1->data = npc;
trmontgomery 4:cdc54191ff07 276 void* val = insertItem(get_active_map()->items, XY_KEY(x, y), w1);
trmontgomery 4:cdc54191ff07 277 if (val) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 278 }
trmontgomery 4:cdc54191ff07 279
trmontgomery 2:0876296d9473 280 void add_door(int x, int y)
trmontgomery 2:0876296d9473 281 {
trmontgomery 2:0876296d9473 282 MapItem* w1 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 2:0876296d9473 283 w1->type = DOOR;
trmontgomery 2:0876296d9473 284 w1->draw = draw_door;
trmontgomery 2:0876296d9473 285 w1->walkable = false;
trmontgomery 2:0876296d9473 286 int o = false;
trmontgomery 2:0876296d9473 287 w1->data = &o;
trmontgomery 2:0876296d9473 288 void* val = insertItem(get_active_map()->items, XY_KEY(x, y), w1);
trmontgomery 2:0876296d9473 289 if (val) free(val); // If something is already there, free it
trmontgomery 2:0876296d9473 290 }
trmontgomery 2:0876296d9473 291
trmontgomery 4:cdc54191ff07 292 void add_gdoor(int x, int y)
trmontgomery 4:cdc54191ff07 293 {
trmontgomery 4:cdc54191ff07 294 MapItem* w1 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 4:cdc54191ff07 295 w1->type = GDOOR;
trmontgomery 4:cdc54191ff07 296 w1->draw = draw_door;
trmontgomery 4:cdc54191ff07 297 w1->walkable = false;
trmontgomery 4:cdc54191ff07 298 int o = false;
trmontgomery 4:cdc54191ff07 299 w1->data = &o;
trmontgomery 4:cdc54191ff07 300 void* val = insertItem(get_active_map()->items, XY_KEY(x, y), w1);
trmontgomery 4:cdc54191ff07 301 if (val) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 302 }
trmontgomery 4:cdc54191ff07 303
trmontgomery 2:0876296d9473 304 void add_goal(int x, int y)
trmontgomery 2:0876296d9473 305 {
trmontgomery 2:0876296d9473 306 MapItem* w1 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 2:0876296d9473 307 w1->type = GOAL;
trmontgomery 2:0876296d9473 308 w1->draw = draw_goal;
trmontgomery 2:0876296d9473 309 w1->walkable = false;
trmontgomery 2:0876296d9473 310 int o = false;
trmontgomery 2:0876296d9473 311 w1->data = &o;
trmontgomery 2:0876296d9473 312 void* val = insertItem(get_active_map()->items, XY_KEY(x, y), w1);
trmontgomery 2:0876296d9473 313 if (val) free(val); // If something is already there, free it
trmontgomery 2:0876296d9473 314 }
trmontgomery 2:0876296d9473 315
trmontgomery 2:0876296d9473 316 void add_spike(int x, int y)
trmontgomery 2:0876296d9473 317 {
trmontgomery 2:0876296d9473 318 MapItem* w1 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 2:0876296d9473 319 w1->type = SPIKE;
trmontgomery 2:0876296d9473 320 w1->draw = draw_spike;
trmontgomery 4:cdc54191ff07 321 w1->walkable = true;
trmontgomery 2:0876296d9473 322 int o = false;
trmontgomery 2:0876296d9473 323 w1->data = &o;
trmontgomery 2:0876296d9473 324 void* val = insertItem(get_active_map()->items, XY_KEY(x, y), w1);
trmontgomery 2:0876296d9473 325 if (val) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 326 }
trmontgomery 4:cdc54191ff07 327
trmontgomery 4:cdc54191ff07 328 void add_gem(int x, int y, int color)
trmontgomery 4:cdc54191ff07 329 {
trmontgomery 4:cdc54191ff07 330 MapItem* w1 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 4:cdc54191ff07 331 w1->type = GEM;
trmontgomery 4:cdc54191ff07 332 int* c = &color;
trmontgomery 4:cdc54191ff07 333 if (color == 1){
trmontgomery 4:cdc54191ff07 334 w1->draw = draw_gem1;
trmontgomery 4:cdc54191ff07 335
trmontgomery 4:cdc54191ff07 336 } else if (color == 2){
trmontgomery 4:cdc54191ff07 337 w1->draw = draw_gem2;
trmontgomery 4:cdc54191ff07 338 } else{
trmontgomery 4:cdc54191ff07 339 w1->draw = draw_gem3;
trmontgomery 4:cdc54191ff07 340 }
trmontgomery 4:cdc54191ff07 341 w1->walkable = true;
trmontgomery 4:cdc54191ff07 342 w1->data = c;
trmontgomery 4:cdc54191ff07 343 void* val = insertItem(get_active_map()->items, XY_KEY(x, y), w1);
trmontgomery 4:cdc54191ff07 344 if (val) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 345 }
trmontgomery 4:cdc54191ff07 346
trmontgomery 4:cdc54191ff07 347 void add_redhouse(int x, int y, int key){
trmontgomery 4:cdc54191ff07 348 MapItem* w1 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 4:cdc54191ff07 349 w1->type = HOUSE;
trmontgomery 4:cdc54191ff07 350 w1->draw = draw_rhouse1;
trmontgomery 4:cdc54191ff07 351 w1->walkable = false;
trmontgomery 4:cdc54191ff07 352 MapItem* w2 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 4:cdc54191ff07 353 w2->type = HOUSE;
trmontgomery 4:cdc54191ff07 354 w2->draw = draw_rhouse2;
trmontgomery 4:cdc54191ff07 355 w2->walkable = false;
trmontgomery 4:cdc54191ff07 356 MapItem* w3 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 4:cdc54191ff07 357 w3->type = HOUSE;
trmontgomery 4:cdc54191ff07 358 w3->draw = draw_rhouse2;
trmontgomery 4:cdc54191ff07 359 w3->walkable = false;
trmontgomery 4:cdc54191ff07 360 MapItem* w4 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 4:cdc54191ff07 361 w4->type = HOUSE;
trmontgomery 4:cdc54191ff07 362 w4->draw = draw_rhouse1;
trmontgomery 4:cdc54191ff07 363 w4->walkable = false;
trmontgomery 4:cdc54191ff07 364 MapItem* w5 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 4:cdc54191ff07 365 w5->type = HOUSE;
trmontgomery 4:cdc54191ff07 366 w5->draw = draw_rhouse2;
trmontgomery 4:cdc54191ff07 367 w5->walkable = false;
trmontgomery 4:cdc54191ff07 368
trmontgomery 4:cdc54191ff07 369 House* r = (House*)malloc(sizeof(House));
trmontgomery 4:cdc54191ff07 370 r -> key = key;
trmontgomery 4:cdc54191ff07 371
trmontgomery 4:cdc54191ff07 372 w1 -> data = r;
trmontgomery 4:cdc54191ff07 373 w2 -> data = r;
trmontgomery 4:cdc54191ff07 374 w3 -> data = r;
trmontgomery 4:cdc54191ff07 375 w4 -> data = r;
trmontgomery 4:cdc54191ff07 376 w5 -> data = r;
trmontgomery 4:cdc54191ff07 377 void* val = insertItem(get_active_map()->items, XY_KEY(x, y), w1);
trmontgomery 4:cdc54191ff07 378 if (val) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 379 void* val1 = insertItem(get_active_map()->items, XY_KEY(x+1, y), w2);
trmontgomery 4:cdc54191ff07 380 if (val1) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 381 void* val2 = insertItem(get_active_map()->items, XY_KEY(x+1, y+1), w3);
trmontgomery 4:cdc54191ff07 382 if (val2) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 383 void* val3 = insertItem(get_active_map()->items, XY_KEY(x, y+2), w4);
trmontgomery 4:cdc54191ff07 384 if (val3) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 385 void* val4 = insertItem(get_active_map()->items, XY_KEY(x+1, y+2), w5);
trmontgomery 4:cdc54191ff07 386 if (val4) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 387 add_door(x, y+1);
trmontgomery 4:cdc54191ff07 388 }
trmontgomery 4:cdc54191ff07 389
trmontgomery 4:cdc54191ff07 390
trmontgomery 4:cdc54191ff07 391 void add_bluehouse(int x, int y, int key){
trmontgomery 4:cdc54191ff07 392 MapItem* w1 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 4:cdc54191ff07 393 w1->type = HOUSE;
trmontgomery 4:cdc54191ff07 394 w1->draw = draw_bhouse1;
trmontgomery 4:cdc54191ff07 395 w1->walkable = false;
trmontgomery 4:cdc54191ff07 396 MapItem* w2 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 4:cdc54191ff07 397 w2->type = HOUSE;
trmontgomery 4:cdc54191ff07 398 w2->draw = draw_bhouse2;
trmontgomery 4:cdc54191ff07 399 w2->walkable = false;
trmontgomery 4:cdc54191ff07 400 MapItem* w3 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 4:cdc54191ff07 401 w3->type = HOUSE;
trmontgomery 4:cdc54191ff07 402 w3->draw = draw_bhouse2;
trmontgomery 4:cdc54191ff07 403 w3->walkable = false;
trmontgomery 4:cdc54191ff07 404 MapItem* w4 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 4:cdc54191ff07 405 w4->type = HOUSE;
trmontgomery 4:cdc54191ff07 406 w4->draw = draw_bhouse1;
trmontgomery 4:cdc54191ff07 407 w4->walkable = false;
trmontgomery 4:cdc54191ff07 408 MapItem* w5 = (MapItem*) malloc(sizeof(MapItem));
trmontgomery 4:cdc54191ff07 409 w5->type = HOUSE;
trmontgomery 4:cdc54191ff07 410 w5->draw = draw_bhouse2;
trmontgomery 4:cdc54191ff07 411 w5->walkable = false;
trmontgomery 4:cdc54191ff07 412
trmontgomery 4:cdc54191ff07 413 House* r = (House*)malloc(sizeof(House));
trmontgomery 4:cdc54191ff07 414 r -> key = key;
trmontgomery 4:cdc54191ff07 415
trmontgomery 4:cdc54191ff07 416 w1 -> data = r;
trmontgomery 4:cdc54191ff07 417 w2 -> data = r;
trmontgomery 4:cdc54191ff07 418 w3 -> data = r;
trmontgomery 4:cdc54191ff07 419 w4 -> data = r;
trmontgomery 4:cdc54191ff07 420 w5 -> data = r;
trmontgomery 4:cdc54191ff07 421 void* val = insertItem(get_active_map()->items, XY_KEY(x, y), w1);
trmontgomery 4:cdc54191ff07 422 if (val) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 423 void* val1 = insertItem(get_active_map()->items, XY_KEY(x+1, y), w2);
trmontgomery 4:cdc54191ff07 424 if (val1) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 425 void* val2 = insertItem(get_active_map()->items, XY_KEY(x+1, y+1), w3);
trmontgomery 4:cdc54191ff07 426 if (val2) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 427 void* val3 = insertItem(get_active_map()->items, XY_KEY(x, y+2), w4);
trmontgomery 4:cdc54191ff07 428 if (val3) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 429 void* val4 = insertItem(get_active_map()->items, XY_KEY(x+1, y+2), w5);
trmontgomery 4:cdc54191ff07 430 if (val4) free(val); // If something is already there, free it
trmontgomery 4:cdc54191ff07 431 add_door(x, y+1);
trmontgomery 4:cdc54191ff07 432 }