Refactor Rom::LoadLinkGraphics() for improved readability and maintainability
This commit is contained in:
@@ -62,17 +62,16 @@ absl::StatusOr<Bytes> Rom::Load2BppGraphics() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
absl::Status Rom::LoadLinkGraphics() {
|
absl::Status Rom::LoadLinkGraphics() {
|
||||||
const auto link_gfx_offset = 0x80000; // $10:8000
|
const uint32_t link_gfx_offset = 0x80000; // $10:8000
|
||||||
const auto link_gfx_length = 0x800; // 0x4000 or 0x7000?
|
const uint16_t link_gfx_length = 0x800; // 0x4000 or 0x7000?
|
||||||
link_palette_ = palette_groups_.armors[0];
|
link_palette_ = palette_groups_.armors[0];
|
||||||
|
|
||||||
// Load Links graphics from the ROM
|
// Load Links graphics from the ROM
|
||||||
for (int i = 0; i < 14; i++) {
|
for (int i = 0; i < kNumLinkSheets; i++) {
|
||||||
ASSIGN_OR_RETURN(
|
ASSIGN_OR_RETURN(
|
||||||
auto link_sheet_data,
|
auto link_sheet_data,
|
||||||
ReadByteVector(/*offset=*/link_gfx_offset + (i * link_gfx_length),
|
ReadByteVector(/*offset=*/link_gfx_offset + (i * link_gfx_length),
|
||||||
/*length=*/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.
|
// Convert to 3bpp, then from 3bpp to 8bpp before creating bitmap.
|
||||||
auto link_sheet_3bpp = gfx::Convert4bppTo3bpp(link_sheet_data);
|
auto link_sheet_3bpp = gfx::Convert4bppTo3bpp(link_sheet_data);
|
||||||
auto link_sheet_8bpp = gfx::SnesTo8bppSheet(link_sheet_3bpp, /*bpp=*/3);
|
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(
|
RETURN_IF_ERROR(graphics_manager_[i].ApplyPaletteWithTransparent(
|
||||||
palette_groups_.dungeon_main[0], 0));
|
palette_groups_.dungeon_main[0], 0));
|
||||||
}
|
}
|
||||||
graphics_manager_[i].CreateTexture(Renderer::GetInstance().renderer());
|
graphics_manager_[i].CreateTexture(
|
||||||
|
Renderer::GetInstance().renderer());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags()->kUseBitmapManager) {
|
if (flags()->kUseBitmapManager) {
|
||||||
@@ -410,13 +409,13 @@ void Rom::LoadGfxGroups() {
|
|||||||
spriteset_ids.resize(144, std::vector<uint8_t>(4));
|
spriteset_ids.resize(144, std::vector<uint8_t>(4));
|
||||||
paletteset_ids.resize(72, std::vector<uint8_t>(4));
|
paletteset_ids.resize(72, std::vector<uint8_t>(4));
|
||||||
|
|
||||||
int gfxPointer =
|
int gfx_ptr =
|
||||||
(rom_data_[kGfxGroupsPointer + 1] << 8) + rom_data_[kGfxGroupsPointer];
|
(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 i = 0; i < 37; i++) {
|
||||||
for (int j = 0; j < 8; j++) {
|
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() {
|
void Rom::SaveGroupsToRom() {
|
||||||
int gfxPointer =
|
int gfx_ptr =
|
||||||
(rom_data_[kGfxGroupsPointer + 1] << 8) + rom_data_[kGfxGroupsPointer];
|
(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 i = 0; i < 37; i++) {
|
||||||
for (int j = 0; j < 8; j++) {
|
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];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -119,6 +119,7 @@ static const std::map<Z3_Version, VersionConstants> kVersionConstantsMap = {
|
|||||||
}}};
|
}}};
|
||||||
|
|
||||||
constexpr uint32_t kNumGfxSheets = 223;
|
constexpr uint32_t kNumGfxSheets = 223;
|
||||||
|
constexpr uint32_t kNumLinkSheets = 14;
|
||||||
constexpr uint32_t kNormalGfxSpaceStart = 0x87000;
|
constexpr uint32_t kNormalGfxSpaceStart = 0x87000;
|
||||||
constexpr uint32_t kNormalGfxSpaceEnd = 0xC4200;
|
constexpr uint32_t kNormalGfxSpaceEnd = 0xC4200;
|
||||||
constexpr uint32_t kFontSpriteLocation = 0x70000;
|
constexpr uint32_t kFontSpriteLocation = 0x70000;
|
||||||
@@ -519,11 +520,13 @@ class Rom : public core::ExperimentFlags {
|
|||||||
// All graphics sheets in the game
|
// All graphics sheets in the game
|
||||||
std::array<gfx::Bitmap, kNumGfxSheets> graphics_sheets_;
|
std::array<gfx::Bitmap, kNumGfxSheets> graphics_sheets_;
|
||||||
|
|
||||||
|
// All graphics sheets for Link
|
||||||
|
std::array<gfx::Bitmap, kNumLinkSheets> link_graphics_;
|
||||||
|
|
||||||
Z3_Version version_ = Z3_Version::US;
|
Z3_Version version_ = Z3_Version::US;
|
||||||
|
|
||||||
[[deprecated("BitmapManager has unpredictable destructor behavior.")]] gfx::
|
[[deprecated("BitmapManager has unpredictable destructor behavior.")]] gfx::
|
||||||
BitmapManager graphics_manager_;
|
BitmapManager graphics_manager_;
|
||||||
gfx::BitmapTable link_graphics_;
|
|
||||||
gfx::SnesPalette link_palette_;
|
gfx::SnesPalette link_palette_;
|
||||||
gfx::PaletteGroupMap palette_groups_;
|
gfx::PaletteGroupMap palette_groups_;
|
||||||
core::ResourceLabelManager resource_label_manager_;
|
core::ResourceLabelManager resource_label_manager_;
|
||||||
|
|||||||
Reference in New Issue
Block a user