fix(overworld): stabilize palette and tilemap saves

This commit is contained in:
scawful
2025-12-22 14:29:43 -05:00
parent ffc3ddd854
commit e733bc78d6
5 changed files with 102 additions and 33 deletions

View File

@@ -1251,6 +1251,7 @@ absl::Status Overworld::LoadSpritesFromMap(int sprites_per_gamestate_ptr,
absl::Status Overworld::Save(Rom* rom) {
rom_ = rom;
RETURN_IF_ERROR(CreateTile32Tilemap())
if (expanded_tile16_) {
RETURN_IF_ERROR(SaveMap16Expanded())
} else {
@@ -1277,6 +1278,10 @@ absl::Status Overworld::Save(Rom* rom) {
absl::Status Overworld::SaveOverworldMaps() {
util::logf("Saving Overworld Maps");
if (tiles32_list_.size() < NumberOfMap32) {
RETURN_IF_ERROR(CreateTile32Tilemap())
}
// Initialize map pointers
std::fill(map_pointers1_id.begin(), map_pointers1_id.end(), -1);
std::fill(map_pointers2_id.begin(), map_pointers2_id.end(), -1);
@@ -3011,7 +3016,9 @@ absl::Status Overworld::LoadDiggableTiles() {
absl::Status Overworld::SaveDiggableTiles() {
// Diggable tiles require v3+ (custom table at 0x140980+)
if (!OverworldVersionHelper::SupportsAreaEnum(cached_version_)) {
const auto version = OverworldVersionHelper::GetVersion(*rom_);
cached_version_ = version;
if (!OverworldVersionHelper::SupportsAreaEnum(version)) {
return absl::OkStatus(); // Skip for vanilla/v1/v2
}

View File

@@ -903,6 +903,11 @@ absl::StatusOr<gfx::SnesPalette> OverworldMap::GetPalette(
}
absl::Status OverworldMap::LoadPalette() {
if (!game_data_) {
current_palette_.clear();
return absl::OkStatus();
}
uint8_t asm_version = (*rom_)[OverworldCustomASMHasBeenApplied];
auto version = OverworldVersionHelper::GetVersion(*rom_);
@@ -1207,7 +1212,8 @@ absl::Status OverworldMap::BuildTileset() {
current_gfx_.resize(0x10000, 0x00);
if (!game_data_) {
return absl::FailedPreconditionError("GameData not set");
// Headless/tests: allow map builds without graphics by keeping zeroed data.
return absl::OkStatus();
}
// Process the 8 main graphics sheets (slots 0-7)