aboutsummaryrefslogtreecommitdiff
path: root/map.c
diff options
context:
space:
mode:
Diffstat (limited to 'map.c')
-rw-r--r--map.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/map.c b/map.c
index 9566aa2..41d224a 100644
--- a/map.c
+++ b/map.c
@@ -18,7 +18,7 @@ void generate_room(Map* m) {
const Bitmap* b = get_bitmap(asset_id_rooms_img);
const unsigned* p = (const unsigned*)&b[1];
const int max_rooms = b->h / map_h;
- const int r = /*get_r() % max_rooms;*/ 1;
+ const int r = get_r() % max_rooms;
int o = r * map_w * map_h;
int e = map_w * map_h, i;
for (i = 0; i < e; i++, o++) {
@@ -39,6 +39,8 @@ unsigned short get_collider(Map_Tile t) {
case tile_window_mid:
case tile_window_bot:
case tile_brick_floor:
+ case tile_trapdoor1:
+ case tile_trapdoor2:
case tile_brick: return 1;
case tile_brick_ramp5:
case tile_stone_ramp5: return 2;
@@ -74,6 +76,8 @@ int imp_check(Map* m, Map_Tile t, int x, int y) {
m->tiles[x + y * map_w] = t
#define place_o(t, ox, oy) \
m->tiles[x + ox + (y + oy) * map_w] = t
+#define place_a(t, x, y) \
+ m->tiles[x + y * map_w] = t
void generate_ramps(Map* m) {
int x, y;
@@ -130,16 +134,33 @@ void generate_floors(Map* m) {
}
}
+void generate_doors(Map* m) {
+ const int hx = map_w >> 1;
+ const int t = 0;
+ const int b = map_h - 1;
+ place_a(tile_trapdoor1, hx, b);
+ place_a(tile_trapdoor2, hx + 1, b);
+ place_a(tile_trapdoor3, hx, t);
+ place_a(tile_trapdoor4, hx + 1, t);
+}
+
#undef check
#undef place
void generate_floor(Map* m, World* w) {
+ Player* p = &w->player;
generate_room(m);
generate_ramps(m);
+ generate_doors(m);
generate_floors(m);
generate_collision(m);
- w->player.x = 16 << fbits;
- w->player.y = 16 << fbits;
+ p->x = (map_w >> 1) << fbits;
+ p->y = (map_h - 2) << fbits;
+ p->x *= map_tile_size;
+ p->y *= map_tile_size;
+ p->x += (map_tile_size >> 1) << fbits;
+ p->vx = 0;
+ p->vy = 0;
}
void render_map(const Map* m, Renderer* r) {