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
13constexpr int kNumOverworldEntrances = 129;
14constexpr int kNumOverworldHoles = 0x13;
15
16constexpr int kOverworldEntranceMap = 0xDB96F;
17constexpr int kOverworldEntrancePos = 0xDBA71;
18constexpr int kOverworldEntranceEntranceId = 0xDBB73;
19
20constexpr int kOverworldEntranceMapExpanded = 0x0DB55F;
21constexpr int kOverworldEntrancePosExpanded = 0x0DB35F;
22constexpr int kOverworldEntranceEntranceIdExpanded = 0x0DB75F;
23
24// (0x13 entries, 2 bytes each) modified(less 0x400)
25// map16 coordinates for each hole
26constexpr int kOverworldHolePos = 0xDB800;
27
28// (0x13 entries, 2 bytes each) corresponding
29// area numbers for each hole
30constexpr int kOverworldHoleArea = 0xDB826;
31
32//(0x13 entries, 1 byte each) corresponding entrance numbers
33constexpr int kOverworldHoleEntrance = 0xDB84C;
34
35// OWEntrances Expansion
36
37// Instructions for editors
38// if byte at (PC) address 0xDB895 == B8 then it is vanilla
39// Load normal overworld entrances data
40// Otherwise load from the expanded space
41// When saving just save in expanded space 256 values for each
42// (PC Addresses) - you can find snes address at the orgs below
43// 0x0DB35F = (short) Map16 tile address (mapPos in ZS)
44// 0x0DB55F = (short) Screen ID (MapID in ZS)
45// 0x0DB75F = (byte) Entrance leading to (EntranceID in ZS)
46
47// *Important* the Screen ID now also require bit 0x8000 (15) being set to tell
48// entrance is a hole
50 public:
51 uint16_t map_pos_;
52 uint8_t entrance_id_;
53 uint8_t area_x_;
54 uint8_t area_y_;
55 bool is_hole_ = false;
56 bool deleted = false;
57
58 OverworldEntrance() = default;
59 OverworldEntrance(int x, int y, uint8_t entrance_id, short map_id,
60 uint16_t map_pos, bool hole)
61 : map_pos_(map_pos), entrance_id_(entrance_id), is_hole_(hole) {
62 x_ = x;
63 y_ = y;
64 map_id_ = map_id;
65 entity_id_ = entrance_id;
67
68 int mapX = (map_id_ - ((map_id_ / 8) * 8));
69 int mapY = (map_id_ / 8);
70 area_x_ = (uint8_t)((std::abs(x - (mapX * 512)) / 16));
71 area_y_ = (uint8_t)((std::abs(y - (mapY * 512)) / 16));
72 }
73
74 void UpdateMapProperties(uint16_t map_id) override {
75 map_id_ = map_id;
76
77 if (map_id_ >= 64) {
78 map_id_ -= 64;
79 }
80
81 int mapX = (map_id_ - ((map_id_ / 8) * 8));
82 int mapY = (map_id_ / 8);
83
84 area_x_ = (uint8_t)((std::abs(x_ - (mapX * 512)) / 16));
85 area_y_ = (uint8_t)((std::abs(y_ - (mapY * 512)) / 16));
86
87 map_pos_ = (uint16_t)((((area_y_) << 6) | (area_x_ & 0x3F)) << 1);
88 }
89};
90constexpr int kEntranceTileTypePtrLow = 0xDB8BF;
91constexpr int kEntranceTileTypePtrHigh = 0xDB917;
92constexpr int kNumEntranceTileTypes = 0x2C;
93
95 std::array<uint16_t, kNumEntranceTileTypes> low;
96 std::array<uint16_t, kNumEntranceTileTypes> high;
97};
98
99inline absl::StatusOr<OverworldEntranceTileTypes> LoadEntranceTileTypes(
100 Rom &rom) {
102 for (int i = 0; i < kNumEntranceTileTypes; i++) {
103 ASSIGN_OR_RETURN(auto value_low, rom.ReadWord(kEntranceTileTypePtrLow + i));
104 tiletypes.low[i] = value_low;
105 ASSIGN_OR_RETURN(auto value_high,
107 tiletypes.high[i] = value_high;
108 }
109 return tiletypes;
110}
111
112} // namespace zelda3
113} // namespace yaze
114
115#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:241
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
absl::StatusOr< OverworldEntranceTileTypes > LoadEntranceTileTypes(Rom &rom)
constexpr int kOverworldEntrancePos
constexpr int kOverworldHoleEntrance
constexpr int kOverworldEntranceEntranceIdExpanded
constexpr int kNumOverworldHoles
constexpr int kOverworldEntranceEntranceId
constexpr int kOverworldHolePos
constexpr int kOverworldEntranceMap
constexpr int kNumEntranceTileTypes
constexpr int kOverworldEntrancePosExpanded
constexpr int kEntranceTileTypePtrHigh
constexpr int kOverworldEntranceMapExpanded
constexpr int kEntranceTileTypePtrLow
constexpr int kNumOverworldEntrances
Main namespace for the application.
Definition controller.cc:18
std::array< uint16_t, kNumEntranceTileTypes > high
std::array< uint16_t, kNumEntranceTileTypes > low