From 0e75a2949678cb8a68fb0819355864aa6db2cb43 Mon Sep 17 00:00:00 2001 From: quou Date: Sat, 5 Oct 2024 12:13:47 +1000 Subject: Level transitions and main menu --- map.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) (limited to 'map.c') 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) { -- cgit v1.2.3-54-g00ecf