yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
dungeon_rom_addresses.h
Go to the documentation of this file.
1#ifndef YAZE_APP_ZELDA3_DUNGEON_ROM_ADDRESSES_H
2#define YAZE_APP_ZELDA3_DUNGEON_ROM_ADDRESSES_H
3
4#include <array> // Added for std::array
5#include <cstdint>
6
7namespace yaze {
8namespace zelda3 {
9
10// ============================================================================
11// Dungeon ROM Address Constants
12// ============================================================================
13// This file contains all ROM addresses for dungeon-related data in ALTTP.
14// Organized by category for readability and maintainability.
15
16// === Room Data Pointers ===
17constexpr int kRoomObjectLayoutPointer = 0x882D; // Layout pointer table
18constexpr int kRoomObjectPointer = 0x874C; // Object data pointer (Long)
19constexpr int kRoomHeaderPointer = 0xB5DD; // Room header pointer (LONG)
20constexpr int kRoomHeaderPointerBank = 0xB5E7; // Room header bank byte
21
22// === Palette Data ===
23constexpr int kDungeonsMainBgPalettePointers = 0xDEC4B; // JP Same
24constexpr int kDungeonsPalettes = 0xDD734; // Dungeon palette data
25
26// === Item & Sprite Data ===
27constexpr int kRoomItemsPointers = 0xDB69; // JP 0xDB67
28constexpr int kRoomsSpritePointer = 0x4C298; // JP Same (2-byte bank 09D62E)
29constexpr int kSpriteBlocksetPointer = 0x5B57; // Sprite graphics pointer
30
31// === Graphics Data ===
32constexpr int kGfxGroupsPointer = 0x6237; // Graphics group table
33constexpr int kTileAddress = 0x001B52; // Main tile graphics
34constexpr int kTileAddressFloor = 0x001B5A; // Floor tile graphics
35
36// === Block Data ===
37constexpr int kBlocksLength = 0x8896; // Word value
38constexpr int kBlocksPointer1 = 0x15AFA; // Block data pointer 1
39constexpr int kBlocksPointer2 = 0x15B01; // Block data pointer 2
40constexpr int kBlocksPointer3 = 0x15B08; // Block data pointer 3
41constexpr int kBlocksPointer4 = 0x15B0F; // Block data pointer 4
42
43// === Chests ===
44constexpr int kChestsLengthPointer = 0xEBF6; // Chest count pointer
45constexpr int kChestsDataPointer1 = 0xEBFB; // Chest data start
46
47// === Torches ===
48constexpr int kTorchData = 0x2736A; // JP 0x2704A
49constexpr int kTorchesLengthPointer = 0x88C1; // Torch count pointer
50
51// === Pits & Warps ===
52constexpr int kPitPointer = 0x394AB; // Pit/hole data
53constexpr int kPitCount = 0x394A6; // Number of pits
54
55// === Doors ===
56constexpr int kDoorPointers = 0xF83C0; // Door data table
57constexpr int kDoorGfxUp = 0x4D9E; // Door graphics (up)
58constexpr int kDoorGfxDown = 0x4E06; // Door graphics (down)
59constexpr int kDoorGfxCaveExitDown = 0x4E06; // Cave exit door
60constexpr int kDoorGfxLeft = 0x4E66; // Door graphics (left)
61constexpr int kDoorGfxRight = 0x4EC6; // Door graphics (right)
62constexpr int kDoorPosUp = 0x197E; // Door position (up)
63constexpr int kDoorPosDown = 0x1996; // Door position (down)
64constexpr int kDoorPosLeft = 0x19AE; // Door position (left)
65constexpr int kDoorPosRight = 0x19C6; // Door position (right)
66
67// === Sprites ===
68constexpr int kSpritesData = 0x4D8B0; // Sprite data start
69constexpr int kSpritesDataEmptyRoom = 0x4D8AE; // Empty room sprite marker
70constexpr int kSpritesEndData = 0x4EC9E; // Sprite data end
72 0x090000; // Dungeon sprite pointer table
73
74// === Messages ===
75constexpr int kMessagesIdDungeon = 0x3F61D; // Dungeon message IDs
76
77// === Room Metadata ===
78constexpr int kNumberOfRooms = 296; // Total dungeon rooms (0x00-0x127)
79
80// Stair objects (special handling)
81constexpr uint16_t kStairsObjects[] = {0x139, 0x138, 0x13B, 0x12E, 0x12D};
82
83// === Layout Pointers (referenced in comments) ===
84// Layout00 ptr: 0x47EF04
85// Layout01 ptr: 0xAFEF04
86// Layout02 ptr: 0xF0EF04
87// Layout03 ptr: 0x4CF004
88// Layout04 ptr: 0xA8F004
89// Layout05 ptr: 0xECF004
90// Layout06 ptr: 0x48F104
91// Layout07 ptr: 0xA4F104
92
93// === Notes ===
94// - Layout arrays are NOT exactly the same as rooms
95// - Object array is terminated by 0xFFFF (no layers)
96// - In normal room, 0xFFFF goes to next layer (layers 0, 1, 2)
97
98// Static pointers for the 8 predefined room layouts
99static const std::array<int, 8> kRoomLayoutPointers = {
100 0x04EF47, 0x04EFAF, 0x04EFF0, 0x04F04C,
101 0x04F0A8, 0x04F0EC, 0x04F148, 0x04F1A4,
102};
103
104} // namespace zelda3
105} // namespace yaze
106
107#endif // YAZE_APP_ZELDA3_DUNGEON_ROM_ADDRESSES_H
constexpr int kBlocksPointer4
constexpr int kRoomObjectLayoutPointer
constexpr int kDoorPosUp
constexpr int kDoorPointers
constexpr int kDoorGfxDown
constexpr int kSpritesEndData
constexpr int kTorchesLengthPointer
constexpr int kChestsLengthPointer
constexpr int kMessagesIdDungeon
constexpr int kDungeonsMainBgPalettePointers
constexpr int kSpriteBlocksetPointer
constexpr int kPitPointer
constexpr int kSpritesData
constexpr int kDoorPosLeft
constexpr int kTileAddress
constexpr int kPitCount
constexpr int kRoomsSpritePointer
constexpr int kTileAddressFloor
constexpr int kDoorPosDown
constexpr int kChestsDataPointer1
constexpr int kBlocksLength
constexpr int kBlocksPointer1
constexpr int kRoomItemsPointers
constexpr int kDoorGfxLeft
constexpr int kDoorGfxCaveExitDown
constexpr uint16_t kStairsObjects[]
constexpr int kDungeonSpritePointers
constexpr int kNumberOfRooms
constexpr int kDoorPosRight
constexpr int kRoomHeaderPointer
constexpr int kBlocksPointer3
constexpr int kRoomHeaderPointerBank
constexpr int kGfxGroupsPointer
constexpr int kDungeonsPalettes
constexpr int kDoorGfxUp
constexpr int kTorchData
constexpr int kDoorGfxRight
constexpr int kSpritesDataEmptyRoom
constexpr int kBlocksPointer2
constexpr int kRoomObjectPointer