33PixelTile<Rgba32> convert_tile(
34 const PixelTile<IndexPixel> &index_tile,
35 unsigned int pal_index,
38 std::array<Rgba32, tile::size_pix> rgba_pixels{};
39 const auto &palette_colors = pals[pal_index].colors();
42 const unsigned int color_index = index_tile.at(i).index();
44 rgba_pixels[i] = palette_colors[color_index];
47 return PixelTile{rgba_pixels};
53 const std::vector<TilemapEntry> &entries,
57 std::vector<Metatile<Rgba32>> decompiled;
61 panic(
"entry vector size was not divisible 12");
66 tiles, tileizer.tileize(tiles_png),
"failed to tileize tiles.png", std::vector<
Metatile<Rgba32>>);
76 const auto &entry = entries[base_entry_idx + i];
77 const auto &index_tile = tiles[entry.tile_index()];
78 auto flipped_tile = index_tile.flip(entry.hflip(), entry.vflip());
79 auto rgba_tile = convert_tile(flipped_tile, entry.pal_index(), pals);
80 metatile.set_bottom(i, std::move(rgba_tile));
86 const auto &index_tile = tiles[entry.tile_index()];
87 auto flipped_tile = index_tile.flip(entry.hflip(), entry.vflip());
88 auto rgba_tile = convert_tile(flipped_tile, entry.pal_index(), pals);
89 metatile.set_middle(i, std::move(rgba_tile));
95 const auto &index_tile = tiles[entry.tile_index()];
96 auto flipped_tile = index_tile.flip(entry.hflip(), entry.vflip());
97 auto rgba_tile = convert_tile(flipped_tile, entry.pal_index(), pals);
98 metatile.set_top(i, std::move(rgba_tile));
101 decompiled.push_back(std::move(metatile));
#define PT_TRY_ASSIGN_CHAIN_ERR(var, expr, msg, return_type)
Unwraps a ChainableResult, chaining a new error message on failure.
A result type that maintains a chainable sequence of errors for debugging and error reporting.
Service for converting images into collections of 8x8 tiles.
A template for two-dimensional images with arbitrarily typed pixel values.
A palette container for colors that support transparency checking.
constexpr std::size_t num_pals
constexpr std::size_t size_pix
void panic(const StringViewSourceLoc &s)
Unconditionally terminates the program with a panic message.