Add SaveMap16Expanded and SaveMap32Expanded functions based on ZS

This commit is contained in:
scawful
2024-11-10 16:49:16 -05:00
parent 3a2b2e8c37
commit 8cccbdfd4c
2 changed files with 137 additions and 1 deletions

View File

@@ -1069,6 +1069,56 @@ absl::Status Overworld::CreateTile32Tilemap() {
return absl::OkStatus();
}
absl::Status Overworld::SaveMap32Expanded() {
int bottomLeft = kMap32TileBLExpanded;
int bottomRight = kMap32TileBRExpanded;
int topRight = kMap32TileTRExpanded;
int limit = 0x8A80;
// Updates the pointers too for the tile32
// Top Right
RETURN_IF_ERROR(
rom()->WriteLong(0x0176EC, core::PcToSnes(kMap32TileTRExpanded)));
RETURN_IF_ERROR(
rom()->WriteLong(0x0176F3, core::PcToSnes(kMap32TileTRExpanded + 1)));
RETURN_IF_ERROR(
rom()->WriteLong(0x0176FA, core::PcToSnes(kMap32TileTRExpanded + 2)));
RETURN_IF_ERROR(
rom()->WriteLong(0x017701, core::PcToSnes(kMap32TileTRExpanded + 3)));
RETURN_IF_ERROR(
rom()->WriteLong(0x017708, core::PcToSnes(kMap32TileTRExpanded + 4)));
RETURN_IF_ERROR(
rom()->WriteLong(0x01771A, core::PcToSnes(kMap32TileTRExpanded + 5)));
// BottomLeft
RETURN_IF_ERROR(
rom()->WriteLong(0x01772C, core::PcToSnes(kMap32TileBLExpanded)));
RETURN_IF_ERROR(
rom()->WriteLong(0x017733, core::PcToSnes(kMap32TileBLExpanded + 1)));
RETURN_IF_ERROR(
rom()->WriteLong(0x01773A, core::PcToSnes(kMap32TileBLExpanded + 2)));
RETURN_IF_ERROR(
rom()->WriteLong(0x017741, core::PcToSnes(kMap32TileBLExpanded + 3)));
RETURN_IF_ERROR(
rom()->WriteLong(0x017748, core::PcToSnes(kMap32TileBLExpanded + 4)));
RETURN_IF_ERROR(
rom()->WriteLong(0x01775A, core::PcToSnes(kMap32TileBLExpanded + 5)));
// BottomRight
RETURN_IF_ERROR(
rom()->WriteLong(0x01776C, core::PcToSnes(kMap32TileBRExpanded)));
RETURN_IF_ERROR(
rom()->WriteLong(0x017773, core::PcToSnes(kMap32TileBRExpanded + 1)));
RETURN_IF_ERROR(
rom()->WriteLong(0x01777A, core::PcToSnes(kMap32TileBRExpanded + 2)));
RETURN_IF_ERROR(
rom()->WriteLong(0x017781, core::PcToSnes(kMap32TileBRExpanded + 3)));
RETURN_IF_ERROR(
rom()->WriteLong(0x017788, core::PcToSnes(kMap32TileBRExpanded + 4)));
RETURN_IF_ERROR(
rom()->WriteLong(0x01779A, core::PcToSnes(kMap32TileBRExpanded + 5)));
}
absl::Status Overworld::SaveMap32Tiles() {
core::Logger::log("Saving Map32 Tiles");
constexpr int kMaxUniqueTiles = 0x4540;
@@ -1198,6 +1248,84 @@ absl::Status Overworld::SaveMap32Tiles() {
return absl::OkStatus();
}
absl::Status Overworld::SaveMap16Expanded() {
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x008865),
core::PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x0EDE4F),
core::PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x0EDEE9),
core::PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BBC2D),
core::PcToSnes(kMap16TilesExpanded + 2)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BBC4C),
core::PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BBCC2),
core::PcToSnes(kMap16TilesExpanded + 4)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BBCCB),
core::PcToSnes(kMap16TilesExpanded + 6)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BBEF6),
core::PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BBF23),
core::PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BC041),
core::PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BC9B3),
core::PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BC9BA),
core::PcToSnes(kMap16TilesExpanded + 2)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BC9C1),
core::PcToSnes(kMap16TilesExpanded + 4)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BC9C8),
core::PcToSnes(kMap16TilesExpanded + 6)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BCA40),
core::PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BCA47),
core::PcToSnes(kMap16TilesExpanded + 2)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BCA4E),
core::PcToSnes(kMap16TilesExpanded + 4)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BCA55),
core::PcToSnes(kMap16TilesExpanded + 6)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F457),
core::PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F45E),
core::PcToSnes(kMap16TilesExpanded + 2)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F467),
core::PcToSnes(kMap16TilesExpanded + 4)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F46E),
core::PcToSnes(kMap16TilesExpanded + 6)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F51F),
core::PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F526),
core::PcToSnes(kMap16TilesExpanded + 4)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F52F),
core::PcToSnes(kMap16TilesExpanded + 2)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F536),
core::PcToSnes(kMap16TilesExpanded + 6)));
RETURN_IF_ERROR(rom()->WriteShort(core::SnesToPc(0x02FE1C),
core::PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteShort(core::SnesToPc(0x02FE23),
core::PcToSnes(kMap16TilesExpanded + 4)));
RETURN_IF_ERROR(rom()->WriteShort(core::SnesToPc(0x02FE2C),
core::PcToSnes(kMap16TilesExpanded + 2)));
RETURN_IF_ERROR(rom()->WriteShort(core::SnesToPc(0x02FE33),
core::PcToSnes(kMap16TilesExpanded + 6)));
RETURN_IF_ERROR(rom()->Write(
core::SnesToPc(0x02FD28),
static_cast<uint8_t>(core::PcToSnes(kMap16TilesExpanded) >> 16)));
RETURN_IF_ERROR(rom()->Write(
core::SnesToPc(0x02FD39),
static_cast<uint8_t>(core::PcToSnes(kMap16TilesExpanded) >> 16)));
return absl::OkStatus();
}
absl::Status Overworld::SaveMap16Tiles() {
core::Logger::log("Saving Map16 Tiles");
int tpos = kMap16Tiles;

View File

@@ -328,7 +328,6 @@ constexpr int OWHoleArea = 0xDB826;
constexpr int OWHoleEntrance = 0xDB84C;
class OverworldEntrance : public GameEntity {
public:
uint16_t map_pos_;
uchar entrance_id_;
@@ -428,6 +427,13 @@ constexpr int transition_target_west = 0x13F62;
constexpr int overworldCustomMosaicASM = 0x1301D0;
constexpr int overworldCustomMosaicArray = 0x1301F0;
// Expanded tile16 and tile32
constexpr int kMap16TilesExpanded = 0x1E8000;
constexpr int kMap32TileTRExpanded = 0x020000;
constexpr int kMap32TileBLExpanded = 0x1F0000;
constexpr int kMap32TileBRExpanded = 0x1F8000;
constexpr int kMap32TileCount = 0x0067E0;
constexpr int kMap16Tiles = 0x78000;
constexpr int kNumOverworldMaps = 160;
constexpr int kNumTile16Individual = 4096;
@@ -464,7 +470,9 @@ class Overworld : public SharedRom, public core::ExperimentFlags {
absl::Status SaveItems();
absl::Status CreateTile32Tilemap();
absl::Status SaveMap16Expanded();
absl::Status SaveMap16Tiles();
absl::Status SaveMap32Expanded();
absl::Status SaveMap32Tiles();
absl::Status SaveMapProperties();