yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
zspr_loader.h
Go to the documentation of this file.
1#ifndef YAZE_APP_GFX_ZSPR_LOADER_H
2#define YAZE_APP_GFX_ZSPR_LOADER_H
3
4#include <array>
5#include <cstdint>
6#include <string>
7#include <vector>
8
9#include "absl/status/status.h"
10#include "absl/status/statusor.h"
11
12namespace yaze {
13
14class Rom;
15
16namespace gfx {
17
22 std::string display_name;
23 std::string author;
24 std::string author_rom_name;
25 uint8_t version = 0;
26 uint16_t sprite_type = 0; // 0 = Link, 1 = Other
27};
28
38struct ZsprData {
40 std::vector<uint8_t> sprite_data; // 28672 bytes (14 sheets × 2048 bytes)
41 std::vector<uint8_t> palette_data; // 120 bytes
42 std::array<uint16_t, 2> glove_colors = {0, 0};
43
44 // Convenience accessors
45 bool is_link_sprite() const { return metadata.sprite_type == 0; }
46 size_t tile_count() const { return sprite_data.size() / 32; } // 32 bytes per 4BPP tile
47};
48
73 public:
74 static constexpr uint32_t kZsprMagic = 0x5250535A; // "ZSPR" little-endian
75 static constexpr size_t kExpectedSpriteDataSize = 28672; // 896 tiles × 32 bytes
76 static constexpr size_t kExpectedPaletteDataSize = 120; // 15 × 4 × 2 bytes
77 static constexpr size_t kTilesPerSheet = 64; // 8×8 tiles per sheet
78 static constexpr size_t kBytesPerTile = 32; // 4BPP 8×8 tile
79 static constexpr size_t kLinkSheetCount = 14;
80
86 static absl::StatusOr<ZsprData> LoadFromFile(const std::string& path);
87
93 static absl::StatusOr<ZsprData> LoadFromData(const std::vector<uint8_t>& data);
94
105 static absl::Status ApplyToRom(Rom& rom, const ZsprData& zspr);
106
116 static absl::Status ApplyPaletteToRom(Rom& rom, const ZsprData& zspr);
117
118 private:
122 static bool ValidateChecksum(const std::vector<uint8_t>& data,
123 uint32_t expected_checksum);
124
128 static uint32_t CalculateAdler32(const uint8_t* data, size_t length);
129
133 static std::string ReadNullTerminatedString(const uint8_t* data,
134 size_t max_length,
135 size_t& bytes_read);
136
140 static uint16_t ReadU16LE(const uint8_t* data);
141
145 static uint32_t ReadU32LE(const uint8_t* data);
146};
147
148} // namespace gfx
149} // namespace yaze
150
151#endif // YAZE_APP_GFX_ZSPR_LOADER_H
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition rom.h:24
Loader for ZSPR (ALttP Randomizer) sprite files.
Definition zspr_loader.h:72
static uint16_t ReadU16LE(const uint8_t *data)
Read 16-bit little-endian value.
static absl::Status ApplyToRom(Rom &rom, const ZsprData &zspr)
Apply loaded ZSPR sprite data to ROM's Link graphics.
static bool ValidateChecksum(const std::vector< uint8_t > &data, uint32_t expected_checksum)
Validate ZSPR checksum (Adler-32)
static constexpr uint32_t kZsprMagic
Definition zspr_loader.h:74
static constexpr size_t kTilesPerSheet
Definition zspr_loader.h:77
static constexpr size_t kBytesPerTile
Definition zspr_loader.h:78
static constexpr size_t kExpectedPaletteDataSize
Definition zspr_loader.h:76
static absl::StatusOr< ZsprData > LoadFromData(const std::vector< uint8_t > &data)
Load ZSPR data from a byte buffer.
static absl::Status ApplyPaletteToRom(Rom &rom, const ZsprData &zspr)
Apply ZSPR palette data to ROM.
static constexpr size_t kExpectedSpriteDataSize
Definition zspr_loader.h:75
static std::string ReadNullTerminatedString(const uint8_t *data, size_t max_length, size_t &bytes_read)
Read null-terminated string from buffer.
static absl::StatusOr< ZsprData > LoadFromFile(const std::string &path)
Load ZSPR data from a file path.
static uint32_t ReadU32LE(const uint8_t *data)
Read 32-bit little-endian value.
static uint32_t CalculateAdler32(const uint8_t *data, size_t length)
Calculate Adler-32 checksum.
static constexpr size_t kLinkSheetCount
Definition zspr_loader.h:79
Complete data loaded from a ZSPR file.
Definition zspr_loader.h:38
std::vector< uint8_t > sprite_data
Definition zspr_loader.h:40
std::vector< uint8_t > palette_data
Definition zspr_loader.h:41
bool is_link_sprite() const
Definition zspr_loader.h:45
ZsprMetadata metadata
Definition zspr_loader.h:39
size_t tile_count() const
Definition zspr_loader.h:46
std::array< uint16_t, 2 > glove_colors
Definition zspr_loader.h:42
Metadata from a ZSPR file header.
Definition zspr_loader.h:21
std::string author_rom_name
Definition zspr_loader.h:24