1 #include "grid/object-placer.h"
2 #include "floor/cave.h"
3 #include "floor/floor-object.h"
5 #include "system/artifact-type-definition.h"
6 #include "system/floor-type-definition.h"
7 #include "system/grid-type-definition.h"
8 #include "system/item-entity.h"
9 #include "system/player-type-definition.h"
10 #include "world/world-object.h"
13 * @brief フロアの指定位置に生成階に応じた財宝オブジェクトの生成を行う。
14 * Places a treasure (Gold or Gems) at given location
15 * @param player_ptr プレイヤーへの参照ポインタ
16 * @param y 配置したいフロアのY座標
17 * @param x 配置したいフロアのX座標
18 * @return 生成に成功したらTRUEを返す。
20 * The location must be a legal, clean, floor grid.
22 void place_gold(PlayerType *player_ptr, POSITION y, POSITION x)
24 auto *floor_ptr = player_ptr->current_floor_ptr;
25 auto *g_ptr = &floor_ptr->grid_array[y][x];
26 if (!in_bounds(floor_ptr, y, x)) {
29 if (!cave_drop_bold(floor_ptr, y, x)) {
32 if (!g_ptr->o_idx_list.empty()) {
40 if (!make_gold(player_ptr, q_ptr)) {
44 OBJECT_IDX o_idx = o_pop(floor_ptr);
50 o_ptr = &floor_ptr->o_list[o_idx];
51 o_ptr->copy_from(q_ptr);
55 g_ptr->o_idx_list.add(floor_ptr, o_idx);
57 note_spot(player_ptr, y, x);
58 lite_spot(player_ptr, y, x);
62 * @brief フロアの指定位置に生成階に応じたベースアイテムの生成を行う。
63 * Attempt to place an object (normal or good/great) at the given location.
64 * @param player_ptr プレイヤーへの参照ポインタ
65 * @param y 配置したいフロアのY座標
66 * @param x 配置したいフロアのX座標
67 * @param mode オプションフラグ
68 * @return 生成に成功したらTRUEを返す。
70 * This routine plays nasty games to generate the "special artifacts".\n
71 * This routine uses "object_level" for the "generation level".\n
72 * This routine requires a clean floor grid destination.\n
74 void place_object(PlayerType *player_ptr, POSITION y, POSITION x, BIT_FLAGS mode)
76 auto *floor_ptr = player_ptr->current_floor_ptr;
77 auto *g_ptr = &floor_ptr->grid_array[y][x];
80 if (!in_bounds(floor_ptr, y, x) || !cave_drop_bold(floor_ptr, y, x) || !g_ptr->o_idx_list.empty()) {
86 if (!make_object(player_ptr, q_ptr, mode)) {
90 OBJECT_IDX o_idx = o_pop(floor_ptr);
92 if (q_ptr->is_fixed_artifact()) {
93 q_ptr->get_fixed_artifact().is_generated = false;
100 o_ptr = &floor_ptr->o_list[o_idx];
101 o_ptr->copy_from(q_ptr);
105 g_ptr->o_idx_list.add(floor_ptr, o_idx);
107 note_spot(player_ptr, y, x);
108 lite_spot(player_ptr, y, x);