OSDN Git Service

[Fix] #38923 メッセージの未定義変数参照バグ修正。 / Fix reference of undefined value.
[hengband/hengband.git] / src / rooms-vault.c
index 446e52b..94a4299 100644 (file)
@@ -1,8 +1,10 @@
 #include "angband.h"\r
+#include "generate.h"\r
 #include "grid.h"\r
 #include "rooms.h"\r
-#include "generate.h"\r
+#include "store.h"\r
 #include "trap.h"\r
+#include "monster.h"\r
 \r
 /*\r
 * This function creates a random vault that looks like a collection of bubbles.\r
 * Note: If two centers are on the same point then this algorithm will create a\r
 *       blank bubble filled with walls. - This is prevented from happening.\r
 */\r
-static void build_bubble_vault(int x0, int y0, int xsize, int ysize)\r
+static void build_bubble_vault(POSITION x0, POSITION y0, POSITION xsize, POSITION ysize)\r
 {\r
 #define BUBBLENUM 10           /* number of bubbles */\r
 \r
        /* array of center points of bubbles */\r
        coord center[BUBBLENUM];\r
 \r
-       int i, j, x, y;\r
+       int i, j;\r
+       POSITION x = 0, y = 0;\r
        u16b min1, min2, temp;\r
        bool done;\r
 \r
        /* Offset from center to top left hand corner */\r
-       int xhsize = xsize / 2;\r
-       int yhsize = ysize / 2;\r
+       POSITION xhsize = xsize / 2;\r
+       POSITION yhsize = ysize / 2;\r
 \r
        msg_print_wizard(CHEAT_DUNGEON, _("泡型ランダムVaultを生成しました。", "Room Vault."));\r
 \r
@@ -55,8 +58,8 @@ static void build_bubble_vault(int x0, int y0, int xsize, int ysize)
                        }\r
                }\r
 \r
-               center[i].x = (byte_hack)x;\r
-               center[i].y = (byte_hack)y;\r
+               center[i].x = x;\r
+               center[i].y = y;\r
        }\r
 \r
 \r
@@ -89,7 +92,6 @@ static void build_bubble_vault(int x0, int y0, int xsize, int ysize)
                {\r
                        /* Get distances to two closest centers */\r
 \r
-                       /* initialize */\r
                        min1 = (u16b)distance(x, y, center[0].x, center[0].y);\r
                        min2 = (u16b)distance(x, y, center[1].x, center[1].y);\r
 \r
@@ -147,9 +149,10 @@ static void build_bubble_vault(int x0, int y0, int xsize, int ysize)
 }\r
 \r
 /* Create a random vault that looks like a collection of overlapping rooms */\r
-static void build_room_vault(int x0, int y0, int xsize, int ysize)\r
+static void build_room_vault(POSITION x0, POSITION y0, POSITION xsize, POSITION ysize)\r
 {\r
-       int i, x1, x2, y1, y2, xhsize, yhsize;\r
+       POSITION x1, x2, y1, y2, xhsize, yhsize;\r
+       int i;\r
 \r
        /* get offset from center */\r
        xhsize = xsize / 2;\r
@@ -160,11 +163,11 @@ static void build_room_vault(int x0, int y0, int xsize, int ysize)
        /* fill area so don't get problems with arena levels */\r
        for (x1 = 0; x1 < xsize; x1++)\r
        {\r
-               int x = x0 - xhsize + x1;\r
+               POSITION x = x0 - xhsize + x1;\r
 \r
                for (y1 = 0; y1 < ysize; y1++)\r
                {\r
-                       int y = y0 - yhsize + y1;\r
+                       POSITION y = y0 - yhsize + y1;\r
 \r
                        place_extra_bold(y, x);\r
                        cave[y][x].info &= (~CAVE_ICKY);\r
@@ -195,10 +198,11 @@ static void build_room_vault(int x0, int y0, int xsize, int ysize)
 \r
 \r
 /* Create a random vault out of a fractal cave */\r
-static void build_cave_vault(int x0, int y0, int xsiz, int ysiz)\r
+static void build_cave_vault(POSITION x0, POSITION y0, POSITION xsiz, POSITION ysiz)\r
 {\r
-       int grd, roug, cutoff, xhsize, yhsize, xsize, ysize, x, y;\r
+       int grd, roug, cutoff;\r
        bool done, light, room;\r
+       POSITION xhsize, yhsize, xsize, ysize, x, y;\r
 \r
        /* round to make sizes even */\r
        xhsize = xsiz / 2;\r
@@ -300,11 +304,11 @@ static void coord_trans(POSITION *x, POSITION *y, POSITION xoffset, POSITION yof
 * @param transno 変換ID\r
 * @return なし\r
 */\r
-static void build_vault(POSITION yval, POSITION xval, POSITION ymax, POSITION xmax, cptr data,\r
+static void build_vault(POSITION yval, POSITION xval, POSITION ymax, POSITION xmax, concptr data,\r
        POSITION xoffset, POSITION yoffset, int transno)\r
 {\r
        POSITION dx, dy, x, y, i, j;\r
-       cptr t;\r
+       concptr t;\r
        cave_type *c_ptr;\r
 \r
        /* Place dungeon features and objects */\r
@@ -335,8 +339,6 @@ static void build_vault(POSITION yval, POSITION xval, POSITION ymax, POSITION xm
 \r
                        /* Hack -- skip "non-grids" */\r
                        if (*t == ' ') continue;\r
-\r
-                       /* Access the grid */\r
                        c_ptr = &cave[y][x];\r
 \r
                        /* Lay down a floor */\r
@@ -390,6 +392,16 @@ static void build_vault(POSITION yval, POSITION xval, POSITION ymax, POSITION xm
                                }\r
                                break;\r
 \r
+                               /* Treasure */\r
+                       case '[':\r
+                               place_object(y, x, 0L);\r
+                               break;\r
+\r
+                               /* Tree */\r
+                       case ':':\r
+                               c_ptr->feat = feat_tree;\r
+                               break;\r
+\r
                                /* Secret doors */\r
                        case '+':\r
                                place_secret_door(y, x, DOOR_DEFAULT);\r
@@ -469,6 +481,38 @@ static void build_vault(POSITION yval, POSITION xval, POSITION ymax, POSITION xm
                                set_cave_feat(y, x, feat_deep_lava);\r
                                break;\r
 \r
+                       case 'f':\r
+                               set_cave_feat(y, x, feat_shallow_acid_puddle);\r
+                               break;\r
+\r
+                       case 'F':\r
+                               set_cave_feat(y, x, feat_deep_acid_puddle);\r
+                               break;\r
+\r
+                       case 'g':\r
+                               set_cave_feat(y, x, feat_shallow_poisonous_puddle);\r
+                               break;\r
+\r
+                       case 'G':\r
+                               set_cave_feat(y, x, feat_deep_poisonous_puddle);\r
+                               break;\r
+\r
+                       case 'h':\r
+                               set_cave_feat(y, x, feat_cold_zone);\r
+                               break;\r
+\r
+                       case 'H':\r
+                               set_cave_feat(y, x, feat_heavy_cold_zone);\r
+                               break;\r
+\r
+                       case 'i':\r
+                               set_cave_feat(y, x, feat_electrical_zone);\r
+                               break;\r
+\r
+                       case 'I':\r
+                               set_cave_feat(y, x, feat_heavy_electrical_zone);\r
+                               break;\r
+\r
                        }\r
                }\r
        }\r
@@ -644,7 +688,6 @@ bool build_type7(void)
        v_ptr = &v_info[2];\r
 #endif\r
 \r
-       /* Message */\r
        msg_format_wizard(CHEAT_DUNGEON, _("小型Vault(%s)を生成しました。", "Lesser vault (%s)."), v_name + v_ptr->name);\r
 \r
        /* Hack -- Build the vault */\r
@@ -665,7 +708,7 @@ bool build_type8(void)
        POSITION xval, yval;\r
        POSITION x, y;\r
        int transno;\r
-       int xoffset, yoffset;\r
+       POSITION xoffset, yoffset;\r
 \r
        /* Pick a greater vault */\r
        for (dummy = 0; dummy < SAFE_MAX_ATTEMPTS; dummy++)\r
@@ -746,12 +789,12 @@ bool build_type8(void)
 * This is made by two concentric "crypts" with perpendicular\r
 * walls creating the cross-hairs.\r
 */\r
-static void build_target_vault(int x0, int y0, int xsize, int ysize)\r
+static void build_target_vault(POSITION x0, POSITION y0, POSITION xsize, POSITION ysize)\r
 {\r
-       int rad, x, y;\r
+       POSITION rad, x, y;\r
 \r
        /* Make a random metric */\r
-       int h1, h2, h3, h4;\r
+       POSITION h1, h2, h3, h4;\r
        h1 = randint1(32) - 16;\r
        h2 = randint1(16);\r
        h3 = randint1(32);\r
@@ -870,12 +913,13 @@ static void build_target_vault(int x0, int y0, int xsize, int ysize)
 *\r
 * Miniture rooms are then scattered across the vault.\r
 */\r
-static void build_elemental_vault(int x0, int y0, int xsiz, int ysiz)\r
+static void build_elemental_vault(POSITION x0, POSITION y0, POSITION xsiz, POSITION ysiz)\r
 {\r
        int grd, roug;\r
        int c1, c2, c3;\r
        bool done = FALSE;\r
-       int xsize, ysize, xhsize, yhsize, x, y, i;\r
+       POSITION xsize, ysize, xhsize, yhsize, x, y;\r
+       int i;\r
        int type;\r
 \r
        msg_print_wizard(CHEAT_DUNGEON, _("精霊界ランダムVaultを生成しました。", "Elemental Vault"));\r
@@ -962,10 +1006,10 @@ static void build_elemental_vault(int x0, int y0, int xsiz, int ysiz)
 * The vault has two entrances on opposite sides to guarantee\r
 * a way to get in even if the vault abuts a side of the dungeon.\r
 */\r
-static void build_mini_c_vault(int x0, int y0, int xsize, int ysize)\r
+static void build_mini_c_vault(POSITION x0, POSITION y0, POSITION xsize, POSITION ysize)\r
 {\r
-       int dy, dx;\r
-       int y1, x1, y2, x2, y, x, total;\r
+       POSITION dy, dx;\r
+       POSITION y1, x1, y2, x2, y, x, total;\r
        int m, n, num_vertices;\r
        int *visited;\r
 \r
@@ -1085,11 +1129,11 @@ static void build_mini_c_vault(int x0, int y0, int xsize, int ysize)
 *\r
 *This makes a vault that looks like a castle/ city in the dungeon.\r
 */\r
-static void build_castle_vault(int x0, int y0, int xsize, int ysize)\r
+static void build_castle_vault(POSITION x0, POSITION y0, POSITION xsize, POSITION ysize)\r
 {\r
-       int dy, dx;\r
-       int y1, x1, y2, x2;\r
-       int y, x;\r
+       POSITION dy, dx;\r
+       POSITION y1, x1, y2, x2;\r
+       POSITION y, x;\r
 \r
        /* Pick a random room size */\r
        dy = ysize / 2 - 1;\r
@@ -1130,7 +1174,6 @@ bool build_type10(void)
 {\r
        POSITION y0, x0, xsize, ysize, vtype;\r
 \r
-       /* Get size */\r
        /* big enough to look good, small enough to be fairly common. */\r
        xsize = randint1(22) + 22;\r
        ysize = randint1(11) + 11;\r
@@ -1177,7 +1220,7 @@ bool build_type10(void)
 \r
 \r
 /*!\r
-* @brief タイプ16の部屋…v_info.txtより固定特殊部屋を生成する / Type 16 -- fixed special room (see "v_info.txt")\r
+* @brief タイプ17の部屋…v_info.txtより固定特殊部屋を生成する / Type 17 -- fixed special room (see "v_info.txt")\r
 * @return なし\r
 */\r
 bool build_type17(void)\r
@@ -1195,8 +1238,8 @@ bool build_type17(void)
                /* Access a random vault record */\r
                v_ptr = &v_info[randint0(max_v_idx)];\r
 \r
-               /* Accept the first lesser vault */\r
-               if (v_ptr->typ == 16) break;\r
+               /* Accept the special fix room. */\r
+               if (v_ptr->typ == 17) break;\r
        }\r
 \r
        /* No lesser vault found */\r
@@ -1247,7 +1290,6 @@ bool build_type17(void)
        v_ptr = &v_info[2];\r
 #endif\r
 \r
-       /* Message */\r
        msg_format_wizard(CHEAT_DUNGEON, _("特殊固定部屋(%s)を生成しました。", "Special Fix room (%s)."), v_name + v_ptr->name);\r
 \r
        /* Hack -- Build the vault */\r