1#ifndef YAZE_APP_DATA_OVERWORLD_H
2#define YAZE_APP_DATA_OVERWORLD_H
8#include <unordered_map>
11#include "absl/status/status.h"
12#include "absl/status/statusor.h"
269 void CacheTileset(uint64_t config_hash,
const std::vector<uint8_t>& tileset);
309 int i,
int parent_x_pos,
int parent_y_pos,
int transition_target_north,
310 int transition_target_west,
int transition_pos_x,
int transition_pos_y,
311 int screen_change_1,
int screen_change_2,
int screen_change_3,
312 int screen_change_4);
316 int i,
int parent_x_pos,
int parent_y_pos,
int transition_target_north,
317 int transition_target_west,
int transition_pos_x,
int transition_pos_y,
318 int screen_change_1,
int screen_change_2,
int screen_change_3,
319 int screen_change_4);
323 int i,
int parent_x_pos,
int parent_y_pos,
int transition_target_north,
324 int transition_target_west,
int transition_pos_x,
int transition_pos_y,
325 int screen_change_1,
int screen_change_2,
int screen_change_3,
326 int screen_change_4);
330 int i,
int parent_x_pos,
int parent_y_pos,
int transition_target_north,
331 int transition_target_west,
int transition_pos_x,
int transition_pos_y,
332 int screen_change_1,
int screen_change_2,
int screen_change_3,
333 int screen_change_4);
360 bool enable_main_palette,
362 bool enable_gfx_groups,
363 bool enable_subscreen_overlay,
364 bool enable_animated);
460 switch (world_type) {
491 if (state < 0 || state >= 3)
return std::vector<Sprite>{};
495 if (state < 0 || state >= 3)
return static_cast<std::vector<Sprite>*
>(
nullptr);
502 const std::vector<OverworldEntrance>&
entrances()
const {
545 void SetTile(
int x,
int y, uint16_t tile_id) {
580 const uint32_t* map32address);
588 std::vector<uint8_t>& bytes2,
int i,
int sx,
int sy,
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
Manages diggable tile state as a 512-bit bitfield.
Represents a single Overworld map screen.
Represents the full Overworld data, light and dark world.
std::vector< uint64_t > deleted_entrances_
absl::Status SaveMap32Expanded()
Save expanded tile32 definitions (v1+ ROMs)
auto tile16_blockset_data() const
auto current_area_palette() const
absl::Status DecompressAllMapTilesParallel()
std::vector< uint16_t > tiles32_list_
void set_current_world(int world)
int GetTileFromPosition(ImVec2 position) const
auto mutable_deleted_entrances()
absl::Status Load(Rom *rom)
Load all overworld data from ROM.
int current_world() const
std::vector< OverworldItem > all_items_
void OrganizeMapTiles(std::vector< uint8_t > &bytes, std::vector< uint8_t > &bytes2, int i, int sx, int sy, int &ttpos)
auto expanded_tile32() const
zelda3_version_pointers version_constants() const
Get version-specific ROM addresses.
std::array< int, kNumOverworldMaps > map_pointers1
std::vector< gfx::Tile32 > tiles32_unique_
auto deleted_entrances() const
absl::Status SaveMapProperties()
Save per-area graphics, palettes, and messages.
void ClearGraphicsConfigCache()
Clear entire graphics config cache Call when palette or graphics settings change globally.
const std::vector< OverworldEntrance > & holes() const
absl::Status SaveMap32Tiles()
Save tile32 definitions to ROM.
std::vector< OverworldEntrance > all_entrances_
absl::Status SaveTallAreaTransitions(int i, int parent_x_pos, int parent_y_pos, int transition_target_north, int transition_target_west, int transition_pos_x, int transition_pos_y, int screen_change_1, int screen_change_2, int screen_change_3, int screen_change_4)
Save screen transition data for tall (1x2) areas (v3+ only)
OverworldMapTiles map_tiles_
absl::Status SaveMap16Tiles()
Save tile16 definitions to ROM.
absl::Status SaveAreaSizes()
Save area size enum data (v3+ only)
std::vector< gfx::Tile16 > tiles16() const
DiggableTiles * mutable_diggable_tiles()
auto sprites(int state) const
void InvalidateSiblingMapCaches(int map_index)
Invalidate cached tilesets for a map and all its siblings.
absl::Status SaveLargeMaps()
Save large map parent/sibling relationships.
std::array< uint8_t, kNumOverworldMaps > map_parent_
void AssignWorldTiles(int x, int y, int sx, int sy, int tpos, OverworldBlockset &world)
absl::Status SaveDiggableTiles()
void InvalidateMapCache(int map_index)
Invalidate cached tileset for a specific map.
void SetGameData(GameData *game_data)
Overworld(Rom *rom, GameData *game_data=nullptr)
auto expanded_tile16() const
std::array< uint8_t, kNumTileTypes > all_tiles_types_
auto current_graphics() const
std::unordered_map< uint64_t, GraphicsConfigCache > gfx_config_cache_
void LoadTileTypes()
Load tile type collision data.
absl::Status CreateTile32Tilemap()
Build tile32 tilemap from current tile16 data.
std::array< int, kNumOverworldMaps > map_pointers1_id
auto overworld_map(int i) const
int current_map_id() const
const std::vector< uint8_t > * GetCachedTileset(uint64_t config_hash)
Try to get cached tileset data for a graphics configuration.
absl::Status SaveLargeAreaTransitions(int i, int parent_x_pos, int parent_y_pos, int transition_target_north, int transition_target_west, int transition_pos_x, int transition_pos_y, int screen_change_1, int screen_change_2, int screen_change_3, int screen_change_4)
Save screen transition data for large (2x2) areas.
OverworldBlockset & SelectWorldBlockset(int world_type)
bool HasExpandedPointerTables() const
Check if the ROM has expanded pointer tables for tail maps.
static constexpr int kMaxCachedConfigs
auto all_tiles_types() const
absl::Status SaveCustomOverworldASM(bool enable_bg_color, bool enable_main_palette, bool enable_mosaic, bool enable_gfx_groups, bool enable_subscreen_overlay, bool enable_animated)
Save custom ASM feature enable flags.
void set_current_map(int i)
void FillBlankMapTiles(int map_index)
auto mutable_overworld_map(int i)
absl::Status SaveEntrances()
Save entrance warp points to ROM.
absl::Status SaveExits()
Save exit return points to ROM.
absl::Status LoadSprites()
Load sprite data for all game states.
absl::Status EnsureMapBuilt(int map_index)
Build a map on-demand if it hasn't been built yet.
uint64_t ComputeGraphicsConfigHash(int map_index)
Compute hash of graphics configuration for cache lookup.
std::vector< OverworldMap > overworld_maps_
void CacheTileset(uint64_t config_hash, const std::vector< uint8_t > &tileset)
Cache tileset data for future reuse.
absl::Status SaveItems()
Save hidden overworld items to ROM.
absl::Status SaveAreaSpecificBGColors()
Save per-area background colors (v2+)
absl::Status LoadDiggableTiles()
absl::Status Save(Rom *rom)
Master save method (calls sub-methods in correct order)
std::vector< gfx::Tile32 > tiles32_
absl::Status SaveWideAreaTransitions(int i, int parent_x_pos, int parent_y_pos, int transition_target_north, int transition_target_west, int transition_pos_x, int transition_pos_y, int screen_change_1, int screen_change_2, int screen_change_3, int screen_change_4)
Save screen transition data for wide (2x1) areas (v3+ only)
uint16_t GetTile(int x, int y) const
absl::Status SaveOverworldMaps()
Save compressed map tile data to ROM.
auto mutable_all_tiles_types()
std::array< std::vector< Sprite >, 3 > all_sprites_
std::array< int, kNumOverworldMaps > map_pointers2_id
auto tiles32_unique() const
void SetTile(int x, int y, uint16_t tile_id)
absl::Status LoadOverworldMaps()
Load overworld map tile data.
std::vector< gfx::Tile16 > tiles16_
absl::Status AutoDetectDiggableTiles()
auto expanded_entrances() const
absl::Status AssembleMap16Tiles()
std::mutex map_tiles_mutex_
auto mutable_sprites(int state)
absl::Status LoadSpritesFromMap(int sprite_start, int sprite_count, int sprite_index)
Load sprites from a specific map range.
const DiggableTiles & diggable_tiles() const
const std::vector< OverworldEntrance > & entrances() const
std::array< std::vector< uint8_t >, kNumOverworldMaps > map_data_p1
absl::Status SaveLargeMapsExpanded()
Save expanded large map data (v1+ ROMs)
void AssignMapSizes(std::vector< OverworldMap > &maps)
Assign map sizes based on area size enum (v3+)
absl::Status SaveMap16Expanded()
Save expanded tile16 definitions (v1+ ROMs)
std::vector< OverworldExit > all_exits_
std::array< int, kNumOverworldMaps > map_pointers2
absl::StatusOr< uint16_t > GetTile16ForTile32(int index, int quadrant, int dimension, const uint32_t *map32address)
auto current_map_bitmap_data() const
std::array< std::vector< uint8_t >, kNumOverworldMaps > map_data_p2
absl::Status SaveSmallAreaTransitions(int i, int parent_x_pos, int parent_y_pos, int transition_target_north, int transition_target_west, int transition_pos_x, int transition_pos_y, int screen_change_1, int screen_change_2, int screen_change_3, int screen_change_4)
Save screen transition data for small (1x1) areas.
std::deque< int > built_map_lru_
absl::Status SaveMapOverlays()
Save interactive overlay data to ROM.
absl::Status AssembleMap32Tiles()
bool is_current_map_valid() const
DiggableTiles diggable_tiles_
static constexpr int kMaxBuiltMaps
OverworldBlockset & GetMapTiles(int world_type)
absl::Status SaveOverworldTilesType()
Save tile type collision data to ROM.
absl::Status SaveMusic()
Save per-area music IDs.
absl::Status ConfigureMultiAreaMap(int parent_index, AreaSizeEnum size)
Configure a multi-area map structure (Large/Wide/Tall)
auto overworld_maps() const
std::vector< OverworldEntrance > all_holes_
Zelda 3 specific classes and functions.
constexpr int overworldSpecialSpritePaletteExpandedTemp
constexpr int kAreaGfxIdPtr
constexpr int kOverworldSpritePaletteGroup
constexpr int kOverworldTransitionPositionY
constexpr int kNumMapsPerWorld
constexpr int kOverworldSpriteset
constexpr int kMap16ExpandedFlagPos
constexpr int LimitOfMap32
constexpr int NumberOfMap16Ex
constexpr int kOverworldScreenTileMapChangeByScreen1
constexpr int kOverworldMapDataOverflow
constexpr int kOverworldMapSizeHighByte
constexpr int overworldMessagesExpanded
constexpr int GravesTilemapPos
constexpr int overworldSpritesBeginingExpanded
constexpr int kNumTileTypes
constexpr int NumberOfMap32
constexpr int kOverworldScreenSize
constexpr int kExpandedPtrTableLow
constexpr int kOverworldScreenTileMapChangeByScreen4
constexpr int kNumTile16Individual
constexpr int ExpandedOverlaySpace
constexpr int GravesCountOnY
constexpr int kMap16Tiles
constexpr int overworldSpritesAgahnimExpanded
constexpr int kExpandedPtrTableMarker
constexpr int GravesYLine
constexpr int kNumOverworldMaps
constexpr int GravesXTilePos
constexpr int kOverworldMusicBeginning
std::vector< std::vector< uint16_t > > OverworldBlockset
Represents tile32 data for the overworld.
constexpr int kMap32TileBLExpanded
AreaSizeEnum
Area size enumeration for v3+ ROMs.
constexpr int kOverworldTransitionPositionX
constexpr int kOverworldMusicDarkWorld
constexpr int overworldSpecialSpriteGFXGroupExpandedTemp
constexpr int kOverworldSpecialPalGroup
constexpr int kOverworldScreenSizeForLoading
constexpr int kOverworldSpritePaletteIds
constexpr int overworldTilesType
constexpr int kMap32TileBRExpanded
constexpr int kMap32TileCountExpanded
constexpr int kTransitionTargetWest
constexpr int overworldMessages
constexpr int kOverworldMusicAgahnim
constexpr int kOverworldSpritesZelda
constexpr int kOverworldMapParentId
constexpr int GraveLinkSpecialHole
constexpr int Map32PerScreen
constexpr int kMap32ExpandedFlagPos
constexpr int kExpandedPtrTableHigh
constexpr int overworldCustomMosaicASM
constexpr int kOverworldMusicMasterSword
constexpr int kOverworldMusicZelda
constexpr int kOverworldMessageIds
constexpr int NumberOfMap16
constexpr int kOverworldMapSize
constexpr int kOverworldScreenTileMapChangeByScreen2
constexpr int overworldSpritesDataStartExpanded
constexpr int kOverworldCompressedMapPos
constexpr int overworldCustomMosaicArray
constexpr int kOverworldSpritesBeginning
constexpr int kExpandedMapCount
constexpr int kOverworldScreenTileMapChangeByScreen3
constexpr int kMap16TilesExpanded
constexpr uint8_t kExpandedPtrTableMagic
constexpr int kOverworldSpritesAgahnim
constexpr int kTransitionTargetNorth
constexpr int overworldSpritesZeldaExpanded
constexpr int kOverworldCompressedOverflowPos
constexpr int GravesYTilePos
constexpr int NumberOfOWSprites
constexpr int kMap32TileTRExpanded
constexpr int kOverworldMapPaletteIds
constexpr int kOverworldEntranceAllowedTilesLeft
constexpr int kOverworldSpecialGfxGroup
constexpr int kOverworldEntranceAllowedTilesRight
constexpr int GraveLinkSpecialStairs
Overworld map tile32 data.
OverworldBlockset dark_world
OverworldBlockset special_world
OverworldBlockset light_world
std::vector< uint8_t > current_gfx
ROM data pointers for different game versions.