chore: remove 2bpp sheets from LoadAllGraphicsData

*added more detailed print statement to Decompress as well
This commit is contained in:
Justin Scofield
2022-08-17 10:59:08 -04:00
parent c2086914af
commit 3cd3ebd8cb

View File

@@ -573,7 +573,10 @@ absl::StatusOr<Bytes> ROM::Decompress(int offset, int size, bool reversed) {
} }
} break; } break;
default: { default: {
std::cout << "Command #" << cmd << " at offset " << offset << std::endl; std::cout << absl::StrFormat(
"DecompressOverworld: Invalid command in header for "
"decompression (Offset : %#06x, Command: %#04x)\n",
offset, cmd);
} break; } break;
} }
} }
@@ -596,6 +599,7 @@ absl::StatusOr<Bytes> ROM::DecompressOverworld(int pos, int size) {
// 218-222 -> compressed 2bpp -> (decompressed each) 0x800 chars // 218-222 -> compressed 2bpp -> (decompressed each) 0x800 chars
absl::Status ROM::LoadAllGraphicsData() { absl::Status ROM::LoadAllGraphicsData() {
Bytes sheet; Bytes sheet;
bool convert = false;
for (int i = 0; i < core::NumberOfSheets; i++) { for (int i = 0; i < core::NumberOfSheets; i++) {
if (i >= 115 && i <= 126) { // uncompressed sheets if (i >= 115 && i <= 126) { // uncompressed sheets
@@ -604,28 +608,27 @@ absl::Status ROM::LoadAllGraphicsData() {
for (int j = 0; j < core::Uncompressed3BPPSize; j++) { for (int j = 0; j < core::Uncompressed3BPPSize; j++) {
sheet[j] = rom_data_[j + offset]; sheet[j] = rom_data_[j + offset];
} }
} else if (i == 113 || i == 114) { convert = true;
sheet.resize(0x800); } else if (i == 113 || i == 114 || i >= 218) {
auto offset = GetGraphicsAddress(rom_data_.data(), i); convert = false;
for (int j = 0; j < 0x800; j++) {
sheet[j] = rom_data_[j + offset];
}
} else { } else {
auto offset = GetGraphicsAddress(rom_data_.data(), i); auto offset = GetGraphicsAddress(rom_data_.data(), i);
absl::StatusOr<Bytes> new_sheet = absl::StatusOr<Bytes> new_sheet = Decompress(offset);
Decompress(offset, core::UncompressedSheetSize);
if (!new_sheet.ok()) { if (!new_sheet.ok()) {
return new_sheet.status(); return new_sheet.status();
} else { } else {
sheet = std::move(*new_sheet); sheet = std::move(*new_sheet);
} }
convert = true;
} }
auto converted_sheet = SNES3bppTo8bppSheet(sheet); if (convert) {
graphics_bin_[i] = auto converted_sheet = SNES3bppTo8bppSheet(sheet);
gfx::Bitmap(core::kTilesheetWidth, core::kTilesheetHeight, graphics_bin_[i] =
core::kTilesheetDepth, converted_sheet.data()); gfx::Bitmap(core::kTilesheetWidth, core::kTilesheetHeight,
graphics_bin_.at(i).CreateTexture(renderer_); core::kTilesheetDepth, converted_sheet.data());
graphics_bin_.at(i).CreateTexture(renderer_);
}
} }
return absl::OkStatus(); return absl::OkStatus();
} }