<ClCompile Include="..\..\src\object-activation\activation-resistance.c" />\r
<ClCompile Include="..\..\src\object-activation\activation-teleport.c" />\r
<ClCompile Include="..\..\src\object-activation\activation-util.c" />\r
+ <ClCompile Include="..\..\src\room\vault-builder.c" />\r
<ClCompile Include="..\..\src\specific-object\blade-turner.c" />\r
<ClCompile Include="..\..\src\specific-object\monster-ball.c" />\r
<ClCompile Include="..\..\src\object-use\read-execution.c" />\r
<ClInclude Include="..\..\src\object-activation\activation-resistance.h" />\r
<ClInclude Include="..\..\src\object-activation\activation-teleport.h" />\r
<ClInclude Include="..\..\src\object-activation\activation-util.h" />\r
+ <ClInclude Include="..\..\src\room\vault-builder.h" />\r
<ClInclude Include="..\..\src\specific-object\blade-turner.h" />\r
<ClInclude Include="..\..\src\specific-object\monster-ball.h" />\r
<ClInclude Include="..\..\src\object-use\read-execution.h" />\r
<ClCompile Include="..\..\src\floor\line-of-sight.c">
<Filter>floor</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\room\vault-builder.c">
+ <Filter>room</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\combat\shoot.h">
<ClInclude Include="..\..\src\floor\line-of-sight.h">
<Filter>floor</Filter>
</ClInclude>
+ <ClInclude Include="..\..\src\room\vault-builder.h">
+ <Filter>room</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\..\src\wall.bmp" />
room/space-finder.c room/space-finder.h \
room/pit-nest-kinds-table.c room/pit-nest-kinds-table.h \
room/treasure-deployment.c room/treasure-deployment.h \
+ room/vault-builder.c room/vault-builder.h \
\
save/floor-writer.c save/floor-writer.h \
save/info-writer.c save/info-writer.h \
return TRUE;
}
-/*
- * Grid based version of "creature_bold()"
- */
-static bool player_grid(player_type *player_ptr, grid_type *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(player_type *player_ptr, grid_type *g_ptr)
-{
- bool is_empty_grid = cave_have_flag_grid(g_ptr, FF_PLACE);
- is_empty_grid &= g_ptr->m_idx == 0;
- is_empty_grid &= !player_grid(player_ptr, g_ptr);
- return is_empty_grid;
-}
-
-/*!
- * @brief 特殊な部屋地形向けにモンスターを配置する / Place some sleeping monsters near the given location
- * @param player_ptr プレーヤーへの参照ポインタ
- * @param y1 モンスターを配置したいマスの中心Y座標
- * @param x1 モンスターを配置したいマスの中心X座標
- * @param num 配置したいモンスターの数
- * @return なし
- * @details
- * Only really called by some of the "vault" routines.
- */
-void vault_monsters(player_type *player_ptr, POSITION y1, POSITION x1, int num)
-{
- floor_type *floor_ptr = player_ptr->current_floor_ptr;
- for (int k = 0; k < num; k++) {
- for (int i = 0; i < 9; i++) {
- int d = 1;
- POSITION y, x;
- scatter(player_ptr, &y, &x, y1, x1, d, 0);
- grid_type *g_ptr;
- g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
- if (!is_cave_empty_grid(player_ptr, g_ptr))
- continue;
-
- floor_ptr->monster_level = floor_ptr->base_level + 2;
- (void)place_monster(player_ptr, y, x, (PM_ALLOW_SLEEP | PM_ALLOW_GROUP));
- floor_ptr->monster_level = floor_ptr->base_level;
- }
- }
-}
-
/*!
* @brief 指定された座標が地震や階段生成の対象となるマスかを返す。 / Determine if a given location may be "destroyed"
* @param player_ptr プレーヤーへの参照ポインタ
}
/*!
- * @brief 特殊な部屋向けに各種アイテムを配置する / Create up to "num" objects near the given coordinates
- * @param player_ptr プレーヤーへの参照ポインタ
- * @param y 配置したい中心マスのY座標
- * @param x 配置したい中心マスのX座標
- * @param num 配置したい数
- * @return なし
- * @details
- * Only really called by some of the "vault" routines.
- */
-void vault_objects(player_type *player_ptr, POSITION y, POSITION x, int num)
-{
- floor_type *floor_ptr = player_ptr->current_floor_ptr;
- for (; num > 0; --num) {
- int j = y, k = x;
- int dummy = 0;
- for (int i = 0; i < 11; ++i) {
- while (dummy < SAFE_MAX_ATTEMPTS) {
- j = rand_spread(y, 2);
- k = rand_spread(x, 3);
- dummy++;
- if (!in_bounds(floor_ptr, j, k))
- continue;
- break;
- }
-
- if (dummy >= SAFE_MAX_ATTEMPTS && cheat_room) {
- msg_print(_("警告!地下室のアイテムを配置できません!", "Warning! Could not place vault object!"));
- }
-
- grid_type *g_ptr;
- g_ptr = &floor_ptr->grid_array[j][k];
- if (!is_floor_grid(g_ptr) || g_ptr->o_idx)
- continue;
-
- if (randint0(100) < 75) {
- place_object(player_ptr, j, k, 0L);
- } else {
- place_gold(player_ptr, j, k);
- }
-
- break;
- }
- }
-}
-
-/*!
* @brief 指定のマスを床地形に変える / Set a square to be floor. (Includes range checking.)
* @param player_ptr プレーヤーへの参照ポインタ
* @param x 地形を変えたいマスのX座標
}
}
-/*!
- * @brief 特殊な部屋向けに各種アイテムを配置する(vault_trapのサブセット) / Place a trap with a given displacement of point
- * @param y トラップを配置したいマスの中心Y座標
- * @param x トラップを配置したいマスの中心X座標
- * @param yd Y方向の配置分散マス数
- * @param xd X方向の配置分散マス数
- * @return なし
- * @details
- * Only really called by some of the "vault" routines.
- */
-static void vault_trap_aux(player_type *player_ptr, POSITION y, POSITION x, POSITION yd, POSITION xd)
-{
- grid_type *g_ptr;
- floor_type *floor_ptr = player_ptr->current_floor_ptr;
- int y1 = y, x1 = x;
- int dummy = 0;
- for (int count = 0; count <= 5; count++) {
- while (dummy < SAFE_MAX_ATTEMPTS) {
- y1 = rand_spread(y, yd);
- x1 = rand_spread(x, xd);
- dummy++;
- if (!in_bounds(floor_ptr, y1, x1))
- continue;
- break;
- }
-
- if (dummy >= SAFE_MAX_ATTEMPTS && cheat_room) {
- msg_print(_("警告!地下室のトラップを配置できません!", "Warning! Could not place vault trap!"));
- }
-
- g_ptr = &floor_ptr->grid_array[y1][x1];
- if (!is_floor_grid(g_ptr) || g_ptr->o_idx || g_ptr->m_idx)
- continue;
-
- place_trap(player_ptr, y1, x1);
- break;
- }
-}
-
-/*!
- * todo rooms-normal からしか呼ばれていない、要調整
- * @brief 特殊な部屋向けに各種アイテムを配置する(メインルーチン) / Place some traps with a given displacement of given location
- * @param player_ptr プレーヤーへの参照ポインタ
- * @param y トラップを配置したいマスの中心Y座標
- * @param x トラップを配置したいマスの中心X座標
- * @param yd Y方向の配置分散マス数
- * @param xd X方向の配置分散マス数
- * @param num 配置したいトラップの数
- * @return なし
- * @details
- * Only really called by some of the "vault" routines.
- */
-void vault_traps(player_type *player_ptr, POSITION y, POSITION x, POSITION yd, POSITION xd, int num)
-{
- for (int i = 0; i < num; i++) {
- vault_trap_aux(player_ptr, y, x, yd, xd);
- }
-}
-
/*
* Standard "find me a location" function
*
void place_random_stairs(player_type *player_ptr, POSITION y, POSITION x);
int get_max_range(player_type *creature_ptr);
bool projectable(player_type *player_ptr, POSITION y1, POSITION x1, POSITION y2, POSITION x2);
-void vault_monsters(player_type *player_ptr, POSITION y1, POSITION x1, int num);
bool cave_valid_bold(floor_type *floor_ptr, POSITION y, POSITION x);
void cave_set_feat(player_type *player_ptr, POSITION y, POSITION x, FEAT_IDX feat);
void place_random_door(player_type *player_ptr, POSITION y, POSITION x, bool room);
void wipe_o_list(floor_type *floor_ptr);
bool get_is_floor(floor_type *floor_ptr, POSITION x, POSITION y);
FEAT_IDX conv_dungeon_feat(floor_type *floor_ptr, FEAT_IDX newfeat);
-void vault_objects(player_type *player_ptr, POSITION y, POSITION x, int num);
void set_floor(player_type *player_ptr, POSITION x, POSITION y);
void place_object(player_type *owner_ptr, POSITION y, POSITION x, BIT_FLAGS mode);
void place_gold(player_type *player_ptr, POSITION y, POSITION x);
void delete_monster(player_type *player_ptr, POSITION y, POSITION x);
void compact_objects(player_type *owner_ptr, int size);
-void vault_traps(player_type *player_ptr, POSITION y, POSITION x, POSITION yd, POSITION xd, int num);
void scatter(player_type *player_ptr, POSITION *yp, POSITION *xp, POSITION y, POSITION x, POSITION d, BIT_FLAGS mode);
#include "room/door-definition.h"
#include "room/rooms-builder.h"
#include "room/space-finder.h"
+#include "room/vault-builder.h"
#include "system/floor-type-definition.h"
/*!
--- /dev/null
+#include "room/vault-builder.h"
+#include "floor/cave.h"
+#include "floor/floor-generator-util.h"
+#include "floor/floor.h"
+#include "game-option/cheat-options.h"
+#include "grid/feature-flag-types.h"
+#include "grid/grid.h"
+#include "grid/trap.h"
+#include "monster-floor/monster-generator.h"
+#include "monster-floor/place-monster-types.h"
+#include "system/floor-type-definition.h"
+#include "view/display-messages.h"
+
+/*
+ * Grid based version of "creature_bold()"
+ */
+static bool player_grid(player_type *player_ptr, grid_type *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(player_type *player_ptr, grid_type *g_ptr)
+{
+ bool is_empty_grid = cave_have_flag_grid(g_ptr, FF_PLACE);
+ is_empty_grid &= g_ptr->m_idx == 0;
+ is_empty_grid &= !player_grid(player_ptr, g_ptr);
+ return is_empty_grid;
+}
+
+/*!
+ * @brief \93Á\8eê\82È\95\94\89®\92n\8c`\8cü\82¯\82É\83\82\83\93\83X\83^\81[\82ð\94z\92u\82·\82é / Place some sleeping monsters near the given location
+ * @param player_ptr \83v\83\8c\81[\83\84\81[\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @param y1 \83\82\83\93\83X\83^\81[\82ð\94z\92u\82µ\82½\82¢\83}\83X\82Ì\92\86\90SY\8dÀ\95W
+ * @param x1 \83\82\83\93\83X\83^\81[\82ð\94z\92u\82µ\82½\82¢\83}\83X\82Ì\92\86\90SX\8dÀ\95W
+ * @param num \94z\92u\82µ\82½\82¢\83\82\83\93\83X\83^\81[\82Ì\90\94
+ * @return \82È\82µ
+ * @details
+ * Only really called by some of the "vault" routines.
+ */
+void vault_monsters(player_type *player_ptr, POSITION y1, POSITION x1, int num)
+{
+ floor_type *floor_ptr = player_ptr->current_floor_ptr;
+ for (int k = 0; k < num; k++) {
+ for (int i = 0; i < 9; i++) {
+ int d = 1;
+ POSITION y, x;
+ scatter(player_ptr, &y, &x, y1, x1, d, 0);
+ grid_type *g_ptr;
+ g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
+ if (!is_cave_empty_grid(player_ptr, g_ptr))
+ continue;
+
+ floor_ptr->monster_level = floor_ptr->base_level + 2;
+ (void)place_monster(player_ptr, y, x, PM_ALLOW_SLEEP | PM_ALLOW_GROUP);
+ floor_ptr->monster_level = floor_ptr->base_level;
+ }
+ }
+}
+
+/*!
+ * @brief \93Á\8eê\82È\95\94\89®\8cü\82¯\82É\8ae\8eí\83A\83C\83e\83\80\82ð\94z\92u\82·\82é / Create up to "num" objects near the given coordinates
+ * @param player_ptr \83v\83\8c\81[\83\84\81[\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @param y \94z\92u\82µ\82½\82¢\92\86\90S\83}\83X\82ÌY\8dÀ\95W
+ * @param x \94z\92u\82µ\82½\82¢\92\86\90S\83}\83X\82ÌX\8dÀ\95W
+ * @param num \94z\92u\82µ\82½\82¢\90\94
+ * @return \82È\82µ
+ * @details
+ * Only really called by some of the "vault" routines.
+ */
+void vault_objects(player_type *player_ptr, POSITION y, POSITION x, int num)
+{
+ floor_type *floor_ptr = player_ptr->current_floor_ptr;
+ for (; num > 0; --num) {
+ int j = y, k = x;
+ int dummy = 0;
+ for (int i = 0; i < 11; ++i) {
+ while (dummy < SAFE_MAX_ATTEMPTS) {
+ j = rand_spread(y, 2);
+ k = rand_spread(x, 3);
+ dummy++;
+ if (!in_bounds(floor_ptr, j, k))
+ continue;
+ break;
+ }
+
+ if (dummy >= SAFE_MAX_ATTEMPTS && cheat_room) {
+ msg_print(_("\8cx\8d\90\81I\92n\89º\8eº\82Ì\83A\83C\83e\83\80\82ð\94z\92u\82Å\82«\82Ü\82¹\82ñ\81I", "Warning! Could not place vault object!"));
+ }
+
+ grid_type *g_ptr;
+ g_ptr = &floor_ptr->grid_array[j][k];
+ if (!is_floor_grid(g_ptr) || g_ptr->o_idx)
+ continue;
+
+ if (randint0(100) < 75) {
+ place_object(player_ptr, j, k, 0L);
+ } else {
+ place_gold(player_ptr, j, k);
+ }
+
+ break;
+ }
+ }
+}
+
+/*!
+ * @brief \93Á\8eê\82È\95\94\89®\8cü\82¯\82É\8ae\8eí\83A\83C\83e\83\80\82ð\94z\92u\82·\82é(vault_trap\82Ì\83T\83u\83Z\83b\83g) / Place a trap with a given displacement of point
+ * @param y \83g\83\89\83b\83v\82ð\94z\92u\82µ\82½\82¢\83}\83X\82Ì\92\86\90SY\8dÀ\95W
+ * @param x \83g\83\89\83b\83v\82ð\94z\92u\82µ\82½\82¢\83}\83X\82Ì\92\86\90SX\8dÀ\95W
+ * @param yd Y\95û\8cü\82Ì\94z\92u\95ª\8eU\83}\83X\90\94
+ * @param xd X\95û\8cü\82Ì\94z\92u\95ª\8eU\83}\83X\90\94
+ * @return \82È\82µ
+ * @details
+ * Only really called by some of the "vault" routines.
+ */
+static void vault_trap_aux(player_type *player_ptr, POSITION y, POSITION x, POSITION yd, POSITION xd)
+{
+ grid_type *g_ptr;
+ floor_type *floor_ptr = player_ptr->current_floor_ptr;
+ int y1 = y, x1 = x;
+ int dummy = 0;
+ for (int count = 0; count <= 5; count++) {
+ while (dummy < SAFE_MAX_ATTEMPTS) {
+ y1 = rand_spread(y, yd);
+ x1 = rand_spread(x, xd);
+ dummy++;
+ if (!in_bounds(floor_ptr, y1, x1))
+ continue;
+ break;
+ }
+
+ if (dummy >= SAFE_MAX_ATTEMPTS && cheat_room) {
+ msg_print(_("\8cx\8d\90\81I\92n\89º\8eº\82Ì\83g\83\89\83b\83v\82ð\94z\92u\82Å\82«\82Ü\82¹\82ñ\81I", "Warning! Could not place vault trap!"));
+ }
+
+ g_ptr = &floor_ptr->grid_array[y1][x1];
+ if (!is_floor_grid(g_ptr) || g_ptr->o_idx || g_ptr->m_idx)
+ continue;
+
+ place_trap(player_ptr, y1, x1);
+ break;
+ }
+}
+
+/*!
+ * todo rooms-normal \82©\82ç\82µ\82©\8cÄ\82Î\82ê\82Ä\82¢\82È\82¢\81A\97v\92²\90®
+ * @brief \93Á\8eê\82È\95\94\89®\8cü\82¯\82É\8ae\8eí\83A\83C\83e\83\80\82ð\94z\92u\82·\82é(\83\81\83C\83\93\83\8b\81[\83`\83\93) / Place some traps with a given displacement of given location
+ * @param player_ptr \83v\83\8c\81[\83\84\81[\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @param y \83g\83\89\83b\83v\82ð\94z\92u\82µ\82½\82¢\83}\83X\82Ì\92\86\90SY\8dÀ\95W
+ * @param x \83g\83\89\83b\83v\82ð\94z\92u\82µ\82½\82¢\83}\83X\82Ì\92\86\90SX\8dÀ\95W
+ * @param yd Y\95û\8cü\82Ì\94z\92u\95ª\8eU\83}\83X\90\94
+ * @param xd X\95û\8cü\82Ì\94z\92u\95ª\8eU\83}\83X\90\94
+ * @param num \94z\92u\82µ\82½\82¢\83g\83\89\83b\83v\82Ì\90\94
+ * @return \82È\82µ
+ * @details
+ * Only really called by some of the "vault" routines.
+ */
+void vault_traps(player_type *player_ptr, POSITION y, POSITION x, POSITION yd, POSITION xd, int num)
+{
+ for (int i = 0; i < num; i++)
+ vault_trap_aux(player_ptr, y, x, yd, xd);
+}
--- /dev/null
+#pragma once
+
+#include "system/angband.h"
+
+void vault_monsters(player_type *player_ptr, POSITION y1, POSITION x1, int num);
+void vault_objects(player_type *player_ptr, POSITION y, POSITION x, int num);
+void vault_traps(player_type *player_ptr, POSITION y, POSITION x, POSITION yd, POSITION xd, int num);