if (currentHex.contains(Terrain.WOODS) && currentHex.levelOf(Terrain.FIRE) == 2 && game.getOptions().booleanOption("woods_burn_down")) { burnDownWoods(currentCoords); }
    private void resolveFire() {        Board board = game.getBoard();        int width = board.width;        int height = board.height;        int windDirection = game.getWindDirection();        // Get the position map of all entities in the game.        Hashtable positionMap = game.getPositionMap();        // Build vector to send for updated buildings at once.        Vector burningBldgs = new Vector();        // If we're in L3 rules, process smoke FIRST, before any fires spread or smoke is produced.        if (game.getOptions().booleanOption("maxtech_fire")) {            resolveSmoke();        }        // Cycle through all buildings, checking for fire.        // ASSUMPTION: buildings don't lose 2 CF on the turn a fire starts.        // ASSUMPTION: multi-hex buildings lose 2 CF max, regardless of # fires        Enumeration buildings = game.board.getBuildings();        while ( buildings.hasMoreElements() ) {            Building bldg = (Building) buildings.nextElement();            if ( bldg.isBurning() ) {                int cf = bldg.getCurrentCF() - 2;                bldg.setCurrentCF( cf );                // Does the building burned down?                if ( cf == 0 ) {                    phaseReport.append( bldg.getName() )                        .append( " has burned to the ground!\n" );                    this.collapseBuilding( bldg, positionMap );                }                // If it doesn't collapse under its load, mark it for update.                else if ( !checkForCollapse(bldg, positionMap) ) {                    bldg.setPhaseCF( cf );                    burningBldgs.addElement( bldg );                }            }        }        debugTime("resolve fire 1", true);        // Cycle through all hexes, checking for fire.        for (int currentXCoord = 0; currentXCoord < width; currentXCoord++ ) {            for (int currentYCoord = 0; currentYCoord < height;                 currentYCoord++) {                Coords currentCoords = new Coords(currentXCoord,                                                  currentYCoord);                Hex currentHex = board.getHex(currentXCoord, currentYCoord);                boolean infernoBurning = board.burnInferno( currentCoords );                // If the woods has been cleared, or the building                // has collapsed put non-inferno fires out.                if ( currentHex.contains(Terrain.FIRE) && !infernoBurning &&                     !(currentHex.contains(Terrain.WOODS)) &&                     !(currentHex.contains(Terrain.BUILDING)) ) {                    removeFire(currentXCoord, currentYCoord, currentHex);                }                // Was the fire started on a previous turn?                else if (currentHex.levelOf(Terrain.FIRE) == 2)                {                    if ( infernoBurning ) {                        phaseReport.append( "Inferno fire at " );                    } else {                        phaseReport.append( "Fire at " );                    }                    phaseReport.append( currentCoords.getBoardNum() )                        .append( " is burning brightly.\n" );                    spreadFire(currentXCoord, currentYCoord, windDirection);                }  // End the Else If Hex was on fire previously            }  // end the loop through Y coordinates        }  // end the loop through X coordinates        debugTime("resolve fire 1 end, begin resolve fire 2", true);        //  Loop a second time, to set all fires to level 2 before next turn, and add smoke.        for (int currentXCoord = 0; currentXCoord < width; currentXCoord++ ) {            for (int currentYCoord = 0; currentYCoord < height; currentYCoord++) {                Coords currentCoords = new Coords(currentXCoord, currentYCoord);                Hex currentHex = board.getHex(currentXCoord,currentYCoord);                // if the fire in the hex was started this turn                if (currentHex.levelOf(Terrain.FIRE) == 1) {                    currentHex.removeTerrain(Terrain.FIRE);                    currentHex.addTerrain(new Terrain(Terrain.FIRE, 2));                    sendChangedHex(currentCoords);                    phaseReport.append( "Fire at " )                        .append( currentCoords.getBoardNum() )                        .append( " was started this round.\n" );                    // If the hex contains a building, set it on fire.                    Building bldg = game.board.getBuildingAt( currentCoords );                    if ( bldg != null ) {                        bldg.setBurning( true );                        burningBldgs.addElement( bldg );                    }                }                // If the L3 smoke rule is off, add smoke normally, otherwise call the L3 method                if (currentHex.contains(Terrain.FIRE) && !game.getOptions().booleanOption("maxtech_fire")) {                    addSmoke(currentXCoord, currentYCoord, windDirection);                    addSmoke(currentXCoord, currentYCoord, (windDirection+1)%6);                    addSmoke(currentXCoord, currentYCoord, (windDirection+5)%6);                    board.initializeAround(currentXCoord,currentYCoord);                }                else if (currentHex.contains(Terrain.FIRE) && game.getOptions().booleanOption("maxtech_fire")) {                    addL3Smoke(currentXCoord, currentYCoord);                    board.initializeAround(currentXCoord, currentYCoord);                }            }        }        debugTime("resolve fire 2 end", false);        // If any buildings are burning, update the clients.        if ( !burningBldgs.isEmpty() ) {            send( createUpdateBuildingCFPacket(burningBldgs) );        }        // If we're in L3 rules, shift the wind.        if (game.getOptions().booleanOption("maxtech_fire")) {            game.determineWind();        }    }  // End the ResolveFire() method