various: implement fog of war; make enemy AI slightly more intelligent

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I3e22dbc5e10690871255980c52a24c226a6a6964
This commit is contained in:
raf 2026-04-09 09:35:52 +03:00
commit f85d28e932
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF
8 changed files with 151 additions and 21 deletions

View file

@ -123,6 +123,9 @@ static void init_floor(GameState *gs, int floor_num) {
}
gs->player.floor = floor_num;
// Calculate initial visibility
calculate_visibility(&gs->map, gs->player.position.x, gs->player.position.y);
// Spawn enemies
enemy_spawn(gs->enemies, &gs->enemy_count, &gs->map, &gs->player, floor_num);
@ -217,6 +220,9 @@ static void post_action(GameState *gs, Enemy *attacked_enemy) {
}
}
// Update visibility based on player's new position
calculate_visibility(&gs->map, gs->player.position.x, gs->player.position.y);
// Enemy turns - uses speed/cooldown system
enemy_update_all(gs->enemies, gs->enemy_count, &gs->player, &gs->map);
@ -248,6 +254,7 @@ static int handle_stun_turn(GameState *gs) {
if (gs->game_over)
return 1;
enemy_update_all(gs->enemies, gs->enemy_count, &gs->player, &gs->map);
calculate_visibility(&gs->map, gs->player.position.x, gs->player.position.y);
if (gs->player.hp <= 0)
gs->game_over = 1;
gs->last_message = "You are stunned!";
@ -550,8 +557,8 @@ static void game_loop(void) {
cam.offset = (Vector2){(float)gs.shake_x, (float)gs.shake_y};
BeginMode2D(cam);
render_map(&gs.map);
render_items(gs.items, gs.item_count);
render_enemies(gs.enemies, gs.enemy_count);
render_items(gs.items, gs.item_count, gs.map.visible);
render_enemies(gs.enemies, gs.enemy_count, gs.map.visible);
render_player(&gs.player);
EndMode2D();