Refactor overworld entity constants for improved naming consistency and readability
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
@@ -40,7 +44,7 @@ constexpr int OWHoleEntrance = 0xDB84C;
|
|||||||
// *Important* the Screen ID now also require bit 0x8000 (15) being set to tell
|
// *Important* the Screen ID now also require bit 0x8000 (15) being set to tell
|
||||||
// entrance is a hole
|
// entrance is a hole
|
||||||
class OverworldEntrance : public GameEntity {
|
class OverworldEntrance : public GameEntity {
|
||||||
public:
|
public:
|
||||||
uint16_t map_pos_;
|
uint16_t map_pos_;
|
||||||
uchar entrance_id_;
|
uchar entrance_id_;
|
||||||
uchar area_x_;
|
uchar area_x_;
|
||||||
@@ -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));
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user