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 <cstdint>
5#include <array> // Added for std::array
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
71constexpr int kDungeonSpritePointers = 0x090000; // Dungeon sprite pointer table
72
73// === Messages ===
74constexpr int kMessagesIdDungeon = 0x3F61D; // Dungeon message IDs
75
76// === Room Metadata ===
77constexpr int kNumberOfRooms = 296; // Total dungeon rooms (0x00-0x127)
78
79// Stair objects (special handling)
80constexpr uint16_t kStairsObjects[] = {0x139, 0x138, 0x13B, 0x12E, 0x12D};
81
82// === Layout Pointers (referenced in comments) ===
83// Layout00 ptr: 0x47EF04
84// Layout01 ptr: 0xAFEF04
85// Layout02 ptr: 0xF0EF04
86// Layout03 ptr: 0x4CF004
87// Layout04 ptr: 0xA8F004
88// Layout05 ptr: 0xECF004
89// Layout06 ptr: 0x48F104
90// Layout07 ptr: 0xA4F104
91
92// === Notes ===
93// - Layout arrays are NOT exactly the same as rooms
94// - Object array is terminated by 0xFFFF (no layers)
95// - In normal room, 0xFFFF goes to next layer (layers 0, 1, 2)
96
97// Static pointers for the 8 predefined room layouts
98static const std::array<int, 8> kRoomLayoutPointers = {
99 0x47EF04, 0xAFEF04, 0xF0EF04, 0x4CF004,
100 0xA8F004, 0xECF004, 0x48F104, 0xA4F104,
101};
102
103} // namespace zelda3
104} // namespace yaze
105
106#endif // YAZE_APP_ZELDA3_DUNGEON_ROM_ADDRESSES_H
107
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
Main namespace for the application.