Now, here is the output when compiling for Windows / Mac.
As you can see, there are extra lines in the tilemap that have been generated with a value of 0. I cannot for the life of me figure out why. At first I thought it was an issue with the data I've sent into the timely. So, I setup a debug procedure to see exactly what string was being passed in.
I have the image above scaled so you can read the text output. At the moment, I have it set to generate the string that the first room is using and output that to a FlxText object. Either way, as you can see, there is no line of 0's at the right end of the string.
Due to this, I cannot for the life of me figure out why this weird bug is happening. Any help you guys could provide would be greatly appreciated. Below is all relevant code from my program.
{ /*********************************** * !!!WORLD GENERATION: IMPORTANT!!! * Read carefully. It's complex. ***********************************/
// STEP 1: Generate an array of worlds worlds = new Array<World>();
for (row in 0...maxNumOfWorlds) { // generate random world size worldSize = FlxRandom.intRanged(0, 2); if (row == 0) { worlds[row] = new World("entrance", worldSize); currentNumOfWorlds += 1; } // end if
else { worlds[row] = new World(("world" + Std.string(currentNumOfWorlds)), worldSize); currentNumOfWorlds += 1; } // end if } // end for
// STEP 2: Create tilemaps for each world gameMaps = new Array<FlxTilemap>(); entityMaps = new Array<FlxTilemap>(); waterMaps = new Array<FlxTilemap>();
for (row in 0...maxNumOfWorlds) { gameMaps[row] = new FlxTilemap(); entityMaps[row] = new FlxTilemap(); waterMaps[row] = new FlxTilemap(); } // end for
// STEP 3: Populate those tilemaps with // data stored in each world.
// NOTE: Also positions tilemaps in the // game world.
currentMaxHeight = 0; // max height of the game map
for (row in 0...maxNumOfWorlds) { // add data from world into tilemap tempMap = worlds[row].generateMap(); mapString = worlds[row].convertMapToString(tempMap); gameMaps[row].loadMap(mapString, "assets/images/brick_tiles.png", tileSize, tileSize, 0, 0, 0, 1);
// add data from world's entity map into tilemap mapString = worlds[row].convertMapToString(worlds[row].getEntityMap()); entityMaps[row].loadMap(mapString, "assets/images/entities.png", tileSize, tileSize, 0, 0, 0, 100);
// add data from the world's water map into tilemap mapString = worlds[row].convertMapToString(worlds[row].getLiquidsMap()); waterMaps[row].loadMap(mapString, "assets/images/water.png", tileSize, tileSize, 0, 0, 0, 100);
// if we're dealing with a room that isn't // the starting room if (row > 0) { // adjust it's X position so that it is not on top of another world gameMaps[row].x = (gameMaps[(row - 1)].widthInTiles) * tileSize; entityMaps[row].x = (entityMaps[(row - 1)].widthInTiles) * tileSize; waterMaps[row].x = (waterMaps[(row - 1)].widthInTiles) * tileSize;
// adjust it's Y position so that it's doors line up properly if (gameMaps[row].heightInTiles > gameMaps[(row - 1)].heightInTiles) { gameMaps[row].y = 0 - ((gameMaps[row].heightInTiles -
gameMaps[(row - 1)].heightInTiles - 3) * tileSize); entityMaps[row].y = 0 - ((entityMaps[row].heightInTiles -
entityMaps[(row - 1)].heightInTiles - 3) * tileSize); waterMaps[row].y = 0 - ((waterMaps[row].heightInTiles -
waterMaps[(row - 1)].heightInTiles - 3) * tileSize); } // end if } // end if
// if current map height is greater than current max height // current max height = current map height if ((-1 * gameMaps[row].y) > currentMaxHeight) { currentMaxHeight = (-1 * (gameMaps[row].y)); } // end if
// add the newly generated tilemaps to groups group_GameMaps.add(gameMaps[row]); group_Entities.add(entityMaps[row]); //group_WaterMaps.add(waterMaps[row]); } // end for
// adjust world height so that it is drawn within the world bounds for (row in 0...maxNumOfWorlds) { gameMaps[row].y += currentMaxHeight; entityMaps[row].y += currentMaxHeight; waterMaps[row].y += currentMaxHeight; } // end for} // end GenerateWorld
{ var tempMap:Array<Array<Int>>;
// set the max size X and Y // to the size of the world var sizeX:Int = Std.int(size.x); var sizeY:Int = Std.int(size.y);
// fill the map with empty space tempMap = [for (row in 0...sizeY) [for (col in 0...sizeX) 0]];
// rule 1: map must have boundaries on all sides // therefore: fill top and bottom of room with 1's
var row:Int = 0; while (row < sizeY) { for (col in 0...sizeX) { if (row == 0) { tempMap[row][col] = 3; } if (row > 0) { tempMap[row][col] = 2; } } // end for
if (row == (sizeY - 1)) { row++; }
if (row > 0) { row++; } // end for
if (row == 0) { row = sizeY - 1; } // end if } // end while
// fill left and right side of room with 1's var col:Int = 0; while (col < sizeX) { for (row in 0...sizeY) { if (col == 0) { tempMap[row][col] = 5; } if (col > 0) { tempMap[row][col] = 4; } } // end for
if (col == (sizeX - 1)) { col++; } if (col > 0) { col++; } // end if
if (col == 0) { col = sizeX - 1; } // end if } // end while
// set the corners equal to 1 tempMap[0][0] = 1; tempMap[0][(sizeX - 1)] = 1; tempMap[(sizeY - 1)][0] = 1; tempMap[(sizeY - 1)][(sizeX - 1)] = 1;
col = row = 0;
if (worldName != "entrance") { tempMap = generatePlatforms(tempMap); } // end if
tempMap = generateDoors(tempMap); map = tempMap;
return tempMap; } // end generateMap
{ var mapString:String = ""; var sizeX:Int = Std.int(size.x); var sizeY:Int = Std.int(size.y); for (row in 0...sizeY) { for (col in 0...sizeX) { mapString += Std.string(map[row][col]) + ","; } // end for
if (row < (sizeY-1)) { mapString += "\n"; } // end if } // end for return mapString; } // end convertMapToString