cleanup Rom class interface
This commit is contained in:
@@ -473,7 +473,6 @@ void MasterEditor::DrawFileMenu() {
|
||||
MENU_ITEM("Save As..") { save_as_menu = true; }
|
||||
|
||||
if (rom()->is_loaded()) {
|
||||
MENU_ITEM("Reload") { status_ = rom()->Reload(); }
|
||||
MENU_ITEM("Close") {
|
||||
status_ = rom()->Close();
|
||||
rom_assets_loaded_ = false;
|
||||
|
||||
@@ -34,19 +34,23 @@ using core::Renderer;
|
||||
constexpr int Uncompressed3BPPSize = 0x0600;
|
||||
constexpr int kEntranceGfxGroup = 0x5D97;
|
||||
|
||||
int Rom::GetGraphicsAddress(const uchar* data, uint8_t addr) {
|
||||
namespace {
|
||||
int GetGraphicsAddress(const uchar* data, uint8_t addr, uint32_t ptr1,
|
||||
uint32_t ptr2, uint32_t ptr3) {
|
||||
return core::SnesToPc(core::AddressFromBytes(
|
||||
data[version_constants().kOverworldGfxPtr1 + addr],
|
||||
data[version_constants().kOverworldGfxPtr2 + addr],
|
||||
data[version_constants().kOverworldGfxPtr3 + addr]));
|
||||
data[ptr1 + addr], data[ptr2 + addr], data[ptr3 + addr]));
|
||||
}
|
||||
} // namespace
|
||||
|
||||
absl::StatusOr<Bytes> Rom::Load2BppGraphics() {
|
||||
Bytes sheet;
|
||||
const uint8_t sheets[] = {113, 114, 218, 219, 220, 221};
|
||||
|
||||
for (const auto& sheet_id : sheets) {
|
||||
auto offset = GetGraphicsAddress(data(), sheet_id);
|
||||
auto offset = GetGraphicsAddress(data(), sheet_id,
|
||||
version_constants().kOverworldGfxPtr1,
|
||||
version_constants().kOverworldGfxPtr2,
|
||||
version_constants().kOverworldGfxPtr3);
|
||||
ASSIGN_OR_RETURN(auto decomp_sheet,
|
||||
gfx::lc_lz2::DecompressV2(data(), offset))
|
||||
auto converted_sheet = gfx::SnesTo8bppSheet(decomp_sheet, 2);
|
||||
@@ -89,7 +93,10 @@ absl::Status Rom::LoadAllGraphicsData() {
|
||||
for (int i = 0; i < kNumGfxSheets; i++) {
|
||||
if (i >= 115 && i <= 126) { // uncompressed sheets
|
||||
sheet.resize(Uncompressed3BPPSize);
|
||||
auto offset = GetGraphicsAddress(data(), i);
|
||||
auto offset =
|
||||
GetGraphicsAddress(data(), i, version_constants().kOverworldGfxPtr1,
|
||||
version_constants().kOverworldGfxPtr2,
|
||||
version_constants().kOverworldGfxPtr3);
|
||||
for (int j = 0; j < Uncompressed3BPPSize; j++) {
|
||||
sheet[j] = rom_data_[j + offset];
|
||||
}
|
||||
@@ -97,7 +104,10 @@ absl::Status Rom::LoadAllGraphicsData() {
|
||||
} else if (i == 113 || i == 114 || i >= 218) {
|
||||
bpp3 = false;
|
||||
} else {
|
||||
auto offset = GetGraphicsAddress(data(), i);
|
||||
auto offset =
|
||||
GetGraphicsAddress(data(), i, version_constants().kOverworldGfxPtr1,
|
||||
version_constants().kOverworldGfxPtr2,
|
||||
version_constants().kOverworldGfxPtr3);
|
||||
ASSIGN_OR_RETURN(sheet, gfx::lc_lz2::DecompressV2(data(), offset))
|
||||
bpp3 = true;
|
||||
}
|
||||
|
||||
@@ -391,13 +391,6 @@ class Rom : public core::ExperimentFlags {
|
||||
size_ = size;
|
||||
}
|
||||
|
||||
absl::Status Reload() {
|
||||
if (filename_.empty()) {
|
||||
return absl::InvalidArgumentError("No filename specified");
|
||||
}
|
||||
return LoadFromFile(filename_);
|
||||
}
|
||||
|
||||
absl::Status Close() {
|
||||
rom_data_.clear();
|
||||
size_ = 0;
|
||||
@@ -405,28 +398,20 @@ class Rom : public core::ExperimentFlags {
|
||||
return absl::OkStatus();
|
||||
}
|
||||
|
||||
core::ResourceLabelManager* resource_label() {
|
||||
return &resource_label_manager_;
|
||||
}
|
||||
VersionConstants version_constants() const {
|
||||
return kVersionConstantsMap.at(version_);
|
||||
}
|
||||
|
||||
int GetGraphicsAddress(const uchar* data, uint8_t addr);
|
||||
|
||||
auto palette_group() { return palette_groups_; }
|
||||
auto mutable_palette_group() { return &palette_groups_; }
|
||||
auto dungeon_palette(int i) { return palette_groups_.dungeon_main[i]; }
|
||||
auto mutable_dungeon_palette(int i) {
|
||||
return palette_groups_.dungeon_main.mutable_palette(i);
|
||||
}
|
||||
|
||||
// Full graphical data for the game
|
||||
Bytes graphics_buffer() const { return graphics_buffer_; }
|
||||
|
||||
[[deprecated]] gfx::BitmapTable graphics_bin() const { return graphics_bin_; }
|
||||
|
||||
[[deprecated]] gfx::Bitmap* mutable_graphics_sheet(int index) {
|
||||
return &graphics_bin_.at(index);
|
||||
}
|
||||
|
||||
[[deprecated]] auto bitmap_manager() { return graphics_manager_; }
|
||||
[[deprecated]] auto mutable_bitmap_manager() { return &graphics_manager_; }
|
||||
|
||||
@@ -436,6 +421,13 @@ class Rom : public core::ExperimentFlags {
|
||||
auto gfx_sheets() { return graphics_sheets_; }
|
||||
auto mutable_gfx_sheets() { return &graphics_sheets_; }
|
||||
|
||||
auto palette_group() { return palette_groups_; }
|
||||
auto mutable_palette_group() { return &palette_groups_; }
|
||||
auto dungeon_palette(int i) { return palette_groups_.dungeon_main[i]; }
|
||||
auto mutable_dungeon_palette(int i) {
|
||||
return palette_groups_.dungeon_main.mutable_palette(i);
|
||||
}
|
||||
|
||||
auto title() const { return title_; }
|
||||
auto size() const { return size_; }
|
||||
auto begin() { return rom_data_.begin(); }
|
||||
@@ -454,15 +446,6 @@ class Rom : public core::ExperimentFlags {
|
||||
}
|
||||
return rom_data_[i];
|
||||
}
|
||||
uint8_t& operator+(int i) {
|
||||
if (i > size_) {
|
||||
std::cout << "ROM: Index " << i << " out of bounds, size: " << size_
|
||||
<< std::endl;
|
||||
return rom_data_[0];
|
||||
}
|
||||
return rom_data_[i];
|
||||
}
|
||||
const uint8_t* operator&() { return rom_data_.data(); }
|
||||
|
||||
std::vector<std::vector<uint8_t>> main_blockset_ids;
|
||||
std::vector<std::vector<uint8_t>> room_blockset_ids;
|
||||
@@ -472,8 +455,6 @@ class Rom : public core::ExperimentFlags {
|
||||
void LoadGfxGroups();
|
||||
void SaveGroupsToRom();
|
||||
|
||||
auto resource_label() { return &resource_label_manager_; }
|
||||
|
||||
private:
|
||||
struct WriteAction {
|
||||
int address;
|
||||
|
||||
@@ -1249,13 +1249,13 @@ void Tracker::SaveSongs(Rom &rom) {
|
||||
ssblt[i] = 0;
|
||||
}
|
||||
if (n > l + 4) {
|
||||
*(short *)(rom + l) = n - l - 4;
|
||||
*(short *)(rom + l + 2) = o ? bank_lwr[k] : 0xd000;
|
||||
*(short *)(rom.data() + l) = n - l - 4;
|
||||
*(short *)(rom.data() + l + 2) = o ? bank_lwr[k] : 0xd000;
|
||||
l = n;
|
||||
}
|
||||
}
|
||||
*(short *)(rom + l) = 0;
|
||||
*(short *)(rom + l + 2) = 0x800;
|
||||
*(short *)(rom.data() + l) = 0;
|
||||
*(short *)(rom.data() + l + 2) = 0x800;
|
||||
if (k == 1) m = l + 4;
|
||||
}
|
||||
free(ssblt);
|
||||
|
||||
Reference in New Issue
Block a user