From 8f6e5a1aba52b46fc20408e3064ddf60390615c0 Mon Sep 17 00:00:00 2001 From: quou Date: Sat, 5 Oct 2024 15:22:44 +1000 Subject: generate enemies in teh level --- intermediate/rooms.bmp | Bin 2538 -> 2538 bytes map.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/intermediate/rooms.bmp b/intermediate/rooms.bmp index b9562e4..a0bf456 100644 Binary files a/intermediate/rooms.bmp and b/intermediate/rooms.bmp differ diff --git a/map.c b/map.c index 41d224a..17de9a8 100644 --- a/map.c +++ b/map.c @@ -147,6 +147,37 @@ void generate_doors(Map* m) { #undef check #undef place +void generate_enemies(const Map* m, World* w) { +#define check \ + (m->collision[x + y * map_w] == 1 && \ + m->collision[x + (y - 1) * map_w] == 0) + int x, y, ex = map_w - 1, ey = map_h - 1; + for (y = 1; y < ey; y++) { + for (x = 1; x < ex; x++) { + int plat = -1; + for (; x < ex; x++) + if (check) { + plat = 0; + break; + } + if (!plat) + for (; check && x < ex; x++, plat++); + if (plat >= 3) { + Enemy* e; + int sx = x - (plat >> 1); + e = inst_enemy( + w, + enemy_demon, + (sx * map_tile_size) << fbits, + ((y - 1) * map_tile_size) << fbits + ); + e->face = get_r() & 1; + } + for (; check && x < ex; x++); + } + } +} + void generate_floor(Map* m, World* w) { Player* p = &w->player; generate_room(m); @@ -154,6 +185,7 @@ void generate_floor(Map* m, World* w) { generate_doors(m); generate_floors(m); generate_collision(m); + generate_enemies(m, w); p->x = (map_w >> 1) << fbits; p->y = (map_h - 2) << fbits; p->x *= map_tile_size; -- cgit v1.2.3-54-g00ecf