v3.3.4: fixed solid blobs not interacting properly with openSpace
This commit is contained in:
@@ -53,6 +53,7 @@ public class Web extends Blob {
|
||||
|
||||
l.solid[cell] = off[cell] > 0 || (Terrain.flags[l.map[cell]] & Terrain.SOLID) != 0;
|
||||
l.flamable[cell] = off[cell] > 0 || (Terrain.flags[l.map[cell]] & Terrain.FLAMABLE) != 0;
|
||||
l.updateOpenSpace(cell);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -62,6 +63,7 @@ public class Web extends Blob {
|
||||
super.seed(level, cell, amount);
|
||||
level.solid[cell] = cur[cell] > 0 || (Terrain.flags[level.map[cell]] & Terrain.SOLID) != 0;
|
||||
level.flamable[cell] = cur[cell] > 0 || (Terrain.flags[level.map[cell]] & Terrain.FLAMABLE) != 0;
|
||||
level.updateOpenSpace(cell);
|
||||
}
|
||||
|
||||
//affects characters as they step on it. See Level.OccupyCell and Level.PressCell
|
||||
@@ -83,6 +85,7 @@ public class Web extends Blob {
|
||||
Level l = Dungeon.level;
|
||||
l.solid[cell] = cur[cell] > 0 || (Terrain.flags[l.map[cell]] & Terrain.SOLID) != 0;
|
||||
l.flamable[cell] = cur[cell] > 0 || (Terrain.flags[l.map[cell]] & Terrain.FLAMABLE) != 0;
|
||||
l.updateOpenSpace(cell);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -97,6 +100,7 @@ public class Web extends Blob {
|
||||
for (int i=0; i < l.length(); i++) {
|
||||
l.solid[i] = l.solid[i] || cur[i] > 0;
|
||||
l.flamable[i] = l.flamable[i] || cur[i] > 0;
|
||||
//openSpace will be updated as part of building flap maps
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,6 +259,7 @@ public class WallOfLight extends TargetedClericSpell {
|
||||
l.solid[cell] = off[cell] > 0 || (Terrain.flags[l.map[cell]] & Terrain.SOLID) != 0;
|
||||
l.passable[cell] = off[cell] == 0 && (Terrain.flags[l.map[cell]] & Terrain.PASSABLE) != 0;
|
||||
l.avoid[cell] = off[cell] == 0 && (Terrain.flags[l.map[cell]] & Terrain.AVOID) != 0;
|
||||
l.updateOpenSpace(cell);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -269,6 +270,7 @@ public class WallOfLight extends TargetedClericSpell {
|
||||
level.solid[cell] = cur[cell] > 0 || (Terrain.flags[level.map[cell]] & Terrain.SOLID) != 0;
|
||||
level.passable[cell] = cur[cell] == 0 && (Terrain.flags[level.map[cell]] & Terrain.PASSABLE) != 0;
|
||||
level.avoid[cell] = cur[cell] == 0 && (Terrain.flags[level.map[cell]] & Terrain.AVOID) != 0;
|
||||
level.updateOpenSpace(cell);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -279,6 +281,7 @@ public class WallOfLight extends TargetedClericSpell {
|
||||
l.solid[cell] = cur[cell] > 0 || (Terrain.flags[l.map[cell]] & Terrain.SOLID) != 0;
|
||||
l.passable[cell] = cur[cell] == 0 && (Terrain.flags[l.map[cell]] & Terrain.PASSABLE) != 0;
|
||||
l.avoid[cell] = cur[cell] == 0 && (Terrain.flags[l.map[cell]] & Terrain.AVOID) != 0;
|
||||
l.updateOpenSpace(cell);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -294,6 +297,7 @@ public class WallOfLight extends TargetedClericSpell {
|
||||
l.solid[i] = l.solid[i] || cur[i] > 0;
|
||||
l.passable[i] = l.passable[i] && cur[i] == 0;
|
||||
l.avoid[i] = l.avoid[i] && cur[i] == 0;
|
||||
//openSpace will be updated as part of building flap maps
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -500,6 +500,7 @@ public class SkeletonKey extends Artifact {
|
||||
l.solid[cell] = off[cell] > 0 || (Terrain.flags[l.map[cell]] & Terrain.SOLID) != 0;
|
||||
l.passable[cell] = off[cell] == 0 && (Terrain.flags[l.map[cell]] & Terrain.PASSABLE) != 0;
|
||||
l.avoid[cell] = off[cell] == 0 && (Terrain.flags[l.map[cell]] & Terrain.AVOID) != 0;
|
||||
l.updateOpenSpace(cell);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -515,6 +516,7 @@ public class SkeletonKey extends Artifact {
|
||||
level.solid[cell] = cur[cell] > 0 || (Terrain.flags[level.map[cell]] & Terrain.SOLID) != 0;
|
||||
level.passable[cell] = cur[cell] == 0 && (Terrain.flags[level.map[cell]] & Terrain.PASSABLE) != 0;
|
||||
level.avoid[cell] = cur[cell] == 0 && (Terrain.flags[level.map[cell]] & Terrain.AVOID) != 0;
|
||||
level.updateOpenSpace(cell);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -526,6 +528,7 @@ public class SkeletonKey extends Artifact {
|
||||
l.solid[cell] = cur[cell] > 0 || (Terrain.flags[l.map[cell]] & Terrain.SOLID) != 0;
|
||||
l.passable[cell] = cur[cell] == 0 && (Terrain.flags[l.map[cell]] & Terrain.PASSABLE) != 0;
|
||||
l.avoid[cell] = cur[cell] == 0 && (Terrain.flags[l.map[cell]] & Terrain.AVOID) != 0;
|
||||
l.updateOpenSpace(cell);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -542,6 +545,7 @@ public class SkeletonKey extends Artifact {
|
||||
l.solid[i] = l.solid[i] || cur[i] > 0;
|
||||
l.passable[i] = l.passable[i] && cur[i] == 0;
|
||||
l.avoid[i] = l.avoid[i] && cur[i] == 0;
|
||||
//openSpace will be updated as part of building flap maps
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -878,6 +878,25 @@ public abstract class Level implements Bundlable {
|
||||
|
||||
}
|
||||
|
||||
//updates open space both on the cell itself and adjacent cells
|
||||
public void updateOpenSpace(int cell){
|
||||
for (int i : PathFinder.NEIGHBOURS9) {
|
||||
if (solid[cell+i]){
|
||||
openSpace[cell+i] = false;
|
||||
} else {
|
||||
for (int j = 1; j < PathFinder.CIRCLE8.length; j += 2){
|
||||
if (solid[cell+i+PathFinder.CIRCLE8[j]]) {
|
||||
openSpace[cell+i] = false;
|
||||
} else if (!solid[cell+i+PathFinder.CIRCLE8[(j+1)%8]]
|
||||
&& !solid[cell+i+PathFinder.CIRCLE8[(j+2)%8]]){
|
||||
openSpace[cell+i] = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void destroy( int pos ) {
|
||||
//if raw tile type is flammable or empty
|
||||
int terr = map[pos];
|
||||
|
||||
Reference in New Issue
Block a user