From f55d0c4f4853ac83983c9dc8546daed2d4a531ec Mon Sep 17 00:00:00 2001 From: Hourier Date: Sat, 18 Jan 2020 19:30:02 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#38997=20place=5Fgrid=5Ftype=20?= =?utf8?q?=E3=82=92grid=5Fhold=5Ftype=20=E3=81=AB=E5=A4=89=E6=9B=B4?= =?utf8?q?=E3=81=97=E3=80=81place=5Fhold()=E3=82=92=E8=BF=BD=E5=8A=A0=20/?= =?utf8?q?=20Changed=20grid=5Fhold=5Ftype=20to=20place=5Fgrid=5Ftype=20and?= =?utf8?q?=20added=20place=5Fhold()?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/grid.c | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- src/grid.h | 9 ++++-- 2 files changed, 100 insertions(+), 7 deletions(-) diff --git a/src/grid.c b/src/grid.c index b4b164977..1b3206b71 100644 --- a/src/grid.c +++ b/src/grid.c @@ -1208,9 +1208,9 @@ bool player_can_enter(player_type *creature_ptr, FEAT_IDX feature, BIT_FLAGS16 m } -void place_grid(player_type *player_ptr, grid_type *g_ptr, place_grid_type pg_type) +void place_grid(player_type *player_ptr, grid_type *g_ptr, grid_hold_type gh_type) { - switch (pg_type) + switch (gh_type) { case floor: { @@ -1224,6 +1224,11 @@ void place_grid(player_type *player_ptr, grid_type *g_ptr, place_grid_type pg_ty g_ptr->info |= CAVE_EXTRA; break; } + case extra_perm: + { + // No such grid + return; + } case inner: { g_ptr->feat = feat_wall_inner; @@ -1257,6 +1262,11 @@ void place_grid(player_type *player_ptr, grid_type *g_ptr, place_grid_type pg_ty g_ptr->info |= (CAVE_OUTER | CAVE_VAULT); break; } + case solid: + { + // No such grid + return; + } case solid_perm: { g_ptr->feat = feat_permanent; @@ -1379,12 +1389,92 @@ void place_solid_perm_bold(player_type *player_ptr, POSITION y, POSITION x) void place_solid_noperm_bold(player_type *player_ptr, POSITION y, POSITION x) { - feature_type *_f_ptr = &f_info[feat_wall_solid]; + feature_type *f_ptr = &f_info[feat_wall_solid]; floor_type *floor_ptr = player_ptr->current_floor_ptr; - if ((floor_ptr->grid_array[y][x].info & CAVE_VAULT) && permanent_wall(_f_ptr)) + if ((floor_ptr->grid_array[y][x].info & CAVE_VAULT) && permanent_wall(f_ptr)) set_cave_feat(floor_ptr, y, x, feat_state(feat_wall_solid, FF_UNPERM)); else set_cave_feat(floor_ptr, y, x, feat_wall_solid); floor_ptr->grid_array[y][x].info &= ~(CAVE_MASK); add_cave_info(floor_ptr, y, x, CAVE_SOLID); delete_monster(player_ptr, y, x); } + +void place_hold(player_type *player_ptr, POSITION y, POSITION x, grid_hold_type gh_type) +{ + floor_type *floor_ptr = player_ptr->current_floor_ptr; + switch (gh_type) + { + case floor: + { + set_cave_feat(floor_ptr, y, x, feat_ground_type[randint0(100)]); + floor_ptr->grid_array[y][x].info &= ~(CAVE_MASK); + add_cave_info(floor_ptr, y, x, CAVE_FLOOR); + break; + } + case extra: + { + set_cave_feat(floor_ptr, y, x, feat_wall_type[randint0(100)]); + floor_ptr->grid_array[y][x].info &= ~(CAVE_MASK); + add_cave_info(floor_ptr, y, x, CAVE_EXTRA); + break; + } + case extra_perm: + { + set_cave_feat(floor_ptr, y, x, feat_permanent); + floor_ptr->grid_array[y][x].info &= ~(CAVE_MASK); + add_cave_info(floor_ptr, y, x, CAVE_EXTRA); + break; + } + case inner: + { + set_cave_feat(floor_ptr, y, x, feat_wall_inner); + floor_ptr->grid_array[y][x].info &= ~(CAVE_MASK); + add_cave_info(floor_ptr, y, x, CAVE_INNER); + break; + } + case inner_perm: + { + set_cave_feat(floor_ptr, y, x, feat_permanent); + floor_ptr->grid_array[y][x].info &= ~(CAVE_MASK); + add_cave_info(floor_ptr, y, x, CAVE_INNER); + break; + } + case outer: + { + set_cave_feat(floor_ptr, y, x, feat_wall_outer); + floor_ptr->grid_array[y][x].info &= ~(CAVE_MASK); + add_cave_info(floor_ptr, y, x, CAVE_OUTER); + break; + } + case outer_noperm: + { + feature_type *_f_ptr = &f_info[feat_wall_outer]; + if (permanent_wall(_f_ptr)) set_cave_feat(floor_ptr, y, x, (s16b)feat_state(feat_wall_outer, FF_UNPERM)); + else set_cave_feat(floor_ptr, y, x, feat_wall_outer); + floor_ptr->grid_array[y][x].info &= ~(CAVE_MASK); + add_cave_info(floor_ptr, y, x, (CAVE_OUTER | CAVE_VAULT)); + break; + } + case solid: + { + set_cave_feat(floor_ptr, y, x, feat_permanent); + floor_ptr->grid_array[y][x].info &= ~(CAVE_MASK); + add_cave_info(floor_ptr, y, x, CAVE_SOLID); + break; + } + case solid_perm: + { + feature_type *f_ptr = &f_info[feat_wall_solid]; + if ((floor_ptr->grid_array[y][x].info & CAVE_VAULT) && permanent_wall(f_ptr)) + set_cave_feat(floor_ptr, y, x, feat_state(feat_wall_solid, FF_UNPERM)); + else set_cave_feat(floor_ptr, y, x, feat_wall_solid); + floor_ptr->grid_array[y][x].info &= ~(CAVE_MASK); + add_cave_info(floor_ptr, y, x, CAVE_SOLID); + break; + } + default: + return; + } + + delete_monster(player_ptr, y, x); +} diff --git a/src/grid.h b/src/grid.h index 305d2ca27..66f3dd6a2 100644 --- a/src/grid.h +++ b/src/grid.h @@ -201,20 +201,23 @@ extern bool check_local_illumination(player_type *creature_ptr, POSITION y, POSI extern bool cave_monster_teleportable_bold(MONSTER_IDX m_idx, POSITION y, POSITION x, BIT_FLAGS mode); extern bool cave_player_teleportable_bold(POSITION y, POSITION x, BIT_FLAGS mode); -typedef enum place_grid_type +typedef enum grid_hold_type { floor, extra, + extra_perm, inner, inner_perm, outer, outer_noperm, + solid, solid_perm -} place_grid_type; +} grid_hold_type; -extern void place_grid(player_type *player_ptr, grid_type *g_ptr, place_grid_type pg_type); +extern void place_grid(player_type *player_ptr, grid_type *g_ptr, grid_hold_type pg_type); extern bool darkened_grid(player_type *player_ptr, grid_type *g_ptr); extern void delete_monster(player_type *player_ptr, POSITION y, POSITION x); +extern void place_hold(player_type *player_ptr, POSITION y, POSITION x, grid_hold_type gh_type); void place_floor_bold(player_type *player_ptr, POSITION y, POSITION x); void place_extra_bold(player_type *player_ptr, POSITION y, POSITION x); void place_extra_perm_bold(player_type *player_ptr, POSITION y, POSITION x); -- 2.11.0