Add GfxGroups fns to ROM
This commit is contained in:
@@ -327,6 +327,7 @@ absl::Status ROM::LoadFromFile(const absl::string_view& filename,
|
|||||||
version_ = Z3_Version::US;
|
version_ = Z3_Version::US;
|
||||||
}
|
}
|
||||||
RETURN_IF_ERROR(LoadAllPalettes())
|
RETURN_IF_ERROR(LoadAllPalettes())
|
||||||
|
LoadGfxGroups();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set is_loaded_ flag and return success
|
// Set is_loaded_ flag and return success
|
||||||
|
|||||||
@@ -464,6 +464,85 @@ class ROM {
|
|||||||
bitmap->UpdateTexture(renderer_);
|
bitmap->UpdateTexture(renderer_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<std::vector<uint8_t>> main_blockset_ids;
|
||||||
|
std::vector<std::vector<uint8_t>> room_blockset_ids;
|
||||||
|
std::vector<std::vector<uint8_t>> spriteset_ids;
|
||||||
|
std::vector<std::vector<uint8_t>> paletteset_ids;
|
||||||
|
|
||||||
|
void LoadGfxGroups() {
|
||||||
|
main_blockset_ids.resize(37, std::vector<uint8_t>(8));
|
||||||
|
room_blockset_ids.resize(82, std::vector<uint8_t>(4));
|
||||||
|
spriteset_ids.resize(144, std::vector<uint8_t>(4));
|
||||||
|
paletteset_ids.resize(72, std::vector<uint8_t>(4));
|
||||||
|
|
||||||
|
int gfxPointer = (rom_data_[core::gfx_groups_pointer + 1] << 8) +
|
||||||
|
rom_data_[core::gfx_groups_pointer];
|
||||||
|
gfxPointer = core::SnesToPc(gfxPointer);
|
||||||
|
|
||||||
|
for (int i = 0; i < 37; i++) {
|
||||||
|
for (int j = 0; j < 8; j++) {
|
||||||
|
main_blockset_ids[i][j] = rom_data_[gfxPointer + (i * 8) + j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 82; i++) {
|
||||||
|
for (int j = 0; j < 4; j++) {
|
||||||
|
room_blockset_ids[i][j] =
|
||||||
|
rom_data_[core::entrance_gfx_group + (i * 4) + j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 144; i++) {
|
||||||
|
for (int j = 0; j < 4; j++) {
|
||||||
|
spriteset_ids[i][j] =
|
||||||
|
rom_data_[GetVersionConstants().kSpriteBlocksetPointer + (i * 4) +
|
||||||
|
j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 72; i++) {
|
||||||
|
for (int j = 0; j < 4; j++) {
|
||||||
|
paletteset_ids[i][j] =
|
||||||
|
rom_data_[core::dungeons_palettes_groups + (i * 4) + j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SaveGroupsToROM() {
|
||||||
|
int gfxPointer = (rom_data_[core::gfx_groups_pointer + 1] << 8) +
|
||||||
|
rom_data_[core::gfx_groups_pointer];
|
||||||
|
gfxPointer = core::SnesToPc(gfxPointer);
|
||||||
|
|
||||||
|
for (int i = 0; i < 37; i++) {
|
||||||
|
for (int j = 0; j < 8; j++) {
|
||||||
|
rom_data_[gfxPointer + (i * 8) + j] = main_blockset_ids[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 82; i++) {
|
||||||
|
for (int j = 0; j < 4; j++) {
|
||||||
|
rom_data_[core::entrance_gfx_group + (i * 4) + j] =
|
||||||
|
room_blockset_ids[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 144; i++) {
|
||||||
|
for (int j = 0; j < 4; j++) {
|
||||||
|
rom_data_[GetVersionConstants().kSpriteBlocksetPointer + (i * 4) + j] =
|
||||||
|
spriteset_ids[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 72; i++) {
|
||||||
|
for (int j = 0; j < 4; j++) {
|
||||||
|
rom_data_[core::dungeons_palettes_groups + (i * 4) + j] =
|
||||||
|
paletteset_ids[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
long size_ = 0;
|
long size_ = 0;
|
||||||
bool is_loaded_ = false;
|
bool is_loaded_ = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user