15 const std::vector<uint8_t>& decoded,
int sheet,
int tile_id,
bool flip_x,
17 if (sheet <= 0 || tile_id < 0 || tile_id >= 1024 ||
18 static_cast<size_t>(sheet + 1) * 4096 > decoded.size()) {
19 return absl::FailedPreconditionError(
"Tile8 source graphics unavailable");
21 std::array<uint8_t, 64> mask{};
22 const int local_tile = tile_id % 64;
23 for (
int y = 0; y < 8; ++y) {
24 for (
int x = 0; x < 8; ++x) {
25 const int sx = flip_x ? 7 - x : x;
26 const int sy = flip_y ? 7 - y : y;
27 const size_t source = sheet * 4096 + (local_tile / 16) * 1024 +
28 (local_tile % 16) * 8 + sy * 128 + sx;
29 if (decoded[source] > 15) {
30 return absl::DataLossError(
"Tile8 source contains undecoded pixels");
32 mask[y * 8 + x] = decoded[source] == 0;
absl::StatusOr< std::array< uint8_t, 64 > > Tile8SourceTransparency(const std::vector< uint8_t > &decoded, int sheet, int tile_id, bool flip_x, bool flip_y)