yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
zelda.h
Go to the documentation of this file.
1#ifndef ZELDA_H
2#define ZELDA_H
3
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19#include <stdbool.h>
20#include <stdint.h>
21
47
55zelda3_version zelda3_detect_version(const uint8_t* rom_data, size_t size);
56
63const char* zelda3_version_to_string(zelda3_version version);
64
112
120
121const static zelda3_version_pointers zelda3_us_pointers = {
122 // New style names
123 0x10275, // gfx_animated_pointer
124 0x5D97, // overworld_gfx_groups1
125 0x6073, // overworld_gfx_groups2
126 0x1794D, // compressed_map32_pointers_high
127 0x17B2D, // compressed_map32_pointers_low
128 0x75504, // overworld_map_palette_group
129 0x77664, // overlay_pointers
130 0x0E, // overlay_pointers_bank
131 0x71459, // overworld_tiles_type
132 0x4F80, // overworld_gfx_ptr1
133 0x505F, // overworld_gfx_ptr2
134 0x513E, // overworld_gfx_ptr3
135 0x18000, // map32_tile_tl
136 0x1B400, // map32_tile_tr
137 0x20000, // map32_tile_bl
138 0x23400, // map32_tile_br
139 0x5B57, // sprite_blockset_pointer
140 0x75460, // dungeon_palettes_groups
141
142 // Legacy k-prefixed names (same values for backward compatibility)
143 0x10275, // kGfxAnimatedPointer
144 0x5D97, // kOverworldGfxGroups1
145 0x6073, // kOverworldGfxGroups2
146 0x1794D, // kCompressedAllMap32PointersHigh
147 0x17B2D, // kCompressedAllMap32PointersLow
148 0x75504, // kOverworldMapPaletteGroup
149 0x77664, // kOverlayPointers
150 0x0E, // kOverlayPointersBank
151 0x71459, // kOverworldTilesType
152 0x4F80, // kOverworldGfxPtr1
153 0x505F, // kOverworldGfxPtr2
154 0x513E, // kOverworldGfxPtr3
155 0x18000, // kMap32TileTL
156 0x1B400, // kMap32TileTR
157 0x20000, // kMap32TileBL
158 0x23400, // kMap32TileBR
159 0x5B57, // kSpriteBlocksetPointer
160 0x75460, // kDungeonPalettesGroups
161};
162
163const static zelda3_version_pointers zelda3_jp_pointers = {
164 // New style names
165 0x10624, // gfx_animated_pointer
166 0x5DD7, // overworld_gfx_groups1
167 0x60B3, // overworld_gfx_groups2
168 0x176B1, // compressed_map32_pointers_high
169 0x17891, // compressed_map32_pointers_low
170 0x67E74, // overworld_map_palette_group
171 0x3FAF4, // overlay_pointers
172 0x07, // overlay_pointers_bank
173 0x7FD94, // overworld_tiles_type
174 0x4FC0, // overworld_gfx_ptr1
175 0x509F, // overworld_gfx_ptr2
176 0x517E, // overworld_gfx_ptr3
177 0x18000, // map32_tile_tl
178 0x1B3C0, // map32_tile_tr
179 0x20000, // map32_tile_bl
180 0x233C0, // map32_tile_br
181 0x5B97, // sprite_blockset_pointer
182 0x67DD0, // dungeon_palettes_groups
183
184 // Legacy k-prefixed names (same values for backward compatibility)
185 0x10624, // kGfxAnimatedPointer
186 0x5DD7, // kOverworldGfxGroups1
187 0x60B3, // kOverworldGfxGroups2
188 0x176B1, // kCompressedAllMap32PointersHigh
189 0x17891, // kCompressedAllMap32PointersLow
190 0x67E74, // kOverworldMapPaletteGroup
191 0x3FAF4, // kOverlayPointers
192 0x07, // kOverlayPointersBank
193 0x7FD94, // kOverworldTilesType
194 0x4FC0, // kOverworldGfxPtr1
195 0x509F, // kOverworldGfxPtr2
196 0x517E, // kOverworldGfxPtr3
197 0x18000, // kMap32TileTL
198 0x1B3C0, // kMap32TileTR
199 0x20000, // kMap32TileBL
200 0x233C0, // kMap32TileBR
201 0x5B97, // kSpriteBlocksetPointer
202 0x67DD0, // kDungeonPalettesGroups
203};
204
210typedef struct zelda3_rom {
211 const char* filename;
212 uint8_t* data;
213 uint64_t size;
216 void* impl;
217 void* game_data;
219
233zelda3_rom* yaze_load_rom(const char* filename);
234
240void yaze_unload_rom(zelda3_rom* rom);
241
249int yaze_save_rom(zelda3_rom* rom, const char* filename);
250
258
272typedef struct zelda3_message {
273 uint16_t id;
274 uint32_t rom_address;
275 uint16_t length;
276 uint8_t* raw_data;
281
295typedef struct zelda3_overworld_map {
296 uint16_t id;
297 uint8_t parent_id;
298 uint8_t quadrant_id;
299 uint8_t world_id;
300 uint8_t game_state;
302 /* Graphics and Visual Properties */
304 uint8_t area_palette;
305 uint8_t main_palette;
306 uint8_t animated_gfx;
308 /* Sprite Configuration */
309 uint8_t sprite_graphics[3];
310 uint8_t sprite_palette[3];
312 /* Audio Configuration */
313 uint8_t area_music[4];
315 /* Extended Graphics (ZSCustomOverworld) */
316 uint8_t static_graphics[16];
317 uint8_t custom_tileset[8];
319 /* Screen Properties */
323 /* Flags and Metadata */
327
340
353typedef struct dungeon_sprite {
354 const char* name;
355 uint8_t id;
356 uint8_t subtype;
357 uint8_t x;
358 uint8_t y;
359 uint8_t layer;
360 uint16_t properties;
362
380
381// Legacy aliases for backward compatibility
383#define Off ZELDA3_BG2_OFF
384#define Parallax ZELDA3_BG2_PARALLAX
385#define Dark ZELDA3_BG2_DARK
386#define OnTop ZELDA3_BG2_ON_TOP
387#define Translucent ZELDA3_BG2_TRANSLUCENT
388#define Addition ZELDA3_BG2_ADDITION
389#define Normal ZELDA3_BG2_NORMAL
390#define Transparent ZELDA3_BG2_TRANSPARENT
391#define DarkRoom ZELDA3_BG2_DARK_ROOM
392
398typedef struct object_door {
399 uint16_t id;
400 uint8_t x;
401 uint8_t y;
402 uint8_t size;
403 uint8_t type;
404 uint8_t layer;
405 uint8_t key_type;
408
414typedef struct staircase {
415 uint8_t id;
416 uint8_t room;
417 const char* label;
419
425typedef struct chest {
426 uint8_t x;
427 uint8_t y;
428 uint8_t item;
429 bool picker;
432
438typedef struct chest_data {
439 uint8_t id;
440 bool size;
442
448typedef struct destination {
449 uint8_t index;
450 uint8_t target;
451 uint8_t target_layer;
453
461typedef struct zelda3_dungeon_room {
462 uint16_t id;
465 /* Room Contents */
478 /* Room Connections */
482 /* Room Properties */
483 uint8_t floor_type;
484 uint8_t wall_type;
485 uint8_t palette_id;
486 uint8_t music_track;
488 /* Flags */
489 bool is_dark;
493
496#ifdef __cplusplus
497}
498#endif
499
500#endif // ZELDA_H
struct chest chest
Treasure chest.
struct object_door object_door
Dungeon door object.
zelda3_bg2_effect background2
Definition zelda.h:382
struct chest_data chest_data
Legacy chest data structure.
struct staircase staircase
Staircase connection.
struct destination destination
Room transition destination.
struct dungeon_sprite dungeon_sprite
Dungeon sprite definition.
zelda3_bg2_effect
Background layer 2 effects.
Definition zelda.h:369
@ ZELDA3_BG2_TRANSPARENT
Definition zelda.h:377
@ ZELDA3_BG2_PARALLAX
Definition zelda.h:371
@ ZELDA3_BG2_DARK
Definition zelda.h:372
@ ZELDA3_BG2_ON_TOP
Definition zelda.h:373
@ ZELDA3_BG2_TRANSLUCENT
Definition zelda.h:374
@ ZELDA3_BG2_ADDITION
Definition zelda.h:375
@ ZELDA3_BG2_DARK_ROOM
Definition zelda.h:378
@ ZELDA3_BG2_NORMAL
Definition zelda.h:376
@ ZELDA3_BG2_OFF
Definition zelda.h:370
struct zelda3_message zelda3_message
In-game text message data.
struct zelda3_overworld_map zelda3_overworld_map
Overworld map data.
struct zelda3_overworld zelda3_overworld
Complete overworld data.
void yaze_unload_rom(zelda3_rom *rom)
Unload and free ROM data.
Definition yaze.cc:142
zelda3_rom * yaze_copy_rom(const zelda3_rom *rom)
Create a copy of ROM data.
zelda3_rom * yaze_load_rom(const char *filename)
Load a ROM file.
Definition yaze.cc:114
int yaze_save_rom(zelda3_rom *rom, const char *filename)
Save ROM to file.
Definition yaze.cc:160
const char * zelda3_version_to_string(zelda3_version version)
Get version name as string.
Definition yaze.cc:342
struct zelda3_version_pointers zelda3_version_pointers
ROM data pointers for different game versions.
struct zelda3_rom zelda3_rom
ROM data structure.
zelda3_version
Different versions of the game supported by YAZE.
Definition zelda.h:33
const zelda3_version_pointers * zelda3_get_version_pointers(zelda3_version version)
Get version-specific pointers.
Definition yaze.cc:359
zelda3_version zelda3_detect_version(const uint8_t *rom_data, size_t size)
Detect ROM version from header data.
Definition yaze.cc:333
@ ZELDA3_VERSION_JP
Definition zelda.h:36
@ ZELDA3_VERSION_PROTO
Definition zelda.h:38
@ ZELDA3_VERSION_EU
Definition zelda.h:37
@ US
Definition zelda.h:42
@ SD
Definition zelda.h:44
@ ZELDA3_VERSION_US
Definition zelda.h:35
@ ZELDA3_VERSION_RANDOMIZER
Definition zelda.h:39
@ RANDO
Definition zelda.h:45
@ ZELDA3_VERSION_UNKNOWN
Definition zelda.h:34
@ JP
Definition zelda.h:43
Legacy chest data structure.
Definition zelda.h:438
uint8_t id
Definition zelda.h:439
bool size
Definition zelda.h:440
Treasure chest.
Definition zelda.h:425
uint8_t y
Definition zelda.h:427
uint8_t item
Definition zelda.h:428
bool picker
Definition zelda.h:429
uint8_t x
Definition zelda.h:426
bool big_chest
Definition zelda.h:430
Room transition destination.
Definition zelda.h:448
uint8_t target_layer
Definition zelda.h:451
uint8_t index
Definition zelda.h:449
uint8_t target
Definition zelda.h:450
Dungeon sprite definition.
Definition zelda.h:353
uint16_t properties
Definition zelda.h:360
const char * name
Definition zelda.h:354
uint8_t y
Definition zelda.h:358
uint8_t x
Definition zelda.h:357
uint8_t id
Definition zelda.h:355
uint8_t subtype
Definition zelda.h:356
uint8_t layer
Definition zelda.h:359
Dungeon door object.
Definition zelda.h:398
uint8_t y
Definition zelda.h:401
bool is_locked
Definition zelda.h:406
uint8_t x
Definition zelda.h:400
uint8_t key_type
Definition zelda.h:405
uint8_t layer
Definition zelda.h:404
uint8_t size
Definition zelda.h:402
uint8_t type
Definition zelda.h:403
uint16_t id
Definition zelda.h:399
Staircase connection.
Definition zelda.h:414
const char * label
Definition zelda.h:417
uint8_t room
Definition zelda.h:416
uint8_t id
Definition zelda.h:415
Complete dungeon room data.
Definition zelda.h:461
object_door * doors
Definition zelda.h:469
uint8_t wall_type
Definition zelda.h:484
background2 bg2
Definition zelda.h:463
destination stairs[4]
Definition zelda.h:480
uint8_t music_track
Definition zelda.h:486
uint8_t floor_type
Definition zelda.h:483
destination pits
Definition zelda.h:479
staircase * staircases
Definition zelda.h:472
uint8_t palette_id
Definition zelda.h:485
dungeon_sprite * sprites
Definition zelda.h:466
In-game text message data.
Definition zelda.h:272
uint32_t rom_address
Definition zelda.h:274
uint8_t * raw_data
Definition zelda.h:276
uint8_t encoding_type
Definition zelda.h:279
uint16_t id
Definition zelda.h:273
bool is_compressed
Definition zelda.h:278
char * parsed_text
Definition zelda.h:277
uint16_t length
Definition zelda.h:275
Overworld map data.
Definition zelda.h:295
uint16_t area_specific_bg_color
Definition zelda.h:320
uint8_t custom_tileset[8]
Definition zelda.h:317
uint8_t area_palette
Definition zelda.h:304
uint8_t sprite_palette[3]
Definition zelda.h:310
uint8_t parent_id
Definition zelda.h:297
uint8_t main_palette
Definition zelda.h:305
uint8_t game_state
Definition zelda.h:300
uint8_t area_graphics
Definition zelda.h:303
uint8_t quadrant_id
Definition zelda.h:298
uint8_t animated_gfx
Definition zelda.h:306
uint16_t subscreen_overlay
Definition zelda.h:321
uint8_t area_music[4]
Definition zelda.h:313
uint8_t static_graphics[16]
Definition zelda.h:316
uint8_t sprite_graphics[3]
Definition zelda.h:309
Complete overworld data.
Definition zelda.h:333
void * impl
Definition zelda.h:334
bool has_zsco_features
Definition zelda.h:338
zelda3_version rom_version
Definition zelda.h:337
zelda3_overworld_map ** maps
Definition zelda.h:335
ROM data structure.
Definition zelda.h:210
uint8_t * data
Definition zelda.h:212
bool is_modified
Definition zelda.h:215
const char * filename
Definition zelda.h:211
uint64_t size
Definition zelda.h:213
void * game_data
Definition zelda.h:217
void * impl
Definition zelda.h:216
zelda3_version version
Definition zelda.h:214
ROM data pointers for different game versions.
Definition zelda.h:71
uint32_t kOverworldMapPaletteGroup
Definition zelda.h:98
uint32_t map32_tile_tl
Definition zelda.h:85
uint32_t overlay_pointers
Definition zelda.h:79
uint32_t kOverlayPointers
Definition zelda.h:99
uint32_t overworld_gfx_groups2
Definition zelda.h:75
uint32_t overworld_gfx_ptr3
Definition zelda.h:84
uint32_t kOverworldTilesType
Definition zelda.h:101
uint32_t kMap32TileTR
Definition zelda.h:106
uint32_t kCompressedAllMap32PointersHigh
Definition zelda.h:96
uint32_t overworld_gfx_groups1
Definition zelda.h:74
uint32_t overworld_gfx_ptr1
Definition zelda.h:82
uint32_t overlay_pointers_bank
Definition zelda.h:80
uint32_t kGfxAnimatedPointer
Definition zelda.h:93
uint32_t kOverworldGfxGroups1
Definition zelda.h:94
uint32_t kMap32TileTL
Definition zelda.h:105
uint32_t kOverworldGfxPtr1
Definition zelda.h:102
uint32_t kOverworldGfxPtr2
Definition zelda.h:103
uint32_t dungeon_palettes_groups
Definition zelda.h:90
uint32_t compressed_map32_pointers_low
Definition zelda.h:77
uint32_t map32_tile_br
Definition zelda.h:88
uint32_t kMap32TileBL
Definition zelda.h:107
uint32_t kSpriteBlocksetPointer
Definition zelda.h:109
uint32_t kOverworldGfxGroups2
Definition zelda.h:95
uint32_t map32_tile_tr
Definition zelda.h:86
uint32_t overworld_map_palette_group
Definition zelda.h:78
uint32_t overworld_gfx_ptr2
Definition zelda.h:83
uint32_t kOverworldGfxPtr3
Definition zelda.h:104
uint32_t map32_tile_bl
Definition zelda.h:87
uint32_t kMap32TileBR
Definition zelda.h:108
uint32_t sprite_blockset_pointer
Definition zelda.h:89
uint32_t compressed_map32_pointers_high
Definition zelda.h:76
uint32_t kCompressedAllMap32PointersLow
Definition zelda.h:97
uint32_t overworld_tiles_type
Definition zelda.h:81
uint32_t kOverlayPointersBank
Definition zelda.h:100
uint32_t gfx_animated_pointer
Definition zelda.h:73
uint32_t kDungeonPalettesGroups
Definition zelda.h:110
struct zelda3_dungeon_room zelda3_dungeon_room
Complete dungeon room data.