From 45fac786776f6664727daf160919f22313061017 Mon Sep 17 00:00:00 2001 From: Bardur Arantsson Date: Sat, 7 Mar 2015 16:55:42 +0100 Subject: Convert cave-related macros from defines.h into functions --- src/cave.cc | 164 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/cave.hpp | 14 +++++ src/defines.h | 176 --------------------------------------------------------- src/modules.cc | 3 +- src/q_one.cc | 1 + 5 files changed, 181 insertions(+), 177 deletions(-) diff --git a/src/cave.cc b/src/cave.cc index c7fe706a..bb1c7318 100644 --- a/src/cave.cc +++ b/src/cave.cc @@ -4576,3 +4576,167 @@ int new_effect(int type, int dam, int time, int cy, int cx, int rad, s32b flags) effects[i].rad = rad; return i; } + +/** + * Determine if a "legal" grid is a "floor" grid + * + * Line 1 -- forbid doors, rubble, seams, walls + * + * Note that the terrain features are split by a one bit test + * into those features which block line of sight and those that + * do not, allowing an extremely fast single bit check below. + * + * Add in the fact that some new terrain (water & lava) do NOT block sight + * -KMW- + */ +bool cave_floor_bold(int y, int x) +{ + return cave_floor_grid(&cave[y][x]); +} + +/** + * Grid based version of "cave_floor_bold()" + */ +bool cave_floor_grid(cave_type const *c) +{ + return (f_info[c->feat].flags1 & FF1_FLOOR) && (c->feat != FEAT_MON_TRAP); +} + + + +/** + * Determine if a "legal" grid is floor without the REMEMBER flag set + * Sometimes called "boring" grid + */ +bool cave_plain_floor_bold(int y, int x) +{ + return cave_plain_floor_grid(&cave[y][x]); +} + +/** + * Grid based version of "cave_plain_floor_bold()" + */ +bool cave_plain_floor_grid(cave_type const *c) +{ + return + (f_info[c->feat].flags1 & FF1_FLOOR) && + !(f_info[c->feat].flags1 & FF1_REMEMBER); +} + + + +/** + * Determine if a "legal" grid isn't a "blocking line of sight" grid + * + * Line 1 -- forbid doors, rubble, seams, walls + * + * Note that the terrain features are split by a one bit test + * into those features which block line of sight and those that + * do not, allowing an extremely fast single bit check below. + * + * Add in the fact that some new terrain (water & lava) do NOT block sight + * -KMW- + */ +bool cave_sight_bold(int y, int x) +{ + return cave_sight_grid(&cave[y][x]); +} + +bool cave_sight_grid(cave_type const *c) +{ + return !(f_info[c->feat].flags1 & FF1_NO_VISION); +} + + +/** + * Determine if a "legal" grid is a "clean" floor grid + * + * Line 1 -- forbid non-floors + * Line 2 -- forbid deep water -KMW- + * Line 3 -- forbid deep lava -KMW- + * Line 4 -- forbid normal objects + */ +bool cave_clean_bold(int y, int x) +{ + return + (f_info[cave[y][x].feat].flags1 & FF1_FLOOR) && + (cave[y][x].feat != FEAT_MON_TRAP) && + (cave[y][x].o_idx == 0) && + !(f_info[cave[y][x].feat].flags1 & FF1_PERMANENT); +} + +/* + * Determine if a "legal" grid is an "empty" floor grid + * + * Line 1 -- forbid doors, rubble, seams, walls + * Line 2 -- forbid normal monsters + * Line 3 -- forbid the player + */ +bool cave_empty_bold(int y, int x) +{ + return + cave_floor_bold(y,x) && + !(cave[y][x].m_idx) && + !((y == p_ptr->py) && (x == p_ptr->px)); +} + + +/* + * Determine if a "legal" grid is an "naked" floor grid + * + * Line 1 -- forbid non-floors, non-shallow water & lava -KMW- + * Line 2 -- forbid normal objects + * Line 3 -- forbid player/monsters + */ +bool cave_naked_bold(int y, int x) +{ + return + (f_info[cave[y][x].feat].flags1 & FF1_FLOOR) && + (cave[y][x].feat != FEAT_MON_TRAP) && + !(f_info[cave[y][x].feat].flags1 & FF1_PERMANENT) && + (cave[y][x].o_idx == 0) && + (cave[y][x].m_idx == 0); +} + +bool cave_naked_bold2(int y, int x) +{ + return + (f_info[cave[y][x].feat].flags1 & FF1_FLOOR) && + (cave[y][x].feat != FEAT_MON_TRAP) && + (cave[y][x].o_idx == 0) && + (cave[y][x].m_idx == 0); +} + + +/** + * Determine if a "legal" grid is "permanent" + */ +bool cave_perma_bold(int y, int x) +{ + return cave_perma_grid(&cave[y][x]); +} + +bool cave_perma_grid(cave_type const *c) +{ + return f_info[c->feat].flags1 & FF1_PERMANENT; +} + +/* + * Determine if a "legal" grid is within "los" of the player + * + * Note the use of comparison to zero to force a "boolean" result + */ +bool player_has_los_bold(int y, int x) +{ + return (cave[y][x].info & (CAVE_VIEW)) != 0; +} + +/* + * Determine if a "legal" grid can be "seen" by the player + * + * Note the use of comparison to zero to force a "boolean" result + */ +bool player_can_see_bold(int y, int x) +{ + return (cave[y][x].info & (CAVE_SEEN)) != 0; +} diff --git a/src/cave.hpp b/src/cave.hpp index 612d93b4..21fa9a6b 100644 --- a/src/cave.hpp +++ b/src/cave.hpp @@ -37,3 +37,17 @@ extern void object_track(object_type *o_ptr); extern void disturb(int stop_search); extern int is_quest(int level); extern int new_effect(int type, int dam, int time, int cy, int cx, int rad, s32b flags); +extern bool cave_floor_bold(int y, int x); +extern bool cave_floor_grid(cave_type const *c); +extern bool cave_plain_floor_bold(int y, int x); +extern bool cave_plain_floor_grid(cave_type const *c); +extern bool cave_sight_bold(int y, int x); +extern bool cave_sight_grid(cave_type const *c); +extern bool cave_clean_bold(int y, int x); +extern bool cave_empty_bold(int y, int x); +extern bool cave_naked_bold(int y, int x); +extern bool cave_naked_bold2(int y, int x); +extern bool cave_perma_bold(int y, int x); +extern bool cave_perma_grid(cave_type const *c); +extern bool player_has_los_bold(int y, int x); +extern bool player_can_see_bold(int y, int x); diff --git a/src/defines.h b/src/defines.h index c032151f..a7eddd0d 100644 --- a/src/defines.h +++ b/src/defines.h @@ -3451,182 +3451,6 @@ -/* - * Determine if a "legal" grid is a "floor" grid - * - * Line 1 -- forbid doors, rubble, seams, walls - * - * Note that the terrain features are split by a one bit test - * into those features which block line of sight and those that - * do not, allowing an extremely fast single bit check below. - * - * Add in the fact that some new terrain (water & lava) do NOT block sight - * -KMW- - */ -#define cave_floor_bold(Y,X) \ - ((f_info[cave[Y][X].feat].flags1 & FF1_FLOOR) && \ - (cave[Y][X].feat != FEAT_MON_TRAP)) - - -/* - * Determine if a "legal" grid is floor without the REMEMBER flag set - * Sometimes called "boring" grid - */ -#define cave_plain_floor_bold(Y,X) \ - ((f_info[cave[Y][X].feat].flags1 & FF1_FLOOR) && \ - !(f_info[cave[Y][X].feat].flags1 & FF1_REMEMBER)) - - -/* - * Determine if a "legal" grid isn't a "blocking line of sight" grid - * - * Line 1 -- forbid doors, rubble, seams, walls - * - * Note that the terrain features are split by a one bit test - * into those features which block line of sight and those that - * do not, allowing an extremely fast single bit check below. - * - * Add in the fact that some new terrain (water & lava) do NOT block sight - * -KMW- - */ -#define cave_sight_bold(Y,X) \ - (!(f_info[cave[Y][X].feat].flags1 & FF1_NO_VISION)) - - -/* - * Determine if a "legal" grid is a "clean" floor grid - * - * Line 1 -- forbid non-floors - * Line 2 -- forbid deep water -KMW- - * Line 3 -- forbid deep lava -KMW- - * Line 4 -- forbid normal objects - */ -#define cave_clean_bold(Y,X) \ - ((f_info[cave[Y][X].feat].flags1 & FF1_FLOOR) && \ - (cave[Y][X].feat != FEAT_MON_TRAP) && \ - (cave[Y][X].o_idx == 0) && \ - !(f_info[cave[Y][X].feat].flags1 & FF1_PERMANENT)) - - -/* - * Determine if a "legal" grid is an "empty" floor grid - * - * Line 1 -- forbid doors, rubble, seams, walls - * Line 2 -- forbid normal monsters - * Line 3 -- forbid the player - */ -#define cave_empty_bold(Y,X) \ - (cave_floor_bold(Y,X) && \ - !(cave[Y][X].m_idx) && \ - !(((Y) == p_ptr->py) && ((X) == p_ptr->px))) - - -/* - * Determine if a "legal" grid is an "naked" floor grid - * - * Line 1 -- forbid non-floors, non-shallow water & lava -KMW- - * Line 2 -- forbid normal objects - * Line 3 -- forbid player/monsters - */ -#define cave_naked_bold(Y,X) \ - ((f_info[cave[Y][X].feat].flags1 & FF1_FLOOR) && \ - (cave[Y][X].feat != FEAT_MON_TRAP) && \ - !(f_info[cave[Y][X].feat].flags1 & FF1_PERMANENT) && \ - (cave[Y][X].o_idx == 0) && \ - (cave[Y][X].m_idx == 0)) - -#define cave_naked_bold2(Y,X) \ - ((f_info[cave[Y][X].feat].flags1 & FF1_FLOOR) && \ - (cave[Y][X].feat != FEAT_MON_TRAP) && \ - (cave[Y][X].o_idx == 0) && \ - (cave[Y][X].m_idx == 0)) - - - -/* - * Determine if a "legal" grid is "permanent" - * - * Line 1 -- perma-walls - * Line 2-3 -- stairs - * Line 4-5 -- building doors -KMW- - * Line 6-7 -- shop doors - */ -#define cave_perma_bold(Y,X) \ - (f_info[cave[Y][X].feat].flags1 & FF1_PERMANENT) - - -/* - * Grid based version of "cave_floor_bold()" - */ -#define cave_floor_grid(C) \ - ((f_info[(C)->feat].flags1 & FF1_FLOOR) && ((C)->feat != FEAT_MON_TRAP)) - - -/* - * Grid based version of "cave_plain_floor_bold()" - */ -#define cave_plain_floor_grid(C) \ - ((f_info[(C)->feat].flags1 & FF1_FLOOR) && \ - !(f_info[(C)->feat].flags1 & FF1_REMEMBER)) - - -/* - * Grid based version of "cave_clean_bold()" - */ -#define cave_clean_grid(C) \ - ((f_info[(C)->feat].flags1 & FF1_FLOOR) && ((C)->feat != FEAT_MON_TRAP) && \ - (!(C)->o_idx)) - -/* - * Grid based version of "cave_sight_bold()" - */ -#define cave_sight_grid(C) \ - (!(f_info[(C)->feat].flags1 & FF1_NO_VISION)) - -/* - * Grid based version of "cave_empty_bold()" - */ -#define cave_empty_grid(C) \ - (cave_floor_grid(C) && \ - !((C)->m_idx) && \ - !((C) == &cave[p_ptr->py][p_ptr->px])) - -/* - * Grid based version of "cave_empty_bold()" - */ -#define cave_naked_grid(C) \ - ((f_info[(C)->feat].flags1 & FF1_FLOOR) && ((C)->feat != FEAT_MON_TRAP) && \ - !((C)->o_idx) && \ - !((C)->m_idx) && \ - !((C) == &cave[p_ptr->py][p_ptr->px])) - - -/* - * Grid based version of "cave_perma_bold()" - */ -#define cave_perma_grid(C) \ - (f_info[(C)->feat].flags1 & FF1_PERMANENT) - - - -/* - * Determine if a "legal" grid is within "los" of the player - * - * Note the use of comparison to zero to force a "boolean" result - */ -#define player_has_los_bold(Y,X) \ - ((cave[Y][X].info & (CAVE_VIEW)) != 0) - - - -/* - * Determine if a "legal" grid can be "seen" by the player - * - * Note the use of comparison to zero to force a "boolean" result - */ -#define player_can_see_bold(Y,X) \ - ((cave[Y][X].info & (CAVE_SEEN)) != 0) - /*** Color constants ***/ diff --git a/src/modules.cc b/src/modules.cc index 98af4032..071f1ae9 100644 --- a/src/modules.cc +++ b/src/modules.cc @@ -11,6 +11,7 @@ #include "angband.h" #include "birth.hpp" +#include "cave.hpp" #include "corrupt.hpp" #include "files.hpp" #include "hooks.h" @@ -768,7 +769,7 @@ static bool_ theme_push_past(void *data, void *in_, void *out_) if (m_ptr->status >= MSTATUS_NEUTRAL) { - if ((cave_floor_bold(p->y, p->x) == TRUE) || + if (cave_floor_bold(p->y, p->x) || (mr_ptr->flags2 == RF2_PASS_WALL)) { char buf[128]; diff --git a/src/q_one.cc b/src/q_one.cc index 514ed0e0..da016ce1 100644 --- a/src/q_one.cc +++ b/src/q_one.cc @@ -1,5 +1,6 @@ #include "q_one.h" +#include "cave.hpp" #include "gods.hpp" #include "hooks.h" #include "monster2.hpp" -- cgit v1.2.3