yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
overworld_map.h
Go to the documentation of this file.
1#ifndef YAZE_APP_ZELDA3_OVERWORLD_MAP_H
2#define YAZE_APP_ZELDA3_OVERWORLD_MAP_H
3
4#include <array>
5#include <cstddef>
6#include <cstdint>
7#include <map>
8#include <optional>
9#include <vector>
10
11#include "absl/status/status.h"
12#include "absl/status/statusor.h"
15#include "core/rom_settings.h"
16#include "rom/rom.h"
17#include "zelda3/game_data.h"
21
22namespace yaze {
23namespace zelda3 {
24
25static constexpr int kTileOffsets[] = {0, 8, 4096, 4104};
26
27// 2 bytes for each overworld area (0x140)
28constexpr int OverworldCustomAreaSpecificBGPalette = 0x140000;
29
30// 1 byte, not 0 if enabled
31constexpr int OverworldCustomAreaSpecificBGEnabled = 0x140140;
32
33// Additional v3 constants
35 0x140340; // 2 bytes for each overworld area (0x140)
37 0x140144; // 1 byte, not 0 if enabled
39 0x1402A0; // 1 byte for each overworld area (0xA0)
41 0x140143; // 1 byte, not 0 if enabled
43 0x140480; // 8 bytes for each overworld area (0x500)
45 0x140148; // 1 byte, not 0 if enabled
47 0x140200; // 1 byte for each overworld area (0xA0)
49 0x140142; // 1 byte, not 0 if enabled
50
51// Vanilla overlay constants
52constexpr int kOverlayPointers =
53 0x77664; // 2 bytes for each overworld area (0x100)
54constexpr int kOverlayPointersBank = 0x0E; // Bank for overlay pointers
55constexpr int kOverlayData1 = 0x77676; // Check for custom overlay code
56constexpr int kOverlayData2 = 0x77677; // Custom overlay data pointer
57constexpr int kOverlayCodeStart = 0x77657; // Start of overlay code
58
59// 1 byte for each overworld area (0xA0)
60constexpr int OverworldCustomMainPaletteArray = 0x140160;
61// 1 byte, not 0 if enabled
62constexpr int OverworldCustomMainPaletteEnabled = 0x140141;
63
64// ZSCustomOverworld default GFX groups (8 sheets each for LW, DW, SW). The
65// game falls back to the world's sheet 7 entry when an area's animated GFX
66// value is 0x00 or 0xFF (ReadAnimatedTable).
67constexpr int OverworldCustomDefaultGFXGroups = 0x140980;
68
69// Number of bytes at the top of graphics slot 7 that come from the animated
70// tile sheet rather than the area's sheet 7 (the first two tile rows, 32
71// tiles, in the 8bpp 128px-wide layout). The game keeps the door frames in
72// the bottom half and streams the animated water/lava frames into the top.
73constexpr int kAnimatedSheetSlotBytes = 0x800;
74
75// v3 expanded constants
76constexpr int kOverworldMessagesExpanded = 0x1417F8;
77constexpr int kOverworldMapParentIdExpanded = 0x140998;
84
90
96
102
108
114
120
126
132
133constexpr int kOverworldSpecialSpriteGFXGroup = 0x016811;
134constexpr int kOverworldSpecialGFXGroup = 0x016821;
135constexpr int kOverworldSpecialPALGroup = 0x016831;
136constexpr int kOverworldSpecialSpritePalette = 0x016841;
137constexpr int kOverworldPalettesScreenToSetNew = 0x4C635;
140
141constexpr int transition_target_northExpanded = 0x1411B8;
142constexpr int transition_target_westExpanded = 0x1412F8;
143
144constexpr int kDarkWorldMapIdStart = 0x40;
145constexpr int kSpecialWorldMapIdStart = 0x80;
146
150using OverworldBlockset = std::vector<std::vector<uint16_t>>;
151
160
171 uint8_t main_palette = 0;
172 uint8_t animated_gfx = 0;
173 std::array<uint8_t, 8> custom_gfx_ids = {};
174 uint16_t subscreen_overlay = 0x00FF;
176};
177
185
192
195 uint8_t main_sheet = 0;
196 uint8_t effective_sheet = 0;
199 // Overworld slot 7 retains the main/area sheet in the bottom half; its top
200 // half is replaced with animated tiles when the map is rendered.
201 bool bottom_half_only = false;
202};
203
207inline int SubscreenOverlayScreen(uint16_t overlay_id) {
208 if (overlay_id >= kSpecialWorldMapIdStart && overlay_id < 0xA0) {
209 return overlay_id;
210 }
211 return -1;
212}
213
217inline bool IsBackgroundSubscreenOverlay(uint16_t overlay_id) {
218 return overlay_id == 0x0095 || overlay_id == 0x0096 || overlay_id == 0x009C;
219}
220
224inline bool IsOverworldBackdropPixel(uint8_t index) {
225 return (index & 0x07) == 0;
226}
227
230using OverworldTilesetKey = std::array<uint8_t, 17>;
231
236 public:
237 OverworldMap() = default;
238 OverworldMap(int index, Rom* rom, GameData* game_data = nullptr);
239 static absl::StatusOr<OverworldMap> CreateLyraPreview(
240 int index, Rom* rom, GameData* game_data,
241 const rom::LyraLayoutInspection* layout);
242
244 if (graphics_preview_ == preview)
245 return;
246 graphics_preview_ = preview;
247 built_ = false;
248 }
249 bool HasGraphicsPreview() const { return !graphics_preview_.empty(); }
250
251 const GameData* game_data() const { return game_data_; }
257
263 std::map<uint16_t, std::vector<uint8_t>> overrides) {
264 graphics_sheet_overrides_ = std::move(overrides);
265 }
266
269 bool SourceSheetsChanged() const;
270
271 absl::Status BuildMap(int count, int game_state, int world,
272 std::vector<gfx::Tile16>& tiles16,
273 OverworldBlockset& world_blockset);
274
279 absl::Status BuildMapWithCache(
280 int count, int game_state, int world, std::vector<gfx::Tile16>& tiles16,
281 OverworldBlockset& world_blockset,
282 const std::vector<uint8_t>* cached_tileset,
283 const std::vector<uint8_t>* cached_tile16_blockset = nullptr);
284
285 void LoadAreaGraphics();
287 const OverworldMap& map, const GraphicsContextIdentity& identity);
288 absl::Status LoadPalette();
289 absl::Status LoadOverlay();
290 absl::Status LoadVanillaOverlayData();
291 absl::Status BuildTileset();
292 absl::Status BuildTiles16Gfx(std::vector<gfx::Tile16>& tiles16, int count);
293 absl::Status BuildBitmap(OverworldBlockset& world_blockset);
294
305 absl::Status BuildSubscreenOverlayLayer(
306 const OverworldBlockset& overlay_world_blockset, int overlay_screen,
307 bool background, std::vector<uint8_t>* out) const;
308
311 uint64_t bitmap_serial() const { return bitmap_serial_; }
312
317 void UseCachedTileset(const std::vector<uint8_t>& cached_gfx) {
318 current_gfx_ = cached_gfx;
320 // Overworld::BuildMapWithTilesetCache only hands out an entry whose
321 // recorded sheet revisions match the store, so these pixels are current.
323 }
324
325 void DrawAnimatedTiles();
326
327 const std::vector<uint8_t>& current_tile16_blockset() const {
328 return current_blockset_;
329 }
330 const std::vector<uint8_t>& current_graphics() const { return current_gfx_; }
332 const std::vector<uint8_t>& bitmap_data() const { return bitmap_data_; }
333 auto is_large_map() const { return large_map_; }
334 auto is_initialized() const { return initialized_; }
335 auto is_built() const { return built_; }
336 auto parent() const { return parent_; }
337 int index() const { return index_; }
338 auto mutable_mosaic() { return &mosaic_; }
340 // A display/project override has not declared a writable model source.
342 return &current_palette_;
343 }
345 return palette_addresses_;
346 }
347
348 void SetNotBuilt() { built_ = false; }
349
350 auto area_graphics() const { return area_graphics_; }
353 auto area_palette() const { return area_palette_; }
354 auto sprite_graphics(int i) const { return sprite_graphics_[i]; }
355 auto sprite_palette(int i) const { return sprite_palette_[i]; }
356 auto message_id() const { return message_id_; }
357 auto area_music(int i) const { return area_music_[i]; }
358 auto static_graphics(int i) const { return static_graphics_[i]; }
359 auto large_index() const { return large_index_; }
360 auto area_size() const { return area_size_; }
361 auto main_gfx_id() const { return main_gfx_id_; }
362
363 auto main_palette() const { return main_palette_; }
364 void set_main_palette(uint8_t palette) { main_palette_ = palette; }
365
367 void set_area_specific_bg_color(uint16_t color) {
369 }
370
371 // Standard metadata is loaded through the area parent for editing/rendering.
372 // Preserve the screen's original raw slot until that model value is edited.
373 // Keeping both values also restores the original bytes after Save/Undo/Save.
374 uint8_t area_graphics_for_save() const {
376 }
377 uint8_t area_palette_for_save() const {
379 }
380 uint8_t sprite_graphics_for_save(int state) const {
381 return AreaInfoForSave(2 + state, sprite_graphics_[state]);
382 }
383 uint8_t sprite_palette_for_save(int state) const {
384 return AreaInfoForSave(5 + state, sprite_palette_[state]);
385 }
386
387 auto subscreen_overlay() const { return subscreen_overlay_; }
388 void set_subscreen_overlay(uint16_t overlay) { subscreen_overlay_ = overlay; }
389
390 auto animated_gfx() const { return animated_gfx_; }
391 void set_animated_gfx(uint8_t gfx) { animated_gfx_ = gfx; }
392
393 auto game_state() const { return game_state_; }
394 void set_game_state(int state) { game_state_ = state; }
395
396 auto custom_tileset(int index) const { return custom_gfx_ids_[index]; }
397
401 void InheritAreaProperties(const OverworldMap& area_parent);
404 return inherited_area_.has_value();
405 }
406 uint8_t render_main_palette() const {
408 }
412
415 uint8_t animated_sheet() const { return animated_sheet_; }
417
418 // Overlay accessors (interactive overlays)
419 auto overlay_id() const { return overlay_id_; }
420 auto has_overlay() const { return has_overlay_; }
421 const auto& overlay_data() const { return overlay_data_; }
422
423 // Mosaic expanded accessors
424 const std::array<bool, 4>& mosaic_expanded() const {
425 return mosaic_expanded_;
426 }
427 void set_mosaic_expanded(int index, bool value) {
428 mosaic_expanded_[index] = value;
429 }
430 void set_custom_tileset(int index, uint8_t value) {
431 custom_gfx_ids_[index] = value;
432 }
433
437 auto mutable_sprite_graphics(int i) { return &sprite_graphics_[i]; }
438 auto mutable_sprite_palette(int i) { return &sprite_palette_[i]; }
439 auto mutable_message_id() { return &message_id_; }
443 auto mutable_area_music(int i) { return &area_music_[i]; }
444 auto mutable_static_graphics(int i) { return &static_graphics_[i]; }
445
446 auto set_area_graphics(uint8_t value) { area_graphics_ = value; }
447 auto set_area_palette(uint8_t value) { area_palette_ = value; }
448 auto set_sprite_graphics(int i, uint8_t value) {
449 sprite_graphics_[i] = value;
450 }
451 auto set_sprite_palette(int i, uint8_t value) { sprite_palette_[i] = value; }
452 auto set_message_id(uint16_t value) { message_id_ = value; }
453
455
456 void SetAsLargeMap(int parent_index, int quadrant) {
457 parent_ = parent_index;
458 large_index_ = quadrant;
459 large_map_ = true;
461 }
462
463 void SetAsSmallMap(int index = -1) {
464 if (index != -1)
465 parent_ = index;
466 else
467 parent_ = index_;
468 large_index_ = 0;
469 large_map_ = false;
471 }
472
474 area_size_ = size;
476 }
477
478 void SetParent(int parent_index) { parent_ = parent_index; }
479
487 void Destroy() {
488 // Free memory-heavy data
489 current_blockset_.clear();
490 current_gfx_.clear();
491 bitmap_data_.clear();
492 map_tiles_.light_world.clear();
493 map_tiles_.dark_world.clear();
495
496 // Reset build state (allows rebuild)
497 built_ = false;
498 initialized_ = false;
499
500 // Reset runtime state (will be recomputed on rebuild)
501 world_ = 0;
502 game_state_ = 0;
503 main_gfx_id_ = 0;
504
505 // NOTE: Do NOT reset these identity fields - they are needed for rebuild:
506 // - index_: Map's position in overworld array (used for ROM lookups)
507 // - parent_: Map's parent relationship (for large maps)
508 // - rom_: ROM pointer (needed for data access)
509 // - large_map_, large_index_, area_size_: Map structure info
510 // - message_id_, area_graphics_, area_palette_, etc: Loaded from ROM on rebuild
511 }
512
513 private:
514 OverworldMap(int index, Rom* rom, GameData* game_data, bool seed_area_parent,
515 bool skip_legacy_data = false);
516 absl::Status LoadLyraPreviewProperties();
518 void LoadAreaInfo();
520 uint8_t AreaInfoForSave(size_t field, uint8_t value) const {
522 value == loaded_area_info_[field]
523 ? raw_area_info_[field]
524 : value;
525 }
527 void SetupCustomTileset(uint8_t asm_version);
528
529 void LoadMainBlocksetId();
530 int ComputeMainBlocksetId() const;
531 bool UsesSessionMainGraphicsGroup() const;
532 bool UsesSessionAreaGraphicsGroup() const;
534 std::array<uint8_t, 8> ResolveMainGraphicsGroup() const;
535 std::array<uint8_t, 4> ResolveAreaGraphicsGroup() const;
536 std::array<uint8_t, 4> ResolveSpriteGraphicsGroup() const;
537 std::array<uint8_t, 16> ResolveStaticGraphics() const;
539 uint8_t ComputeWorldBasedMainPalette() const;
540
541 void ProcessGraphicsBuffer(int index, int static_graphics_offset, int size,
542 const uint8_t* all_gfx);
543 absl::StatusOr<gfx::SnesPalette> GetPalette(const gfx::PaletteGroup& group,
544 int index, int previous_index,
545 int limit,
546 int* resolved_index = nullptr);
547
548 // Helper to get version constants from game_data or default to US
550 return kVersionConstantsMap.at(game_data_ ? game_data_->version
551 : zelda3_version::US);
552 }
553
554 Rom* rom_ = nullptr;
557
558 bool built_ = false;
559 bool large_map_ = false;
560 bool initialized_ = false;
561 bool mosaic_ = false;
562
563 int index_ = 0; // Map index
564 int parent_ = 0; // Parent map index
565 int large_index_ = 0; // Quadrant ID [0-3]
566 int world_ = 0; // World ID [0-2]
567 int game_state_ = 0; // Game state [0-2]
568 int main_gfx_id_ = 0; // Main Gfx ID
570
571 uint16_t message_id_ = 0;
572 uint8_t area_graphics_ = 0;
573 uint8_t area_palette_ = 0;
574 uint8_t main_palette_ = 0; // Custom Overworld Main Palette ID
575 uint8_t animated_gfx_ = 0; // Custom Overworld Animated ID
576 uint16_t subscreen_overlay_ = 0; // Custom Overworld Subscreen Overlay ID
578 0; // Custom Overworld Area-Specific Background Color
579 uint8_t animated_sheet_ = 0; // Sheet for the top half of slot 7
580 uint64_t bitmap_serial_ = 0;
581 std::optional<AreaRenderProperties> inherited_area_;
582 std::array<uint8_t, 8> loaded_area_info_{};
583 std::array<uint8_t, 8> raw_area_info_{};
586
587 std::array<uint8_t, 8> custom_gfx_ids_ = {};
588 std::array<uint8_t, 3> sprite_graphics_;
589 std::array<uint8_t, 3> sprite_palette_;
590 std::array<uint8_t, 4> area_music_;
591 std::array<uint8_t, 16> static_graphics_;
592
593 std::array<bool, 4> mosaic_expanded_;
594
595 // Overlay support (interactive overlays that reveal holes/change elements)
596 uint16_t overlay_id_ = 0;
597 bool has_overlay_ = false;
598 std::vector<uint8_t> overlay_data_;
599
600 std::vector<uint8_t> current_blockset_;
601 std::vector<uint8_t> current_gfx_;
602 std::vector<uint8_t> bitmap_data_;
603
607 std::map<uint16_t, std::vector<uint8_t>> graphics_sheet_overrides_;
609 // Store revision of each static_graphics_ slot at the last BuildTileset();
610 // 0 for slots not read from the store.
611 static constexpr int kNumSourceSheets = 17; // 16 slots + animated sheet
612 std::array<uint64_t, kNumSourceSheets> source_sheet_revisions_{};
614 uint16_t SourceSheetForRevision(int i) const;
616};
617
618} // namespace zelda3
619} // namespace yaze
620
621#endif
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition rom.h:49
static RomSettings & Get()
uint32_t GetAddressOr(const std::string &key, uint32_t default_value) const
Shared graphical context across editors.
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
Represents a single Overworld map screen.
auto set_area_palette(uint8_t value)
void SetAsLargeMap(int parent_index, int quadrant)
friend ResolvedGraphicsContext DescribeOverworldGraphicsContext(const OverworldMap &map, const GraphicsContextIdentity &identity)
OverworldMainSlotProvenance MainSlotProvenance(int slot) const
void ProcessGraphicsBuffer(int index, int static_graphics_offset, int size, const uint8_t *all_gfx)
const gfx::SnesPalette & current_palette() const
zelda3_version_pointers version_constants() const
void set_main_palette(uint8_t palette)
const rom::LyraLayoutInspection * descriptor_layout_
uint8_t render_main_palette() const
std::array< uint8_t, 8 > raw_area_info_
std::vector< uint8_t > current_gfx_
std::array< uint64_t, kNumSourceSheets > source_sheet_revisions_
std::vector< uint8_t > current_blockset_
std::array< bool, 4 > mosaic_expanded_
absl::Status LoadVanillaOverlayData()
std::vector< uint8_t > bitmap_data_
void SetGraphicsSheetOverrides(std::map< uint16_t, std::vector< uint8_t > > overrides)
void Destroy()
Free memory-heavy data while preserving map identity.
bool UsesSessionAreaGraphicsGroup() const
bool has_inherited_area_properties() const
std::array< uint8_t, 8 > loaded_area_info_
const std::array< bool, 4 > & mosaic_expanded() const
void SetAsSmallMap(int index=-1)
auto set_message_id(uint16_t value)
std::map< uint16_t, std::vector< uint8_t > > graphics_sheet_overrides_
void SetGameData(GameData *game_data)
std::array< uint8_t, 16 > ResolveStaticGraphics() const
auto set_sprite_palette(int i, uint8_t value)
uint8_t sprite_palette_for_save(int state) const
void set_custom_tileset(int index, uint8_t value)
void set_area_specific_bg_color(uint16_t color)
const auto & overlay_data() const
const std::vector< uint8_t > & current_graphics() const
std::array< uint8_t, 4 > ResolveSpriteGraphicsGroup() const
void SetupCustomTileset(uint8_t asm_version)
auto sprite_graphics(int i) const
absl::Status BuildTiles16Gfx(std::vector< gfx::Tile16 > &tiles16, int count)
OverworldMapTiles map_tiles_
bool UsesSessionSpriteGraphicsGroup() const
absl::Status BuildMap(int count, int game_state, int world, std::vector< gfx::Tile16 > &tiles16, OverworldBlockset &world_blockset)
std::array< uint8_t, 3 > sprite_graphics_
void SetParent(int parent_index)
bool UsesSessionMainGraphicsGroup() const
auto static_graphics(int i) const
static constexpr int kNumSourceSheets
OverworldRoomsetSource roomset_source() const
void SetAreaSize(AreaSizeEnum size)
auto custom_tileset(int index) const
auto area_music(int i) const
uint8_t ComputeWorldBasedMainPalette() const
absl::Status BuildBitmap(OverworldBlockset &world_blockset)
std::array< uint8_t, 3 > sprite_palette_
uint8_t AreaInfoForSave(size_t field, uint8_t value) const
const std::vector< uint8_t > & current_tile16_blockset() const
std::array< uint8_t, 4 > area_music_
uint16_t render_subscreen_overlay() const
static absl::StatusOr< OverworldMap > CreateLyraPreview(int index, Rom *rom, GameData *game_data, const rom::LyraLayoutInspection *layout)
std::array< uint8_t, 16 > static_graphics_
std::array< uint8_t, 8 > custom_gfx_ids_
const GameData * game_data() const
void set_animated_gfx(uint8_t gfx)
auto set_area_graphics(uint8_t value)
void set_game_state(int state)
const std::vector< uint8_t > & bitmap_data() const
uint8_t animated_sheet() const
absl::Status BuildMapWithCache(int count, int game_state, int world, std::vector< gfx::Tile16 > &tiles16, OverworldBlockset &world_blockset, const std::vector< uint8_t > *cached_tileset, const std::vector< uint8_t > *cached_tile16_blockset=nullptr)
Build map with optional cached tileset for performance.
absl::Status LoadLyraPreviewProperties()
PaletteAddressMap palette_addresses_
uint8_t area_graphics_for_save() const
const PaletteAddressMap & palette_addresses() const
std::array< uint8_t, 4 > ResolveAreaGraphicsGroup() const
void InheritAreaProperties(const OverworldMap &area_parent)
void set_subscreen_overlay(uint16_t overlay)
OverworldTilesetKey tileset_key() const
std::vector< uint8_t > overlay_data_
void UseCachedTileset(const std::vector< uint8_t > &cached_gfx)
Use a pre-computed tileset from cache instead of rebuilding.
std::optional< AreaRenderProperties > inherited_area_
auto area_specific_bg_color() const
auto sprite_palette(int i) const
uint8_t sprite_graphics_for_save(int state) const
gfx::SnesPalette current_palette_
uint64_t bitmap_serial() const
uint16_t SourceSheetForRevision(int i) const
void set_mosaic_expanded(int index, bool value)
uint8_t * mutable_custom_tileset(int index)
absl::Status BuildSubscreenOverlayLayer(const OverworldBlockset &overlay_world_blockset, int overlay_screen, bool background, std::vector< uint8_t > *out) const
Build this area's subscreen overlay layer (512x512, 8bpp).
absl::StatusOr< gfx::SnesPalette > GetPalette(const gfx::PaletteGroup &group, int index, int previous_index, int limit, int *resolved_index=nullptr)
void SetGraphicsPreview(const AreaGraphicsPreview &preview)
AreaGraphicsPreview graphics_preview_
std::array< uint8_t, 8 > ResolveMainGraphicsGroup() const
auto set_sprite_graphics(int i, uint8_t value)
AreaRenderProperties area_render_properties() const
uint8_t area_palette_for_save() const
constexpr char kOverworldTransitionPosYExpanded[]
constexpr char kOverworldScreenChange4Expanded[]
constexpr char kOverworldMapParentExpanded[]
constexpr char kOverworldScreenChange1Expanded[]
constexpr char kOverworldMessagesExpanded[]
constexpr char kOverworldScreenChange2Expanded[]
constexpr char kOverworldScreenChange3Expanded[]
constexpr char kOverworldTransitionPosXExpanded[]
int GetOverworldMapParentIdExpanded()
constexpr int OverworldCustomTileGFXGroupEnabled
constexpr int OverworldCustomAreaSpecificBGEnabled
std::map< uint16_t, PreviewTile8 > AreaGraphicsPreview
int GetOverworldScreenChange3Expanded()
int GetOverworldScreenChange4Expanded()
constexpr int kOverworldScreenTileMapChangeByScreen2Expanded
constexpr int kOverlayData1
constexpr int kSpecialWorldMapIdStart
constexpr int OverworldCustomMosaicArray
constexpr int kOverworldTransitionPositionXExpanded
void ApplyGraphicsPreview(const AreaGraphicsPreview &preview, std::vector< uint8_t > &graphics)
constexpr int OverworldCustomDefaultGFXGroups
constexpr int OverworldCustomAnimatedGFXEnabled
constexpr int OverworldCustomMainPaletteEnabled
constexpr int OverworldCustomMainPaletteArray
constexpr int kAnimatedSheetSlotBytes
constexpr int kOverworldTransitionPositionYExpanded
constexpr int kOverworldSpecialSpritePaletteExpandedTemp
constexpr int kOverworldMapParentIdExpanded
constexpr int kOverworldSpecialSpriteGfxGroupExpandedTemp
std::vector< std::vector< uint16_t > > OverworldBlockset
Represents tile32 data for the overworld.
AreaSizeEnum
Area size enumeration for v3+ ROMs.
constexpr int kOverlayPointersBank
std::array< uint8_t, 17 > OverworldTilesetKey
constexpr int transition_target_westExpanded
int GetOverworldScreenChange1Expanded()
bool IsOverworldBackdropPixel(uint8_t index)
constexpr int kOverworldSpecialPALGroup
struct yaze::zelda3::OverworldMapTiles OverworldMapTiles
Overworld map tile32 data.
int GetOverworldTransitionPositionXExpanded()
constexpr int kOverworldPalettesScreenToSetNew
constexpr int kOverworldMessagesExpanded
constexpr int kOverworldScreenTileMapChangeByScreen3Expanded
constexpr int kOverlayData2
constexpr int transition_target_northExpanded
constexpr int kOverworldSpecialSpritePalette
constexpr int OverworldCustomAnimatedGFXArray
constexpr int kDarkWorldMapIdStart
constexpr int OverworldCustomMosaicEnabled
constexpr int kOverworldScreenTileMapChangeByScreen4Expanded
bool IsBackgroundSubscreenOverlay(uint16_t overlay_id)
constexpr int kOverworldSpecialSpriteGFXGroup
constexpr int kOverworldScreenTileMapChangeByScreen1Expanded
constexpr int OverworldCustomTileGFXGroupArray
int SubscreenOverlayScreen(uint16_t overlay_id)
constexpr int OverworldCustomSubscreenOverlayEnabled
constexpr int OverworldCustomAreaSpecificBGPalette
int GetOverworldMessagesExpanded()
constexpr int kOverlayPointers
int GetOverworldScreenChange2Expanded()
constexpr int kOverlayCodeStart
int GetOverworldTransitionPositionYExpanded()
constexpr int kOverworldSpecialGFXGroup
constexpr int OverworldCustomSubscreenOverlayArray
std::array< std::optional< PaletteColorAddress >, 128 > PaletteAddressMap
Represents a group of palettes.
Per-area render settings the game reads with the area id ($8A).
std::array< uint8_t, 8 > custom_gfx_ids
zelda3_version version
Definition game_data.h:84
Overworld map tile32 data.
ROM data pointers for different game versions.
Definition zelda.h:71