diff --git a/src/app/zelda3/overworld/overworld_entrance.h b/src/app/zelda3/overworld/overworld_entrance.h index 83a3bbc2..da3c9947 100644 --- a/src/app/zelda3/overworld/overworld_entrance.h +++ b/src/app/zelda3/overworld/overworld_entrance.h @@ -10,20 +10,24 @@ namespace yaze { namespace zelda3 { -constexpr int OWEntranceMap = 0xDB96F; -constexpr int OWEntrancePos = 0xDBA71; -constexpr int OWEntranceEntranceId = 0xDBB73; +constexpr int kOverworldEntranceMap = 0xDB96F; +constexpr int kOverworldEntrancePos = 0xDBA71; +constexpr int kOverworldEntranceEntranceId = 0xDBB73; + +constexpr int kOverworldEntranceMapExpanded = 0x0DB55F; +constexpr int kOverworldEntrancePosExpanded = 0x0DB35F; +constexpr int kOverworldEntranceEntranceIdExpanded = 0x0DB75F; // (0x13 entries, 2 bytes each) modified(less 0x400) // map16 coordinates for each hole -constexpr int OWHolePos = 0xDB800; +constexpr int kOverworldHolePos = 0xDB800; // (0x13 entries, 2 bytes each) corresponding // area numbers for each hole -constexpr int OWHoleArea = 0xDB826; +constexpr int kOverworldHoleArea = 0xDB826; //(0x13 entries, 1 byte each) corresponding entrance numbers -constexpr int OWHoleEntrance = 0xDB84C; +constexpr int kOverworldHoleEntrance = 0xDB84C; // OWEntrances Expansion @@ -40,7 +44,7 @@ constexpr int OWHoleEntrance = 0xDB84C; // *Important* the Screen ID now also require bit 0x8000 (15) being set to tell // entrance is a hole class OverworldEntrance : public GameEntity { -public: + public: uint16_t map_pos_; uchar entrance_id_; uchar area_x_; @@ -89,8 +93,8 @@ struct OverworldEntranceTileTypes { std::array high; }; -inline absl::StatusOr -LoadEntranceTileTypes(Rom &rom) { +inline absl::StatusOr LoadEntranceTileTypes( + Rom &rom) { OverworldEntranceTileTypes tiletypes; for (int i = 0; i < kNumEntranceTileTypes; i++) { ASSIGN_OR_RETURN(auto value_low, rom.ReadWord(kEntranceTileTypePtrLow + i)); @@ -102,7 +106,7 @@ LoadEntranceTileTypes(Rom &rom) { return tiletypes; } -} // namespace zelda3 -} // namespace yaze +} // namespace zelda3 +} // namespace yaze #endif diff --git a/src/app/zelda3/overworld/overworld_item.h b/src/app/zelda3/overworld/overworld_item.h index ac8c744f..e95fb30b 100644 --- a/src/app/zelda3/overworld/overworld_item.h +++ b/src/app/zelda3/overworld/overworld_item.h @@ -12,63 +12,21 @@ namespace yaze { namespace zelda3 { -// List of secret item names -const std::vector kSecretItemNames = { - "Nothing", // 0 - "Green Rupee", // 1 - "Rock hoarder", // 2 - "Bee", // 3 - "Health pack", // 4 - "Bomb", // 5 - "Heart ", // 6 - "Blue Rupee", // 7 - "Key", // 8 - "Arrow", // 9 - "Bomb", // 10 - "Heart", // 11 - "Magic", // 12 - "Full Magic", // 13 - "Cucco", // 14 - "Green Soldier", // 15 - "Bush Stal", // 16 - "Blue Soldier", // 17 - "Landmine", // 18 - "Heart", // 19 - "Fairy", // 20 - "Heart", // 21 - "Nothing ", // 22 - "Hole", // 23 - "Warp", // 24 - "Staircase", // 25 - "Bombable", // 26 - "Switch" // 27 -}; - -constexpr int overworldItemsPointers = 0xDC2F9; -constexpr int kOverworldItemsAddress = 0xDC8B9; // 1BC2F9 -constexpr int overworldItemsBank = 0xDC8BF; -constexpr int overworldItemsEndData = 0xDC89C; // 0DC89E +constexpr int kOverworldItemsPointers = 0xDC2F9; +constexpr int kOverworldItemsAddress = 0xDC8B9; // 1BC2F9 +constexpr int kOverworldItemsBank = 0xDC8BF; +constexpr int kOverworldItemsEndData = 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; + public: 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; + 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; @@ -96,9 +54,48 @@ public: << " X: " << static_cast(game_x_) << " Y: " << static_cast(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; }; -} // namespace zelda3 -} // namespace yaze +const std::vector kSecretItemNames = { + "Nothing", // 0 + "Green Rupee", // 1 + "Rock hoarder", // 2 + "Bee", // 3 + "Health pack", // 4 + "Bomb", // 5 + "Heart ", // 6 + "Blue Rupee", // 7 + "Key", // 8 + "Arrow", // 9 + "Bomb", // 10 + "Heart", // 11 + "Magic", // 12 + "Full Magic", // 13 + "Cucco", // 14 + "Green Soldier", // 15 + "Bush Stal", // 16 + "Blue Soldier", // 17 + "Landmine", // 18 + "Heart", // 19 + "Fairy", // 20 + "Heart", // 21 + "Nothing ", // 22 + "Hole", // 23 + "Warp", // 24 + "Staircase", // 25 + "Bombable", // 26 + "Switch" // 27 +}; -#endif // YAZE_APP_ZELDA3_OVERWORLD_ITEM_H_ +} // namespace zelda3 +} // namespace yaze + +#endif // YAZE_APP_ZELDA3_OVERWORLD_ITEM_H_ diff --git a/src/app/zelda3/overworld/overworld_map.cc b/src/app/zelda3/overworld/overworld_map.cc index 8eabf393..b6bac1b7 100644 --- a/src/app/zelda3/overworld/overworld_map.cc +++ b/src/app/zelda3/overworld/overworld_map.cc @@ -36,8 +36,8 @@ absl::Status OverworldMap::BuildMap(int count, int game_state, int world, if (large_map_) { if (parent_ != index_ && !initialized_) { if (index_ >= 0x80 && index_ <= 0x8A && index_ != 0x88) { - area_graphics_ = rom_[overworldSpecialGFXGroup + (parent_ - 0x80)]; - area_palette_ = rom_[overworldSpecialPALGroup + 1]; + area_graphics_ = rom_[kOverworldSpecialGfxGroup + (parent_ - 0x80)]; + area_palette_ = rom_[kOverworldSpecialPalGroup + 1]; } else if (index_ == 0x88) { area_graphics_ = 0x51; area_palette_ = 0x00; @@ -62,7 +62,7 @@ absl::Status OverworldMap::BuildMap(int count, int game_state, int world, void OverworldMap::LoadAreaInfo() { if (index_ != 0x80) { if (index_ <= 128) - large_map_ = (rom_[overworldMapSize + (index_ & 0x3F)] != 0); + large_map_ = (rom_[kOverworldMapSize + (index_ & 0x3F)] != 0); else { large_map_ = index_ == 129 || index_ == 130 || index_ == 137 || index_ == 138; @@ -75,14 +75,14 @@ void OverworldMap::LoadAreaInfo() { area_graphics_ = rom_[kAreaGfxIdPtr + parent_]; area_palette_ = rom_[kOverworldMapPaletteIds + parent_]; - area_music_[0] = rom_[overworldMusicBegining + parent_]; - area_music_[1] = rom_[overworldMusicZelda + parent_]; - area_music_[2] = rom_[overworldMusicMasterSword + parent_]; - area_music_[3] = rom_[overworldMusicAgahim + parent_]; + area_music_[0] = rom_[kOverworldMusicBeginning + parent_]; + area_music_[1] = rom_[kOverworldMusicZelda + parent_]; + area_music_[2] = rom_[kOverworldMusicMasterSword + parent_]; + area_music_[3] = rom_[kOverworldMusicAgahnim + parent_]; - sprite_graphics_[0] = rom_[overworldSpriteset + parent_]; - sprite_graphics_[1] = rom_[overworldSpriteset + parent_ + 0x40]; - sprite_graphics_[2] = rom_[overworldSpriteset + parent_ + 0x80]; + sprite_graphics_[0] = rom_[kOverworldSpriteset + parent_]; + sprite_graphics_[1] = rom_[kOverworldSpriteset + parent_ + 0x40]; + sprite_graphics_[2] = rom_[kOverworldSpriteset + parent_ + 0x80]; sprite_palette_[0] = rom_[kOverworldSpritePaletteIds + parent_]; sprite_palette_[1] = rom_[kOverworldSpritePaletteIds + parent_ + 0x40]; @@ -90,11 +90,11 @@ void OverworldMap::LoadAreaInfo() { } else if (index_ < 0x80) { area_graphics_ = rom_[kAreaGfxIdPtr + 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_[1] = rom_[overworldSpriteset + parent_ + 0x80]; - sprite_graphics_[2] = rom_[overworldSpriteset + parent_ + 0x80]; + sprite_graphics_[0] = rom_[kOverworldSpriteset + parent_ + 0x80]; + sprite_graphics_[1] = rom_[kOverworldSpriteset + parent_ + 0x80]; + sprite_graphics_[2] = rom_[kOverworldSpriteset + parent_ + 0x80]; sprite_palette_[0] = rom_[kOverworldSpritePaletteIds + parent_ + 0x80]; sprite_palette_[1] = rom_[kOverworldSpritePaletteIds + parent_ + 0x80]; @@ -123,11 +123,11 @@ void OverworldMap::LoadAreaInfo() { parent_ = 129; } - area_palette_ = rom_[overworldSpecialPALGroup + parent_ - 0x80]; + area_palette_ = rom_[kOverworldSpecialPalGroup + parent_ - 0x80]; if ((index_ >= 0x80 && index_ <= 0x8A && index_ != 0x88) || index_ == 0x94) { - area_graphics_ = rom_[overworldSpecialGFXGroup + (parent_ - 0x80)]; - area_palette_ = rom_[overworldSpecialPALGroup + 1]; + area_graphics_ = rom_[kOverworldSpecialGfxGroup + (parent_ - 0x80)]; + area_palette_ = rom_[kOverworldSpecialPalGroup + 1]; } else if (index_ == 0x88) { area_graphics_ = 0x51; area_palette_ = 0x00; @@ -137,9 +137,9 @@ void OverworldMap::LoadAreaInfo() { area_palette_ = rom_[kOverworldMapPaletteIds + parent_]; } - sprite_graphics_[0] = rom_[overworldSpriteset + parent_ + 0x80]; - sprite_graphics_[1] = rom_[overworldSpriteset + parent_ + 0x80]; - sprite_graphics_[2] = rom_[overworldSpriteset + parent_ + 0x80]; + sprite_graphics_[0] = rom_[kOverworldSpriteset + parent_ + 0x80]; + sprite_graphics_[1] = rom_[kOverworldSpriteset + parent_ + 0x80]; + sprite_graphics_[2] = rom_[kOverworldSpriteset + parent_ + 0x80]; sprite_palette_[0] = rom_[kOverworldSpritePaletteIds + parent_ + 0x80]; sprite_palette_[1] = rom_[kOverworldSpritePaletteIds + parent_ + 0x80]; @@ -555,7 +555,7 @@ absl::StatusOr OverworldMap::GetPalette( const gfx::PaletteGroup& palette_group, int index, int previous_index, int limit) { if (index == 255) { - index = rom_[rom_.version_constants().overworldMapPaletteGroup + + index = rom_[rom_.version_constants().kOverworldMapPaletteGroup + (previous_index * 4)]; } if (index >= limit) { @@ -573,15 +573,15 @@ absl::Status OverworldMap::LoadPalette() { area_palette_ = std::min((int)area_palette_, 0xA3); uchar pal0 = 0; - uchar pal1 = rom_[rom_.version_constants().overworldMapPaletteGroup + + uchar pal1 = rom_[rom_.version_constants().kOverworldMapPaletteGroup + (area_palette_ * 4)]; - uchar pal2 = rom_[rom_.version_constants().overworldMapPaletteGroup + + uchar pal2 = rom_[rom_.version_constants().kOverworldMapPaletteGroup + (area_palette_ * 4) + 1]; - uchar pal3 = rom_[rom_.version_constants().overworldMapPaletteGroup + + uchar pal3 = rom_[rom_.version_constants().kOverworldMapPaletteGroup + (area_palette_ * 4) + 2]; uchar pal4 = - rom_[overworldSpritePaletteGroup + (sprite_palette_[game_state_] * 2)]; - uchar pal5 = rom_[overworldSpritePaletteGroup + + rom_[kOverworldSpritePaletteGroup + (sprite_palette_[game_state_] * 2)]; + uchar pal5 = rom_[kOverworldSpritePaletteGroup + (sprite_palette_[game_state_] * 2) + 1]; auto grass_pal_group = rom_.palette_group().grass; @@ -595,7 +595,7 @@ absl::Status OverworldMap::LoadPalette() { // Additional handling of `pal3` and `parent_` if (pal3 == 255) { - pal3 = rom_[rom_.version_constants().overworldMapPaletteGroup + + pal3 = rom_[rom_.version_constants().kOverworldMapPaletteGroup + (previousPalId * 4) + 2]; }