int CalculateBitmask(int x, int y, int l)
{
int spriteId = GetTileValueFromFramwork(x, y, l);
int bitmask = 0;
bool calculate;
if (spriteId == -1) {
calculate = false;
} else if (SpriteIdIsSpecialTile(spriteId) && !TreatSpecialAsSolid) {
calculate = false;
} else if (SpriteIdIsSpecialTile(spriteId) && TreatSpecialAsSolid) {
calculate = true;
} else if (floorVariantIndices.Contains(spriteId)) {
calculate = false;
} else {
calculate = true;
}
// if the spriteId is -1, it means that the tile itself is empty and
// we do not need to change anything. Empty tiles stay empty.
if (calculate) {
bitmask += GetTileState(x, y + 1, l) * 1;
bitmask += GetTileState(x + 1, y + 1, l) * 2;
bitmask += GetTileState(x + 1, y, l) * 4;
bitmask += GetTileState(x + 1, y - 1, l) * 8;
bitmask += GetTileState(x, y - 1, l) * 16;
bitmask += GetTileState(x - 1, y - 1, l) * 32;
bitmask += GetTileState(x - 1, y, l) * 64;
bitmask += GetTileState(x - 1, y + 1, l) * 128;
}
return bitmask;
}