yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
diggable_tiles.h
Go to the documentation of this file.
1#ifndef YAZE_ZELDA3_OVERWORLD_DIGGABLE_TILES_H
2#define YAZE_ZELDA3_OVERWORLD_DIGGABLE_TILES_H
3
4#include <array>
5#include <cstdint>
6#include <vector>
7
9
10namespace yaze::zelda3 {
11
12// Tile types that indicate diggable ground
13constexpr uint8_t kTileTypeDiggable1 = 0x48;
14constexpr uint8_t kTileTypeDiggable2 = 0x4A;
15
16// Bitfield size: 512 bits = 64 bytes (one bit per Map16 tile ID 0-511)
17constexpr int kDiggableTilesBitfieldSize = 64;
18constexpr int kMaxDiggableTileId = 512;
19
20// ROM addresses for custom diggable tiles table
21constexpr int kOverworldCustomDiggableTilesArray = 0x140980;
22constexpr int kOverworldCustomDiggableTilesEnabled = 0x140149;
23
24// Vanilla diggable Map16 tile IDs (from bank 1B at $1BBDF4-$1BBE24)
25constexpr uint16_t kVanillaDiggableTiles[] = {
26 0x0034, 0x0071, 0x0035, 0x010D, 0x010F,
27 0x00E1, 0x00E2, 0x00DA, 0x00F8, 0x010E
28};
29constexpr int kNumVanillaDiggableTiles = 10;
30
38 public:
39 DiggableTiles() = default;
40
44 bool IsDiggable(uint16_t tile_id) const;
45
49 void SetDiggable(uint16_t tile_id, bool diggable);
50
54 void Clear();
55
59 void SetVanillaDefaults();
60
64 std::vector<uint16_t> GetAllDiggableTileIds() const;
65
69 int GetDiggableCount() const;
70
74 void FromBytes(const uint8_t* data);
75
79 void ToBytes(uint8_t* data) const;
80
84 const std::array<uint8_t, kDiggableTilesBitfieldSize>& GetRawData() const {
85 return bitfield_;
86 }
87
98 static bool IsTile16Diggable(
99 const gfx::Tile16& tile16,
100 const std::array<uint8_t, 0x200>& all_tiles_types);
101
102 private:
103 std::array<uint8_t, kDiggableTilesBitfieldSize> bitfield_ = {};
104};
105
106} // namespace yaze::zelda3
107
108#endif // YAZE_ZELDA3_OVERWORLD_DIGGABLE_TILES_H
Tile composition of four 8x8 tiles.
Definition snes_tile.h:140
Manages diggable tile state as a 512-bit bitfield.
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.
const std::array< uint8_t, kDiggableTilesBitfieldSize > & GetRawData() const
Get raw bitfield data for direct ROM writing.
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.
Definition editor.h:35
constexpr int kDiggableTilesBitfieldSize
constexpr uint8_t kTileTypeDiggable1
constexpr uint8_t kTileTypeDiggable2
constexpr int kOverworldCustomDiggableTilesEnabled
constexpr int kNumVanillaDiggableTiles
constexpr int kOverworldCustomDiggableTilesArray
constexpr int kMaxDiggableTileId
constexpr uint16_t kVanillaDiggableTiles[]