11 int byte_index = tile_id / 8;
12 int bit_index = tile_id % 8;
13 return (
bitfield_[byte_index] & (1 << bit_index)) != 0;
20 int byte_index = tile_id / 8;
21 int bit_index = tile_id % 8;
23 bitfield_[byte_index] |= (1 << bit_index);
25 bitfield_[byte_index] &= ~(1 << bit_index);
41 std::vector<uint16_t> result;
44 result.push_back(tile_id);
70 const std::array<uint8_t, 0x200>& all_tiles_types) {
73 auto is_tile_diggable = [&all_tiles_types](
const gfx::TileInfo& tile_info) {
74 uint16_t tile_id = tile_info.id_;
75 if (tile_id >= all_tiles_types.size()) {
78 uint8_t tile_type = all_tiles_types[tile_id];
82 return is_tile_diggable(tile16.
tile0_) &&
83 is_tile_diggable(tile16.
tile1_) &&
84 is_tile_diggable(tile16.
tile2_) &&
85 is_tile_diggable(tile16.
tile3_);
Tile composition of four 8x8 tiles.
SNES 16-bit tile metadata container.
void ToBytes(uint8_t *data) const
Write bitfield to raw bytes (64 bytes).
int GetDiggableCount() const
Get the count of tiles marked as diggable.
void SetVanillaDefaults()
Reset to vanilla diggable tiles.
void FromBytes(const uint8_t *data)
Load bitfield from raw bytes (64 bytes).
void SetDiggable(uint16_t tile_id, bool diggable)
Set or clear the diggable bit for a Map16 tile ID.
static bool IsTile16Diggable(const gfx::Tile16 &tile16, const std::array< uint8_t, 0x200 > &all_tiles_types)
Check if a Tile16 should be diggable based on its component tiles.
std::vector< uint16_t > GetAllDiggableTileIds() const
Get all tile IDs that are currently marked as diggable.
bool IsDiggable(uint16_t tile_id) const
Check if a Map16 tile ID is marked as diggable.
std::array< uint8_t, kDiggableTilesBitfieldSize > bitfield_
void Clear()
Clear all diggable bits.
Zelda 3 specific classes and functions.
constexpr int kDiggableTilesBitfieldSize
constexpr uint8_t kTileTypeDiggable1
constexpr uint8_t kTileTypeDiggable2
constexpr int kNumVanillaDiggableTiles
constexpr int kMaxDiggableTileId
constexpr uint16_t kVanillaDiggableTiles[]