#include "asset.h" #include "map.h" #include "rect.h" #include "render.h" #define null_tile 0xffff Rect tile_rects[] = { #define x(n, x, y) \ { x, y, map_tile_size, map_tile_size }, tiles_xmacro #undef x }; void generate_floor(Map* m, int seed) { int e = map_w * map_h, i; for (i = 0; i < e; i++) { m->tiles[i] = null_tile; m->collision[i] = 0; } e = map_w * (map_h - 1); for (i = 0; i < map_w; i++) { int idx = i + e; m->tiles[idx] = tile_stone; m->collision[idx] = 1; } #define set(x, y) \ m->tiles[x + y * map_w] = tile_brick; \ m->collision[x + y * map_w] = 1; set(0, 13); set(0, 12); set(0, 11); set(1, 11); set(2, 11); set(3, 11); set(4, 11); set(19, 13); set(19, 12); set(19, 11); set(19, 10); set(19, 9); set(19, 8); #undef set m->tiles[18 + 13 * map_w] = tile_stone_ramp9; m->collision[18 + 13 * map_w] = 6; m->tiles[1 + 12 * map_w] = tile_stone_ramp13; m->collision[1 + 12 * map_w] = 10; m->tiles[2 + 12 * map_w] = tile_stone_ramp14; m->collision[2 + 12 * map_w] = 11; } void render_map(const Map* m, Renderer* r) { const Bitmap* tm = get_bitmap(asset_id_map_img); int t = 0, x, y; for (y = 0; y < map_h; y++) { for (x = 0; x < map_w; x++, t++) { int tile = m->tiles[t]; if (tile != null_tile) ren_map( r, x * map_tile_size, y * map_tile_size, &tile_rects[tile], tm ); } } }