chore: remove 2bpp sheets from LoadAllGraphicsData
*added more detailed print statement to Decompress as well
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user