diff --git a/Source/levels/gendung.cpp b/Source/levels/gendung.cpp index afad6feea..e7f5c53a4 100644 --- a/Source/levels/gendung.cpp +++ b/Source/levels/gendung.cpp @@ -102,58 +102,32 @@ std::optional GetSizeForThemeRoom(int floor, Point origin, int minSize, in return {}; } - bool yFlag = true; - bool xFlag = true; - int xCount = 0; - int yCount = 0; + int maxWidth = std::min(maxSize, DMAXX - origin.x); + int maxHeight = std::min(maxSize, DMAXY - origin.y); - int xArray[20] = {}; int yArray[20] = {}; - - for (int ii = 0; ii < maxSize; ii++) { - if (xFlag && origin.y + ii < DMAXY) { - for (int xx = origin.x; xx < origin.x + maxSize && xx < DMAXX; xx++) { - if (dungeon[xx][origin.y + ii] != floor) { - if (xx >= /* origin.x + */ minSize) { - break; - } - xFlag = false; - } else { - xCount++; - } - } - if (xFlag) { - xArray[ii] = xCount; - xCount = 0; - } - } - if (yFlag && origin.x + ii < DMAXX) { - for (int yy = origin.y; yy < origin.y + maxSize && yy < DMAXY; yy++) { - if (dungeon[origin.x + ii][yy] != floor) { - if (yy >= /* origin.y + */ minSize) { - break; - } - yFlag = false; - } else { - yCount++; - } - } - if (yFlag) { - yArray[ii] = yCount; - yCount = 0; + for (int x = 0; x < maxWidth; x++) { + for (int y = origin.y; y < origin.y + maxHeight; y++) { + if (dungeon[origin.x + x][y] != floor) { + if (yArray[x] < minSize && x < minSize) + return {}; + break; } - } - } - for (int ii = 0; ii < minSize; ii++) { - if (xArray[ii] < minSize || yArray[ii] < minSize) { - return {}; + yArray[x]++; } } - for (int ii = 0; ii < minSize; ii++) { - if (xArray[ii] < minSize || yArray[ii] < minSize) { - return {}; + int xArray[20] = {}; + for (int y = 0; y < maxHeight; y++) { + for (int x = origin.x; x < origin.x + maxWidth; x++) { + if (dungeon[x][origin.y + y] != floor) { + if (xArray[y] < minSize && y < minSize) + return {}; + break; + } + + xArray[y]++; } }