From 5ccb30f99978da4ace1236f2072df2101deff9b3 Mon Sep 17 00:00:00 2001 From: scawful Date: Tue, 13 Aug 2024 21:28:09 -0400 Subject: [PATCH] Refactor Rom::LoadLinkGraphics() for improved readability and maintainability --- src/app/rom.cc | 23 +++++++++++------------ src/app/rom.h | 5 ++++- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/app/rom.cc b/src/app/rom.cc index 062c25b7..690c0b0a 100644 --- a/src/app/rom.cc +++ b/src/app/rom.cc @@ -62,17 +62,16 @@ absl::StatusOr Rom::Load2BppGraphics() { } absl::Status Rom::LoadLinkGraphics() { - const auto link_gfx_offset = 0x80000; // $10:8000 - const auto link_gfx_length = 0x800; // 0x4000 or 0x7000? + const uint32_t link_gfx_offset = 0x80000; // $10:8000 + const uint16_t link_gfx_length = 0x800; // 0x4000 or 0x7000? link_palette_ = palette_groups_.armors[0]; // Load Links graphics from the ROM - for (int i = 0; i < 14; i++) { + for (int i = 0; i < kNumLinkSheets; i++) { ASSIGN_OR_RETURN( auto link_sheet_data, ReadByteVector(/*offset=*/link_gfx_offset + (i * link_gfx_length), /*length=*/link_gfx_length)) - // auto link_sheet_8bpp = gfx::SnesTo8bppSheet(link_sheet_data, /*bpp=*/4); // Convert to 3bpp, then from 3bpp to 8bpp before creating bitmap. auto link_sheet_3bpp = gfx::Convert4bppTo3bpp(link_sheet_data); auto link_sheet_8bpp = gfx::SnesTo8bppSheet(link_sheet_3bpp, /*bpp=*/3); @@ -132,9 +131,9 @@ absl::Status Rom::LoadAllGraphicsData() { RETURN_IF_ERROR(graphics_manager_[i].ApplyPaletteWithTransparent( palette_groups_.dungeon_main[0], 0)); } - graphics_manager_[i].CreateTexture(Renderer::GetInstance().renderer()); + graphics_manager_[i].CreateTexture( + Renderer::GetInstance().renderer()); } - } if (flags()->kUseBitmapManager) { @@ -410,13 +409,13 @@ void Rom::LoadGfxGroups() { spriteset_ids.resize(144, std::vector(4)); paletteset_ids.resize(72, std::vector(4)); - int gfxPointer = + int gfx_ptr = (rom_data_[kGfxGroupsPointer + 1] << 8) + rom_data_[kGfxGroupsPointer]; - gfxPointer = core::SnesToPc(gfxPointer); + gfx_ptr = core::SnesToPc(gfx_ptr); for (int i = 0; i < 37; i++) { for (int j = 0; j < 8; j++) { - main_blockset_ids[i][j] = rom_data_[gfxPointer + (i * 8) + j]; + main_blockset_ids[i][j] = rom_data_[gfx_ptr + (i * 8) + j]; } } @@ -442,13 +441,13 @@ void Rom::LoadGfxGroups() { } void Rom::SaveGroupsToRom() { - int gfxPointer = + int gfx_ptr = (rom_data_[kGfxGroupsPointer + 1] << 8) + rom_data_[kGfxGroupsPointer]; - gfxPointer = core::SnesToPc(gfxPointer); + gfx_ptr = core::SnesToPc(gfx_ptr); for (int i = 0; i < 37; i++) { for (int j = 0; j < 8; j++) { - rom_data_[gfxPointer + (i * 8) + j] = main_blockset_ids[i][j]; + rom_data_[gfx_ptr + (i * 8) + j] = main_blockset_ids[i][j]; } } diff --git a/src/app/rom.h b/src/app/rom.h index 02cd7ab6..d74c9a0b 100644 --- a/src/app/rom.h +++ b/src/app/rom.h @@ -119,6 +119,7 @@ static const std::map kVersionConstantsMap = { }}}; constexpr uint32_t kNumGfxSheets = 223; +constexpr uint32_t kNumLinkSheets = 14; constexpr uint32_t kNormalGfxSpaceStart = 0x87000; constexpr uint32_t kNormalGfxSpaceEnd = 0xC4200; constexpr uint32_t kFontSpriteLocation = 0x70000; @@ -519,11 +520,13 @@ class Rom : public core::ExperimentFlags { // All graphics sheets in the game std::array graphics_sheets_; + // All graphics sheets for Link + std::array link_graphics_; + Z3_Version version_ = Z3_Version::US; [[deprecated("BitmapManager has unpredictable destructor behavior.")]] gfx:: BitmapManager graphics_manager_; - gfx::BitmapTable link_graphics_; gfx::SnesPalette link_palette_; gfx::PaletteGroupMap palette_groups_; core::ResourceLabelManager resource_label_manager_;