From 5c68f615448be6b4003d8e693830882a079795fb Mon Sep 17 00:00:00 2001 From: scawful Date: Wed, 14 Aug 2024 18:27:40 -0400 Subject: [PATCH] Refactor Rom class to use constants for blockset and spriteset sizes --- src/app/rom.cc | 46 ++++++++++++++++++++++++---------------------- src/app/rom.h | 6 ++++++ 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/src/app/rom.cc b/src/app/rom.cc index d9df5317..744804a2 100644 --- a/src/app/rom.cc +++ b/src/app/rom.cc @@ -394,73 +394,75 @@ absl::Status Rom::SaveAllPalettes() { return absl::OkStatus(); } -void Rom::LoadGfxGroups() { - main_blockset_ids.resize(37, std::vector(8)); - room_blockset_ids.resize(82, std::vector(4)); - spriteset_ids.resize(144, std::vector(4)); - paletteset_ids.resize(72, std::vector(4)); +absl::Status Rom::LoadGfxGroups() { + main_blockset_ids.resize(kNumMainBlocksets, std::vector(8)); + room_blockset_ids.resize(kNumRoomBlocksets, std::vector(4)); + spriteset_ids.resize(kNumSpritesets, std::vector(4)); + paletteset_ids.resize(kNumPalettesets, std::vector(4)); - int gfx_ptr = - (rom_data_[kGfxGroupsPointer + 1] << 8) + rom_data_[kGfxGroupsPointer]; - gfx_ptr = core::SnesToPc(gfx_ptr); + ASSIGN_OR_RETURN(auto main_blockset_ptr, ReadWord(kGfxGroupsPointer)); + main_blockset_ptr = core::SnesToPc(main_blockset_ptr); - for (int i = 0; i < 37; i++) { + for (int i = 0; i < kNumMainBlocksets; i++) { for (int j = 0; j < 8; j++) { - main_blockset_ids[i][j] = rom_data_[gfx_ptr + (i * 8) + j]; + main_blockset_ids[i][j] = rom_data_[main_blockset_ptr + (i * 8) + j]; } } - for (int i = 0; i < 82; i++) { + for (int i = 0; i < kNumRoomBlocksets; i++) { for (int j = 0; j < 4; j++) { room_blockset_ids[i][j] = rom_data_[kEntranceGfxGroup + (i * 4) + j]; } } - for (int i = 0; i < 144; i++) { + for (int i = 0; i < kNumSpritesets; i++) { for (int j = 0; j < 4; j++) { spriteset_ids[i][j] = rom_data_[version_constants().kSpriteBlocksetPointer + (i * 4) + j]; } } - for (int i = 0; i < 72; i++) { + for (int i = 0; i < kNumPalettesets; i++) { for (int j = 0; j < 4; j++) { paletteset_ids[i][j] = rom_data_[version_constants().kDungeonPalettesGroups + (i * 4) + j]; } } + + return absl::OkStatus(); } -void Rom::SaveGroupsToRom() { - int gfx_ptr = - (rom_data_[kGfxGroupsPointer + 1] << 8) + rom_data_[kGfxGroupsPointer]; - gfx_ptr = core::SnesToPc(gfx_ptr); +absl::Status Rom::SaveGroupsToRom() { + ASSIGN_OR_RETURN(auto main_blockset_ptr, ReadWord(kGfxGroupsPointer)); + main_blockset_ptr = core::SnesToPc(main_blockset_ptr); - for (int i = 0; i < 37; i++) { + for (int i = 0; i < kNumMainBlocksets; i++) { for (int j = 0; j < 8; j++) { - rom_data_[gfx_ptr + (i * 8) + j] = main_blockset_ids[i][j]; + rom_data_[main_blockset_ptr + (i * 8) + j] = main_blockset_ids[i][j]; } } - for (int i = 0; i < 82; i++) { + for (int i = 0; i < kNumRoomBlocksets; i++) { for (int j = 0; j < 4; j++) { rom_data_[kEntranceGfxGroup + (i * 4) + j] = room_blockset_ids[i][j]; } } - for (int i = 0; i < 144; i++) { + for (int i = 0; i < kNumSpritesets; i++) { for (int j = 0; j < 4; j++) { rom_data_[version_constants().kSpriteBlocksetPointer + (i * 4) + j] = spriteset_ids[i][j]; } } - for (int i = 0; i < 72; i++) { + for (int i = 0; i < kNumPalettesets; i++) { for (int j = 0; j < 4; j++) { rom_data_[version_constants().kDungeonPalettesGroups + (i * 4) + j] = paletteset_ids[i][j]; } } + + return absl::OkStatus(); } std::shared_ptr SharedRom::shared_rom_ = nullptr; diff --git a/src/app/rom.h b/src/app/rom.h index d0e9d838..963402cd 100644 --- a/src/app/rom.h +++ b/src/app/rom.h @@ -124,6 +124,10 @@ constexpr uint32_t kNormalGfxSpaceStart = 0x87000; constexpr uint32_t kNormalGfxSpaceEnd = 0xC4200; constexpr uint32_t kFontSpriteLocation = 0x70000; constexpr uint32_t kGfxGroupsPointer = 0x6237; +constexpr uint32_t kNumMainBlocksets = 37; +constexpr uint32_t kNumRoomBlocksets = 82; +constexpr uint32_t kNumSpritesets = 144; +constexpr uint32_t kNumPalettesets = 72; /** * @brief The Rom class is used to load, save, and modify Rom data. @@ -516,6 +520,8 @@ class Rom : public core::ExperimentFlags { } return absl::OkStatus(); } + absl::Status LoadGfxGroups(); + absl::Status SaveGroupsToRom(); long size_ = 0; bool is_loaded_ = false;