Browse Source

🐛 WillThemeRoomFit will some times fail to place rooms

Broken in 1.0.0 a1b7b8522a
pull/2364/head
Anders Jenbo 5 years ago
parent
commit
64d1e110af
  1. 16
      Source/gendung.cpp

16
Source/gendung.cpp

@ -96,9 +96,11 @@ bool WillThemeRoomFit(int floor, int x, int y, int minSize, int maxSize, int *wi
int xCount = 0;
int yCount = 0;
// BUGFIX: change '&&' to '||' (fixed)
if (x > DMAXX - maxSize || y > DMAXY - maxSize) {
return false;
if (x + maxSize > DMAXX && y + maxSize > DMAXY) {
return false; // Original broken bounds check, avoids lower right corner
}
if (x + minSize > DMAXX || y + minSize > DMAXY) {
return false; // Skip definit OOB cases
}
if (!SkipThemeRoom(x, y)) {
return false;
@ -108,8 +110,8 @@ bool WillThemeRoomFit(int floor, int x, int y, int minSize, int maxSize, int *wi
int yArray[20] = {};
for (int ii = 0; ii < maxSize; ii++) {
if (xFlag) {
for (int xx = x; xx < x + maxSize; xx++) {
if (xFlag && y + ii < DMAXY) {
for (int xx = x; xx < x + maxSize && xx < DMAXX; xx++) {
if (dungeon[xx][y + ii] != floor) {
if (xx >= minSize) {
break;
@ -124,8 +126,8 @@ bool WillThemeRoomFit(int floor, int x, int y, int minSize, int maxSize, int *wi
xCount = 0;
}
}
if (yFlag) {
for (int yy = y; yy < y + maxSize; yy++) {
if (yFlag && x + ii < DMAXX) {
for (int yy = y; yy < y + maxSize && yy < DMAXY; yy++) {
if (dungeon[x + ii][yy] != floor) {
if (yy >= minSize) {
break;

Loading…
Cancel
Save