yaze 0.2.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
overworld_entrance.h
Go to the documentation of this file.
1#ifndef YAZE_APP_ZELDA3_OVERWORLD_ENTRANCE_H
2#define YAZE_APP_ZELDA3_OVERWORLD_ENTRANCE_H
3
4#include <cstdint>
5
6#include "app/rom.h"
7#include "app/zelda3/common.h"
8#include "util/macro.h"
9
10namespace yaze {
11namespace zelda3 {
12
13// EXPANDED to 0x78000 to 0x7A000
14constexpr int kEntranceRoomEXP = 0x078000;
15constexpr int kEntranceScrollEdgeEXP = 0x078200;
16constexpr int kEntranceCameraYEXP = 0x078A00;
17constexpr int kEntranceCameraXEXP = 0x078C00;
18constexpr int kEntranceYPositionEXP = 0x078E00;
19constexpr int kEntranceXPositionEXP = 0x079000;
20constexpr int kEntranceCameraYTriggerEXP = 0x079200;
21constexpr int kEntranceCameraXTriggerEXP = 0x079400;
22constexpr int kEntranceBlocksetEXP = 0x079600;
23constexpr int kEntranceFloorEXP = 0x079700;
24constexpr int kEntranceDungeonEXP = 0x079800;
25constexpr int kEntranceDoorEXP = 0x079900;
26constexpr int kEntranceLadderBgEXP = 0x079A00;
27constexpr int kEntranceScrollingEXP = 0x079B00;
28constexpr int kEntranceScrollQuadrantEXP = 0x079C00;
29constexpr int kEntranceExitEXP = 0x079D00;
30constexpr int kEntranceMusicEXP = 0x079F00;
31constexpr int kEntranceExtraEXP = 0x07A000;
32constexpr int kEntranceTotalEXP = 0xFF;
33constexpr int kEntranceTotal = 0x84;
34constexpr int kEntranceLinkSpawn = 0x00;
35constexpr int kEntranceNorthTavern = 0x43;
36constexpr int kEntranceEXP = 0x07F000;
37
38constexpr int kEntranceCameraY = 0x014D45; // 0x14AA9 // 2bytes each room
39constexpr int kEntranceCameraX = 0x014E4F; // 0x14BB3 // 2bytes
40
41constexpr int kNumOverworldEntrances = 129;
42constexpr int kNumOverworldHoles = 0x13;
43
44constexpr int kOverworldEntranceMap = 0xDB96F;
45constexpr int kOverworldEntrancePos = 0xDBA71;
46constexpr int kOverworldEntranceEntranceId = 0xDBB73;
47
48constexpr int kOverworldEntranceMapExpanded = 0x0DB55F;
49constexpr int kOverworldEntrancePosExpanded = 0x0DB35F;
50constexpr int kOverworldEntranceEntranceIdExpanded = 0x0DB75F;
51
52// (0x13 entries, 2 bytes each) modified(less 0x400)
53// map16 coordinates for each hole
54constexpr int kOverworldHolePos = 0xDB800;
55
56// (0x13 entries, 2 bytes each) corresponding
57// area numbers for each hole
58constexpr int kOverworldHoleArea = 0xDB826;
59
60//(0x13 entries, 1 byte each) corresponding entrance numbers
61constexpr int kOverworldHoleEntrance = 0xDB84C;
62
63// OWEntrances Expansion
64
65// Instructions for editors
66// if byte at (PC) address 0xDB895 == B8 then it is vanilla
67// Load normal overworld entrances data
68// Otherwise load from the expanded space
69// When saving just save in expanded space 256 values for each
70// (PC Addresses) - you can find snes address at the orgs below
71// 0x0DB35F = (short) Map16 tile address (mapPos in ZS)
72// 0x0DB55F = (short) Screen ID (MapID in ZS)
73// 0x0DB75F = (byte) Entrance leading to (EntranceID in ZS)
74
75// *Important* the Screen ID now also require bit 0x8000 (15) being set to tell
76// entrance is a hole
78 public:
79 uint16_t map_pos_;
80 uint8_t entrance_id_;
81 uint8_t area_x_;
82 uint8_t area_y_;
83 bool is_hole_ = false;
84 bool deleted = false;
85
86 OverworldEntrance() = default;
87 OverworldEntrance(int x, int y, uint8_t entrance_id, short map_id,
88 uint16_t map_pos, bool hole)
89 : map_pos_(map_pos), entrance_id_(entrance_id), is_hole_(hole) {
90 x_ = x;
91 y_ = y;
92 map_id_ = map_id;
93 entity_id_ = entrance_id;
95
96 int mapX = (map_id_ - ((map_id_ / 8) * 8));
97 int mapY = (map_id_ / 8);
98 area_x_ = (uint8_t)((std::abs(x - (mapX * 512)) / 16));
99 area_y_ = (uint8_t)((std::abs(y - (mapY * 512)) / 16));
100 }
101
102 void UpdateMapProperties(uint16_t map_id) override {
103 map_id_ = map_id;
104
105 if (map_id_ >= 64) {
106 map_id_ -= 64;
107 }
108
109 int mapX = (map_id_ - ((map_id_ / 8) * 8));
110 int mapY = (map_id_ / 8);
111
112 area_x_ = (uint8_t)((std::abs(x_ - (mapX * 512)) / 16));
113 area_y_ = (uint8_t)((std::abs(y_ - (mapY * 512)) / 16));
114
115 map_pos_ = (uint16_t)((((area_y_) << 6) | (area_x_ & 0x3F)) << 1);
116 }
117};
118constexpr int kEntranceTileTypePtrLow = 0xDB8BF;
119constexpr int kEntranceTileTypePtrHigh = 0xDB917;
120constexpr int kNumEntranceTileTypes = 0x2C;
121
123 std::array<uint16_t, kNumEntranceTileTypes> low;
124 std::array<uint16_t, kNumEntranceTileTypes> high;
125};
126
127inline absl::StatusOr<OverworldEntranceTileTypes> LoadEntranceTileTypes(
128 Rom *rom) {
130 for (int i = 0; i < kNumEntranceTileTypes; i++) {
131 ASSIGN_OR_RETURN(auto value_low,
133 tiletypes.low[i] = value_low;
134 ASSIGN_OR_RETURN(auto value_high,
136 tiletypes.high[i] = value_high;
137 }
138 return tiletypes;
139}
140
141} // namespace zelda3
142} // namespace yaze
143
144#endif
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:59
absl::StatusOr< uint16_t > ReadWord(int offset)
Definition rom.cc:243
enum yaze::zelda3::GameEntity::EntityType entity_type_
void UpdateMapProperties(uint16_t map_id) override
OverworldEntrance(int x, int y, uint8_t entrance_id, short map_id, uint16_t map_pos, bool hole)
#define ASSIGN_OR_RETURN(type_variable_name, expression)
Definition macro.h:59
Zelda 3 specific classes and functions.
constexpr int kOverworldHoleArea
constexpr int kOverworldEntrancePos
constexpr int kOverworldHoleEntrance
constexpr int kEntranceFloorEXP
constexpr int kEntranceCameraXTriggerEXP
constexpr int kEntranceTotalEXP
constexpr int kEntranceScrollEdgeEXP
constexpr int kOverworldEntranceEntranceIdExpanded
constexpr int kEntranceCameraY
constexpr int kNumOverworldHoles
constexpr int kOverworldEntranceEntranceId
constexpr int kOverworldHolePos
constexpr int kOverworldEntranceMap
constexpr int kEntranceLadderBgEXP
constexpr int kEntranceXPositionEXP
constexpr int kNumEntranceTileTypes
constexpr int kEntranceNorthTavern
constexpr int kEntranceCameraYEXP
constexpr int kEntranceRoomEXP
constexpr int kEntranceDungeonEXP
constexpr int kEntranceYPositionEXP
constexpr int kEntranceCameraX
constexpr int kOverworldEntrancePosExpanded
constexpr int kEntranceBlocksetEXP
constexpr int kEntranceCameraYTriggerEXP
constexpr int kEntranceExitEXP
constexpr int kEntranceTileTypePtrHigh
constexpr int kOverworldEntranceMapExpanded
constexpr int kEntranceTileTypePtrLow
absl::StatusOr< OverworldEntranceTileTypes > LoadEntranceTileTypes(Rom *rom)
constexpr int kEntranceScrollQuadrantEXP
constexpr int kEntranceEXP
constexpr int kEntranceTotal
constexpr int kEntranceDoorEXP
constexpr int kNumOverworldEntrances
constexpr int kEntranceExtraEXP
constexpr int kEntranceScrollingEXP
constexpr int kEntranceMusicEXP
constexpr int kEntranceCameraXEXP
constexpr int kEntranceLinkSpawn
Main namespace for the application.
Definition controller.cc:18
std::array< uint16_t, kNumEntranceTileTypes > high
std::array< uint16_t, kNumEntranceTileTypes > low