OSDN Git Service

[Feature] #38635 v_infoを参照する通常固定部屋の生成処理を実装中。
authorDeskull <deskull@users.sourceforge.jp>
Wed, 3 Oct 2018 22:49:04 +0000 (07:49 +0900)
committerDeskull <deskull@users.sourceforge.jp>
Wed, 3 Oct 2018 22:49:04 +0000 (07:49 +0900)
Implementing fixed room from v_info.txt.

lib/edit/misc.txt
lib/edit/v_info.txt
src/rooms-vault.c
src/rooms-vault.h
src/rooms.c
src/rooms.h

index c341042..0f85ecf 100644 (file)
@@ -19,7 +19,7 @@ M:R:1111
 M:K:672
 
 # Maximum number of vaults in v_info.txt
-M:V:129
+M:V:136
 
 # Maximum number of terrain features in f_info.txt
 M:F:255
index 52ff3fe..8283142 100644 (file)
@@ -3040,3 +3040,74 @@ D:%.#9,,#.#,,9#.%
 D:%.#####.#####.%
 D:%.............%
 D:%%%%%%%%%%%%%%%
+
+N:129:Fixed room
+D:%%%%%%%
+D:%.....%
+D:%.'''.%
+D:%.'.'.%
+D:%.'''.%
+D:%.....%
+D:%%%%%%%
+
+N:130:Fixed room
+D:%%%%%%%
+D:%.....%
+D:%.'''.%
+D:%.'.'.%
+D:%.'''.%
+D:%.....%
+D:%%%%%%%
+
+N:131:Fixed room
+D:%%%%%%%
+D:%.....%
+D:%.'''.%
+D:%.'.'.%
+D:%.'''.%
+D:%.....%
+D:%%%%%%%
+
+N:132:Fixed room
+D:   %%%
+D:  %%.%%
+D: %%...%%
+D:%%.....%%
+D:%.......%
+D:%%.....%%
+D: %%...%%
+D:  %%.%%
+D:   %%%
+
+N:133:Fixed room
+D:   %%%
+D:  %%.%%
+D: %%...%%
+D:%%.....%%
+D:%.......%
+D:%%.....%%
+D: %%...%%
+D:  %%.%%
+D:   %%%
+
+N:134:Fixed room
+D:   %%%
+D:  %%.%%
+D: %%...%%
+D:%%.....%%
+D:%.......%
+D:%%.....%%
+D: %%...%%
+D:  %%.%%
+D:   %%%
+
+N:135:Fixed room
+D:   %%%
+D:  %%.%%
+D: %%...%%
+D:%%.....%%
+D:%.......%
+D:%%.....%%
+D: %%...%%
+D:  %%.%%
+D:   %%%
index b8d3513..b02ef55 100644 (file)
@@ -1158,3 +1158,85 @@ bool build_type10(void)
        return TRUE;\r
 }\r
 \r
+\r
+/*!\r
+* @brief \83^\83C\83v16\82Ì\95\94\89®\81cv_info.txt\82æ\82è\8cÅ\92è\93Á\8eê\95\94\89®\82ð\90\90¬\82·\82é / Type 16 -- fixed special room (see "v_info.txt")\r
+* @return \82È\82µ\r
+*/\r
+bool build_type17(void)\r
+{\r
+       vault_type *v_ptr = NULL;\r
+       int dummy;\r
+       POSITION x, y;\r
+       POSITION xval, yval;\r
+       POSITION xoffset, yoffset;\r
+       int transno;\r
+\r
+       /* Pick a lesser vault */\r
+       for (dummy = 0; dummy < SAFE_MAX_ATTEMPTS; dummy++)\r
+       {\r
+               /* 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
+       }\r
+\r
+       /* No lesser vault found */\r
+       if (dummy >= SAFE_MAX_ATTEMPTS)\r
+       {\r
+               msg_print_wizard(CHEAT_DUNGEON, _("\8cÅ\92è\93Á\8eê\95\94\89®\82ð\94z\92u\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B", "Could not place fixed special room."));\r
+               return FALSE;\r
+       }\r
+\r
+       /* pick type of transformation (0-7) */\r
+       transno = randint0(8);\r
+\r
+       /* calculate offsets */\r
+       x = v_ptr->wid;\r
+       y = v_ptr->hgt;\r
+\r
+       /* Some huge vault cannot be ratated to fit in the dungeon */\r
+       if (x + 2 > cur_hgt - 2)\r
+       {\r
+               /* Forbid 90 or 270 degree ratation */\r
+               transno &= ~1;\r
+       }\r
+\r
+       coord_trans(&x, &y, 0, 0, transno);\r
+\r
+       if (x < 0)\r
+       {\r
+               xoffset = -x - 1;\r
+       }\r
+       else\r
+       {\r
+               xoffset = 0;\r
+       }\r
+\r
+       if (y < 0)\r
+       {\r
+               yoffset = -y - 1;\r
+       }\r
+       else\r
+       {\r
+               yoffset = 0;\r
+       }\r
+\r
+       /* Find and reserve some space in the dungeon.  Get center of room. */\r
+       if (!find_space(&yval, &xval, abs(y), abs(x))) return FALSE;\r
+\r
+#ifdef FORCE_V_IDX\r
+       v_ptr = &v_info[2];\r
+#endif\r
+\r
+       /* Message */\r
+       msg_format_wizard(CHEAT_DUNGEON, _("\8f¬\8c^Vault(%s)\82ð\90\90¬\82µ\82Ü\82µ\82½\81B", "Lesser vault (%s)."), v_name + v_ptr->name);\r
+\r
+       /* Hack -- Build the vault */\r
+       build_vault(yval, xval, v_ptr->hgt, v_ptr->wid,\r
+               v_text + v_ptr->text, xoffset, yoffset, transno);\r
+\r
+       return TRUE;\r
+}\r
+\r
index 9676c11..adf74fe 100644 (file)
@@ -1,4 +1,5 @@
 extern bool build_type7(void);\r
 extern bool build_type8(void);\r
 extern bool build_type10(void);\r
+extern bool build_type17(void);\r
 \r
index e82eb9c..d694091 100644 (file)
@@ -89,6 +89,7 @@ static room_info_type room_info_normal[ROOM_T_MAX] =
        {{  0,  0,  1,  1,  1,  2,  3,  4,  5,  6,  8}, 20}, /*TRAP     */
        {{  0,  0,  0,  0,  1,  1,  1,  2,  2,  2,  2}, 40}, /*GLASS    */
        {{  1,  1,  1,  1,  1,  1,  1,  2,  2,  3,  3},  1}, /*ARCADE   */
+       {{ 20, 40, 60, 80,100,100,100,100,100,100,100},  1}, /*FIX   */
 };
 
 
@@ -109,6 +110,7 @@ static byte room_build_order[ROOM_T_MAX] = {
        ROOM_T_OVERLAP,
        ROOM_T_CROSS,
        ROOM_T_FRACAVE,
+       ROOM_T_FIXED,
        ROOM_T_NORMAL,
 };
 
@@ -2072,6 +2074,7 @@ static bool room_build(int typ)
        case ROOM_T_TRAP:          return build_type14();
        case ROOM_T_GLASS:         return build_type15();
        case ROOM_T_ARCADE:        return build_type16();
+       case ROOM_T_FIXED:        return build_type17();
        }
 
        /* Paranoia */
index 51f8209..97d3b43 100644 (file)
@@ -39,8 +39,9 @@
 #define ROOM_T_TRAP          13         /*!<部屋型ID:トラップ部屋 / Piranha/Armageddon trap room */
 #define ROOM_T_GLASS         14         /*!<部屋型ID:ガラス部屋 / Glass room */
 #define ROOM_T_ARCADE        15  /*!<部屋型ID:商店 / Arcade */
+#define ROOM_T_FIXED         16  /*!<部屋型ID:固定部屋 / Fixed room */
 
-#define ROOM_T_MAX 16 /*!<部屋型ID最大数 */
+#define ROOM_T_MAX 17 /*!<部屋型ID最大数 */
 
 
 /*