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.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.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);
|
super.seed(level, cell, amount);
|
||||||
level.solid[cell] = cur[cell] > 0 || (Terrain.flags[level.map[cell]] & Terrain.SOLID) != 0;
|
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.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
|
//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;
|
Level l = Dungeon.level;
|
||||||
l.solid[cell] = cur[cell] > 0 || (Terrain.flags[l.map[cell]] & Terrain.SOLID) != 0;
|
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.flamable[cell] = cur[cell] > 0 || (Terrain.flags[l.map[cell]] & Terrain.FLAMABLE) != 0;
|
||||||
|
l.updateOpenSpace(cell);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -97,6 +100,7 @@ public class Web extends Blob {
|
|||||||
for (int i=0; i < l.length(); i++) {
|
for (int i=0; i < l.length(); i++) {
|
||||||
l.solid[i] = l.solid[i] || cur[i] > 0;
|
l.solid[i] = l.solid[i] || cur[i] > 0;
|
||||||
l.flamable[i] = l.flamable[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.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.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.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.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.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.avoid[cell] = cur[cell] == 0 && (Terrain.flags[level.map[cell]] & Terrain.AVOID) != 0;
|
||||||
|
level.updateOpenSpace(cell);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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.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.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.avoid[cell] = cur[cell] == 0 && (Terrain.flags[l.map[cell]] & Terrain.AVOID) != 0;
|
||||||
|
l.updateOpenSpace(cell);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -294,6 +297,7 @@ public class WallOfLight extends TargetedClericSpell {
|
|||||||
l.solid[i] = l.solid[i] || cur[i] > 0;
|
l.solid[i] = l.solid[i] || cur[i] > 0;
|
||||||
l.passable[i] = l.passable[i] && cur[i] == 0;
|
l.passable[i] = l.passable[i] && cur[i] == 0;
|
||||||
l.avoid[i] = l.avoid[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.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.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.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.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.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.avoid[cell] = cur[cell] == 0 && (Terrain.flags[level.map[cell]] & Terrain.AVOID) != 0;
|
||||||
|
level.updateOpenSpace(cell);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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.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.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.avoid[cell] = cur[cell] == 0 && (Terrain.flags[l.map[cell]] & Terrain.AVOID) != 0;
|
||||||
|
l.updateOpenSpace(cell);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -542,6 +545,7 @@ public class SkeletonKey extends Artifact {
|
|||||||
l.solid[i] = l.solid[i] || cur[i] > 0;
|
l.solid[i] = l.solid[i] || cur[i] > 0;
|
||||||
l.passable[i] = l.passable[i] && cur[i] == 0;
|
l.passable[i] = l.passable[i] && cur[i] == 0;
|
||||||
l.avoid[i] = l.avoid[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 ) {
|
public void destroy( int pos ) {
|
||||||
//if raw tile type is flammable or empty
|
//if raw tile type is flammable or empty
|
||||||
int terr = map[pos];
|
int terr = map[pos];
|
||||||
|
|||||||
Reference in New Issue
Block a user