yaze 0.2.0
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
rom.h
Go to the documentation of this file.
1#ifndef YAZE_APP_ROM_H
2#define YAZE_APP_ROM_H
3
4#include <SDL.h>
5
6#include <algorithm>
7#include <chrono>
8#include <cstddef>
9#include <cstdint>
10#include <cstring>
11#include <ctime>
12#include <filesystem>
13#include <fstream>
14#include <functional>
15#include <iostream>
16#include <map>
17#include <memory>
18#include <stack>
19#include <string>
20#include <unordered_map>
21#include <variant>
22#include <vector>
23
24#include "absl/container/flat_hash_map.h"
25#include "absl/status/status.h"
26#include "absl/status/statusor.h"
27#include "absl/strings/match.h"
28#include "absl/strings/str_cat.h"
29#include "absl/strings/str_format.h"
30#include "absl/strings/string_view.h"
31#include "app/core/common.h"
32#include "app/core/constants.h"
33#include "app/core/labeling.h"
34#include "app/gfx/bitmap.h"
35#include "app/gfx/compression.h"
37#include "app/gfx/snes_tile.h"
38
39namespace yaze {
40namespace app {
41
45enum class Z3_Version {
46 US = 1, // US version
47 JP = 2, // JP version
48 SD = 3, // Super Donkey Proto (Experimental)
49 RANDO = 4, // Randomizer (Unimplemented)
50};
51
75
79static const std::map<Z3_Version, VersionConstants> kVersionConstantsMap = {
81 {
82 0x10275, // kGfxAnimatedPointer
83 0x5D97, // kOverworldGfxGroups1
84 0x6073, // kOverworldGfxGroups2
85 0x1794D, // kCompressedAllMap32PointersHigh
86 0x17B2D, // kCompressedAllMap32PointersLow
87 0x75504, // overworldMapPaletteGroup
88 0x77664, // overlayPointers
89 0x0E, // overlayPointersBank
90 0x71459, // overworldTilesType
91 0x4F80, // kOverworldGfxPtr1
92 0x505F, // kOverworldGfxPtr2
93 0x513E, // kOverworldGfxPtr3
94 0x18000, // kMap32TileTL
95 0x1B400, // kMap32TileTR
96 0x20000, // kMap32TileBL
97 0x23400, // kMap32TileBR
98 0x5B57, // kSpriteBlocksetPointer
99 0x75460, // kDungeonPalettesGroups
100 }},
102 {
103 0x10624, // kGfxAnimatedPointer
104 0x5DD7, // kOverworldGfxGroups1
105 0x60B3, // kOverworldGfxGroups2
106 0x176B1, // kCompressedAllMap32PointersHigh
107 0x17891, // kCompressedAllMap32PointersLow
108 0x67E74, // overworldMapPaletteGroup
109 0x3FAF4, // overlayPointers
110 0x07, // overlayPointersBank
111 0x7FD94, // overworldTilesType
112 0x4FC0, // kOverworldGfxPtr1
113 0x509F, // kOverworldGfxPtr2
114 0x517E, // kOverworldGfxPtr3
115 0x18000, // kMap32TileTL
116 0x1B3C0, // kMap32TileTR
117 0x20000, // kMap32TileBL
118 0x233C0, // kMap32TileBR
119 0x5B97, // kSpriteBlocksetPointer
120 0x67DD0, // kDungeonPalettesGroups
121 }},
122 {Z3_Version::SD, {}},
123 {Z3_Version::RANDO, {}},
124};
125
126constexpr uint32_t kNumGfxSheets = 223;
127constexpr uint32_t kNumLinkSheets = 14;
128constexpr uint32_t kTile16Ptr = 0x78000;
129constexpr uint32_t kNormalGfxSpaceStart = 0x87000;
130constexpr uint32_t kNormalGfxSpaceEnd = 0xC4200;
131constexpr uint32_t kFontSpriteLocation = 0x70000;
132constexpr uint32_t kGfxGroupsPointer = 0x6237;
133constexpr uint32_t kNumMainBlocksets = 37;
134constexpr uint32_t kNumRoomBlocksets = 82;
135constexpr uint32_t kNumSpritesets = 144;
136constexpr uint32_t kNumPalettesets = 72;
137constexpr uint32_t kUncompressedSheetSize = 0x0800;
138
139// TODO: Verify what this was used for in ZS
140constexpr uint32_t kMaxGraphics = 0xC3FB5;
141
146 public:
155 absl::StatusOr<std::vector<uint8_t>> Load2BppGraphics();
156
160 absl::Status LoadLinkGraphics();
161
180 absl::Status LoadAllGraphicsData(bool defer_render = false);
181
189 absl::Status LoadFromFile(const std::string& filename, bool z3_load = true);
190 absl::Status LoadFromPointer(uchar* data, size_t length, bool z3_load = true);
191 absl::Status LoadFromBytes(const std::vector<uint8_t>& data);
192
202 absl::Status SaveToFile(bool backup, bool save_new = false,
203 std::string filename = "");
204
212 absl::Status SavePalette(int index, const std::string& group_name,
213 gfx::SnesPalette& palette);
214
221 absl::Status SaveAllPalettes();
222
226 void Expand(int size) {
227 rom_data_.resize(size);
228 size_ = size;
229 }
230
234 absl::Status Close() {
235 rom_data_.clear();
236 size_ = 0;
237 is_loaded_ = false;
238 return absl::OkStatus();
239 }
240
244 absl::Status ReadWritePreconditions() {
245 if (!is_loaded_) {
246 return absl::FailedPreconditionError("ROM file not loaded");
247 }
248 if (rom_data_.empty() || size_ == 0) {
249 return absl::FailedPreconditionError(
250 "File was loaded, but ROM data was empty.");
251 }
252 return absl::OkStatus();
253 }
254
255 // Read functions
256 absl::StatusOr<uint8_t> ReadByte(int offset) {
258 if (offset >= static_cast<int>(rom_data_.size())) {
259 return absl::FailedPreconditionError("Offset out of range");
260 }
261 return rom_data_[offset];
262 }
263
264 absl::StatusOr<uint16_t> ReadWord(int offset) {
266 if (offset + 1 >= static_cast<int>(rom_data_.size())) {
267 return absl::FailedPreconditionError("Offset out of range");
268 }
269 auto result = (uint16_t)(rom_data_[offset] | (rom_data_[offset + 1] << 8));
270 return result;
271 }
272
273 uint16_t toint16(int offset) {
274 return (uint16_t)(rom_data_[offset] | (rom_data_[offset + 1] << 8));
275 }
276
277 absl::StatusOr<uint32_t> ReadLong(int offset) {
279 if (offset + 2 >= static_cast<int>(rom_data_.size())) {
280 return absl::OutOfRangeError("Offset out of range");
281 }
282 auto result = (uint32_t)(rom_data_[offset] | (rom_data_[offset + 1] << 8) |
283 (rom_data_[offset + 2] << 16));
284 return result;
285 }
286
287 absl::StatusOr<std::vector<uint8_t>> ReadByteVector(uint32_t offset,
288 uint32_t length) {
290 if (offset + length > static_cast<uint32_t>(rom_data_.size())) {
291 return absl::OutOfRangeError("Offset and length out of range");
292 }
293 std::vector<uint8_t> result;
294 for (uint32_t i = offset; i < offset + length; i++) {
295 result.push_back(rom_data_[i]);
296 }
297 return result;
298 }
299
300 absl::StatusOr<gfx::Tile16> ReadTile16(uint32_t tile16_id) {
301 // Skip 8 bytes per tile.
302 auto tpos = kTile16Ptr + (tile16_id * 0x08);
303 gfx::Tile16 tile16;
304 ASSIGN_OR_RETURN(auto new_tile0, ReadWord(tpos))
305 tile16.tile0_ = gfx::WordToTileInfo(new_tile0);
306 tpos += 2;
307 ASSIGN_OR_RETURN(auto new_tile1, ReadWord(tpos))
308 tile16.tile1_ = gfx::WordToTileInfo(new_tile1);
309 tpos += 2;
310 ASSIGN_OR_RETURN(auto new_tile2, ReadWord(tpos))
311 tile16.tile2_ = gfx::WordToTileInfo(new_tile2);
312 tpos += 2;
313 ASSIGN_OR_RETURN(auto new_tile3, ReadWord(tpos))
314 tile16.tile3_ = gfx::WordToTileInfo(new_tile3);
315 return tile16;
316 }
317
318 absl::Status WriteTile16(int tile16_id, const gfx::Tile16& tile) {
319 // Skip 8 bytes per tile.
320 auto tpos = kTile16Ptr + (tile16_id * 0x08);
322 tpos += 2;
324 tpos += 2;
326 tpos += 2;
328 return absl::OkStatus();
329 }
330
331 // Write functions
332 absl::Status Write(int addr, int value) {
333 if (addr >= static_cast<int>(rom_data_.size())) {
334 return absl::InvalidArgumentError(absl::StrFormat(
335 "Attempt to write %d value failed, address %d out of range", value,
336 addr));
337 }
338 rom_data_[addr] = value;
339 return absl::OkStatus();
340 }
341
342 absl::Status WriteByte(int addr, uint8_t value) {
344 if (addr >= static_cast<int>(rom_data_.size())) {
345 return absl::OutOfRangeError(absl::StrFormat(
346 "Attempt to write byte %#02x value failed, address %d out of range",
347 value, addr));
348 }
349 rom_data_[addr] = value;
350 std::string log_str = absl::StrFormat("WriteByte: %#06X: %s", addr,
352 core::Logger::log(log_str);
353 return absl::OkStatus();
354 }
355
356 absl::Status WriteWord(int addr, uint16_t value) {
358 if (addr + 1 >= static_cast<int>(rom_data_.size())) {
359 return absl::OutOfRangeError(absl::StrFormat(
360 "Attempt to write word %#04x value failed, address %d out of range",
361 value, addr));
362 }
363 rom_data_[addr] = (uint8_t)(value & 0xFF);
364 rom_data_[addr + 1] = (uint8_t)((value >> 8) & 0xFF);
365 core::Logger::log(absl::StrFormat("WriteWord: %#06X: %s", addr,
366 core::UppercaseHexWord(value)));
367 return absl::OkStatus();
368 }
369
370 absl::Status WriteShort(int addr, uint16_t value) {
372 if (addr + 1 >= static_cast<int>(rom_data_.size())) {
373 return absl::OutOfRangeError(absl::StrFormat(
374 "Attempt to write short %#04x value failed, address %d out of range",
375 value, addr));
376 }
377 rom_data_[addr] = (uint8_t)(value & 0xFF);
378 rom_data_[addr + 1] = (uint8_t)((value >> 8) & 0xFF);
379 core::Logger::log(absl::StrFormat("WriteShort: %#06X: %s", addr,
380 core::UppercaseHexWord(value)));
381 return absl::OkStatus();
382 }
383
384 absl::Status WriteLong(uint32_t addr, uint32_t value) {
386 if (addr + 2 >= static_cast<uint32_t>(rom_data_.size())) {
387 return absl::OutOfRangeError(absl::StrFormat(
388 "Attempt to write long %#06x value failed, address %d out of range",
389 value, addr));
390 }
391 rom_data_[addr] = (uint8_t)(value & 0xFF);
392 rom_data_[addr + 1] = (uint8_t)((value >> 8) & 0xFF);
393 rom_data_[addr + 2] = (uint8_t)((value >> 16) & 0xFF);
394 core::Logger::log(absl::StrFormat("WriteLong: %#06X: %s", addr,
395 core::UppercaseHexLong(value)));
396 return absl::OkStatus();
397 }
398
399 absl::Status WriteVector(int addr, std::vector<uint8_t> data) {
400 if (addr + static_cast<int>(data.size()) >
401 static_cast<int>(rom_data_.size())) {
402 return absl::InvalidArgumentError(absl::StrFormat(
403 "Attempt to write vector value failed, address %d out of range",
404 addr));
405 }
406 for (int i = 0; i < static_cast<int>(data.size()); i++) {
407 rom_data_[addr + i] = data[i];
408 }
409 core::Logger::log(absl::StrFormat("WriteVector: %#06X: %s", addr,
411 return absl::OkStatus();
412 }
413
414 absl::Status WriteColor(uint32_t address, const gfx::SnesColor& color) {
415 uint16_t bgr = ((color.snes() >> 10) & 0x1F) |
416 ((color.snes() & 0x1F) << 10) | (color.snes() & 0x7C00);
417
418 // Write the 16-bit color value to the ROM at the specified address
419 core::Logger::log(absl::StrFormat("WriteColor: %#06X: %s", address,
421 return WriteShort(address, bgr);
422 }
423
424 template <typename... Args>
425 absl::Status WriteTransaction(Args... args) {
426 absl::Status status;
427 // Fold expression to apply the Write function on each argument
428 ((status = WriteHelper(args)), ...);
429 return status;
430 }
431
432 template <typename T, typename... Args>
433 absl::Status ReadTransaction(T& var, int address, Args&&... args) {
434 absl::Status status = ReadHelper<T>(var, address);
435 if (!status.ok()) {
436 return status;
437 }
438
439 if constexpr (sizeof...(args) > 0) {
440 status = ReadTransaction(std::forward<Args>(args)...);
441 }
442
443 return status;
444 }
445
446 uint8_t& operator[](unsigned long i) {
447 if (i > size_) {
448 std::cout << "ROM: Index " << i << " out of bounds, size: " << size_
449 << std::endl;
450 return rom_data_[0];
451 }
452 return rom_data_[i];
453 }
454
455 bool is_loaded() const {
456 if (!absl::StrContains(filename_, ".sfc") &&
457 !absl::StrContains(filename_, ".smc")) {
458 return false;
459 }
460 return is_loaded_;
461 }
462
463 // Full graphical data for the game
464 std::vector<uint8_t> graphics_buffer() const { return graphics_buffer_; }
465
466 auto title() const { return title_; }
467 auto size() const { return size_; }
468 auto begin() { return rom_data_.begin(); }
469 auto end() { return rom_data_.end(); }
470 auto data() { return rom_data_.data(); }
471 auto vector() const { return rom_data_; }
472 auto version() const { return version_; }
473 auto filename() const { return filename_; }
474 auto set_filename(std::string name) { filename_ = name; }
475
476 auto link_graphics() { return link_graphics_; }
478 auto gfx_sheets() { return graphics_sheets_; }
480
487
492 return kVersionConstantsMap.at(version_);
493 }
494
495 std::vector<std::vector<uint8_t>> main_blockset_ids;
496 std::vector<std::vector<uint8_t>> room_blockset_ids;
497 std::vector<std::vector<uint8_t>> spriteset_ids;
498 std::vector<std::vector<uint8_t>> paletteset_ids;
499
500 struct WriteAction {
502 std::variant<int, uint8_t, uint16_t, short, std::vector<uint8_t>,
503 gfx::SnesColor, std::vector<gfx::SnesColor>>
505 };
506
507 private:
508 virtual absl::Status WriteHelper(const WriteAction& action) {
509 if (std::holds_alternative<uint8_t>(action.value)) {
510 return Write(action.address, std::get<uint8_t>(action.value));
511 } else if (std::holds_alternative<uint16_t>(action.value) ||
512 std::holds_alternative<short>(action.value)) {
513 return WriteShort(action.address, std::get<uint16_t>(action.value));
514 } else if (std::holds_alternative<std::vector<uint8_t>>(action.value)) {
515 return WriteVector(action.address,
516 std::get<std::vector<uint8_t>>(action.value));
517 } else if (std::holds_alternative<gfx::SnesColor>(action.value)) {
518 return WriteColor(action.address, std::get<gfx::SnesColor>(action.value));
519 } else if (std::holds_alternative<std::vector<gfx::SnesColor>>(
520 action.value)) {
521 return absl::UnimplementedError(
522 "WriteHelper: std::vector<gfx::SnesColor>");
523 }
524 auto error_message = absl::StrFormat("Invalid write argument type: %s",
525 typeid(action.value).name());
526 return absl::InvalidArgumentError(error_message);
527 }
528
529 template <typename T>
530 absl::Status ReadHelper(T& var, int address) {
531 if constexpr (std::is_same_v<T, uint8_t>) {
532 ASSIGN_OR_RETURN(auto result, ReadByte(address));
533 var = result;
534 } else if constexpr (std::is_same_v<T, uint16_t>) {
535 ASSIGN_OR_RETURN(auto result, ReadWord(address));
536 var = result;
537 } else if constexpr (std::is_same_v<T, std::vector<uint8_t>>) {
538 ASSIGN_OR_RETURN(auto result, ReadByteVector(address, var.size()));
539 var = result;
540 }
541 return absl::OkStatus();
542 }
543
544 absl::Status LoadZelda3();
545 absl::Status LoadGfxGroups();
546 absl::Status SaveGroupsToRom();
547
548 // ROM file loaded flag
549 bool is_loaded_ = false;
550
551 // Size of the ROM data.
552 unsigned long size_ = 0;
553
554 // Title of the ROM loaded from the header
555 std::string title_ = "ROM not loaded";
556
557 // Filename of the ROM
558 std::string filename_ = "";
559
560 // Full contiguous rom space
561 std::vector<uint8_t> rom_data_;
562
563 // Full contiguous graphics space
564 std::vector<uint8_t> graphics_buffer_;
565
566 // All graphics sheets in the game
567 std::array<gfx::Bitmap, kNumGfxSheets> graphics_sheets_;
568
569 // All graphics sheets for Link
570 std::array<gfx::Bitmap, kNumLinkSheets> link_graphics_;
571
572 // Label manager for unique resource names.
574
575 // All palette groups in the game
577
578 // Version of the game
580};
581
586 public:
587 SharedRom() = default;
588 virtual ~SharedRom() = default;
589
590 std::shared_ptr<Rom> shared_rom() {
591 if (!shared_rom_) {
592 shared_rom_ = std::make_shared<Rom>();
593 }
594 return shared_rom_;
595 }
596
597 auto rom() {
598 if (!shared_rom_) {
599 shared_rom_ = std::make_shared<Rom>();
600 }
601 Rom* rom = shared_rom_.get();
602 return rom;
603 }
604
605 // private:
606 static std::shared_ptr<Rom> shared_rom_;
607};
608
609} // namespace app
610} // namespace yaze
611
612#endif
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:145
absl::Status WriteByte(int addr, uint8_t value)
Definition rom.h:342
auto mutable_palette_group()
Definition rom.h:482
auto palette_group()
Definition rom.h:481
auto gfx_sheets()
Definition rom.h:478
std::string title_
Definition rom.h:555
VersionConstants version_constants() const
Definition rom.h:491
absl::Status WriteTransaction(Args... args)
Definition rom.h:425
Z3_Version version_
Definition rom.h:579
auto begin()
Definition rom.h:468
std::vector< uint8_t > graphics_buffer() const
Definition rom.h:464
std::vector< uint8_t > rom_data_
Definition rom.h:561
absl::Status WriteLong(uint32_t addr, uint32_t value)
Definition rom.h:384
absl::Status LoadGfxGroups()
Definition rom.cc:380
uint16_t toint16(int offset)
Definition rom.h:273
std::vector< std::vector< uint8_t > > paletteset_ids
Definition rom.h:498
auto vector() const
Definition rom.h:471
absl::Status ReadTransaction(T &var, int address, Args &&... args)
Definition rom.h:433
absl::Status SaveToFile(bool backup, bool save_new=false, std::string filename="")
Saves the Rom data to a file.
Definition rom.cc:254
absl::StatusOr< uint32_t > ReadLong(int offset)
Definition rom.h:277
absl::Status SaveAllPalettes()
Saves all palettes in the Rom.
Definition rom.cc:367
absl::StatusOr< gfx::Tile16 > ReadTile16(uint32_t tile16_id)
Definition rom.h:300
auto link_graphics()
Definition rom.h:476
auto mutable_gfx_sheets()
Definition rom.h:479
std::array< gfx::Bitmap, kNumGfxSheets > graphics_sheets_
Definition rom.h:567
auto filename() const
Definition rom.h:473
core::ResourceLabelManager * resource_label()
Definition rom.h:488
absl::Status SavePalette(int index, const std::string &group_name, gfx::SnesPalette &palette)
Definition rom.cc:353
absl::Status LoadAllGraphicsData(bool defer_render=false)
This function iterates over all graphics sheets in the Rom and loads them into memory....
Definition rom.cc:83
virtual absl::Status WriteHelper(const WriteAction &action)
Definition rom.h:508
std::vector< std::vector< uint8_t > > spriteset_ids
Definition rom.h:497
auto size() const
Definition rom.h:467
absl::StatusOr< std::vector< uint8_t > > Load2BppGraphics()
Loads 2bpp graphics from Rom data.
Definition rom.cc:45
void Expand(int size)
Expand the Rom data to a specified size.
Definition rom.h:226
absl::Status WriteTile16(int tile16_id, const gfx::Tile16 &tile)
Definition rom.h:318
auto version() const
Definition rom.h:472
auto set_filename(std::string name)
Definition rom.h:474
std::vector< std::vector< uint8_t > > room_blockset_ids
Definition rom.h:496
absl::Status LoadLinkGraphics()
Loads the players 4bpp graphics sheet from Rom data.
Definition rom.cc:64
gfx::PaletteGroupMap palette_groups_
Definition rom.h:576
absl::Status WriteShort(int addr, uint16_t value)
Definition rom.h:370
unsigned long size_
Definition rom.h:552
absl::Status WriteColor(uint32_t address, const gfx::SnesColor &color)
Definition rom.h:414
absl::Status Write(int addr, int value)
Definition rom.h:332
absl::Status SaveGroupsToRom()
Definition rom.cc:418
absl::Status Close()
Close the Rom file.
Definition rom.h:234
bool is_loaded() const
Definition rom.h:455
std::string filename_
Definition rom.h:558
auto data()
Definition rom.h:470
absl::StatusOr< uint16_t > ReadWord(int offset)
Definition rom.h:264
absl::Status ReadHelper(T &var, int address)
Definition rom.h:530
auto end()
Definition rom.h:469
auto mutable_dungeon_palette(int i)
Definition rom.h:484
auto title() const
Definition rom.h:466
absl::Status WriteWord(int addr, uint16_t value)
Definition rom.h:356
bool is_loaded_
Definition rom.h:549
auto mutable_link_graphics()
Definition rom.h:477
auto dungeon_palette(int i)
Definition rom.h:483
uint8_t & operator[](unsigned long i)
Definition rom.h:446
absl::Status LoadFromFile(const std::string &filename, bool z3_load=true)
Definition rom.cc:142
std::vector< std::vector< uint8_t > > main_blockset_ids
Definition rom.h:495
absl::StatusOr< uint8_t > ReadByte(int offset)
Definition rom.h:256
absl::Status LoadFromBytes(const std::vector< uint8_t > &data)
Definition rom.cc:243
absl::Status WriteVector(int addr, std::vector< uint8_t > data)
Definition rom.h:399
absl::StatusOr< std::vector< uint8_t > > ReadByteVector(uint32_t offset, uint32_t length)
Definition rom.h:287
std::vector< uint8_t > graphics_buffer_
Definition rom.h:564
core::ResourceLabelManager resource_label_manager_
Definition rom.h:573
absl::Status LoadFromPointer(uchar *data, size_t length, bool z3_load=true)
Definition rom.cc:191
absl::Status ReadWritePreconditions()
Precondition check for reading and writing to the Rom.
Definition rom.h:244
absl::Status LoadZelda3()
Definition rom.cc:209
std::array< gfx::Bitmap, kNumLinkSheets > link_graphics_
Definition rom.h:570
A class to hold a shared pointer to a Rom object.
Definition rom.h:585
static std::shared_ptr< Rom > shared_rom_
Definition rom.h:606
std::shared_ptr< Rom > shared_rom()
Definition rom.h:590
virtual ~SharedRom()=default
A class to manage experimental feature flags.
Definition common.h:30
static void log(std::string message)
Definition common.h:215
SNES Color container.
Definition snes_color.h:38
uint16_t snes() const
Definition snes_color.h:90
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
Tile composition of four 8x8 tiles.
Definition snes_tile.h:133
#define RETURN_IF_ERROR(expression)
Definition constants.h:69
#define ASSIGN_OR_RETURN(type_variable_name, expression)
Definition constants.h:77
unsigned char uchar
Definition constants.h:121
std::string UppercaseHexWord(uint16_t word)
Definition labeling.cc:29
std::string UppercaseHexLong(uint32_t dword)
Definition labeling.cc:33
std::string UppercaseHexByte(uint8_t byte, bool leading)
Definition labeling.cc:21
TileInfo WordToTileInfo(uint16_t word)
Definition snes_tile.cc:324
uint16_t TileInfoToWord(TileInfo tile_info)
Definition snes_tile.cc:307
constexpr uint32_t kTile16Ptr
Definition rom.h:128
constexpr uint32_t kNumRoomBlocksets
Definition rom.h:134
Z3_Version
Different versions of the game supported by the Rom class.
Definition rom.h:45
constexpr uint32_t kNormalGfxSpaceStart
Definition rom.h:129
constexpr uint32_t kNormalGfxSpaceEnd
Definition rom.h:130
constexpr uint32_t kNumSpritesets
Definition rom.h:135
constexpr uint32_t kNumLinkSheets
Definition rom.h:127
constexpr uint32_t kMaxGraphics
Definition rom.h:140
constexpr uint32_t kUncompressedSheetSize
Definition rom.h:137
constexpr uint32_t kFontSpriteLocation
Definition rom.h:131
constexpr uint32_t kNumGfxSheets
Definition rom.h:126
constexpr uint32_t kNumMainBlocksets
Definition rom.h:133
constexpr uint32_t kGfxGroupsPointer
Definition rom.h:132
constexpr uint32_t kNumPalettesets
Definition rom.h:136
Definition common.cc:21
std::variant< int, uint8_t, uint16_t, short, std::vector< uint8_t >, gfx::SnesColor, std::vector< gfx::SnesColor > > value
Definition rom.h:504
Constants for each version of the game.
Definition rom.h:55
uint32_t overlayPointersBank
Definition rom.h:63
uint32_t kOverworldGfxPtr1
Definition rom.h:65
uint32_t kOverworldGfxGroups2
Definition rom.h:58
uint32_t kCompressedAllMap32PointersLow
Definition rom.h:60
uint32_t overlayPointers
Definition rom.h:62
uint32_t kGfxAnimatedPointer
Definition rom.h:56
uint32_t kOverworldGfxGroups1
Definition rom.h:57
uint32_t kCompressedAllMap32PointersHigh
Definition rom.h:59
uint32_t kDungeonPalettesGroups
Definition rom.h:73
uint32_t overworldMapPaletteGroup
Definition rom.h:61
uint32_t overworldTilesType
Definition rom.h:64
uint32_t kSpriteBlocksetPointer
Definition rom.h:72
uint32_t kOverworldGfxPtr3
Definition rom.h:67
uint32_t kOverworldGfxPtr2
Definition rom.h:66
Represents a mapping of palette groups.