Refactor overworld entity constants for improved naming consistency and readability

This commit is contained in:
scawful
2024-12-31 17:40:15 -05:00
parent 41c31e3193
commit aece708513
3 changed files with 96 additions and 95 deletions

View File

@@ -10,20 +10,24 @@
namespace yaze { namespace yaze {
namespace zelda3 { namespace zelda3 {
constexpr int OWEntranceMap = 0xDB96F; constexpr int kOverworldEntranceMap = 0xDB96F;
constexpr int OWEntrancePos = 0xDBA71; constexpr int kOverworldEntrancePos = 0xDBA71;
constexpr int OWEntranceEntranceId = 0xDBB73; constexpr int kOverworldEntranceEntranceId = 0xDBB73;
constexpr int kOverworldEntranceMapExpanded = 0x0DB55F;
constexpr int kOverworldEntrancePosExpanded = 0x0DB35F;
constexpr int kOverworldEntranceEntranceIdExpanded = 0x0DB75F;
// (0x13 entries, 2 bytes each) modified(less 0x400) // (0x13 entries, 2 bytes each) modified(less 0x400)
// map16 coordinates for each hole // map16 coordinates for each hole
constexpr int OWHolePos = 0xDB800; constexpr int kOverworldHolePos = 0xDB800;
// (0x13 entries, 2 bytes each) corresponding // (0x13 entries, 2 bytes each) corresponding
// area numbers for each hole // area numbers for each hole
constexpr int OWHoleArea = 0xDB826; constexpr int kOverworldHoleArea = 0xDB826;
//(0x13 entries, 1 byte each) corresponding entrance numbers //(0x13 entries, 1 byte each) corresponding entrance numbers
constexpr int OWHoleEntrance = 0xDB84C; constexpr int kOverworldHoleEntrance = 0xDB84C;
// OWEntrances Expansion // OWEntrances Expansion
@@ -89,8 +93,8 @@ struct OverworldEntranceTileTypes {
std::array<uint16_t, kNumEntranceTileTypes> high; std::array<uint16_t, kNumEntranceTileTypes> high;
}; };
inline absl::StatusOr<OverworldEntranceTileTypes> inline absl::StatusOr<OverworldEntranceTileTypes> LoadEntranceTileTypes(
LoadEntranceTileTypes(Rom &rom) { Rom &rom) {
OverworldEntranceTileTypes tiletypes; OverworldEntranceTileTypes tiletypes;
for (int i = 0; i < kNumEntranceTileTypes; i++) { for (int i = 0; i < kNumEntranceTileTypes; i++) {
ASSIGN_OR_RETURN(auto value_low, rom.ReadWord(kEntranceTileTypePtrLow + i)); ASSIGN_OR_RETURN(auto value_low, rom.ReadWord(kEntranceTileTypePtrLow + i));

View File

@@ -12,7 +12,58 @@
namespace yaze { namespace yaze {
namespace zelda3 { namespace zelda3 {
// List of secret item names constexpr int kOverworldItemsPointers = 0xDC2F9;
constexpr int kOverworldItemsAddress = 0xDC8B9; // 1BC2F9
constexpr int kOverworldItemsBank = 0xDC8BF;
constexpr int kOverworldItemsEndData = 0xDC89C; // 0DC89E
class OverworldItem : public GameEntity {
public:
OverworldItem() = default;
OverworldItem(uint8_t id, uint16_t room_map_id, int x, int y, bool bg2)
: bg2_(bg2), id_(id), room_map_id_(room_map_id) {
x_ = x;
y_ = y;
map_id_ = room_map_id;
entity_id_ = id;
entity_type_ = kItem;
int map_x = room_map_id - ((room_map_id / 8) * 8);
int map_y = room_map_id / 8;
game_x_ = static_cast<uint8_t>(std::abs(x - (map_x * 512)) / 16);
game_y_ = static_cast<uint8_t>(std::abs(y - (map_y * 512)) / 16);
}
void UpdateMapProperties(uint16_t room_map_id) override {
room_map_id_ = room_map_id;
if (room_map_id_ >= 64) {
room_map_id_ -= 64;
}
int map_x = room_map_id_ - ((room_map_id_ / 8) * 8);
int map_y = room_map_id_ / 8;
game_x_ = static_cast<uint8_t>(std::abs(x_ - (map_x * 512)) / 16);
game_y_ = static_cast<uint8_t>(std::abs(y_ - (map_y * 512)) / 16);
std::cout << "Item: " << std::hex << std::setw(2) << std::setfill('0')
<< static_cast<int>(id_) << " MapId: " << std::hex << std::setw(2)
<< std::setfill('0') << static_cast<int>(room_map_id_)
<< " X: " << static_cast<int>(game_x_)
<< " Y: " << static_cast<int>(game_y_) << std::endl;
}
bool bg2_ = false;
uint8_t id_;
uint8_t game_x_;
uint8_t game_y_;
uint16_t room_map_id_;
int unique_id = 0;
bool deleted = false;
};
const std::vector<std::string> kSecretItemNames = { const std::vector<std::string> kSecretItemNames = {
"Nothing", // 0 "Nothing", // 0
"Green Rupee", // 1 "Green Rupee", // 1
@@ -44,60 +95,6 @@ const std::vector<std::string> kSecretItemNames = {
"Switch" // 27 "Switch" // 27
}; };
constexpr int overworldItemsPointers = 0xDC2F9;
constexpr int kOverworldItemsAddress = 0xDC8B9; // 1BC2F9
constexpr int overworldItemsBank = 0xDC8BF;
constexpr int overworldItemsEndData = 0xDC89C; // 0DC89E
class OverworldItem : public GameEntity {
public:
bool bg2_ = false;
uint8_t id_;
uint8_t game_x_;
uint8_t game_y_;
uint16_t room_map_id_;
int unique_id = 0;
bool deleted = false;
OverworldItem() = default;
OverworldItem(uint8_t id, uint16_t room_map_id, int x, int y, bool bg2) {
this->id_ = id;
this->x_ = x;
this->y_ = y;
this->bg2_ = bg2;
this->room_map_id_ = room_map_id;
this->map_id_ = room_map_id;
this->entity_id_ = id;
this->entity_type_ = kItem;
int map_x = room_map_id - ((room_map_id / 8) * 8);
int map_y = room_map_id / 8;
game_x_ = static_cast<uint8_t>(std::abs(x - (map_x * 512)) / 16);
game_y_ = static_cast<uint8_t>(std::abs(y - (map_y * 512)) / 16);
}
void UpdateMapProperties(uint16_t room_map_id) override {
room_map_id_ = room_map_id;
if (room_map_id_ >= 64) {
room_map_id_ -= 64;
}
int map_x = room_map_id_ - ((room_map_id_ / 8) * 8);
int map_y = room_map_id_ / 8;
game_x_ = static_cast<uint8_t>(std::abs(x_ - (map_x * 512)) / 16);
game_y_ = static_cast<uint8_t>(std::abs(y_ - (map_y * 512)) / 16);
std::cout << "Item: " << std::hex << std::setw(2) << std::setfill('0')
<< static_cast<int>(id_) << " MapId: " << std::hex << std::setw(2)
<< std::setfill('0') << static_cast<int>(room_map_id_)
<< " X: " << static_cast<int>(game_x_)
<< " Y: " << static_cast<int>(game_y_) << std::endl;
}
};
} // namespace zelda3 } // namespace zelda3
} // namespace yaze } // namespace yaze

View File

@@ -36,8 +36,8 @@ absl::Status OverworldMap::BuildMap(int count, int game_state, int world,
if (large_map_) { if (large_map_) {
if (parent_ != index_ && !initialized_) { if (parent_ != index_ && !initialized_) {
if (index_ >= 0x80 && index_ <= 0x8A && index_ != 0x88) { if (index_ >= 0x80 && index_ <= 0x8A && index_ != 0x88) {
area_graphics_ = rom_[overworldSpecialGFXGroup + (parent_ - 0x80)]; area_graphics_ = rom_[kOverworldSpecialGfxGroup + (parent_ - 0x80)];
area_palette_ = rom_[overworldSpecialPALGroup + 1]; area_palette_ = rom_[kOverworldSpecialPalGroup + 1];
} else if (index_ == 0x88) { } else if (index_ == 0x88) {
area_graphics_ = 0x51; area_graphics_ = 0x51;
area_palette_ = 0x00; area_palette_ = 0x00;
@@ -62,7 +62,7 @@ absl::Status OverworldMap::BuildMap(int count, int game_state, int world,
void OverworldMap::LoadAreaInfo() { void OverworldMap::LoadAreaInfo() {
if (index_ != 0x80) { if (index_ != 0x80) {
if (index_ <= 128) if (index_ <= 128)
large_map_ = (rom_[overworldMapSize + (index_ & 0x3F)] != 0); large_map_ = (rom_[kOverworldMapSize + (index_ & 0x3F)] != 0);
else { else {
large_map_ = large_map_ =
index_ == 129 || index_ == 130 || index_ == 137 || index_ == 138; index_ == 129 || index_ == 130 || index_ == 137 || index_ == 138;
@@ -75,14 +75,14 @@ void OverworldMap::LoadAreaInfo() {
area_graphics_ = rom_[kAreaGfxIdPtr + parent_]; area_graphics_ = rom_[kAreaGfxIdPtr + parent_];
area_palette_ = rom_[kOverworldMapPaletteIds + parent_]; area_palette_ = rom_[kOverworldMapPaletteIds + parent_];
area_music_[0] = rom_[overworldMusicBegining + parent_]; area_music_[0] = rom_[kOverworldMusicBeginning + parent_];
area_music_[1] = rom_[overworldMusicZelda + parent_]; area_music_[1] = rom_[kOverworldMusicZelda + parent_];
area_music_[2] = rom_[overworldMusicMasterSword + parent_]; area_music_[2] = rom_[kOverworldMusicMasterSword + parent_];
area_music_[3] = rom_[overworldMusicAgahim + parent_]; area_music_[3] = rom_[kOverworldMusicAgahnim + parent_];
sprite_graphics_[0] = rom_[overworldSpriteset + parent_]; sprite_graphics_[0] = rom_[kOverworldSpriteset + parent_];
sprite_graphics_[1] = rom_[overworldSpriteset + parent_ + 0x40]; sprite_graphics_[1] = rom_[kOverworldSpriteset + parent_ + 0x40];
sprite_graphics_[2] = rom_[overworldSpriteset + parent_ + 0x80]; sprite_graphics_[2] = rom_[kOverworldSpriteset + parent_ + 0x80];
sprite_palette_[0] = rom_[kOverworldSpritePaletteIds + parent_]; sprite_palette_[0] = rom_[kOverworldSpritePaletteIds + parent_];
sprite_palette_[1] = rom_[kOverworldSpritePaletteIds + parent_ + 0x40]; sprite_palette_[1] = rom_[kOverworldSpritePaletteIds + parent_ + 0x40];
@@ -90,11 +90,11 @@ void OverworldMap::LoadAreaInfo() {
} else if (index_ < 0x80) { } else if (index_ < 0x80) {
area_graphics_ = rom_[kAreaGfxIdPtr + parent_]; area_graphics_ = rom_[kAreaGfxIdPtr + parent_];
area_palette_ = rom_[kOverworldMapPaletteIds + parent_]; area_palette_ = rom_[kOverworldMapPaletteIds + parent_];
area_music_[0] = rom_[overworldMusicDW + (parent_ - 64)]; area_music_[0] = rom_[kOverworldMusicDarkWorld + (parent_ - 64)];
sprite_graphics_[0] = rom_[overworldSpriteset + parent_ + 0x80]; sprite_graphics_[0] = rom_[kOverworldSpriteset + parent_ + 0x80];
sprite_graphics_[1] = rom_[overworldSpriteset + parent_ + 0x80]; sprite_graphics_[1] = rom_[kOverworldSpriteset + parent_ + 0x80];
sprite_graphics_[2] = rom_[overworldSpriteset + parent_ + 0x80]; sprite_graphics_[2] = rom_[kOverworldSpriteset + parent_ + 0x80];
sprite_palette_[0] = rom_[kOverworldSpritePaletteIds + parent_ + 0x80]; sprite_palette_[0] = rom_[kOverworldSpritePaletteIds + parent_ + 0x80];
sprite_palette_[1] = rom_[kOverworldSpritePaletteIds + parent_ + 0x80]; sprite_palette_[1] = rom_[kOverworldSpritePaletteIds + parent_ + 0x80];
@@ -123,11 +123,11 @@ void OverworldMap::LoadAreaInfo() {
parent_ = 129; parent_ = 129;
} }
area_palette_ = rom_[overworldSpecialPALGroup + parent_ - 0x80]; area_palette_ = rom_[kOverworldSpecialPalGroup + parent_ - 0x80];
if ((index_ >= 0x80 && index_ <= 0x8A && index_ != 0x88) || if ((index_ >= 0x80 && index_ <= 0x8A && index_ != 0x88) ||
index_ == 0x94) { index_ == 0x94) {
area_graphics_ = rom_[overworldSpecialGFXGroup + (parent_ - 0x80)]; area_graphics_ = rom_[kOverworldSpecialGfxGroup + (parent_ - 0x80)];
area_palette_ = rom_[overworldSpecialPALGroup + 1]; area_palette_ = rom_[kOverworldSpecialPalGroup + 1];
} else if (index_ == 0x88) { } else if (index_ == 0x88) {
area_graphics_ = 0x51; area_graphics_ = 0x51;
area_palette_ = 0x00; area_palette_ = 0x00;
@@ -137,9 +137,9 @@ void OverworldMap::LoadAreaInfo() {
area_palette_ = rom_[kOverworldMapPaletteIds + parent_]; area_palette_ = rom_[kOverworldMapPaletteIds + parent_];
} }
sprite_graphics_[0] = rom_[overworldSpriteset + parent_ + 0x80]; sprite_graphics_[0] = rom_[kOverworldSpriteset + parent_ + 0x80];
sprite_graphics_[1] = rom_[overworldSpriteset + parent_ + 0x80]; sprite_graphics_[1] = rom_[kOverworldSpriteset + parent_ + 0x80];
sprite_graphics_[2] = rom_[overworldSpriteset + parent_ + 0x80]; sprite_graphics_[2] = rom_[kOverworldSpriteset + parent_ + 0x80];
sprite_palette_[0] = rom_[kOverworldSpritePaletteIds + parent_ + 0x80]; sprite_palette_[0] = rom_[kOverworldSpritePaletteIds + parent_ + 0x80];
sprite_palette_[1] = rom_[kOverworldSpritePaletteIds + parent_ + 0x80]; sprite_palette_[1] = rom_[kOverworldSpritePaletteIds + parent_ + 0x80];
@@ -555,7 +555,7 @@ absl::StatusOr<gfx::SnesPalette> OverworldMap::GetPalette(
const gfx::PaletteGroup& palette_group, int index, int previous_index, const gfx::PaletteGroup& palette_group, int index, int previous_index,
int limit) { int limit) {
if (index == 255) { if (index == 255) {
index = rom_[rom_.version_constants().overworldMapPaletteGroup + index = rom_[rom_.version_constants().kOverworldMapPaletteGroup +
(previous_index * 4)]; (previous_index * 4)];
} }
if (index >= limit) { if (index >= limit) {
@@ -573,15 +573,15 @@ absl::Status OverworldMap::LoadPalette() {
area_palette_ = std::min((int)area_palette_, 0xA3); area_palette_ = std::min((int)area_palette_, 0xA3);
uchar pal0 = 0; uchar pal0 = 0;
uchar pal1 = rom_[rom_.version_constants().overworldMapPaletteGroup + uchar pal1 = rom_[rom_.version_constants().kOverworldMapPaletteGroup +
(area_palette_ * 4)]; (area_palette_ * 4)];
uchar pal2 = rom_[rom_.version_constants().overworldMapPaletteGroup + uchar pal2 = rom_[rom_.version_constants().kOverworldMapPaletteGroup +
(area_palette_ * 4) + 1]; (area_palette_ * 4) + 1];
uchar pal3 = rom_[rom_.version_constants().overworldMapPaletteGroup + uchar pal3 = rom_[rom_.version_constants().kOverworldMapPaletteGroup +
(area_palette_ * 4) + 2]; (area_palette_ * 4) + 2];
uchar pal4 = uchar pal4 =
rom_[overworldSpritePaletteGroup + (sprite_palette_[game_state_] * 2)]; rom_[kOverworldSpritePaletteGroup + (sprite_palette_[game_state_] * 2)];
uchar pal5 = rom_[overworldSpritePaletteGroup + uchar pal5 = rom_[kOverworldSpritePaletteGroup +
(sprite_palette_[game_state_] * 2) + 1]; (sprite_palette_[game_state_] * 2) + 1];
auto grass_pal_group = rom_.palette_group().grass; auto grass_pal_group = rom_.palette_group().grass;
@@ -595,7 +595,7 @@ absl::Status OverworldMap::LoadPalette() {
// Additional handling of `pal3` and `parent_` // Additional handling of `pal3` and `parent_`
if (pal3 == 255) { if (pal3 == 255) {
pal3 = rom_[rom_.version_constants().overworldMapPaletteGroup + pal3 = rom_[rom_.version_constants().kOverworldMapPaletteGroup +
(previousPalId * 4) + 2]; (previousPalId * 4) + 2];
} }