make use of status macros
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user