Add SaveMap16Expanded and SaveMap32Expanded functions based on ZS
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user