static public float MakeRectUntil(ref Rectangle rect, ref AreaMap new_map, ref AreaMapType template, int max_fails) { int tries = 0; int fails = 0; float fail_rate = 0f; Sizes r_size = Sizes.NULL; Point r_sizep = Point.Zero; while (fails < max_fails) { tries++; r_size = GetRndRmSize(ref template, template.currRoomTypeIndex); template.currRoomSize = r_size; r_sizep = new Point(Globals.sizeRanges[(int)r_size], Globals.sizeRanges[(int)r_size + 1]); MakeRect(ref rect, ref new_map, ref template, ref r_sizep); if (!new_map.ChkRectForAllFlagged(ref new_map, ref rect, MSFlag.BL, MSFlagIndex.BL_ST) || !new_map.ChkRectForAllFlagged(ref new_map, ref rect, MSFlag.MAKE_OK, MSFlagIndex.CAN_MAKE)) { Globals.roomFail = true; } else { Globals.roomFail = false; } if (Globals.roomFail) { fails++; } else { break; } } fail_rate = (float)tries / (float)fails; return(fail_rate); }