fix(overworld): stabilize palette and tilemap saves
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user