diff --git a/src/micropolisj/engine/Animate.java b/src/micropolisj/engine/Animate.java index df8ce91..f9f3c99 100644 --- a/src/micropolisj/engine/Animate.java +++ b/src/micropolisj/engine/Animate.java @@ -38,8 +38,8 @@ class Animate static int [] AniTabC = { IND1, 0, IND2, IND4, 0, 0, IND6, IND8 }; static int [] AniTabD = { IND1, 0, IND3, IND5, 0, 0, IND7, IND9 }; - static final int ASCBIT = (CONDBIT | BURNBIT); - static final int REGBIT = (CONDBIT | BURNBIT); + static final int ASCBIT = (CONDBIT); + static final int REGBIT = (CONDBIT); } } diff --git a/src/micropolisj/engine/MapGenerator.java b/src/micropolisj/engine/MapGenerator.java index 6fbe1c4..65645ab 100644 --- a/src/micropolisj/engine/MapGenerator.java +++ b/src/micropolisj/engine/MapGenerator.java @@ -479,7 +479,7 @@ public class MapGenerator if ((map[mapY][mapX] & LOMASK) == DIRT) { - map[mapY][mapX] = WOODS | BULLBIT | BURNBIT; + map[mapY][mapX] = WOODS | BULLBIT; } } } @@ -532,7 +532,7 @@ public class MapGenerator temp -= 8; } } - map[mapY][mapX] = (char)(temp | BULLBIT | BURNBIT); + map[mapY][mapX] = (char)(temp | BULLBIT); } else { diff --git a/src/micropolisj/engine/MapScanner.java b/src/micropolisj/engine/MapScanner.java index f2f5e6c..aac6819 100644 --- a/src/micropolisj/engine/MapScanner.java +++ b/src/micropolisj/engine/MapScanner.java @@ -509,7 +509,7 @@ class MapScanner { for (int x = xpos-1; x <= xpos+1; x++) { - city.setTile(x, y, (char)(base | BURNBIT | CONDBIT | (x == xpos && y == ypos ? BULLBIT : 0))); + city.setTile(x, y, (char)(base | CONDBIT | (x == xpos && y == ypos ? BULLBIT : 0))); base++; } } @@ -631,13 +631,13 @@ class MapScanner { if ((city.map[ypos-1][xpos+1] & LOMASK) == RADAR) { city.setTile(xpos+1,ypos-1, (char) - (RADAR_ANIM + CONDBIT + BURNBIT) + (RADAR_ANIM + CONDBIT) ); } } else { - city.setTile(xpos+1,ypos-1,(char)(RADAR + CONDBIT + BURNBIT)); + city.setTile(xpos+1,ypos-1,(char)(RADAR + CONDBIT)); } if (powerOn) { @@ -759,7 +759,7 @@ class MapScanner { //not rubble, radiactive, on fire or flooded city.setTile(xx,yy,(char) - (zoneBase+CONDBIT+BURNBIT) + (zoneBase+CONDBIT) ); } } @@ -1080,7 +1080,7 @@ class MapScanner assert houseNumber >= 0 && houseNumber < 12; assert city.testBounds(xx, yy); - city.setTile(xx, yy, (char)((HOUSE + houseNumber) | BULLBIT | BURNBIT | CONDBIT)); + city.setTile(xx, yy, (char)((HOUSE + houseNumber) | BULLBIT | CONDBIT)); } } @@ -1207,7 +1207,7 @@ class MapScanner { // downgrade from full-size zone to 8 little houses - city.setTile(xpos, ypos, (char)(FREEZ | BULLBIT | BURNBIT | CONDBIT)); + city.setTile(xpos, ypos, (char)(FREEZ | BULLBIT | CONDBIT)); for (int x = xpos-1; x <= xpos+1; x++) { for (int y = ypos-1; y <= ypos+1; y++) @@ -1218,7 +1218,7 @@ class MapScanner { // pick a random small house int houseNumber = value * 3 + PRNG.nextInt(3); - city.setTile(x, y, (char) ((HOUSE + houseNumber) | BULLBIT | BURNBIT | CONDBIT)); + city.setTile(x, y, (char) ((HOUSE + houseNumber) | BULLBIT | CONDBIT)); } } } @@ -1243,7 +1243,7 @@ class MapScanner int loc = city.map[y][x] & LOMASK; if (loc >= LHTHR && loc <= HHTHR) { //little house - city.setTile(x, y, (char)((Brdr[z] + FREEZ - 4) | BULLBIT | BURNBIT | CONDBIT)); + city.setTile(x, y, (char)((Brdr[z] + FREEZ - 4) | BULLBIT | CONDBIT)); return; } } @@ -1342,7 +1342,7 @@ class MapScanner int tile = city.getTile(xpos+dx[z], ypos+dy[z]) & LOMASK; if (tile >= COALBASE && tile < COALBASE + 4*4) { city.setTile(xpos + dx[z], ypos + dy[z], - (char) (SmTb[z] | CONDBIT | PWRBIT | BURNBIT) + (char) (SmTb[z] | CONDBIT | PWRBIT) ); } } @@ -1374,7 +1374,7 @@ class MapScanner for (int x = 0; x < 4; x++, zoneBase++) { city.setTile(xpos - 1 + x, ypos - 1 + y, - (char) (zoneBase | BURNBIT | CONDBIT | (x == 1 && y == 1 ? (PWRBIT) : 0))); + (char) (zoneBase | CONDBIT | (x == 1 && y == 1 ? (PWRBIT) : 0))); } } } diff --git a/src/micropolisj/engine/Micropolis.java b/src/micropolisj/engine/Micropolis.java index a90194c..e3eba46 100644 --- a/src/micropolisj/engine/Micropolis.java +++ b/src/micropolisj/engine/Micropolis.java @@ -1965,7 +1965,7 @@ public class Micropolis for (int y = 0; y < DEFAULT_HEIGHT; y++) { int z = dis.readShort(); - z &= ~(1024 | 2048); // clear ZONEBIT,ANIMBIT on import + z &= ~(1024 | 2048 | 8192); // clear ZONEBIT,ANIMBIT,BURNBIT on import map[y][x] = (char) z; } } @@ -1979,6 +1979,9 @@ public class Micropolis for (int y = 0; y < DEFAULT_HEIGHT; y++) { int z = map[y][x]; + if (isCombustible(z)) { + z |= 8192; //synthesize BURNBIT on export + } if (isAnimated(z)) { z |= 2048; //synthesize ANIMBIT on export } diff --git a/src/micropolisj/engine/RoadLikeTool.java b/src/micropolisj/engine/RoadLikeTool.java index 2c33ee5..18b04c2 100644 --- a/src/micropolisj/engine/RoadLikeTool.java +++ b/src/micropolisj/engine/RoadLikeTool.java @@ -201,19 +201,19 @@ class RoadLikeTool extends ToolStroke return false; case LHPOWER: // rail on power - eff.setTile(0, 0, (char) (RAILVPOWERH | CONDBIT | BURNBIT | BULLBIT)); + eff.setTile(0, 0, (char) (RAILVPOWERH | CONDBIT | BULLBIT)); break; case LVPOWER: // rail on power - eff.setTile(0, 0, (char) (RAILHPOWERV | CONDBIT | BURNBIT | BULLBIT)); + eff.setTile(0, 0, (char) (RAILHPOWERV | CONDBIT | BULLBIT)); break; case TileConstants.ROADS: // rail on road (case 1) - eff.setTile(0, 0, (char) (VRAILROAD | BURNBIT | BULLBIT)); + eff.setTile(0, 0, (char) (VRAILROAD | BULLBIT)); break; case ROADS2: // rail on road (case 2) - eff.setTile(0, 0, (char) (HRAILROAD | BURNBIT | BULLBIT)); + eff.setTile(0, 0, (char) (HRAILROAD | BULLBIT)); break; default: @@ -228,7 +228,7 @@ class RoadLikeTool extends ToolStroke } //rail on dirt - eff.setTile(0, 0, (char) (LHRAIL | BULLBIT | BURNBIT)); + eff.setTile(0, 0, (char) (LHRAIL | BULLBIT)); break; } @@ -304,19 +304,19 @@ class RoadLikeTool extends ToolStroke return false; case LHPOWER: //road on power - eff.setTile(0, 0, (char) (VROADPOWER | CONDBIT | BURNBIT | BULLBIT)); + eff.setTile(0, 0, (char) (VROADPOWER | CONDBIT | BULLBIT)); break; case LVPOWER: //road on power #2 - eff.setTile(0, 0, (char) (HROADPOWER | CONDBIT | BURNBIT | BULLBIT)); + eff.setTile(0, 0, (char) (HROADPOWER | CONDBIT | BULLBIT)); break; case LHRAIL: //road on rail - eff.setTile(0, 0, (char) (HRAILROAD | BURNBIT | BULLBIT)); + eff.setTile(0, 0, (char) (HRAILROAD | BULLBIT)); break; case LVRAIL: //road on rail #2 - eff.setTile(0, 0, (char) (VRAILROAD | BURNBIT | BULLBIT)); + eff.setTile(0, 0, (char) (VRAILROAD | BULLBIT)); break; default: @@ -332,7 +332,7 @@ class RoadLikeTool extends ToolStroke // road on dirt; // just build a plain road, fixZone will fix it. - eff.setTile(0, 0, (char) (TileConstants.ROADS | BULLBIT | BURNBIT)); + eff.setTile(0, 0, (char) (TileConstants.ROADS | BULLBIT)); break; } @@ -422,19 +422,19 @@ class RoadLikeTool extends ToolStroke return false; case TileConstants.ROADS: // wire on E/W road - eff.setTile(0, 0, (char) (HROADPOWER | CONDBIT | BURNBIT | BULLBIT)); + eff.setTile(0, 0, (char) (HROADPOWER | CONDBIT | BULLBIT)); break; case ROADS2: // wire on N/S road - eff.setTile(0, 0, (char) (VROADPOWER | CONDBIT | BURNBIT | BULLBIT)); + eff.setTile(0, 0, (char) (VROADPOWER | CONDBIT | BULLBIT)); break; case LHRAIL: // wire on E/W railroad tracks - eff.setTile(0, 0, (char) (RAILHPOWERV | CONDBIT | BURNBIT | BULLBIT)); + eff.setTile(0, 0, (char) (RAILHPOWERV | CONDBIT | BULLBIT)); break; case LVRAIL: // wire on N/S railroad tracks - eff.setTile(0, 0, (char) (RAILVPOWERH | CONDBIT | BURNBIT | BULLBIT)); + eff.setTile(0, 0, (char) (RAILVPOWERH | CONDBIT | BULLBIT)); break; default: @@ -449,7 +449,7 @@ class RoadLikeTool extends ToolStroke } //wire on dirt - eff.setTile(0, 0, (char) (LHPOWER | CONDBIT | BULLBIT | BURNBIT)); + eff.setTile(0, 0, (char) (LHPOWER | CONDBIT | BULLBIT)); break; } diff --git a/src/micropolisj/engine/TileConstants.java b/src/micropolisj/engine/TileConstants.java index fd301c0..2327d70 100644 --- a/src/micropolisj/engine/TileConstants.java +++ b/src/micropolisj/engine/TileConstants.java @@ -210,7 +210,7 @@ public class TileConstants // public static final char PWRBIT = 32768; // bit 15 ... currently powered public static final char CONDBIT = 16384; // bit 14 ... can conduct power - public static final char BURNBIT = 8192; // bit 13 ... is combustible + // bit 13 ... unused public static final char BULLBIT = 4096; // bit 12 ... is bulldozable // bit 11 ... unused // bit 10 ... unused @@ -300,7 +300,8 @@ public class TileConstants public static boolean isCombustible(int tile) { - return (tile & BURNBIT) != 0; + TileSpec spec = Tiles.get(tile & LOMASK); + return spec != null && spec.canBurn; } public static boolean isFire(int tile) diff --git a/src/micropolisj/engine/TileSpec.java b/src/micropolisj/engine/TileSpec.java index d8dc464..c19cda6 100644 --- a/src/micropolisj/engine/TileSpec.java +++ b/src/micropolisj/engine/TileSpec.java @@ -6,6 +6,7 @@ public class TileSpec { int tileNumber; TileSpec animNext; + boolean canBurn; boolean zone; Map attributes; @@ -69,6 +70,7 @@ public class TileSpec } } + this.canBurn = getBooleanAttribute("noburn"); this.zone = getBooleanAttribute("zone"); } diff --git a/src/micropolisj/engine/ToolStroke.java b/src/micropolisj/engine/ToolStroke.java index 3ad453e..c02f4a4 100644 --- a/src/micropolisj/engine/ToolStroke.java +++ b/src/micropolisj/engine/ToolStroke.java @@ -182,7 +182,7 @@ public class ToolStroke for (int columnNum = 0; columnNum < width; columnNum++) { eff.setTile(columnNum, rowNum, (char) ( - tileBase | BURNBIT | CONDBIT + tileBase | CONDBIT )); tileBase++; } @@ -240,9 +240,9 @@ public class ToolStroke int z = inPreview ? 0 : city.PRNG.nextInt(5); int tile; if (z < 4) { - tile = (WOODS2 + z) | BURNBIT | BULLBIT; + tile = (WOODS2 + z) | BULLBIT; } else { - tile = FOUNTAIN | BURNBIT | BULLBIT; + tile = FOUNTAIN | BULLBIT; } eff.spend(cost); @@ -340,7 +340,7 @@ public class ToolStroke } } - eff.setTile(0, 0, (RoadTable[adjTile] | BULLBIT | BURNBIT)); + eff.setTile(0, 0, (RoadTable[adjTile] | BULLBIT)); } //endif on a road tile else if (tile >= LHRAIL && tile <= LVRAIL10) @@ -400,7 +400,7 @@ public class ToolStroke } } - eff.setTile(0, 0, (RailTable[adjTile] | BULLBIT | BURNBIT)); + eff.setTile(0, 0, (RailTable[adjTile] | BULLBIT)); } //end if on a rail tile else if (tile >= LHPOWER && tile <= LVPOWER10) @@ -460,7 +460,7 @@ public class ToolStroke } } - eff.setTile(0, 0, (WireTable[adjTile] | BULLBIT | BURNBIT | CONDBIT)); + eff.setTile(0, 0, (WireTable[adjTile] | BULLBIT | CONDBIT)); } //end if on a rail tile return;