make use of status macros

This commit is contained in:
scawful
2022-08-23 14:52:44 -05:00
parent 04fd077578
commit eb70044e8a
5 changed files with 23 additions and 49 deletions

View File

@@ -44,7 +44,7 @@ absl::Status OverworldEditor::Update() {
}
auto toolset_status = DrawToolset();
if (!toolset_status.ok()) return toolset_status;
RETURN_IF_ERROR(toolset_status);
ImGui::Separator();
if (ImGui::BeginTable("#owEditTable", 2, ow_edit_flags, ImVec2(0, 0))) {
@@ -107,8 +107,7 @@ absl::Status OverworldEditor::DrawToolset() {
// Load Overworld
ImGui::TableNextColumn();
if (ImGui::Button(ICON_MD_UPDATE)) {
auto ow_status = overworld_.Load(rom_, tile16_blockset_bmp_.GetData());
if (!ow_status.ok()) return ow_status;
RETURN_IF_ERROR(overworld_.Load(rom_, tile16_blockset_bmp_.GetData()))
}
ImGui::TableNextColumn();

View File

@@ -351,17 +351,9 @@ absl::Status ValidateCompressionResult(
int start, int src_data_pos) {
if (compressed_chain_start->next != nullptr) {
ROM temp_rom;
auto rom_response = temp_rom.LoadFromBytes(
CreateCompressionString(compressed_chain_start->next, mode));
if (!rom_response.ok()) {
return rom_response;
}
auto decomp_response = temp_rom.Decompress(0, temp_rom.GetSize());
if (!decomp_response.ok()) {
return decomp_response.status();
}
auto decomp_data = std::move(*decomp_response);
RETURN_IF_ERROR(temp_rom.LoadFromBytes(
CreateCompressionString(compressed_chain_start->next, mode)))
ASSIGN_OR_RETURN(auto decomp_data, temp_rom.Decompress(0, temp_rom.GetSize()))
if (!std::equal(decomp_data.begin() + start, decomp_data.end(),
temp_rom.begin())) {
return absl::InternalError(absl::StrFormat(
@@ -465,11 +457,8 @@ absl::StatusOr<Bytes> ROM::Compress(const int start, const int length, int mode,
}
if (check) {
auto response = ValidateCompressionResult(compressed_chain_start, mode,
start, src_data_pos);
if (!response.ok()) {
return response;
}
RETURN_IF_ERROR(ValidateCompressionResult(compressed_chain_start, mode,
start, src_data_pos))
}
}
@@ -485,7 +474,7 @@ absl::StatusOr<Bytes> ROM::CompressOverworld(const int pos, const int length) {
return Compress(pos, length, kNintendoMode1);
}
absl::StatusOr<Bytes> ROM::Decompress(int offset, int size, bool reversed) {
absl::StatusOr<Bytes> ROM::Decompress(int offset, int size, int mode) {
Bytes buffer(size, 0);
uint length = 0;
uint buffer_pos = 0;
@@ -538,9 +527,7 @@ absl::StatusOr<Bytes> ROM::Decompress(int offset, int size, bool reversed) {
offset += 1; // Advance 1 byte in the ROM
} break;
case kCommandRepeatingBytes: {
ushort s1 = ((rom_data_[offset + 1] & kSnesByteMax) << 8);
ushort s2 = ((rom_data_[offset] & kSnesByteMax));
if (reversed) { // Reversed byte order for overworld maps
if (mode == kNintendoMode1) { // Reversed byte order for overworld maps
auto addr = (rom_data_[offset + 2]) | ((rom_data_[offset + 1]) << 8);
if (addr > offset) {
return absl::InternalError(absl::StrFormat(
@@ -548,20 +535,25 @@ absl::StatusOr<Bytes> ROM::Decompress(int offset, int size, bool reversed) {
"current position (Offset : %#04x | Pos : %#06x)\n",
addr, offset));
}
if (buffer_pos + length >= size) {
size *= 2;
buffer.resize(size);
}
memcpy(buffer.data() + buffer_pos, rom_data_.data() + offset, length);
memcpy(buffer.data() + buffer_pos, rom_data_.data() + addr, length);
offset += 2;
} else {
auto addr = (ushort)(s1 | s2);
ushort s1 = ((rom_data_[offset + 1] & kSnesByteMax) << 8);
ushort s2 = ((rom_data_[offset] & kSnesByteMax));
auto addr = (s1 | s2);
for (int i = 0; i < length; i++) {
buffer[buffer_pos] = buffer[addr + i];
buffer_pos++;
}
offset += 2; // Advance 2 bytes in the ROM
}
} break;
default: {
std::cout << absl::StrFormat(
@@ -578,11 +570,11 @@ absl::StatusOr<Bytes> ROM::Decompress(int offset, int size, bool reversed) {
}
absl::StatusOr<Bytes> ROM::DecompressGraphics(int pos, int size) {
return Decompress(pos, size, false);
return Decompress(pos, size, kNintendoMode2);
}
absl::StatusOr<Bytes> ROM::DecompressOverworld(int pos, int size) {
return Decompress(pos, size, true);
return Decompress(pos, size, kNintendoMode1);
}
// 0-112 -> compressed 3bpp bgr -> (decompressed each) 0x600 chars
@@ -606,12 +598,7 @@ absl::Status ROM::LoadAllGraphicsData() {
convert = false;
} else {
auto offset = GetGraphicsAddress(rom_data_.data(), i);
absl::StatusOr<Bytes> new_sheet = Decompress(offset);
if (!new_sheet.ok()) {
return new_sheet.status();
} else {
sheet = std::move(*new_sheet);
}
ASSIGN_OR_RETURN(sheet, Decompress(offset))
convert = true;
}

View File

@@ -73,8 +73,7 @@ class ROM {
absl::StatusOr<Bytes> CompressGraphics(const int pos, const int length);
absl::StatusOr<Bytes> CompressOverworld(const int pos, const int length);
absl::StatusOr<Bytes> Decompress(int offset, int size = 0x800,
bool reversed = false);
absl::StatusOr<Bytes> Decompress(int offset, int size = 0x800, int mode = 1);
absl::StatusOr<Bytes> DecompressGraphics(int pos, int size);
absl::StatusOr<Bytes> DecompressOverworld(int pos, int size);

View File

@@ -32,11 +32,7 @@ absl::Status Overworld::Load(ROM &rom, uchar *ow_blockset) {
AssembleMap32Tiles();
AssembleMap16Tiles();
auto decompression_status = DecompressAllMapTiles();
if (!decompression_status.ok()) {
std::cout << decompression_status.ToString() << std::endl;
return decompression_status;
}
RETURN_IF_ERROR(DecompressAllMapTiles())
for (int map_index = 0; map_index < core::kNumOverworldMaps; ++map_index)
overworld_maps_.emplace_back(map_index, rom_, tiles16);

View File

@@ -56,15 +56,8 @@ absl::Status OverworldMap::BuildMap(int count, int game_state, int world,
}
LoadAreaGraphics(game_state, world_index);
auto tileset_status = BuildTileset();
if (!tileset_status.ok()) {
return tileset_status;
}
auto map_status = BuildTiles16Gfx(count);
if (!map_status.ok()) {
return map_status;
}
RETURN_IF_ERROR(BuildTileset())
RETURN_IF_ERROR(BuildTiles16Gfx(count))
// int superY = ((index_ - (world * 64)) / 8);
// int superX = index_ - (world * 64) - (superY * 8);