X-Git-Url: https://plomlompom.com/repos/feed.xml?a=blobdiff_plain;f=src%2Froguelike.c;h=a1b7373bcc47ae1b2a27e29405a4fc1b1b27d3bc;hb=015ca9d3e02bfe4f8a18cdec43817e2521015c00;hp=d2437067ed218fe0f6baca4a215be0a004f536ff;hpb=c7ff0e4b00f98a0cf65465c552af5ebfcfeaab57;p=plomrogue diff --git a/src/roguelike.c b/src/roguelike.c index d243706..a1b7373 100644 --- a/src/roguelike.c +++ b/src/roguelike.c @@ -84,15 +84,9 @@ void next_turn (struct World * world) { // Increment turn and move enemy. world->turn++; rrand(1, world->seed * world->turn); - char d; struct Monster * monster; - for (monster = world->monster; monster != 0; monster = monster->next) { - d = rrand(0, 0) % 5; - struct yx_uint16 t = mv_yx_in_dir (d, monster->pos); - if (yx_uint16_cmp(t, world->player->pos)) - update_log(world, "\nThe monster hits you."); - else if (is_passable(world->map, t.y, t.x)) - monster->pos = t; } } + for (monster = world->monster; monster != 0; monster = monster->next) + move_monster(world, monster); } void update_log (struct World * world, char * text) { // Update log with new text to be appended. @@ -106,6 +100,26 @@ void update_log (struct World * world, char * text) { free(world->log); world->log = new_text; } +void move_monster (struct World * world, struct Monster * monster) { +// Move monster in random direction, trigger fighting when hindered by player/monster. + char d = rrand(0, 0) % 5; + struct yx_uint16 t = mv_yx_in_dir (d, monster->pos); + if (yx_uint16_cmp (t, world->player->pos)) { + update_log (world, "\nThe monster hits you."); + return; } + char met_monster = 0; + struct Monster * other_monster; + for (other_monster = world->monster; other_monster != 0; other_monster = other_monster->next) { + if (other_monster == monster) + continue; + if (yx_uint16_cmp (t, other_monster->pos)) { + met_monster = 1; + break; } } + if (met_monster) + update_log (world, "\nMonster hits monster."); + else if (0 == met_monster && is_passable(world->map, t.y, t.x)) + monster->pos = t; } + void move_player (struct World * world, char d) { // Move player in direction d, increment turn counter and update log. static char prev = 0;