/*!
* Determine if a "boundary" grid is "floor mimic"
- * @param grid_type *g_ptr
- * @param TerrainType *f_ptr
- * @param TerrainType *mimic_f_ptr
+ * @param g_ptr グリッドへの参照ポインタ
+ * @param t_ptr 地形特性への参照ポインタ
+ * @param mimic_t_ptr ミミック地形特性への参照ポインタ
* @return 移動不能であればTRUE
* @todo 負論理なので反転させたい
*/
-static bool boundary_floor(grid_type *g_ptr, TerrainType *f_ptr, TerrainType *mimic_f_ptr)
+static bool boundary_floor(Grid *g_ptr, TerrainType *t_ptr, TerrainType *mimic_t_ptr)
{
auto is_boundary_floor = g_ptr->mimic > 0;
- is_boundary_floor &= f_ptr->is_permanent_wall();
- is_boundary_floor &= mimic_f_ptr->flags.has_any_of({ TerrainCharacteristics::MOVE, TerrainCharacteristics::CAN_FLY });
- is_boundary_floor &= mimic_f_ptr->flags.has(TerrainCharacteristics::PROJECT);
- is_boundary_floor &= mimic_f_ptr->flags.has_not(TerrainCharacteristics::OPEN);
+ is_boundary_floor &= t_ptr->is_permanent_wall();
+ is_boundary_floor &= mimic_t_ptr->flags.has_any_of({ TerrainCharacteristics::MOVE, TerrainCharacteristics::CAN_FLY });
+ is_boundary_floor &= mimic_t_ptr->flags.has(TerrainCharacteristics::PROJECT);
+ is_boundary_floor &= mimic_t_ptr->flags.has_not(TerrainCharacteristics::OPEN);
return is_boundary_floor;
}
return false;
}
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
if (!g_ptr->is_mark()) {
return false;
DIRECTION new_dir = cycle[chome[prev_dir] + i];
int row = player_ptr->y + ddy[new_dir];
int col = player_ptr->x + ddx[new_dir];
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[row][col];
FEAT_IDX feat = g_ptr->get_feat_mimic();
TerrainType *f_ptr;
}
int max = (prev_dir & 0x01) + 1;
- const grid_type *g_ptr;
+ const Grid *g_ptr;
for (int i = -max; i <= max; i++) {
DIRECTION dir = cycle[chome[prev_dir] + i];
POSITION row = player_ptr->y + ddy[dir];
*/
bool exe_tunnel(PlayerType *player_ptr, POSITION y, POSITION x)
{
- grid_type *g_ptr;
+ Grid *g_ptr;
TerrainType *f_ptr, *mimic_f_ptr;
int power;
concptr name;
/*!
* @brief Automatically pickup/destroy items in this grid.
*/
-void autopick_pickup_items(PlayerType *player_ptr, grid_type *g_ptr)
+void autopick_pickup_items(PlayerType *player_ptr, Grid *g_ptr)
{
for (auto it = g_ptr->o_idx_list.begin(); it != g_ptr->o_idx_list.end();) {
OBJECT_IDX this_o_idx = *it++;
#include "system/angband.h"
-struct grid_type;
-;
+class Grid;
class PlayerType;
void autopick_alter_item(PlayerType *player_ptr, INVENTORY_IDX i_idx, bool destroy);
void autopick_delayed_alter(PlayerType *player_ptr);
-void autopick_pickup_items(PlayerType *player_ptr, grid_type *g_ptr);
+void autopick_pickup_items(PlayerType *player_ptr, Grid *g_ptr);
if (get_rep_dir(player_ptr, &dir, true)) {
FEAT_IDX feat;
- grid_type *g_ptr;
+ Grid *g_ptr;
y = player_ptr->y + ddy[dir];
x = player_ptr->x + ddx[dir];
g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
}
if (get_rep_dir(player_ptr, &dir)) {
- grid_type *g_ptr;
+ Grid *g_ptr;
FEAT_IDX feat;
y = player_ptr->y + ddy[dir];
x = player_ptr->x + ddx[dir];
}
if (get_rep_dir(player_ptr, &dir, true)) {
- grid_type *g_ptr;
+ Grid *g_ptr;
FEAT_IDX feat;
y = player_ptr->y + ddy[dir];
x = player_ptr->x + ddx[dir];
{
POSITION y, x;
DIRECTION dir;
- grid_type *g_ptr;
+ Grid *g_ptr;
bool more = false;
if (player_ptr->wild_mode) {
return;
POSITION y = player_ptr->y + ddy[dir];
POSITION x = player_ptr->x + ddx[dir];
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
FEAT_IDX feat = g_ptr->get_feat_mimic();
INVENTORY_IDX i_idx;
POSITION y = player_ptr->y + ddy[dir];
POSITION x = player_ptr->x + ddx[dir];
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
FEAT_IDX feat = g_ptr->get_feat_mimic();
TerrainType *f_ptr;
{
POSITION x, y;
DIRECTION dir = 0;
- grid_type *g_ptr;
+ Grid *g_ptr;
MonsterEntity *m_ptr;
if (!get_direction(player_ptr, &dir)) {
POSITION y = player_ptr->y + ddy[dir];
POSITION x = player_ptr->x + ddx[dir];
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
FEAT_IDX feat = g_ptr->get_feat_mimic();
if (terrains_info[feat].flags.has(TerrainCharacteristics::DOOR)) {
/* Travel until stopped */
for (auto cur_dis = 0; cur_dis <= tdis;) {
- grid_type *g_ptr;
+ Grid *g_ptr;
/* Hack -- Stop at the target */
if ((y == ty) && (x == tx)) {
/* Monster here, Try to hit it */
if (floor_ptr->grid_array[y][x].m_idx) {
sound(SOUND_SHOOT_HIT);
- grid_type *c_mon_ptr = &floor_ptr->grid_array[y][x];
+ Grid *c_mon_ptr = &floor_ptr->grid_array[y][x];
auto *m_ptr = &floor_ptr->m_list[c_mon_ptr->m_idx];
auto *r_ptr = &m_ptr->get_monrace();
POSITION y = 0;
int l;
for (l = SAFE_MAX_ATTEMPTS; l > 0; l--) {
- grid_type *g_ptr;
+ Grid *g_ptr;
TerrainType *f_ptr;
y = randint0(floor_ptr->height);
x = randint0(floor_ptr->width);
#include <string>
enum class AttributeType;
-struct grid_type;
+class Grid;
class MonsterEntity;
class MonsterRaceInfo;
class PlayerType;
BIT_FLAGS flag;
bool see_s_msg;
- grid_type *g_ptr;
+ Grid *g_ptr;
MonsterEntity *m_ptr;
MonsterEntity *m_caster_ptr;
MonsterRaceInfo *r_ptr;
static void make_tunnels(PlayerType *player_ptr, dun_data_type *dd_ptr)
{
for (int j = 0; j < dd_ptr->tunn_n; j++) {
- grid_type *g_ptr;
+ Grid *g_ptr;
TerrainType *f_ptr;
dd_ptr->tunnel_y = dd_ptr->tunn[j].y;
dd_ptr->tunnel_x = dd_ptr->tunn[j].x;
static void make_walls(PlayerType *player_ptr, dun_data_type *dd_ptr, dungeon_type *d_ptr, dt_type *dt_ptr)
{
for (int j = 0; j < dd_ptr->wall_n; j++) {
- grid_type *g_ptr;
+ Grid *g_ptr;
dd_ptr->tunnel_y = dd_ptr->wall[j].y;
dd_ptr->tunnel_x = dd_ptr->wall[j].x;
g_ptr = &player_ptr->current_floor_ptr->grid_array[dd_ptr->tunnel_y][dd_ptr->tunnel_x];
* @brief マスにフロア端用の永久壁を配置する / Set boundary mimic and add "solid" perma-wall
* @param g_ptr 永久壁を配置したいマス構造体の参照ポインタ
*/
-static void place_bound_perm_wall(PlayerType *player_ptr, grid_type *g_ptr)
+static void place_bound_perm_wall(PlayerType *player_ptr, Grid *g_ptr)
{
if (bound_walls_perm) {
g_ptr->mimic = 0;
#pragma once
class FloorType;
-struct grid_type;
class PlayerType;
enum class TerrainCharacteristics;
bool in_bounds(FloorType *floor_ptr, int y, int x);
for (POSITION y = 0; y < floor_ptr->height; y++) {
for (POSITION x = 0; x < floor_ptr->width; x++) {
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
if (terrains_info[g_ptr->get_feat_mimic()].flags.has_not(TerrainCharacteristics::GLOW)) {
continue;
for (int i = 0; i < floor_ptr->view_n; i++) {
POSITION y = floor_ptr->view_y[i];
POSITION x = floor_ptr->view_x[i];
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
g_ptr->info &= ~(CAVE_VIEW);
}
}
}
-static void set_grid_by_leaving_floor(PlayerType *player_ptr, grid_type **g_ptr)
+static void set_grid_by_leaving_floor(PlayerType *player_ptr, Grid **g_ptr)
{
if ((player_ptr->change_floor_mode & CFM_SAVE_FLOORS) == 0) {
return;
}
}
-static void refresh_new_floor_id(PlayerType *player_ptr, grid_type *g_ptr)
+static void refresh_new_floor_id(PlayerType *player_ptr, Grid *g_ptr)
{
if (new_floor_id != 0) {
return;
static void exe_leave_floor(PlayerType *player_ptr, saved_floor_type *sf_ptr)
{
- grid_type *g_ptr = nullptr;
+ Grid *g_ptr = nullptr;
set_grid_by_leaving_floor(player_ptr, &g_ptr);
jump_floors(player_ptr);
exit_to_wilderness(player_ptr);
*/
void delete_all_items_from_floor(PlayerType *player_ptr, POSITION y, POSITION x)
{
- grid_type *g_ptr;
+ Grid *g_ptr;
auto *floor_ptr = player_ptr->current_floor_ptr;
if (!in_bounds(floor_ptr, y, x)) {
return;
POSITION dy, dx;
POSITION ty, tx = 0;
OBJECT_IDX o_idx = 0;
- grid_type *g_ptr;
+ Grid *g_ptr;
bool flag = false;
bool done = false;
#ifdef JP
POSITION changex, changey;
POSITION ty, tx;
bool done;
- grid_type *g_ptr;
+ Grid *g_ptr;
length = distance(x1, y1, x2, y2);
DIRECTION dir;
int dummy = 0;
- grid_type *g_ptr;
+ Grid *g_ptr;
TerrainType *f_ptr;
const auto &streamer = TerrainList::get_instance()[feat];
void place_trees(PlayerType *player_ptr, POSITION x, POSITION y)
{
int i, j;
- grid_type *g_ptr;
+ Grid *g_ptr;
/* place trees/ rubble in ovalish distribution */
auto *floor_ptr = player_ptr->current_floor_ptr;
for (int i = 0; i < num; i++) {
while (true) {
- grid_type *g_ptr;
+ Grid *g_ptr;
int candidates = 0;
const POSITION max_x = floor.width - 1;
for (POSITION y = 1; y < floor.height - 1; y++) {
POSITION y = 0;
POSITION x = 0;
int dummy = 0;
- grid_type *g_ptr;
+ Grid *g_ptr;
auto *floor_ptr = player_ptr->current_floor_ptr;
num = num * floor_ptr->height * floor_ptr->width / (MAX_HGT * MAX_WID) + 1;
for (int k = 0; k < num; k++) {
POSITION x3, y3, dx, dy;
POSITION changex, changey;
bool retval, firstsuccede;
- grid_type *g_ptr;
+ Grid *g_ptr;
int length = distance(x1, y1, x2, y2);
auto *floor_ptr = player_ptr->current_floor_ptr;
floor_ptr->grid_array[MAX_HGT - 1][MAX_WID - 1].mimic = border.south_east;
for (y = 0; y < floor_ptr->height; y++) {
for (x = 0; x < floor_ptr->width; x++) {
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
if (is_daytime()) {
g_ptr->info |= CAVE_GLOW;
if (player_ptr->teleport_town) {
for (y = 0; y < floor_ptr->height; y++) {
for (x = 0; x < floor_ptr->width; x++) {
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
TerrainType *f_ptr;
f_ptr = &terrains_info[g_ptr->feat];
} else if (player_ptr->leaving_dungeon) {
for (y = 0; y < floor_ptr->height; y++) {
for (x = 0; x < floor_ptr->width; x++) {
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
if (!g_ptr->cave_has_flag(TerrainCharacteristics::ENTRANCE)) {
continue;
for (int i = 0; i < 4; i++) {
POSITION y = y1 + ddy_ddd[i];
POSITION x = x1 + ddx_ddd[i];
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
if (g_ptr->cave_has_flag(TerrainCharacteristics::WALL) || !g_ptr->is_floor() || g_ptr->is_room()) {
continue;
POSITION y = 0, x = 0;
int max_attempts = 10000;
- grid_type *g_ptr;
+ Grid *g_ptr;
TerrainType *f_ptr;
auto *floor_ptr = player_ptr->current_floor_ptr;
* @param g_ptr マス構造体の参照ポインタ
* @return 隠されたドアがあるならTRUEを返す。
*/
-bool is_hidden_door(PlayerType *player_ptr, grid_type *g_ptr)
+bool is_hidden_door(PlayerType *player_ptr, Grid *g_ptr)
{
if ((g_ptr->mimic || g_ptr->cave_has_flag(TerrainCharacteristics::SECRET)) && is_closed_door(player_ptr, g_ptr->feat)) {
return true;
return true;
}
-void place_grid(PlayerType *player_ptr, grid_type *g_ptr, grid_bold_type gb_type)
+void place_grid(PlayerType *player_ptr, Grid *g_ptr, grid_bold_type gb_type)
{
switch (gb_type) {
case GB_FLOOR: {
* @param g_ptr グリッドへの参照ポインタ
* @return 照明が消されている地形ならばTRUE
*/
-bool darkened_grid(PlayerType *player_ptr, grid_type *g_ptr)
+bool darkened_grid(PlayerType *player_ptr, Grid *g_ptr)
{
return ((g_ptr->info & (CAVE_VIEW | CAVE_LITE | CAVE_MNLT | CAVE_MNDK)) == (CAVE_VIEW | CAVE_MNDK)) && !player_ptr->see_nocto;
}
void place_bold(PlayerType *player_ptr, POSITION y, POSITION x, grid_bold_type gb_type)
{
- grid_type *const g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
+ Grid *const g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
place_grid(player_ptr, g_ptr, gb_type);
}
{
int count = 0;
for (DIRECTION d = 0; d < 9; d++) {
- grid_type *g_ptr;
+ Grid *g_ptr;
FEAT_IDX feat;
if ((d == 8) && !under) {
continue;
};
class FloorType;
-struct grid_type;
+class Grid;
class PlayerType;
class MonsterRaceInfo;
enum class TerrainCharacteristics;
bool new_player_spot(PlayerType *player_ptr);
-bool is_hidden_door(PlayerType *player_ptr, grid_type *g_ptr);
+bool is_hidden_door(PlayerType *player_ptr, Grid *g_ptr);
bool player_can_enter(PlayerType *player_ptr, FEAT_IDX feature, BIT_FLAGS16 mode);
bool feat_uses_special(FEAT_IDX f_idx);
void update_local_illumination(PlayerType *player_ptr, POSITION y, POSITION x);
bool check_local_illumination(PlayerType *player_ptr, POSITION y, POSITION x);
bool cave_monster_teleportable_bold(PlayerType *player_ptr, MONSTER_IDX m_idx, POSITION y, POSITION x, teleport_flags mode);
bool cave_player_teleportable_bold(PlayerType *player_ptr, POSITION y, POSITION x, teleport_flags mode);
-void place_grid(PlayerType *player_ptr, grid_type *g_ptr, grid_bold_type pg_type);
-bool darkened_grid(PlayerType *player_ptr, grid_type *g_ptr);
+void place_grid(PlayerType *player_ptr, Grid *g_ptr, grid_bold_type pg_type);
+bool darkened_grid(PlayerType *player_ptr, Grid *g_ptr);
void delete_monster(PlayerType *player_ptr, POSITION y, POSITION x);
void place_bold(PlayerType *player_ptr, POSITION y, POSITION x, grid_bold_type gh_type);
void set_cave_feat(FloorType *floor_ptr, POSITION y, POSITION x, FEAT_IDX feature_idx);
* @details
* ダメージを受けた場合、自然回復できない。
*/
-static bool deal_damege_by_feat(PlayerType *player_ptr, grid_type *g_ptr, concptr msg_levitation, concptr msg_normal,
+static bool deal_damege_by_feat(PlayerType *player_ptr, Grid *g_ptr, concptr msg_levitation, concptr msg_normal,
std::function<PERCENTAGE(PlayerType *)> damage_rate, std::function<void(PlayerType *, int)> additional_effect)
{
auto *f_ptr = &terrains_info[g_ptr->feat];
* この関数は、セーブデータの互換性を保つために多くのデータ改変処理を備えている。
* 現在確認している処理は以下の通り、
* <ul>
- * <li>1.7.0.2で8bitだったgrid_typeのfeat,mimicのID値を16bitに拡張する処理。</li>
+ * <li>1.7.0.2で8bitだったGridのfeat,mimicのID値を16bitに拡張する処理。</li>
* <li>1.7.0.8までに廃止、IDなどを差し替えたクエスト番号を置換する処理。</li>
* </ul>
* The monsters/objects must be loaded in the same order
}
for (int i = count; i > 0; i--) {
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
g_ptr->info = info;
if (++x >= xmax) {
auto count = rd_byte();
auto tmp8u = rd_byte();
for (int i = count; i > 0; i--) {
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
g_ptr->feat = (int16_t)tmp8u;
if (++x >= xmax) {
auto count = rd_byte();
auto tmp8u = rd_byte();
for (int i = count; i > 0; i--) {
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
g_ptr->mimic = (int16_t)tmp8u;
if (++x >= xmax) {
auto count = rd_byte();
auto tmp16s = rd_s16b();
for (int i = count; i > 0; i--) {
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
g_ptr->special = tmp16s;
if (++x >= xmax) {
if (h_older_than(1, 1, 1, 0)) {
for (int y = 0; y < ymax; y++) {
for (int x = 0; x < xmax; x++) {
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
/* Very old */
if (h_older_than(1, 3, 1, 0)) {
for (int y = 0; y < ymax; y++) {
for (int x = 0; x < xmax; x++) {
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
/* Old CAVE_IN_MIRROR flag */
if (!vanilla_town) {
for (int y = 0; y < ymax; y++) {
for (int x = 0; x < xmax; x++) {
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
if ((g_ptr->special == OLD_QUEST_WATER_CAVE) && !floor_ptr->dun_level) {
}
max_dlv.assign(dungeons_info.size(), {});
- floor_ptr->grid_array.assign(MAX_HGT, std::vector<grid_type>(MAX_WID));
+ floor_ptr->grid_array.assign(MAX_HGT, std::vector<Grid>(MAX_WID));
init_gf_colors();
macro_patterns.assign(MACRO_MAX, {});
{
DIRECTION dir;
POSITION y = 0, x = 0;
- grid_type *g_ptr;
+ Grid *g_ptr;
for (int i = 0; i < 6; i++) {
dir = randint0(8);
y = player_ptr->y + ddy_ddd[dir];
* @param m_idx モンスターID
* @param g_ptr グリッドへの参照ポインタ
*/
-static bool exe_monster_attack_to_monster(PlayerType *player_ptr, MONSTER_IDX m_idx, grid_type *g_ptr)
+static bool exe_monster_attack_to_monster(PlayerType *player_ptr, MONSTER_IDX m_idx, Grid *g_ptr)
{
auto &floor = *player_ptr->current_floor_ptr;
auto *m_ptr = &floor.m_list[m_idx];
* @param can_cross モンスターが地形を踏破できるならばTRUE
* @return ターン消費が発生したらTRUE
*/
-bool process_monster_attack_to_monster(PlayerType *player_ptr, turn_flags *turn_flags_ptr, MONSTER_IDX m_idx, grid_type *g_ptr, bool can_cross)
+bool process_monster_attack_to_monster(PlayerType *player_ptr, turn_flags *turn_flags_ptr, MONSTER_IDX m_idx, Grid *g_ptr, bool can_cross)
{
if (!turn_flags_ptr->do_move || (g_ptr->m_idx == 0)) {
return false;
#include "system/angband.h"
-struct grid_type;
-;
+class Grid;
class PlayerType;
struct turn_flags;
void exe_monster_attack_to_player(PlayerType *player_ptr, turn_flags *turn_flags_ptr, MONSTER_IDX m_idx, POSITION ny, POSITION nx);
-bool process_monster_attack_to_monster(PlayerType *player_ptr, turn_flags *turn_flags_ptr, MONSTER_IDX m_idx, grid_type *g_ptr, bool can_cross);
+bool process_monster_attack_to_monster(PlayerType *player_ptr, turn_flags *turn_flags_ptr, MONSTER_IDX m_idx, Grid *g_ptr, bool can_cross);
static void update_monster_lite(
PlayerType *const player_ptr, std::vector<Pos2D> &points, const POSITION y, const POSITION x, const monster_lite_type *const ml_ptr)
{
- grid_type *g_ptr;
+ Grid *g_ptr;
int dpf, d;
POSITION midpoint;
g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
static void update_monster_dark(
PlayerType *const player_ptr, std::vector<Pos2D> &points, const POSITION y, const POSITION x, const monster_lite_type *const ml_ptr)
{
- grid_type *g_ptr;
+ Grid *g_ptr;
int midpoint, dpf, d;
g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
if ((g_ptr->info & (CAVE_LITE | CAVE_MNLT | CAVE_MNDK | CAVE_VIEW)) != CAVE_VIEW) {
const auto &dungeon = floor_ptr->get_dungeon_definition();
auto dis_lim = (dungeon.flags.has(DungeonFeatureType::DARKNESS) && !player_ptr->see_nocto) ? (MAX_PLAYER_SIGHT / 2 + 1) : (MAX_PLAYER_SIGHT + 3);
for (int i = 0; i < floor_ptr->mon_lite_n; i++) {
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[floor_ptr->mon_lite_y[i]][floor_ptr->mon_lite_x[i]];
g_ptr->info |= (g_ptr->info & CAVE_MNLT) ? CAVE_TEMP : CAVE_XTRA;
g_ptr->info &= ~(CAVE_MNLT | CAVE_MNDK);
continue;
}
- grid_type *g_ptr;
+ Grid *g_ptr;
if (cave_has_flag_bold(player_ptr->current_floor_ptr, ml_ptr->mon_fy + 1, ml_ptr->mon_fx, f_flag)) {
add_mon_lite(player_ptr, points, ml_ptr->mon_fy + 2, ml_ptr->mon_fx + 1, ml_ptr);
add_mon_lite(player_ptr, points, ml_ptr->mon_fy + 2, ml_ptr->mon_fx, ml_ptr);
for (int i = 0; i < floor_ptr->mon_lite_n; i++) {
POSITION fx = floor_ptr->mon_lite_x[i];
POSITION fy = floor_ptr->mon_lite_y[i];
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[fy][fx];
if (g_ptr->info & CAVE_TEMP) {
if ((g_ptr->info & (CAVE_VIEW | CAVE_MNLT)) == CAVE_VIEW) {
for (size_t i = 0; i < end_temp; i++) {
const auto &[fy, fx] = points[i];
- grid_type *const g_ptr = &floor_ptr->grid_array[fy][fx];
+ Grid *const g_ptr = &floor_ptr->grid_array[fy][fx];
if (g_ptr->info & CAVE_MNLT) {
if ((g_ptr->info & (CAVE_VIEW | CAVE_TEMP)) == CAVE_VIEW) {
cave_note_and_redraw_later(floor_ptr, fy, fx);
void clear_mon_lite(FloorType *floor_ptr)
{
for (int i = 0; i < floor_ptr->mon_lite_n; i++) {
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[floor_ptr->mon_lite_y[i]][floor_ptr->mon_lite_x[i]];
g_ptr->info &= ~(CAVE_MNLT | CAVE_MNDK);
}
static bool process_post_dig_wall(PlayerType *player_ptr, turn_flags *turn_flags_ptr, MonsterEntity *m_ptr, POSITION ny, POSITION nx)
{
auto *r_ptr = &m_ptr->get_monrace();
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &player_ptr->current_floor_ptr->grid_array[ny][nx];
TerrainType *f_ptr;
f_ptr = &terrains_info[g_ptr->feat];
continue;
}
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &player_ptr->current_floor_ptr->grid_array[ny][nx];
auto *m_ptr = &player_ptr->current_floor_ptr->m_list[m_idx];
auto *r_ptr = &m_ptr->get_monrace();
*/
void delete_monster(PlayerType *player_ptr, POSITION y, POSITION x)
{
- grid_type *g_ptr;
+ Grid *g_ptr;
auto *floor_ptr = player_ptr->current_floor_ptr;
if (!in_bounds(floor_ptr, y, x)) {
return;
}
auto *r_ptr = &m_ptr->get_monrace();
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
BIT_FLAGS16 riding_mode = (m_idx == player_ptr->riding) ? CEM_RIDING : 0;
POSITION y = m_ptr->fy;
POSITION x = m_ptr->fx;
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
g_ptr->m_idx = i2;
POSITION x = m_ptr->fx;
auto *floor_ptr = player_ptr->current_floor_ptr;
for (POSITION xx = x - 5; xx <= x + 5; xx++) {
- grid_type *g_ptr;
+ Grid *g_ptr;
for (POSITION yy = y - 5; yy <= y + 5; yy++) {
if (distance(y, x, yy, xx) > 5) {
continue;
for (int i = 0; i < 8; i++) {
int next_x = *xp + tonari_x[next][i];
int next_y = *yp + tonari_y[next][i];
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &player_ptr->current_floor_ptr->grid_array[next_y][next_x];
if (!g_ptr->cave_has_flag(f_flag)) {
continue;
POSITION y = player_ptr->y + ddy[dir];
POSITION x = player_ptr->x + ddx[dir];
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
TerrainType *f_ptr, *mimic_f_ptr;
f_ptr = &terrains_info[g_ptr->feat];
#include "util/flag-group.h"
#include <string>
-struct grid_type;
+class Grid;
class MonsterEntity;
class ItemEntity;
class PlayerType;
TrFlags obj_flags{};
bool come_back = false;
bool do_drop = true;
- grid_type *g_ptr{};
+ Grid *g_ptr{};
MonsterEntity *m_ptr{};
std::string m_name{};
int back_chance{};
POSITION y = player_ptr->y + ddy_ddd[i];
POSITION x = player_ptr->x + ddx_ddd[i];
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
if (g_ptr->m_idx) {
* @param now_riding trueなら下馬処理、falseならば騎乗処理
* @return 可能ならばtrueを返す
*/
-bool can_player_ride_pet(PlayerType *player_ptr, grid_type *g_ptr, bool now_riding)
+bool can_player_ride_pet(PlayerType *player_ptr, Grid *g_ptr, bool now_riding)
{
bool old_character_xtra = w_ptr->character_xtra;
MONSTER_IDX old_riding = player_ptr->riding;
extern int total_friends;
-struct grid_type;
-;
+class Grid;
class PlayerType;
-bool can_player_ride_pet(PlayerType *player_ptr, grid_type *g_ptr, bool now_riding);
+bool can_player_ride_pet(PlayerType *player_ptr, Grid *g_ptr, bool now_riding);
PERCENTAGE calculate_upkeep(PlayerType *player_ptr);
*/
void massacre(PlayerType *player_ptr)
{
- grid_type *g_ptr;
+ Grid *g_ptr;
MonsterEntity *m_ptr;
for (DIRECTION dir = 0; dir < 8; dir++) {
POSITION y = player_ptr->y + ddy_ddd[dir];
* @todo fear とmdeath はポインタである必要はないはず
*/
enum class MonsterRaceId : short;
-struct grid_type;
+class Grid;
class FloorType;
class MonsterRaceInfo;
class MonsterEntity;
bool *fear; //!< 恐怖したかどうか
bool *mdeath; //!< 死んだかどうか
int drain_left; //!< 吸血できる残量(最大MAX_VAMPIRIC_DRAIN)
- grid_type *g_ptr; //!< ターゲットのいる地形情報
+ Grid *g_ptr; //!< ターゲットのいる地形情報
chaotic_effect chaos_effect; //!< カオス効果
MagicalBrandEffectType magical_effect; //!< 魔術効果
*/
static void discover_hidden_things(PlayerType *player_ptr, POSITION y, POSITION x)
{
- grid_type *g_ptr;
+ Grid *g_ptr;
auto *floor_ptr = player_ptr->current_floor_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
if (g_ptr->mimic && is_trap(player_ptr, g_ptr->feat)) {
POSITION ox = player_ptr->x;
auto *floor_ptr = player_ptr->current_floor_ptr;
auto *g_ptr = &floor_ptr->grid_array[ny][nx];
- grid_type *oc_ptr = &floor_ptr->grid_array[oy][ox];
+ Grid *oc_ptr = &floor_ptr->grid_array[oy][ox];
auto *f_ptr = &terrains_info[g_ptr->feat];
TerrainType *of_ptr = &terrains_info[oc_ptr->feat];
for (int i = 0; i < floor_ptr->redraw_n; i++) {
POSITION y = floor_ptr->redraw_y[i];
POSITION x = floor_ptr->redraw_x[i];
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
if (none_bits(g_ptr->info, CAVE_REDRAW)) {
continue;
static bool update_view_aux(PlayerType *player_ptr, POSITION y, POSITION x, POSITION y1, POSITION x1, POSITION y2, POSITION x2)
{
auto *floor_ptr = player_ptr->current_floor_ptr;
- grid_type *g1_c_ptr;
- grid_type *g2_c_ptr;
+ Grid *g1_c_ptr;
+ Grid *g2_c_ptr;
g1_c_ptr = &floor_ptr->grid_array[y1][x1];
g2_c_ptr = &floor_ptr->grid_array[y2][x2];
bool f1 = (feat_supports_los(g1_c_ptr->feat));
return true;
}
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
bool wall = (!feat_supports_los(g_ptr->feat));
bool z1 = (v1 && (g1_c_ptr->info & CAVE_XTRA));
POSITION y_max = floor_ptr->height - 1;
POSITION x_max = floor_ptr->width - 1;
- grid_type *g_ptr;
+ Grid *g_ptr;
if (view_reduce_view && !floor_ptr->dun_level) {
full = MAX_PLAYER_SIGHT / 2;
over = MAX_PLAYER_SIGHT * 3 / 4;
POSITION y, x;
POSITION ny, nx;
MONSTER_IDX m_idx;
- grid_type *g_ptr;
+ Grid *g_ptr;
MonsterEntity *m_ptr;
y = player_ptr->y + ddy[dir];
return;
}
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
if (g_ptr->is_room()) {
return;
/* Create a new floor room with optional light */
static void generate_room_floor(PlayerType *player_ptr, POSITION y1, POSITION x1, POSITION y2, POSITION x2, int light)
{
- grid_type *g_ptr;
+ Grid *g_ptr;
for (POSITION y = y1; y <= y2; y++) {
for (POSITION x = x1; x <= x2; x++) {
g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
POSITION x2 = x0 + dx;
for (POSITION y = y1 - 1; y <= y2 + 1; y++) {
for (POSITION x = x1 - 1; x <= x2 + 1; x++) {
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
g_ptr->info |= CAVE_ROOM;
if (is_vault) {
bool light;
- grid_type *g_ptr;
+ Grid *g_ptr;
auto *floor_ptr = player_ptr->current_floor_ptr;
const auto &dungeon = floor_ptr->get_dungeon_definition();
POSITION y1a, x1a, y2a, x2a;
POSITION y1b, x1b, y2b, x2b;
bool light;
- grid_type *g_ptr;
+ Grid *g_ptr;
/* Find and reserve some space in the dungeon. Get center of room. */
auto *floor_ptr = player_ptr->current_floor_ptr;
POSITION y1b, x1b, y2b, x2b;
POSITION yval, xval;
bool light;
- grid_type *g_ptr;
+ Grid *g_ptr;
/* Find and reserve some space in the dungeon. Get center of room. */
auto *floor_ptr = player_ptr->current_floor_ptr;
POSITION y, x, y1, x1;
POSITION y2, x2, tmp, yval, xval;
bool light;
- grid_type *g_ptr;
+ Grid *g_ptr;
/* Find and reserve some space in the dungeon. Get center of room. */
auto *floor_ptr = player_ptr->current_floor_ptr;
/*!
* @todo intをenumに変更する
*/
-static void add_cave_info(grid_type *g_ptr, int cave_mask)
+static void add_cave_info(Grid *g_ptr, int cave_mask)
{
g_ptr->info |= cave_mask;
}
MonsterEntity align;
- grid_type *g_ptr;
+ Grid *g_ptr;
auto *floor_ptr = player_ptr->current_floor_ptr;
int cur_nest_type = pick_vault_type(floor_ptr, nest_types, floor_ptr->get_dungeon_definition().nest);
MonsterEntity align;
- grid_type *g_ptr;
+ Grid *g_ptr;
auto *floor_ptr = player_ptr->current_floor_ptr;
int cur_pit_type = pick_vault_type(floor_ptr, pit_types, floor_ptr->get_dungeon_definition().pit);
MonsterEntity align;
- grid_type *g_ptr;
+ Grid *g_ptr;
auto *floor_ptr = player_ptr->current_floor_ptr;
int cur_pit_type = pick_vault_type(floor_ptr, pit_types, floor_ptr->get_dungeon_definition().pit);
POSITION y1, x1, xsize, ysize;
bool light;
- grid_type *g_ptr;
+ Grid *g_ptr;
/* Pick a room size */
xsize = rand_range(9, 13);
bool light;
- grid_type *g_ptr;
+ Grid *g_ptr;
int16_t trap;
/* Pick a room size */
{
POSITION dx, dy, x, y, i, j;
concptr t;
- grid_type *g_ptr;
+ Grid *g_ptr;
/* Place dungeon features and objects */
auto *floor_ptr = player_ptr->current_floor_ptr;
/*
* Grid based version of "creature_bold()"
*/
-static bool player_grid(PlayerType *player_ptr, grid_type *g_ptr)
+static bool player_grid(PlayerType *player_ptr, Grid *g_ptr)
{
return g_ptr == &player_ptr->current_floor_ptr->grid_array[player_ptr->y][player_ptr->x];
}
/*
* Grid based version of "cave_empty_bold()"
*/
-static bool is_cave_empty_grid(PlayerType *player_ptr, grid_type *g_ptr)
+static bool is_cave_empty_grid(PlayerType *player_ptr, Grid *g_ptr)
{
bool is_empty_grid = g_ptr->cave_has_flag(TerrainCharacteristics::PLACE);
is_empty_grid &= g_ptr->m_idx == 0;
int d = 1;
POSITION y, x;
scatter(player_ptr, &y, &x, y1, x1, d, 0);
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
if (!is_cave_empty_grid(player_ptr, g_ptr)) {
continue;
msg_print(_("警告!地下室のアイテムを配置できません!", "Warning! Could not place vault object!"));
}
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[j][k];
if (!g_ptr->is_floor() || !g_ptr->o_idx_list.empty()) {
continue;
*/
static void vault_trap_aux(FloorType *floor_ptr, POSITION y, POSITION x, POSITION yd, POSITION xd)
{
- grid_type *g_ptr;
+ Grid *g_ptr;
int y1 = y, x1 = x;
int dummy = 0;
for (int count = 0; count <= 5; count++) {
continue;
}
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[yy][xx];
g_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY | CAVE_UNSAFE);
g_ptr->info &= ~(CAVE_GLOW | CAVE_MARK | CAVE_KNOWN);
continue;
}
- grid_type *gg_ptr;
+ Grid *gg_ptr;
gg_ptr = &floor_ptr->grid_array[yy][xx];
if (gg_ptr->m_idx == player_ptr->riding) {
continue;
continue;
}
- grid_type *cc_ptr;
+ Grid *cc_ptr;
for (DIRECTION ii = 0; ii < 9; ii++) {
POSITION yyy = yy + ddy_ddd[ii];
POSITION xxx = xx + ddx_ddd[ii];
}
POSITION ty, tx;
- grid_type *g_ptr;
+ Grid *g_ptr;
const auto &system = AngbandSystem::get_instance();
if (dir == 5 && target_okay(player_ptr)) {
tx = target_col;
continue;
}
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor.grid_array[y][x];
/* Memorize terrain of the grid */
if (k > r) {
continue;
}
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
/* Lose room and vault */
if (k > r) {
continue;
}
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
if (g_ptr->is_mirror()) {
DIRECTION i;
POSITION yy, xx;
- grid_type *cc_ptr;
+ Grid *cc_ptr;
for (i = 0; i < 9; i++) {
yy = y + ddy_ddd[i];
POSITION bx = x + ddx_ddd[j];
if (in_bounds2(player_ptr->current_floor_ptr, by, bx)) {
- grid_type *cc_ptr = &player_ptr->current_floor_ptr->grid_array[by][bx];
+ Grid *cc_ptr = &player_ptr->current_floor_ptr->grid_array[by][bx];
if (terrains_info[cc_ptr->get_feat_mimic()].flags.has(TerrainCharacteristics::GLOW)) {
do_dark = false;
return false;
}
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &player_ptr->current_floor_ptr->grid_array[ty][tx];
if (!g_ptr->m_idx || (g_ptr->m_idx == player_ptr->riding)) {
msg_print(_("それとは場所を交換できません。", "You can't trade places with that!"));
{
}
-grid_type &FloorType::get_grid(const Pos2D pos)
+Grid &FloorType::get_grid(const Pos2D pos)
{
return this->grid_array[pos.y][pos.x];
}
-const grid_type &FloorType::get_grid(const Pos2D pos) const
+const Grid &FloorType::get_grid(const Pos2D pos) const
{
return this->grid_array[pos.y][pos.x];
}
enum class QuestId : short;
struct dungeon_type;
-struct grid_type;
+class Grid;
class MonsterEntity;
class ItemEntity;
class FloorType {
public:
FloorType();
short dungeon_idx = 0;
- std::vector<std::vector<grid_type>> grid_array;
+ std::vector<std::vector<Grid>> grid_array;
DEPTH dun_level = 0; /*!< 現在の実ダンジョン階層 base_level の参照元となる / Current dungeon level */
DEPTH base_level = 0; /*!< 基本生成レベル、後述のobject_level, monster_levelの参照元となる / Base dungeon level */
DEPTH object_level = 0; /*!< アイテムの生成レベル、 base_level を起点に一時変更する時に参照 / Current object creation level */
QuestId quest_number;
bool inside_arena = false; /* Is character inside on_defeat_arena_monster? */
- grid_type &get_grid(const Pos2D pos);
- const grid_type &get_grid(const Pos2D pos) const;
+ Grid &get_grid(const Pos2D pos);
+ const Grid &get_grid(const Pos2D pos) const;
bool is_in_dungeon() const;
bool is_in_quest() const;
void set_dungeon_index(short dungeon_idx_); /*!< @todo 後でenum class にする */
* @param X 指定X座標
* @return FLOOR属性を持っているならばTRUE
*/
-bool grid_type::is_floor() const
+bool Grid::is_floor() const
{
return any_bits(this->info, CAVE_FLOOR);
}
-bool grid_type::is_room() const
+bool Grid::is_room() const
{
return any_bits(this->info, CAVE_ROOM);
}
-bool grid_type::is_extra() const
+bool Grid::is_extra() const
{
return any_bits(this->info, CAVE_EXTRA);
}
-bool grid_type::is_inner() const
+bool Grid::is_inner() const
{
return any_bits(this->info, CAVE_INNER);
}
-bool grid_type::is_outer() const
+bool Grid::is_outer() const
{
return any_bits(this->info, CAVE_OUTER);
}
-bool grid_type::is_solid() const
+bool Grid::is_solid() const
{
return any_bits(this->info, CAVE_SOLID);
}
-bool grid_type::is_icky() const
+bool Grid::is_icky() const
{
return any_bits(this->info, CAVE_ICKY);
}
-bool grid_type::is_lite() const
+bool Grid::is_lite() const
{
return any_bits(this->info, CAVE_LITE);
}
-bool grid_type::is_redraw() const
+bool Grid::is_redraw() const
{
return any_bits(this->info, CAVE_REDRAW);
}
-bool grid_type::is_view() const
+bool Grid::is_view() const
{
return any_bits(this->info, CAVE_VIEW);
}
-bool grid_type::is_object() const
+bool Grid::is_object() const
{
return any_bits(this->info, CAVE_OBJECT);
}
-bool grid_type::is_mark() const
+bool Grid::is_mark() const
{
return any_bits(this->info, CAVE_MARK);
}
-bool grid_type::is_mirror() const
+bool Grid::is_mirror() const
{
return this->is_object() && terrains_info[this->mimic].flags.has(TerrainCharacteristics::MIRROR);
}
/*
* @brief 守りのルーンで守られているかを返す
*/
-bool grid_type::is_rune_protection() const
+bool Grid::is_rune_protection() const
{
return this->is_object() && terrains_info[this->mimic].flags.has(TerrainCharacteristics::RUNE_PROTECTION);
}
/*
* @brief 爆発のルーンが仕掛けられているかを返す
*/
-bool grid_type::is_rune_explosion() const
+bool Grid::is_rune_explosion() const
{
return this->is_object() && terrains_info[this->mimic].flags.has(TerrainCharacteristics::RUNE_EXPLOSION);
}
-byte grid_type::get_cost(const MonsterRaceInfo *r_ptr) const
+byte Grid::get_cost(const MonsterRaceInfo *r_ptr) const
{
return this->costs[get_grid_flow_type(r_ptr)];
}
-byte grid_type::get_distance(const MonsterRaceInfo *r_ptr) const
+byte Grid::get_distance(const MonsterRaceInfo *r_ptr) const
{
return this->dists[get_grid_flow_type(r_ptr)];
}
-flow_type grid_type::get_grid_flow_type(const MonsterRaceInfo *r_ptr) const
+flow_type Grid::get_grid_flow_type(const MonsterRaceInfo *r_ptr) const
{
return r_ptr->feature_flags.has(MonsterFeatureType::CAN_FLY) ? FLOW_CAN_FLY : FLOW_NORMAL;
}
* @param g_ptr グリッドへの参照ポインタ
* @return 地形情報
*/
-FEAT_IDX grid_type::get_feat_mimic() const
+FEAT_IDX Grid::get_feat_mimic() const
{
return terrains_info[this->mimic ? this->mimic : this->feat].mimic;
}
-bool grid_type::cave_has_flag(TerrainCharacteristics feature_flags) const
+bool Grid::cave_has_flag(TerrainCharacteristics feature_flags) const
{
return terrains_info[this->feat].flags.has(feature_flags);
}
* @param ch 指定するシンボル文字
* @return シンボルが指定した記号か否か
*/
-bool grid_type::is_symbol(const int ch) const
+bool Grid::is_symbol(const int ch) const
{
return terrains_info[this->feat].x_char[0] == ch;
}
-void grid_type::reset_costs()
+void Grid::reset_costs()
{
for (auto &cost : this->costs) {
cost = 0;
}
}
-void grid_type::reset_dists()
+void Grid::reset_dists()
{
for (auto &dist : this->dists) {
dist = 0;
}
}
-bool grid_type::has_los() const
+bool Grid::has_los() const
{
return any_bits(this->info, CAVE_VIEW) || AngbandSystem::get_instance().is_phase_out();
}
class MonsterRaceInfo;
enum class TerrainCharacteristics;
-struct grid_type {
+class Grid {
public:
BIT_FLAGS info{}; /* Hack -- grid flags */
/*!
* @brief 指定したシンボルのマスかどうかを判定するための条件式コールバック
*/
-std::unordered_map<int, std::function<bool(grid_type *)>> tgt_pt_symbol_call_back = {
- { '<', [](grid_type *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STAIRS) && g_ptr->cave_has_flag(TerrainCharacteristics::LESS); } },
- { '>', [](grid_type *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STAIRS) && g_ptr->cave_has_flag(TerrainCharacteristics::MORE); } },
- { '+', [](grid_type *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::BLDG); } },
- { '0', [](grid_type *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('0'); } },
- { '!', [](grid_type *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('1'); } },
- { '"', [](grid_type *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('2'); } },
- { '#', [](grid_type *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('3'); } },
- { '$', [](grid_type *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('4'); } },
- { '%', [](grid_type *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('5'); } },
- { '&', [](grid_type *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('6'); } },
- { '\'', [](grid_type *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('7'); } },
- { '(', [](grid_type *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('8'); } },
- { ')', [](grid_type *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('9'); } },
+std::unordered_map<int, std::function<bool(Grid *)>> tgt_pt_symbol_call_back = {
+ { '<', [](Grid *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STAIRS) && g_ptr->cave_has_flag(TerrainCharacteristics::LESS); } },
+ { '>', [](Grid *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STAIRS) && g_ptr->cave_has_flag(TerrainCharacteristics::MORE); } },
+ { '+', [](Grid *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::BLDG); } },
+ { '0', [](Grid *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('0'); } },
+ { '!', [](Grid *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('1'); } },
+ { '"', [](Grid *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('2'); } },
+ { '#', [](Grid *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('3'); } },
+ { '$', [](Grid *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('4'); } },
+ { '%', [](Grid *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('5'); } },
+ { '&', [](Grid *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('6'); } },
+ { '\'', [](Grid *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('7'); } },
+ { '(', [](Grid *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('8'); } },
+ { ')', [](Grid *g_ptr) { return g_ptr->cave_has_flag(TerrainCharacteristics::STORE) && g_ptr->is_symbol('9'); } },
};
/*!
size_t n = 0; //<! シンボル配列の何番目か
char ch = '\0'; //<! 入力キー
char prev_ch = '\0'; //<! 前回入力キー
- std::function<bool(grid_type *)> callback{}; //<! 条件判定コールバック
+ std::function<bool(Grid *)> callback{}; //<! 条件判定コールバック
void move_to_symbol(PlayerType *player_ptr);
};
char out_val[MAX_NLEN + 80]{};
OBJECT_IDX floor_list[23]{};
ITEM_NUMBER floor_num = 0;
- grid_type *g_ptr;
+ Grid *g_ptr;
MonsterEntity *m_ptr;
OBJECT_IDX next_o_idx = 0;
FEAT_IDX feat = 0;
return false;
}
- grid_type *g_ptr;
+ Grid *g_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
if (g_ptr->m_idx) {
auto *m_ptr = &floor_ptr->m_list[g_ptr->m_idx];
bool flag; // 移動コマンド入力時、"interesting" な座標へ飛ぶかどうか
char query;
char info[80];
- grid_type *g_ptr;
+ Grid *g_ptr;
TERM_LEN wid, hgt;
int m; // "interesting" な座標たちのうち現在ターゲットしているもののインデックス
int distance; // カーソルの移動方向 (1,2,3,4,6,7,8,9)
{
POSITION *x = (POSITION *)(u);
POSITION *y = (POSITION *)(v);
- grid_type *ca_ptr = &player_ptr->current_floor_ptr->grid_array[y[a]][x[a]];
- grid_type *cb_ptr = &player_ptr->current_floor_ptr->grid_array[y[b]][x[b]];
+ Grid *ca_ptr = &player_ptr->current_floor_ptr->grid_array[y[a]][x[a]];
+ Grid *cb_ptr = &player_ptr->current_floor_ptr->grid_array[y[b]][x[b]];
MonsterEntity *ma_ptr = &player_ptr->current_floor_ptr->m_list[ca_ptr->m_idx];
MonsterEntity *mb_ptr = &player_ptr->current_floor_ptr->m_list[cb_ptr->m_idx];
MonsterRaceInfo *ap_ra_ptr, *ap_rb_ptr;
* @details
* Lookコマンドでカーソルを合わせた場合に合わせてミミックは考慮しない。
*/
-static const MonsterEntity *monster_on_floor_items(FloorType *floor_ptr, const grid_type *g_ptr)
+static const MonsterEntity *monster_on_floor_items(FloorType *floor_ptr, const Grid *g_ptr)
{
if (g_ptr->m_idx == 0) {
return nullptr;