yaze 0.2.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
overworld.h
Go to the documentation of this file.
1#ifndef YAZE_APP_DATA_OVERWORLD_H
2#define YAZE_APP_DATA_OVERWORLD_H
3
4#include <array>
5#include <vector>
6
7#include "absl/container/flat_hash_map.h"
8#include "absl/status/status.h"
9#include "app/gfx/snes_tile.h"
10#include "app/rom.h"
16
17namespace yaze {
18namespace zelda3 {
19
20constexpr int GravesYTilePos = 0x49968; // short (0x0F entries)
21constexpr int GravesXTilePos = 0x49986; // short (0x0F entries)
22constexpr int GravesTilemapPos = 0x499A4; // short (0x0F entries)
23constexpr int GravesGFX = 0x499C2; // short (0x0F entries)
24constexpr int GravesXPos = 0x4994A; // short (0x0F entries)
25constexpr int GravesYLine = 0x4993A; // short (0x08 entries)
26constexpr int GravesCountOnY = 0x499E0; // Byte 0x09 entries
27constexpr int GraveLinkSpecialHole = 0x46DD9; // short
28constexpr int GraveLinkSpecialStairs = 0x46DE0; // short
29
30constexpr int kOverworldMapPaletteIds = 0x7D1C;
31constexpr int kOverworldSpritePaletteIds = 0x7B41;
32constexpr int kOverworldSpritePaletteGroup = 0x75580;
33constexpr int kOverworldSpriteset = 0x7A41;
34constexpr int kOverworldSpecialGfxGroup = 0x16821;
35constexpr int kOverworldSpecialPalGroup = 0x16831;
36constexpr int kOverworldSpritesBeginning = 0x4C881;
37constexpr int kOverworldSpritesAgahnim = 0x4CA21;
38constexpr int kOverworldSpritesZelda = 0x4C901;
39
40constexpr int kAreaGfxIdPtr = 0x7C9C;
41constexpr int kOverworldMessageIds = 0x3F51D;
42
43constexpr int kOverworldMusicBeginning = 0x14303;
44constexpr int kOverworldMusicZelda = 0x14303 + 0x40;
45constexpr int kOverworldMusicMasterSword = 0x14303 + 0x80;
46constexpr int kOverworldMusicAgahnim = 0x14303 + 0xC0;
47constexpr int kOverworldMusicDarkWorld = 0x14403;
48constexpr int kOverworldEntranceAllowedTilesLeft = 0xDB8C1;
50
51// 0x00 = small maps, 0x20 = large maps
52constexpr int kOverworldMapSize = 0x12844;
53
54// 0x01 = small maps, 0x03 = large maps
55constexpr int kOverworldMapSizeHighByte = 0x12884;
56
57// relative to the WORLD + 0x200 per map
58// large map that are not == parent id = same position as their parent!
59// eg for X position small maps :
60// 0000, 0200, 0400, 0600, 0800, 0A00, 0C00, 0E00
61// all Large map would be :
62// 0000, 0000, 0400, 0400, 0800, 0800, 0C00, 0C00
63constexpr int kOverworldMapParentId = 0x125EC;
64constexpr int kOverworldTransitionPositionY = 0x128C4;
65constexpr int kOverworldTransitionPositionX = 0x12944;
66constexpr int kOverworldScreenSize = 0x1788D;
67constexpr int kOverworldScreenSizeForLoading = 0x4C635;
68
73
74constexpr int kOverworldMapDataOverflow = 0x130000;
75
76constexpr int kTransitionTargetNorth = 0x13EE2;
77constexpr int kTransitionTargetWest = 0x13F62;
78constexpr int overworldCustomMosaicASM = 0x1301D0;
79constexpr int overworldCustomMosaicArray = 0x1301F0;
80
81// Expanded tile16 and tile32
82constexpr int kMap16TilesExpanded = 0x1E8000;
83constexpr int kMap32TileTRExpanded = 0x020000;
84constexpr int kMap32TileBLExpanded = 0x1F0000;
85constexpr int kMap32TileBRExpanded = 0x1F8000;
86constexpr int kMap32TileCountExpanded = 0x0067E0;
87constexpr int kMap32ExpandedFlagPos = 0x01772E; // 0x04
88constexpr int kMap16ExpandedFlagPos = 0x02FD28; // 0x0F
89constexpr int kOverworldEntranceExpandedFlagPos = 0x0DB895; // 0xB8
90
91constexpr int kOverworldCompressedMapPos = 0x058000;
92constexpr int kOverworldCompressedOverflowPos = 0x137FFF;
93
94constexpr int kNumTileTypes = 0x200;
95constexpr int kMap16Tiles = 0x78000;
96constexpr int kNumOverworldMaps = 160;
97constexpr int kNumTile16Individual = 4096;
98constexpr int Map32PerScreen = 256;
99constexpr int NumberOfMap16 = 3752; // 4096
100constexpr int NumberOfMap16Ex = 4096; // 4096
101constexpr int LimitOfMap32 = 8864;
102constexpr int NumberOfOWSprites = 352;
104constexpr int kNumMapsPerWorld = 0x40;
105
113 public:
115
116 absl::Status Load(Rom *rom);
117 absl::Status LoadOverworldMaps();
118 void LoadTileTypes();
119 absl::Status LoadEntrances();
120 absl::Status LoadHoles();
121
122 absl::Status LoadExits();
123 absl::Status LoadItems();
124 absl::Status LoadSprites();
125 absl::Status LoadSpritesFromMap(int sprite_start, int sprite_count,
126 int sprite_index);
127
128 absl::Status Save(Rom *rom);
129 absl::Status SaveOverworldMaps();
130 absl::Status SaveLargeMaps();
131 absl::Status SaveEntrances();
132 absl::Status SaveExits();
133 absl::Status SaveItems();
134
135 absl::Status CreateTile32Tilemap();
136 absl::Status SaveMap16Expanded();
137 absl::Status SaveMap16Tiles();
138 absl::Status SaveMap32Expanded();
139 absl::Status SaveMap32Tiles();
140
141 absl::Status SaveMapProperties();
142
143 auto rom() const { return rom_; }
144 auto mutable_rom() { return rom_; }
145
146 void Destroy() {
147 for (auto &map : overworld_maps_) {
148 map.Destroy();
149 }
150 overworld_maps_.clear();
151 all_entrances_.clear();
152 all_exits_.clear();
153 all_items_.clear();
154 for (auto &sprites : all_sprites_) {
155 sprites.clear();
156 }
157 tiles16_.clear();
158 tiles32_.clear();
159 tiles32_unique_.clear();
160 is_loaded_ = false;
161 }
162
163 int GetTileFromPosition(ImVec2 position) const {
164 if (current_world_ == 0) {
165 return map_tiles_.light_world[position.x][position.y];
166 } else if (current_world_ == 1) {
167 return map_tiles_.dark_world[position.x][position.y];
168 } else {
169 return map_tiles_.special_world[position.x][position.y];
170 }
171 }
172
174 switch (world_type) {
175 case 0:
176 return map_tiles_.light_world;
177 case 1:
178 return map_tiles_.dark_world;
179 case 2:
180 return map_tiles_.special_world;
181 default:
182 return map_tiles_.light_world;
183 }
184 }
185
186 auto overworld_maps() const { return overworld_maps_; }
187 auto overworld_map(int i) const { return &overworld_maps_[i]; }
188 auto mutable_overworld_map(int i) { return &overworld_maps_[i]; }
189 auto exits() const { return &all_exits_; }
190 auto mutable_exits() { return &all_exits_; }
191 std::vector<gfx::Tile16> tiles16() const { return tiles16_; }
192 auto mutable_tiles16() { return &tiles16_; }
193 auto sprites(int state) const { return all_sprites_[state]; }
194 auto mutable_sprites(int state) { return &all_sprites_[state]; }
195 auto current_graphics() const {
196 return overworld_maps_[current_map_].current_graphics();
197 }
198 auto &entrances() { return all_entrances_; }
200 auto &holes() { return all_holes_; }
201 auto mutable_holes() { return &all_holes_; }
202 auto deleted_entrances() const { return deleted_entrances_; }
204 auto current_area_palette() const {
205 return overworld_maps_[current_map_].current_palette();
206 }
208 return overworld_maps_[current_map_].bitmap_data();
209 }
210 auto tile16_blockset_data() const {
211 return overworld_maps_[current_map_].current_tile16_blockset();
212 }
213 auto is_loaded() const { return is_loaded_; }
214 void set_current_map(int i) { current_map_ = i; }
215 auto map_tiles() const { return map_tiles_; }
216 auto mutable_map_tiles() { return &map_tiles_; }
217 auto all_items() const { return all_items_; }
218 auto mutable_all_items() { return &all_items_; }
219 auto all_tiles_types() const { return all_tiles_types_; }
221
222 private:
229
230 void FetchLargeMaps();
231 absl::StatusOr<uint16_t> GetTile16ForTile32(int index, int quadrant,
232 int dimension,
233 const uint32_t *map32address);
234 absl::Status AssembleMap32Tiles();
235 absl::Status AssembleMap16Tiles();
236 void AssignWorldTiles(int x, int y, int sx, int sy, int tpos,
237 OverworldBlockset &world);
238 void OrganizeMapTiles(std::vector<uint8_t> &bytes,
239 std::vector<uint8_t> &bytes2, int i, int sx, int sy,
240 int &ttpos);
242
244
245 bool is_loaded_ = false;
246 bool expanded_tile16_ = false;
247 bool expanded_tile32_ = false;
249
250 int game_state_ = 0;
253
255
256 std::vector<OverworldMap> overworld_maps_;
257 std::vector<OverworldEntrance> all_entrances_;
258 std::vector<OverworldEntrance> all_holes_;
259 std::vector<OverworldExit> all_exits_;
260 std::vector<OverworldItem> all_items_;
261
262 std::vector<gfx::Tile16> tiles16_;
263 std::vector<gfx::Tile32> tiles32_;
264 std::vector<gfx::Tile32> tiles32_unique_;
265
266 std::vector<uint16_t> tiles32_list_;
267 std::vector<uint64_t> deleted_entrances_;
268
269 std::array<uint8_t, kNumOverworldMaps> map_parent_ = {0};
270 std::array<uint8_t, kNumTileTypes> all_tiles_types_ = {0};
271 std::array<std::vector<Sprite>, 3> all_sprites_;
272 std::array<std::vector<uint8_t>, kNumOverworldMaps> map_data_p1;
273 std::array<std::vector<uint8_t>, kNumOverworldMaps> map_data_p2;
274 std::array<int, kNumOverworldMaps> map_pointers1_id;
275 std::array<int, kNumOverworldMaps> map_pointers2_id;
276 std::array<int, kNumOverworldMaps> map_pointers1;
277 std::array<int, kNumOverworldMaps> map_pointers2;
278};
279
280} // namespace zelda3
281} // namespace yaze
282
283#endif
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:59
std::vector< uint64_t > deleted_entrances_
Definition overworld.h:267
absl::Status SaveMap32Expanded()
auto tile16_blockset_data() const
Definition overworld.h:210
absl::Status LoadExits()
Definition overworld.cc:356
auto current_area_palette() const
Definition overworld.h:204
std::vector< uint16_t > tiles32_list_
Definition overworld.h:266
int GetTileFromPosition(ImVec2 position) const
Definition overworld.h:163
absl::Status Load(Rom *rom)
Definition overworld.cc:20
std::vector< OverworldItem > all_items_
Definition overworld.h:260
void OrganizeMapTiles(std::vector< uint8_t > &bytes, std::vector< uint8_t > &bytes2, int i, int sx, int sy, int &ttpos)
Definition overworld.cc:201
std::array< int, kNumOverworldMaps > map_pointers1
Definition overworld.h:276
std::vector< gfx::Tile32 > tiles32_unique_
Definition overworld.h:264
auto deleted_entrances() const
Definition overworld.h:202
absl::Status SaveMapProperties()
absl::Status SaveMap32Tiles()
std::vector< OverworldEntrance > all_entrances_
Definition overworld.h:257
OverworldMapTiles map_tiles_
Definition overworld.h:254
absl::Status SaveMap16Tiles()
std::vector< gfx::Tile16 > tiles16() const
Definition overworld.h:191
auto sprites(int state) const
Definition overworld.h:193
auto map_tiles() const
Definition overworld.h:215
absl::Status SaveLargeMaps()
Definition overworld.cc:665
auto all_items() const
Definition overworld.h:217
std::array< uint8_t, kNumOverworldMaps > map_parent_
Definition overworld.h:269
void AssignWorldTiles(int x, int y, int sx, int sy, int tpos, OverworldBlockset &world)
Definition overworld.cc:189
auto is_loaded() const
Definition overworld.h:213
std::array< uint8_t, kNumTileTypes > all_tiles_types_
Definition overworld.h:270
auto current_graphics() const
Definition overworld.h:195
absl::Status CreateTile32Tilemap()
std::array< int, kNumOverworldMaps > map_pointers1_id
Definition overworld.h:274
auto overworld_map(int i) const
Definition overworld.h:187
auto all_tiles_types() const
Definition overworld.h:219
void set_current_map(int i)
Definition overworld.h:214
absl::Status LoadItems()
Definition overworld.cc:408
auto mutable_overworld_map(int i)
Definition overworld.h:188
absl::Status SaveEntrances()
absl::Status SaveExits()
absl::Status LoadSprites()
Definition overworld.cc:457
absl::Status LoadHoles()
Definition overworld.cc:338
std::vector< OverworldMap > overworld_maps_
Definition overworld.h:256
absl::Status SaveItems()
absl::Status LoadEntrances()
Definition overworld.cc:303
absl::Status Save(Rom *rom)
Definition overworld.cc:515
std::vector< gfx::Tile32 > tiles32_
Definition overworld.h:263
absl::Status SaveOverworldMaps()
Definition overworld.cc:527
std::array< std::vector< Sprite >, 3 > all_sprites_
Definition overworld.h:271
std::array< int, kNumOverworldMaps > map_pointers2_id
Definition overworld.h:275
absl::Status LoadOverworldMaps()
Definition overworld.cc:271
std::vector< gfx::Tile16 > tiles16_
Definition overworld.h:262
absl::Status AssembleMap16Tiles()
Definition overworld.cc:161
auto mutable_sprites(int state)
Definition overworld.h:194
absl::Status LoadSpritesFromMap(int sprite_start, int sprite_count, int sprite_index)
Definition overworld.cc:476
std::array< std::vector< uint8_t >, kNumOverworldMaps > map_data_p1
Definition overworld.h:272
absl::Status SaveMap16Expanded()
std::vector< OverworldExit > all_exits_
Definition overworld.h:259
std::array< int, kNumOverworldMaps > map_pointers2
Definition overworld.h:277
absl::StatusOr< uint16_t > GetTile16ForTile32(int index, int quadrant, int dimension, const uint32_t *map32address)
Definition overworld.cc:98
auto current_map_bitmap_data() const
Definition overworld.h:207
std::array< std::vector< uint8_t >, kNumOverworldMaps > map_data_p2
Definition overworld.h:273
absl::Status AssembleMap32Tiles()
Definition overworld.cc:108
OverworldBlockset & GetMapTiles(int world_type)
Definition overworld.h:173
auto overworld_maps() const
Definition overworld.h:186
std::vector< OverworldEntrance > all_holes_
Definition overworld.h:258
Zelda 3 specific classes and functions.
constexpr int GravesGFX
Definition overworld.h:23
constexpr int kAreaGfxIdPtr
Definition overworld.h:40
constexpr int kOverworldSpritePaletteGroup
Definition overworld.h:32
constexpr int kOverworldTransitionPositionY
Definition overworld.h:64
constexpr int kNumMapsPerWorld
Definition overworld.h:104
constexpr int kOverworldSpriteset
Definition overworld.h:33
constexpr int kMap16ExpandedFlagPos
Definition overworld.h:88
constexpr int LimitOfMap32
Definition overworld.h:101
constexpr int NumberOfMap16Ex
Definition overworld.h:100
constexpr int kOverworldScreenTileMapChangeByScreen1
Definition overworld.h:69
constexpr int kOverworldMapDataOverflow
Definition overworld.h:74
constexpr int kOverworldMapSizeHighByte
Definition overworld.h:55
constexpr int GravesTilemapPos
Definition overworld.h:22
constexpr int kNumTileTypes
Definition overworld.h:94
constexpr int NumberOfMap32
Definition overworld.h:103
constexpr int kOverworldScreenSize
Definition overworld.h:66
constexpr int kOverworldScreenTileMapChangeByScreen4
Definition overworld.h:72
constexpr int kNumTile16Individual
Definition overworld.h:97
constexpr int GravesCountOnY
Definition overworld.h:26
constexpr int kMap16Tiles
Definition overworld.h:95
constexpr int GravesYLine
Definition overworld.h:25
constexpr int kNumOverworldMaps
Definition overworld.h:96
constexpr int GravesXTilePos
Definition overworld.h:21
constexpr int kOverworldMusicBeginning
Definition overworld.h:43
std::vector< std::vector< uint16_t > > OverworldBlockset
Represents tile32 data for the overworld.
constexpr int kMap32TileBLExpanded
Definition overworld.h:84
constexpr int kOverworldTransitionPositionX
Definition overworld.h:65
constexpr int kOverworldMusicDarkWorld
Definition overworld.h:47
constexpr int kOverworldSpecialPalGroup
Definition overworld.h:35
constexpr int kOverworldScreenSizeForLoading
Definition overworld.h:67
constexpr int kOverworldSpritePaletteIds
Definition overworld.h:31
constexpr int kMap32TileBRExpanded
Definition overworld.h:85
constexpr int kMap32TileCountExpanded
Definition overworld.h:86
constexpr int kTransitionTargetWest
Definition overworld.h:77
constexpr int kOverworldMusicAgahnim
Definition overworld.h:46
constexpr int kOverworldSpritesZelda
Definition overworld.h:38
constexpr int kOverworldMapParentId
Definition overworld.h:63
constexpr int GraveLinkSpecialHole
Definition overworld.h:27
constexpr int Map32PerScreen
Definition overworld.h:98
constexpr int GravesXPos
Definition overworld.h:24
constexpr int kMap32ExpandedFlagPos
Definition overworld.h:87
constexpr int overworldCustomMosaicASM
Definition overworld.h:78
constexpr int kOverworldMusicMasterSword
Definition overworld.h:45
constexpr int kOverworldMusicZelda
Definition overworld.h:44
constexpr int kOverworldMessageIds
Definition overworld.h:41
constexpr int NumberOfMap16
Definition overworld.h:99
constexpr int kOverworldMapSize
Definition overworld.h:52
constexpr int kOverworldScreenTileMapChangeByScreen2
Definition overworld.h:70
constexpr int kOverworldCompressedMapPos
Definition overworld.h:91
constexpr int overworldCustomMosaicArray
Definition overworld.h:79
constexpr int kOverworldSpritesBeginning
Definition overworld.h:36
constexpr int kOverworldScreenTileMapChangeByScreen3
Definition overworld.h:71
constexpr int kMap16TilesExpanded
Definition overworld.h:82
constexpr int kOverworldEntranceExpandedFlagPos
Definition overworld.h:89
constexpr int kOverworldSpritesAgahnim
Definition overworld.h:37
constexpr int kTransitionTargetNorth
Definition overworld.h:76
constexpr int kOverworldCompressedOverflowPos
Definition overworld.h:92
constexpr int GravesYTilePos
Definition overworld.h:20
constexpr int NumberOfOWSprites
Definition overworld.h:102
constexpr int kMap32TileTRExpanded
Definition overworld.h:83
constexpr int kOverworldMapPaletteIds
Definition overworld.h:30
constexpr int kOverworldEntranceAllowedTilesLeft
Definition overworld.h:48
constexpr int kOverworldSpecialGfxGroup
Definition overworld.h:34
constexpr int kOverworldEntranceAllowedTilesRight
Definition overworld.h:49
constexpr int GraveLinkSpecialStairs
Definition overworld.h:28
Main namespace for the application.
Definition controller.cc:18
Overworld map tile32 data.