From 73e300e34334f87758b8bfb8e8ac9c9736aacbf9 Mon Sep 17 00:00:00 2001 From: Linus_Probert Date: Mon, 5 Feb 2018 16:15:45 +0100 Subject: [PATCH] Prevent exit from spawning under collidable. Removed "accidental" monster player hits --- TODO.txt | 4 +++- data/maproombuilder.lua | 23 ++++++++++++++--------- src/map_lua.c | 25 +++++++++++++++++++++++++ src/monster.c | 2 +- 4 files changed, 43 insertions(+), 11 deletions(-) diff --git a/TODO.txt b/TODO.txt index 0236400..bae9eb0 100644 --- a/TODO.txt +++ b/TODO.txt @@ -24,10 +24,12 @@ x XP x Level threshholds x Statistics x More stuff to count -- Particle engine for blood splatter (keep it light!!!) +x Particle engine for blood splatter (keep it light!!!) - Prevent level exit from spawning on occupied spot - Menus - Player death (graphic or text?) +- Make things less difficult and more interesting + - Interesting items - A different license perhaps? Legend: ( '-' = future) ( 'x' = completed ) ( 'o' = begun ) diff --git a/data/maproombuilder.lua b/data/maproombuilder.lua index 7f0f6a6..23dc068 100644 --- a/data/maproombuilder.lua +++ b/data/maproombuilder.lua @@ -120,10 +120,15 @@ local function repack(data) } end +local function check_add_decoration(map, x, y, data) + if tile_occupied(map, x, y) then return end + add_decoration(map, x, y, repack(data)) +end + local function add_random_decor_to_room() local decor_count = random(4) - 1 for i=1,decor_count do - add_decoration(map, random(11)+1, random(8)+1, repack(floorDecor[random(#floorDecor)])) + check_add_decoration(map, random(11)+1, random(8)+1, floorDecor[random(#floorDecor)]) end end @@ -177,16 +182,16 @@ local function add_walls_to_room (map) end if random(2) == 1 then - add_decoration(map, 4, 3, repack(lightDecor.candle2)) + check_add_decoration(map, 4, 3, lightDecor.candle2) end if random(2) == 1 then - add_decoration(map, 11, 3, repack(lightDecor.candle2)) + check_add_decoration(map, 11, 3, lightDecor.candle2) end if random(2) == 1 then - add_decoration(map, 4, 9, repack(lightDecor.candle2)) + check_add_decoration(map, 4, 9, lightDecor.candle2) end if random(2) == 1 then - add_decoration(map, 11, 9, repack(lightDecor.candle2)) + check_add_decoration(map, 11, 9, lightDecor.candle2) end end @@ -230,10 +235,10 @@ local function build_vert_center_coridoor(map, offset) add_tile(map, 9, offset+j, repack(wall.vertical)); end if random(2) == 1 then - add_decoration(map, 6, offset + 2, repack(lightDecor.candle1)) + check_add_decoration(map, 6, offset + 2, lightDecor.candle1) end if random(2) == 1 then - add_decoration(map, 9, offset + 2, repack(lightDecor.candle1)) + check_add_decoration(map, 9, offset + 2, lightDecor.candle1) end end @@ -245,10 +250,10 @@ local function build_horiz_center_coridoor(map, offset) add_tile(map, offset+i, 7, repack(wall.horizontal)); end if random(2) == 1 then - add_decoration(map, offset+3, 4, repack(lightDecor.candle1)) + check_add_decoration(map, offset+3, 4, lightDecor.candle1) end if random(2) == 1 then - add_decoration(map, offset+3, 7, repack(lightDecor.candle1)) + check_add_decoration(map, offset+3, 7, lightDecor.candle1) end end diff --git a/src/map_lua.c b/src/map_lua.c index 760683c..662f30a 100644 --- a/src/map_lua.c +++ b/src/map_lua.c @@ -148,6 +148,28 @@ extract_tile_data(lua_State *L, f_add_tile(map, &tilePos, tile); } +static +int l_tile_occupied(lua_State *L) +{ + Map *map; + Room *room; + MapTile *tile; + Position *rPos; + int x, y; + + + map = luaL_checkmap(L, 1); + x = (int) luaL_checkinteger(L, 2); + y = (int) luaL_checkinteger(L, 3); + + rPos = &map->currentRoom; + room = map->rooms[rPos->x][rPos->y]; + tile = room->tiles[x][y]; + + lua_pushboolean(L, tile->collider || tile->levelExit); + return 1; +} + static int l_add_tile(lua_State *L) { @@ -264,6 +286,9 @@ Map* map_lua_generator_run(unsigned int level, SDL_Renderer *renderer) lua_pushcfunction(L, l_add_monster); lua_setglobal(L, "add_monster"); + lua_pushcfunction(L, l_tile_occupied); + lua_setglobal(L, "tile_occupied"); + lua_pushinteger(L, level); lua_setglobal(L, "CURRENT_LEVEL"); diff --git a/src/monster.c b/src/monster.c index 5447b53..55b8ed6 100644 --- a/src/monster.c +++ b/src/monster.c @@ -68,7 +68,7 @@ has_collided(Monster *monster, RoomMatrix *matrix) Position roomPos = position_to_matrix_coords(&monster->sprite->pos); RoomSpace *space = &matrix->spaces[roomPos.x][roomPos.y]; - if (space->player) { + if (space->player && monster->state.current == AGRESSIVE) { unsigned int dmg = stats_fight(&monster->stats, &space->player->stats);