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