From: Deskull Date: Wed, 3 Oct 2018 22:49:04 +0000 (+0900) Subject: [Feature] #38635 v_infoを参照する通常固定部屋の生成処理を実装中。 X-Git-Url: http://git.osdn.net/view?p=hengband%2Fhengband.git;a=commitdiff_plain;h=ba656ad829d98bb92eefbec8ff86a914e56d8669 [Feature] #38635 v_infoを参照する通常固定部屋の生成処理を実装中。 Implementing fixed room from v_info.txt. --- diff --git a/lib/edit/misc.txt b/lib/edit/misc.txt index c3410424a..0f85ecf36 100644 --- a/lib/edit/misc.txt +++ b/lib/edit/misc.txt @@ -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 diff --git a/lib/edit/v_info.txt b/lib/edit/v_info.txt index 52ff3fe74..828314224 100644 --- a/lib/edit/v_info.txt +++ b/lib/edit/v_info.txt @@ -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: %%% diff --git a/src/rooms-vault.c b/src/rooms-vault.c index b8d3513fd..b02ef55d7 100644 --- a/src/rooms-vault.c +++ b/src/rooms-vault.c @@ -1158,3 +1158,85 @@ bool build_type10(void) return TRUE; } + +/*! +* @brief ƒ^ƒCƒv16‚Ì•”‰®cv_info.txt‚æ‚èŒÅ’è“ÁŽê•”‰®‚𐶐¬‚·‚é / Type 16 -- fixed special room (see "v_info.txt") +* @return ‚È‚µ +*/ +bool build_type17(void) +{ + vault_type *v_ptr = NULL; + int dummy; + POSITION x, y; + POSITION xval, yval; + POSITION xoffset, yoffset; + int transno; + + /* Pick a lesser vault */ + for (dummy = 0; dummy < SAFE_MAX_ATTEMPTS; dummy++) + { + /* Access a random vault record */ + v_ptr = &v_info[randint0(max_v_idx)]; + + /* Accept the first lesser vault */ + if (v_ptr->typ == 16) break; + } + + /* No lesser vault found */ + if (dummy >= SAFE_MAX_ATTEMPTS) + { + msg_print_wizard(CHEAT_DUNGEON, _("ŒÅ’è“ÁŽê•”‰®‚ð”z’u‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½B", "Could not place fixed special room.")); + return FALSE; + } + + /* pick type of transformation (0-7) */ + transno = randint0(8); + + /* calculate offsets */ + x = v_ptr->wid; + y = v_ptr->hgt; + + /* Some huge vault cannot be ratated to fit in the dungeon */ + if (x + 2 > cur_hgt - 2) + { + /* Forbid 90 or 270 degree ratation */ + transno &= ~1; + } + + coord_trans(&x, &y, 0, 0, transno); + + if (x < 0) + { + xoffset = -x - 1; + } + else + { + xoffset = 0; + } + + if (y < 0) + { + yoffset = -y - 1; + } + else + { + yoffset = 0; + } + + /* Find and reserve some space in the dungeon. Get center of room. */ + if (!find_space(&yval, &xval, abs(y), abs(x))) return FALSE; + +#ifdef FORCE_V_IDX + v_ptr = &v_info[2]; +#endif + + /* Message */ + msg_format_wizard(CHEAT_DUNGEON, _("¬Œ^Vault(%s)‚𐶐¬‚µ‚Ü‚µ‚½B", "Lesser vault (%s)."), v_name + v_ptr->name); + + /* Hack -- Build the vault */ + build_vault(yval, xval, v_ptr->hgt, v_ptr->wid, + v_text + v_ptr->text, xoffset, yoffset, transno); + + return TRUE; +} + diff --git a/src/rooms-vault.h b/src/rooms-vault.h index 9676c1151..adf74fefc 100644 --- a/src/rooms-vault.h +++ b/src/rooms-vault.h @@ -1,4 +1,5 @@ extern bool build_type7(void); extern bool build_type8(void); extern bool build_type10(void); +extern bool build_type17(void); diff --git a/src/rooms.c b/src/rooms.c index e82eb9c97..d694091e6 100644 --- a/src/rooms.c +++ b/src/rooms.c @@ -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 */ diff --git a/src/rooms.h b/src/rooms.h index 51f8209ae..97d3b4361 100644 --- a/src/rooms.h +++ b/src/rooms.h @@ -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最大数 */ /*