金鉱などの狭い階に配置を試みるとき、配置に失敗し部屋数が0個となることが頻発していた。
その後モンスターやアイテムの配置がいつまでも出来ず無限ループになっていた模様。
generate_rooms関数をbool型にし、部屋数0のときはFALSEを返して、生成失敗と扱うようにした。
ダンジョン生成失敗時は新たにダンジョンを生成しようと試みなおすのでこれで問題はないはず。
/*
* Build each type of room in turn until we cannot build any more.
*/
- generate_rooms();
+ if (!generate_rooms()) return FALSE;
/* Make a hole in the dungeon roof sometimes at level 1 */
{
if (cheat_room)
#ifdef JP
-msg_print("¾®¤µ¤Ê¥Õ¥í¥¢");
+ msg_print("¾®¤µ¤Ê¥Õ¥í¥¢");
#else
- msg_print("A 'small' dungeon level.");
+ msg_print("A 'small' dungeon level.");
#endif
-
if (d_info[dungeon_type].flags1 & DF1_SMALLEST)
{
level_height = 1;
*
* Generate rooms in dungeon. Build bigger rooms at first.
*/
-void generate_rooms(void)
+bool generate_rooms(void)
{
int i;
bool remain;
/* Assume normal cave */
room_info_type *room_info_ptr = room_info_normal;
-
/*
* Initialize probability list.
*/
if (!remain) break;
}
+ if (rooms_built < 1) return FALSE;
+
if (cheat_room)
{
#ifdef JP
msg_format("Number of Rooms: %d", rooms_built);
#endif
}
+
+ return TRUE;
}
#endif /* ALLOW_CAVERNS_AND_LAKES */
extern bool room_build(int typ);
-extern void generate_rooms(void);
+extern bool generate_rooms(void);
extern void build_maze_vault(int x0, int y0, int xsize, int ysize, bool is_vault);