v0.4.2a: fixed additional map bounds errors relating to blobs

This commit is contained in:
Evan Debenham 2016-09-10 23:28:37 -04:00
parent 184993936e
commit cb1f63890b
2 changed files with 42 additions and 42 deletions

View File

@ -149,45 +149,47 @@ public class Blob extends Actor {
for (int i=area.top-1; i <= area.bottom; i++) {
for (int j = area.left-1; j <= area.right; j++) {
cell = j + i*Dungeon.level.width();
if (!blocking[cell]) {
if (Dungeon.level.insideMap(cell)) {
if (!blocking[cell]) {
int count = 1;
int sum = cur[cell];
int count = 1;
int sum = cur[cell];
if (j > area.left && !blocking[cell-1]) {
sum += cur[cell-1];
count++;
}
if (j < area.right && !blocking[cell+1]) {
sum += cur[cell+1];
count++;
}
if (i > area.top && !blocking[cell-Dungeon.level.width()]) {
sum += cur[cell-Dungeon.level.width()];
count++;
}
if (i < area.bottom && !blocking[cell+Dungeon.level.width()]) {
sum += cur[cell+Dungeon.level.width()];
count++;
}
if (j > area.left && !blocking[cell-1]) {
sum += cur[cell-1];
count++;
}
if (j < area.right && !blocking[cell+1]) {
sum += cur[cell+1];
count++;
}
if (i > area.top && !blocking[cell-Dungeon.level.width()]) {
sum += cur[cell-Dungeon.level.width()];
count++;
}
if (i < area.bottom && !blocking[cell+Dungeon.level.width()]) {
sum += cur[cell+Dungeon.level.width()];
count++;
}
int value = sum >= count ? (sum / count) - 1 : 0;
off[cell] = value;
int value = sum >= count ? (sum / count) - 1 : 0;
off[cell] = value;
if (value > 0){
if (i < area.top)
area.top = i;
else if (i >= area.bottom)
area.bottom = i+1;
if (j < area.left)
area.left = j;
else if (j >= area.right)
area.right = j+1;
if (value > 0){
if (i < area.top)
area.top = i;
else if (i >= area.bottom)
area.bottom = i+1;
if (j < area.left)
area.left = j;
else if (j >= area.right)
area.right = j+1;
}
volume += value;
} else {
off[cell] = 0;
}
volume += value;
} else {
off[cell] = 0;
}
}
}

View File

@ -1001,12 +1001,10 @@ public abstract class Level implements Bundlable {
//returns true if the input is a valid tile within the level
public boolean insideMap( int tile ){
//outside map array
return !((tile < 0 || tile >= length()) ||
//top and bottom row
(tile < width() || tile >= length() - width()) ||
//top and bottom row and beyond
return !((tile < width || tile >= length - width) ||
//left and right column
(tile % width() == 0 || tile % width() == width()-1));
(tile % width == 0 || tile % width == width-1));
}
public Point cellToPoint( int cell ){