Refactor SnesToPc and PcToSnes functions for improved readability and consistency; remove redundant core:: namespace usage
This commit is contained in:
@@ -56,15 +56,6 @@ uint32_t ldle3(uint8_t const *const p_arr) { return ldle(p_arr, 3); }
|
|||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
uint32_t Get24LocalFromPC(uint8_t *data, int addr, bool pc) {
|
|
||||||
uint32_t ret =
|
|
||||||
(PcToSnes(addr) & 0xFF0000) | (data[addr + 1] << 8) | data[addr];
|
|
||||||
if (pc) {
|
|
||||||
return SnesToPc(ret);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void stle16b_i(uint8_t *const p_arr, size_t const p_index,
|
void stle16b_i(uint8_t *const p_arr, size_t const p_index,
|
||||||
uint16_t const p_val) {
|
uint16_t const p_val) {
|
||||||
stle16b(p_arr + (p_index * 2), p_val);
|
stle16b(p_arr + (p_index * 2), p_val);
|
||||||
|
|||||||
@@ -18,41 +18,6 @@ namespace yaze {
|
|||||||
*/
|
*/
|
||||||
namespace core {
|
namespace core {
|
||||||
|
|
||||||
constexpr uint32_t kFastRomRegion = 0x808000;
|
|
||||||
|
|
||||||
inline uint32_t SnesToPc(uint32_t addr) noexcept {
|
|
||||||
if (addr >= kFastRomRegion) {
|
|
||||||
addr -= kFastRomRegion;
|
|
||||||
}
|
|
||||||
uint32_t temp = (addr & 0x7FFF) + ((addr / 2) & 0xFF8000);
|
|
||||||
return (temp + 0x0);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline uint32_t PcToSnes(uint32_t addr) {
|
|
||||||
uint8_t *b = reinterpret_cast<uint8_t *>(&addr);
|
|
||||||
b[2] = static_cast<uint8_t>(b[2] * 2);
|
|
||||||
|
|
||||||
if (b[1] >= 0x80) {
|
|
||||||
b[2] += 1;
|
|
||||||
} else {
|
|
||||||
b[1] += 0x80;
|
|
||||||
}
|
|
||||||
|
|
||||||
return addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline int AddressFromBytes(uint8_t bank, uint8_t high, uint8_t low) noexcept {
|
|
||||||
return (bank << 16) | (high << 8) | low;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline uint32_t MapBankToWordAddress(uint8_t bank, uint16_t addr) noexcept {
|
|
||||||
uint32_t result = 0;
|
|
||||||
result = (bank << 16) | addr;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t Get24LocalFromPC(uint8_t *data, int addr, bool pc = true);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Store little endian 16-bit value using a byte pointer, offset by an
|
* @brief Store little endian 16-bit value using a byte pointer, offset by an
|
||||||
* index before dereferencing
|
* index before dereferencing
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ struct MemoryEditorWithDiffChecker : public SharedRom {
|
|||||||
static uint64_t convert_address = 0;
|
static uint64_t convert_address = 0;
|
||||||
gui::InputHex("SNES to PC", (int *)&convert_address, 6, 200.f);
|
gui::InputHex("SNES to PC", (int *)&convert_address, 6, 200.f);
|
||||||
SameLine();
|
SameLine();
|
||||||
Text("%x", core::SnesToPc(convert_address));
|
Text("%x", SnesToPc(convert_address));
|
||||||
|
|
||||||
// mem_edit.DrawWindow("Memory Editor", (void*)&(*rom()), rom()->size());
|
// mem_edit.DrawWindow("Memory Editor", (void*)&(*rom()), rom()->size());
|
||||||
BEGIN_TABLE("Memory Comparison", 2, ImGuiTableFlags_Resizable);
|
BEGIN_TABLE("Memory Comparison", 2, ImGuiTableFlags_Resizable);
|
||||||
|
|||||||
@@ -125,9 +125,9 @@ absl::Status ScreenEditor::LoadDungeonMaps() {
|
|||||||
rom()->ReadWord(zelda3::kDungeonMapGfxPtr + (d * 2)));
|
rom()->ReadWord(zelda3::kDungeonMapGfxPtr + (d * 2)));
|
||||||
ptr |= 0x0A0000; // Add bank to the short ptr
|
ptr |= 0x0A0000; // Add bank to the short ptr
|
||||||
ptr_gfx |= 0x0A0000; // Add bank to the short ptr
|
ptr_gfx |= 0x0A0000; // Add bank to the short ptr
|
||||||
int pc_ptr = core::SnesToPc(ptr); // Contains data for the next 25 rooms
|
int pc_ptr = SnesToPc(ptr); // Contains data for the next 25 rooms
|
||||||
int pc_ptr_gfx =
|
int pc_ptr_gfx =
|
||||||
core::SnesToPc(ptr_gfx); // Contains data for the next 25 rooms
|
SnesToPc(ptr_gfx); // Contains data for the next 25 rooms
|
||||||
|
|
||||||
ASSIGN_OR_RETURN(uint16_t boss_room_d,
|
ASSIGN_OR_RETURN(uint16_t boss_room_d,
|
||||||
rom()->ReadWord(zelda3::kDungeonMapBossRooms + (d * 2)));
|
rom()->ReadWord(zelda3::kDungeonMapBossRooms + (d * 2)));
|
||||||
@@ -182,8 +182,8 @@ absl::Status ScreenEditor::SaveDungeonMaps() {
|
|||||||
for (int d = 0; d < 14; d++) {
|
for (int d = 0; d < 14; d++) {
|
||||||
int ptr = zelda3::kDungeonMapRoomsPtr + (d * 2);
|
int ptr = zelda3::kDungeonMapRoomsPtr + (d * 2);
|
||||||
int ptr_gfx = zelda3::kDungeonMapGfxPtr + (d * 2);
|
int ptr_gfx = zelda3::kDungeonMapGfxPtr + (d * 2);
|
||||||
int pc_ptr = core::SnesToPc(ptr);
|
int pc_ptr = SnesToPc(ptr);
|
||||||
int pc_ptr_gfx = core::SnesToPc(ptr_gfx);
|
int pc_ptr_gfx = SnesToPc(ptr_gfx);
|
||||||
|
|
||||||
const int nbr_floors = dungeon_maps_[d].nbr_of_floor;
|
const int nbr_floors = dungeon_maps_[d].nbr_of_floor;
|
||||||
const int nbr_basements = dungeon_maps_[d].nbr_of_basement;
|
const int nbr_basements = dungeon_maps_[d].nbr_of_basement;
|
||||||
|
|||||||
@@ -154,14 +154,14 @@ std::vector<DictionaryEntry> BuildDictionaryEntries(Rom *rom) {
|
|||||||
std::vector<uint8_t> bytes;
|
std::vector<uint8_t> bytes;
|
||||||
std::stringstream stringBuilder;
|
std::stringstream stringBuilder;
|
||||||
|
|
||||||
int address = core::SnesToPc(
|
int address = SnesToPc(
|
||||||
kTextData + (rom->data()[kPointersDictionaries + (i * 2) + 1] << 8) +
|
kTextData + (rom->data()[kPointersDictionaries + (i * 2) + 1] << 8) +
|
||||||
rom->data()[kPointersDictionaries + (i * 2)]);
|
rom->data()[kPointersDictionaries + (i * 2)]);
|
||||||
|
|
||||||
int temppush_backress = core::SnesToPc(
|
int temppush_backress =
|
||||||
kTextData +
|
SnesToPc(kTextData +
|
||||||
(rom->data()[kPointersDictionaries + ((i + 1) * 2) + 1] << 8) +
|
(rom->data()[kPointersDictionaries + ((i + 1) * 2) + 1] << 8) +
|
||||||
rom->data()[kPointersDictionaries + ((i + 1) * 2)]);
|
rom->data()[kPointersDictionaries + ((i + 1) * 2)]);
|
||||||
|
|
||||||
while (address < temppush_backress) {
|
while (address < temppush_backress) {
|
||||||
uint8_t uint8_tDictionary = rom->data()[address++];
|
uint8_t uint8_tDictionary = rom->data()[address++];
|
||||||
@@ -233,9 +233,9 @@ absl::StatusOr<MessageData> ParseSingleMessage(
|
|||||||
current_message_raw.append("]");
|
current_message_raw.append("]");
|
||||||
|
|
||||||
auto mutable_rom_data = const_cast<uint8_t *>(rom_data.data());
|
auto mutable_rom_data = const_cast<uint8_t *>(rom_data.data());
|
||||||
uint32_t address = core::Get24LocalFromPC(
|
uint32_t address = Get24LocalFromPC(
|
||||||
mutable_rom_data, kPointersDictionaries + (dictionary * 2));
|
mutable_rom_data, kPointersDictionaries + (dictionary * 2));
|
||||||
uint32_t address_end = core::Get24LocalFromPC(
|
uint32_t address_end = Get24LocalFromPC(
|
||||||
mutable_rom_data, kPointersDictionaries + ((dictionary + 1) * 2));
|
mutable_rom_data, kPointersDictionaries + ((dictionary + 1) * 2));
|
||||||
|
|
||||||
for (uint32_t i = address; i < address_end; i++) {
|
for (uint32_t i = address; i < address_end; i++) {
|
||||||
|
|||||||
@@ -299,9 +299,9 @@ void MessageEditor::ReadAllTextDataV2() {
|
|||||||
current_raw_message.append(util::HexWord(dictionary));
|
current_raw_message.append(util::HexWord(dictionary));
|
||||||
current_raw_message.append("]");
|
current_raw_message.append("]");
|
||||||
|
|
||||||
uint32_t address = core::Get24LocalFromPC(
|
uint32_t address = Get24LocalFromPC(
|
||||||
rom()->mutable_data(), kPointersDictionaries + (dictionary * 2));
|
rom()->mutable_data(), kPointersDictionaries + (dictionary * 2));
|
||||||
uint32_t address_end = core::Get24LocalFromPC(
|
uint32_t address_end = Get24LocalFromPC(
|
||||||
rom()->mutable_data(),
|
rom()->mutable_data(),
|
||||||
kPointersDictionaries + ((dictionary + 1) * 2));
|
kPointersDictionaries + ((dictionary + 1) * 2));
|
||||||
|
|
||||||
@@ -397,9 +397,9 @@ void MessageEditor::ReadAllTextData() {
|
|||||||
current_message_raw.append(util::HexWord(dictionary));
|
current_message_raw.append(util::HexWord(dictionary));
|
||||||
current_message_raw.append("]");
|
current_message_raw.append("]");
|
||||||
|
|
||||||
uint32_t address = core::Get24LocalFromPC(
|
uint32_t address = Get24LocalFromPC(
|
||||||
rom()->mutable_data(), kPointersDictionaries + (dictionary * 2));
|
rom()->mutable_data(), kPointersDictionaries + (dictionary * 2));
|
||||||
uint32_t address_end = core::Get24LocalFromPC(
|
uint32_t address_end = Get24LocalFromPC(
|
||||||
rom()->mutable_data(),
|
rom()->mutable_data(),
|
||||||
kPointersDictionaries + ((dictionary + 1) * 2));
|
kPointersDictionaries + ((dictionary + 1) * 2));
|
||||||
|
|
||||||
|
|||||||
@@ -32,8 +32,8 @@ constexpr int Uncompressed3BPPSize = 0x0600;
|
|||||||
|
|
||||||
uint32_t GetGraphicsAddress(const uint8_t *data, uint8_t addr, uint32_t ptr1,
|
uint32_t GetGraphicsAddress(const uint8_t *data, uint8_t addr, uint32_t ptr1,
|
||||||
uint32_t ptr2, uint32_t ptr3) {
|
uint32_t ptr2, uint32_t ptr3) {
|
||||||
return core::SnesToPc(core::AddressFromBytes(
|
return SnesToPc(AddressFromBytes(data[ptr1 + addr], data[ptr2 + addr],
|
||||||
data[ptr1 + addr], data[ptr2 + addr], data[ptr3 + addr]));
|
data[ptr3 + addr]));
|
||||||
}
|
}
|
||||||
|
|
||||||
absl::StatusOr<std::vector<uint8_t>> Load2BppGraphics(const Rom &rom) {
|
absl::StatusOr<std::vector<uint8_t>> Load2BppGraphics(const Rom &rom) {
|
||||||
@@ -530,7 +530,7 @@ absl::Status Rom::SaveAllPalettes() {
|
|||||||
|
|
||||||
absl::Status Rom::LoadGfxGroups() {
|
absl::Status Rom::LoadGfxGroups() {
|
||||||
ASSIGN_OR_RETURN(auto main_blockset_ptr, ReadWord(kGfxGroupsPointer));
|
ASSIGN_OR_RETURN(auto main_blockset_ptr, ReadWord(kGfxGroupsPointer));
|
||||||
main_blockset_ptr = core::SnesToPc(main_blockset_ptr);
|
main_blockset_ptr = SnesToPc(main_blockset_ptr);
|
||||||
|
|
||||||
for (uint32_t i = 0; i < kNumMainBlocksets; i++) {
|
for (uint32_t i = 0; i < kNumMainBlocksets; i++) {
|
||||||
for (int j = 0; j < 8; j++) {
|
for (int j = 0; j < 8; j++) {
|
||||||
@@ -563,7 +563,7 @@ absl::Status Rom::LoadGfxGroups() {
|
|||||||
|
|
||||||
absl::Status Rom::SaveGroupsToRom() {
|
absl::Status Rom::SaveGroupsToRom() {
|
||||||
ASSIGN_OR_RETURN(auto main_blockset_ptr, ReadWord(kGfxGroupsPointer));
|
ASSIGN_OR_RETURN(auto main_blockset_ptr, ReadWord(kGfxGroupsPointer));
|
||||||
main_blockset_ptr = core::SnesToPc(main_blockset_ptr);
|
main_blockset_ptr = SnesToPc(main_blockset_ptr);
|
||||||
|
|
||||||
for (uint32_t i = 0; i < kNumMainBlocksets; i++) {
|
for (uint32_t i = 0; i < kNumMainBlocksets; i++) {
|
||||||
for (int j = 0; j < 8; j++) {
|
for (int j = 0; j < 8; j++) {
|
||||||
|
|||||||
@@ -324,6 +324,48 @@ absl::StatusOr<std::vector<uint8_t>> Load2BppGraphics(const Rom& rom);
|
|||||||
absl::StatusOr<std::array<gfx::Bitmap, kNumLinkSheets>> LoadLinkGraphics(
|
absl::StatusOr<std::array<gfx::Bitmap, kNumLinkSheets>> LoadLinkGraphics(
|
||||||
const Rom& rom);
|
const Rom& rom);
|
||||||
|
|
||||||
|
constexpr uint32_t kFastRomRegion = 0x808000;
|
||||||
|
|
||||||
|
inline uint32_t SnesToPc(uint32_t addr) noexcept {
|
||||||
|
if (addr >= kFastRomRegion) {
|
||||||
|
addr -= kFastRomRegion;
|
||||||
|
}
|
||||||
|
uint32_t temp = (addr & 0x7FFF) + ((addr / 2) & 0xFF8000);
|
||||||
|
return (temp + 0x0);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline uint32_t PcToSnes(uint32_t addr) {
|
||||||
|
uint8_t* b = reinterpret_cast<uint8_t*>(&addr);
|
||||||
|
b[2] = static_cast<uint8_t>(b[2] * 2);
|
||||||
|
|
||||||
|
if (b[1] >= 0x80) {
|
||||||
|
b[2] += 1;
|
||||||
|
} else {
|
||||||
|
b[1] += 0x80;
|
||||||
|
}
|
||||||
|
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline uint32_t Get24LocalFromPC(uint8_t* data, int addr, bool pc = true) {
|
||||||
|
uint32_t ret =
|
||||||
|
(PcToSnes(addr) & 0xFF0000) | (data[addr + 1] << 8) | data[addr];
|
||||||
|
if (pc) {
|
||||||
|
return SnesToPc(ret);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline int AddressFromBytes(uint8_t bank, uint8_t high, uint8_t low) noexcept {
|
||||||
|
return (bank << 16) | (high << 8) | low;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline uint32_t MapBankToWordAddress(uint8_t bank, uint16_t addr) noexcept {
|
||||||
|
uint32_t result = 0;
|
||||||
|
result = (bank << 16) | addr;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief A class to hold a shared pointer to a Rom object.
|
* @brief A class to hold a shared pointer to a Rom object.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -19,13 +19,13 @@ void Room::LoadHeader() {
|
|||||||
int header_pointer = (rom()->data()[kRoomHeaderPointer + 2] << 16) +
|
int header_pointer = (rom()->data()[kRoomHeaderPointer + 2] << 16) +
|
||||||
(rom()->data()[kRoomHeaderPointer + 1] << 8) +
|
(rom()->data()[kRoomHeaderPointer + 1] << 8) +
|
||||||
(rom()->data()[kRoomHeaderPointer]);
|
(rom()->data()[kRoomHeaderPointer]);
|
||||||
header_pointer = core::SnesToPc(header_pointer);
|
header_pointer = SnesToPc(header_pointer);
|
||||||
|
|
||||||
int address = (rom()->data()[kRoomHeaderPointerBank] << 16) +
|
int address = (rom()->data()[kRoomHeaderPointerBank] << 16) +
|
||||||
(rom()->data()[(header_pointer + 1) + (room_id_ * 2)] << 8) +
|
(rom()->data()[(header_pointer + 1) + (room_id_ * 2)] << 8) +
|
||||||
rom()->data()[(header_pointer) + (room_id_ * 2)];
|
rom()->data()[(header_pointer) + (room_id_ * 2)];
|
||||||
|
|
||||||
auto header_location = core::SnesToPc(address);
|
auto header_location = SnesToPc(address);
|
||||||
|
|
||||||
bg2_ = (background2)((rom()->data()[header_location] >> 5) & 0x07);
|
bg2_ = (background2)((rom()->data()[header_location] >> 5) & 0x07);
|
||||||
collision_ = (CollisionKey)((rom()->data()[header_location] >> 2) & 0x07);
|
collision_ = (CollisionKey)((rom()->data()[header_location] >> 2) & 0x07);
|
||||||
@@ -124,7 +124,7 @@ void Room::CalculateRoomSize() {
|
|||||||
|
|
||||||
void Room::LoadRoomFromROM() {
|
void Room::LoadRoomFromROM() {
|
||||||
auto rom_data = rom()->vector();
|
auto rom_data = rom()->vector();
|
||||||
int header_pointer = core::SnesToPc(kRoomHeaderPointer);
|
int header_pointer = SnesToPc(kRoomHeaderPointer);
|
||||||
|
|
||||||
message_id_ = messages_id_dungeon + (room_id_ * 2);
|
message_id_ = messages_id_dungeon + (room_id_ * 2);
|
||||||
|
|
||||||
@@ -132,7 +132,7 @@ void Room::LoadRoomFromROM() {
|
|||||||
(rom()->data()[(header_pointer + 1) + (room_id_ * 2)] << 8) +
|
(rom()->data()[(header_pointer + 1) + (room_id_ * 2)] << 8) +
|
||||||
rom()->data()[(header_pointer) + (room_id_ * 2)];
|
rom()->data()[(header_pointer) + (room_id_ * 2)];
|
||||||
|
|
||||||
int hpos = core::SnesToPc(address);
|
int hpos = SnesToPc(address);
|
||||||
hpos++;
|
hpos++;
|
||||||
uint8_t b = rom_data[hpos];
|
uint8_t b = rom_data[hpos];
|
||||||
|
|
||||||
@@ -182,14 +182,14 @@ void Room::LoadRoomFromROM() {
|
|||||||
hpos++;
|
hpos++;
|
||||||
|
|
||||||
// Load room objects
|
// Load room objects
|
||||||
int object_pointer = core::SnesToPc(room_object_pointer);
|
int object_pointer = SnesToPc(room_object_pointer);
|
||||||
int room_address = object_pointer + (room_id_ * 3);
|
int room_address = object_pointer + (room_id_ * 3);
|
||||||
int objects_location = core::SnesToPc(room_address);
|
int objects_location = SnesToPc(room_address);
|
||||||
|
|
||||||
// Load sprites
|
// Load sprites
|
||||||
// int spr_ptr = 0x040000 | rooms_sprite_pointer;
|
// int spr_ptr = 0x040000 | rooms_sprite_pointer;
|
||||||
// int sprite_address =
|
// int sprite_address =
|
||||||
// core::SnesToPc(dungeon_spr_ptrs | spr_ptr + (room_id_ * 2));
|
// SnesToPc(dungeon_spr_ptrs | spr_ptr + (room_id_ * 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Room::LoadRoomGraphics(uint8_t entrance_blockset) {
|
void Room::LoadRoomGraphics(uint8_t entrance_blockset) {
|
||||||
@@ -253,7 +253,7 @@ void Room::CopyRoomGraphicsToBuffer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Room::LoadAnimatedGraphics() {
|
void Room::LoadAnimatedGraphics() {
|
||||||
int gfx_ptr = core::SnesToPc(rom()->version_constants().kGfxAnimatedPointer);
|
int gfx_ptr = SnesToPc(rom()->version_constants().kGfxAnimatedPointer);
|
||||||
|
|
||||||
auto gfx_buffer_data = rom()->graphics_buffer();
|
auto gfx_buffer_data = rom()->graphics_buffer();
|
||||||
auto rom_data = rom()->vector();
|
auto rom_data = rom()->vector();
|
||||||
@@ -277,13 +277,13 @@ void Room::LoadObjects() {
|
|||||||
int object_pointer = (rom_data[room_object_pointer + 2] << 16) +
|
int object_pointer = (rom_data[room_object_pointer + 2] << 16) +
|
||||||
(rom_data[room_object_pointer + 1] << 8) +
|
(rom_data[room_object_pointer + 1] << 8) +
|
||||||
(rom_data[room_object_pointer]);
|
(rom_data[room_object_pointer]);
|
||||||
object_pointer = core::SnesToPc(object_pointer);
|
object_pointer = SnesToPc(object_pointer);
|
||||||
int room_address = object_pointer + (room_id_ * 3);
|
int room_address = object_pointer + (room_id_ * 3);
|
||||||
|
|
||||||
int tile_address = (rom_data[room_address + 2] << 16) +
|
int tile_address = (rom_data[room_address + 2] << 16) +
|
||||||
(rom_data[room_address + 1] << 8) + rom_data[room_address];
|
(rom_data[room_address + 1] << 8) + rom_data[room_address];
|
||||||
|
|
||||||
int objects_location = core::SnesToPc(tile_address);
|
int objects_location = SnesToPc(tile_address);
|
||||||
|
|
||||||
if (objects_location == 0x52CA2) {
|
if (objects_location == 0x52CA2) {
|
||||||
std::cout << "Room ID : " << room_id_ << std::endl;
|
std::cout << "Room ID : " << room_id_ << std::endl;
|
||||||
@@ -422,7 +422,7 @@ void Room::LoadSprites() {
|
|||||||
(0x09 << 16) + (rom_data[sprite_pointer + (room_id_ * 2) + 1] << 8) +
|
(0x09 << 16) + (rom_data[sprite_pointer + (room_id_ * 2) + 1] << 8) +
|
||||||
rom_data[sprite_pointer + (room_id_ * 2)];
|
rom_data[sprite_pointer + (room_id_ * 2)];
|
||||||
|
|
||||||
int sprite_address = core::SnesToPc(sprite_address_snes);
|
int sprite_address = SnesToPc(sprite_address_snes);
|
||||||
bool sortsprites = rom_data[sprite_address] == 1;
|
bool sortsprites = rom_data[sprite_address] == 1;
|
||||||
sprite_address += 1;
|
sprite_address += 1;
|
||||||
|
|
||||||
@@ -462,7 +462,7 @@ void Room::LoadSprites() {
|
|||||||
|
|
||||||
void Room::LoadChests() {
|
void Room::LoadChests() {
|
||||||
auto rom_data = rom()->vector();
|
auto rom_data = rom()->vector();
|
||||||
uint32_t cpos = core::SnesToPc((rom_data[chests_data_pointer1 + 2] << 16) +
|
uint32_t cpos = SnesToPc((rom_data[chests_data_pointer1 + 2] << 16) +
|
||||||
(rom_data[chests_data_pointer1 + 1] << 8) +
|
(rom_data[chests_data_pointer1 + 1] << 8) +
|
||||||
(rom_data[chests_data_pointer1]));
|
(rom_data[chests_data_pointer1]));
|
||||||
size_t clength = (rom_data[chests_length_pointer + 1] << 8) +
|
size_t clength = (rom_data[chests_length_pointer + 1] << 8) +
|
||||||
|
|||||||
@@ -224,7 +224,7 @@ void Overworld::DecompressAllMapTiles() {
|
|||||||
int p = (rom()->data()[map_ptr + 2 + (3 * index)] << 16) +
|
int p = (rom()->data()[map_ptr + 2 + (3 * index)] << 16) +
|
||||||
(rom()->data()[map_ptr + 1 + (3 * index)] << 8) +
|
(rom()->data()[map_ptr + 1 + (3 * index)] << 8) +
|
||||||
(rom()->data()[map_ptr + (3 * index)]);
|
(rom()->data()[map_ptr + (3 * index)]);
|
||||||
return core::SnesToPc(p);
|
return SnesToPc(p);
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr uint32_t kBaseLowest = 0x0FFFFF;
|
constexpr uint32_t kBaseLowest = 0x0FFFFF;
|
||||||
@@ -416,12 +416,12 @@ absl::Status Overworld::LoadExits() {
|
|||||||
absl::Status Overworld::LoadItems() {
|
absl::Status Overworld::LoadItems() {
|
||||||
ASSIGN_OR_RETURN(uint32_t pointer,
|
ASSIGN_OR_RETURN(uint32_t pointer,
|
||||||
rom()->ReadLong(zelda3::kOverworldItemsAddress));
|
rom()->ReadLong(zelda3::kOverworldItemsAddress));
|
||||||
uint32_t pointer_pc = core::SnesToPc(pointer); // 1BC2F9 -> 0DC2F9
|
uint32_t pointer_pc = SnesToPc(pointer); // 1BC2F9 -> 0DC2F9
|
||||||
for (int i = 0; i < 128; i++) {
|
for (int i = 0; i < 128; i++) {
|
||||||
ASSIGN_OR_RETURN(uint16_t word_address,
|
ASSIGN_OR_RETURN(uint16_t word_address,
|
||||||
rom()->ReadWord(pointer_pc + i * 2));
|
rom()->ReadWord(pointer_pc + i * 2));
|
||||||
uint32_t addr = (pointer & 0xFF0000) | word_address; // 1B F9 3C
|
uint32_t addr = (pointer & 0xFF0000) | word_address; // 1B F9 3C
|
||||||
addr = core::SnesToPc(addr);
|
addr = SnesToPc(addr);
|
||||||
|
|
||||||
if (overworld_maps_[i].is_large_map()) {
|
if (overworld_maps_[i].is_large_map()) {
|
||||||
if (overworld_maps_[i].parent() != (uint8_t)i) {
|
if (overworld_maps_[i].parent() != (uint8_t)i) {
|
||||||
@@ -490,7 +490,7 @@ absl::Status Overworld::LoadSpritesFromMap(int sprites_per_gamestate_ptr,
|
|||||||
|
|
||||||
int current_spr_ptr = sprites_per_gamestate_ptr + (i * 2);
|
int current_spr_ptr = sprites_per_gamestate_ptr + (i * 2);
|
||||||
ASSIGN_OR_RETURN(auto word_addr, rom()->ReadWord(current_spr_ptr));
|
ASSIGN_OR_RETURN(auto word_addr, rom()->ReadWord(current_spr_ptr));
|
||||||
int sprite_address = core::SnesToPc((0x09 << 0x10) | word_addr);
|
int sprite_address = SnesToPc((0x09 << 0x10) | word_addr);
|
||||||
while (true) {
|
while (true) {
|
||||||
ASSIGN_OR_RETURN(uint8_t b1, rom()->ReadByte(sprite_address));
|
ASSIGN_OR_RETURN(uint8_t b1, rom()->ReadByte(sprite_address));
|
||||||
ASSIGN_OR_RETURN(uint8_t b2, rom()->ReadByte(sprite_address + 1));
|
ASSIGN_OR_RETURN(uint8_t b2, rom()->ReadByte(sprite_address + 1));
|
||||||
@@ -609,7 +609,7 @@ absl::Status Overworld::SaveOverworldMaps() {
|
|||||||
if (map_pointers1_id[i] == -1) {
|
if (map_pointers1_id[i] == -1) {
|
||||||
// Save compressed data and pointer for map1
|
// Save compressed data and pointer for map1
|
||||||
std::copy(a.begin(), a.end(), map_data_p1[i].begin());
|
std::copy(a.begin(), a.end(), map_data_p1[i].begin());
|
||||||
int snes_pos = core::PcToSnes(pos);
|
int snes_pos = PcToSnes(pos);
|
||||||
map_pointers1[i] = snes_pos;
|
map_pointers1[i] = snes_pos;
|
||||||
util::logf("Saving map pointers1 and compressed data for map %s at %s",
|
util::logf("Saving map pointers1 and compressed data for map %s at %s",
|
||||||
util::HexByte(i), util::HexLong(snes_pos));
|
util::HexByte(i), util::HexLong(snes_pos));
|
||||||
@@ -641,7 +641,7 @@ absl::Status Overworld::SaveOverworldMaps() {
|
|||||||
if (map_pointers2_id[i] == -1) {
|
if (map_pointers2_id[i] == -1) {
|
||||||
// Save compressed data and pointer for map2
|
// Save compressed data and pointer for map2
|
||||||
std::copy(b.begin(), b.end(), map_data_p2[i].begin());
|
std::copy(b.begin(), b.end(), map_data_p2[i].begin());
|
||||||
int snes_pos = core::PcToSnes(pos);
|
int snes_pos = PcToSnes(pos);
|
||||||
map_pointers2[i] = snes_pos;
|
map_pointers2[i] = snes_pos;
|
||||||
util::logf("Saving map pointers2 and compressed data for map %s at %s",
|
util::logf("Saving map pointers2 and compressed data for map %s at %s",
|
||||||
util::HexByte(i), util::HexLong(snes_pos));
|
util::HexByte(i), util::HexLong(snes_pos));
|
||||||
@@ -1107,45 +1107,45 @@ absl::Status Overworld::SaveMap32Expanded() {
|
|||||||
// Updates the pointers too for the tile32
|
// Updates the pointers too for the tile32
|
||||||
// Top Right
|
// Top Right
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
rom()->WriteLong(0x0176EC, core::PcToSnes(kMap32TileTRExpanded)));
|
rom()->WriteLong(0x0176EC, PcToSnes(kMap32TileTRExpanded)));
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
rom()->WriteLong(0x0176F3, core::PcToSnes(kMap32TileTRExpanded + 1)));
|
rom()->WriteLong(0x0176F3, PcToSnes(kMap32TileTRExpanded + 1)));
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
rom()->WriteLong(0x0176FA, core::PcToSnes(kMap32TileTRExpanded + 2)));
|
rom()->WriteLong(0x0176FA, PcToSnes(kMap32TileTRExpanded + 2)));
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
rom()->WriteLong(0x017701, core::PcToSnes(kMap32TileTRExpanded + 3)));
|
rom()->WriteLong(0x017701, PcToSnes(kMap32TileTRExpanded + 3)));
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
rom()->WriteLong(0x017708, core::PcToSnes(kMap32TileTRExpanded + 4)));
|
rom()->WriteLong(0x017708, PcToSnes(kMap32TileTRExpanded + 4)));
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
rom()->WriteLong(0x01771A, core::PcToSnes(kMap32TileTRExpanded + 5)));
|
rom()->WriteLong(0x01771A, PcToSnes(kMap32TileTRExpanded + 5)));
|
||||||
|
|
||||||
// BottomLeft
|
// BottomLeft
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
rom()->WriteLong(0x01772C, core::PcToSnes(kMap32TileBLExpanded)));
|
rom()->WriteLong(0x01772C, PcToSnes(kMap32TileBLExpanded)));
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
rom()->WriteLong(0x017733, core::PcToSnes(kMap32TileBLExpanded + 1)));
|
rom()->WriteLong(0x017733, PcToSnes(kMap32TileBLExpanded + 1)));
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
rom()->WriteLong(0x01773A, core::PcToSnes(kMap32TileBLExpanded + 2)));
|
rom()->WriteLong(0x01773A, PcToSnes(kMap32TileBLExpanded + 2)));
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
rom()->WriteLong(0x017741, core::PcToSnes(kMap32TileBLExpanded + 3)));
|
rom()->WriteLong(0x017741, PcToSnes(kMap32TileBLExpanded + 3)));
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
rom()->WriteLong(0x017748, core::PcToSnes(kMap32TileBLExpanded + 4)));
|
rom()->WriteLong(0x017748, PcToSnes(kMap32TileBLExpanded + 4)));
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
rom()->WriteLong(0x01775A, core::PcToSnes(kMap32TileBLExpanded + 5)));
|
rom()->WriteLong(0x01775A, PcToSnes(kMap32TileBLExpanded + 5)));
|
||||||
|
|
||||||
// BottomRight
|
// BottomRight
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
rom()->WriteLong(0x01776C, core::PcToSnes(kMap32TileBRExpanded)));
|
rom()->WriteLong(0x01776C, PcToSnes(kMap32TileBRExpanded)));
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
rom()->WriteLong(0x017773, core::PcToSnes(kMap32TileBRExpanded + 1)));
|
rom()->WriteLong(0x017773, PcToSnes(kMap32TileBRExpanded + 1)));
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
rom()->WriteLong(0x01777A, core::PcToSnes(kMap32TileBRExpanded + 2)));
|
rom()->WriteLong(0x01777A, PcToSnes(kMap32TileBRExpanded + 2)));
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
rom()->WriteLong(0x017781, core::PcToSnes(kMap32TileBRExpanded + 3)));
|
rom()->WriteLong(0x017781, PcToSnes(kMap32TileBRExpanded + 3)));
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
rom()->WriteLong(0x017788, core::PcToSnes(kMap32TileBRExpanded + 4)));
|
rom()->WriteLong(0x017788, PcToSnes(kMap32TileBRExpanded + 4)));
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
rom()->WriteLong(0x01779A, core::PcToSnes(kMap32TileBRExpanded + 5)));
|
rom()->WriteLong(0x01779A, PcToSnes(kMap32TileBRExpanded + 5)));
|
||||||
return absl::OkStatus();
|
return absl::OkStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1279,79 +1279,79 @@ absl::Status Overworld::SaveMap32Tiles() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
absl::Status Overworld::SaveMap16Expanded() {
|
absl::Status Overworld::SaveMap16Expanded() {
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x008865),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x008865),
|
||||||
core::PcToSnes(kMap16TilesExpanded)));
|
PcToSnes(kMap16TilesExpanded)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x0EDE4F),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x0EDE4F),
|
||||||
core::PcToSnes(kMap16TilesExpanded)));
|
PcToSnes(kMap16TilesExpanded)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x0EDEE9),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x0EDEE9),
|
||||||
core::PcToSnes(kMap16TilesExpanded)));
|
PcToSnes(kMap16TilesExpanded)));
|
||||||
|
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BBC2D),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BBC2D),
|
||||||
core::PcToSnes(kMap16TilesExpanded + 2)));
|
PcToSnes(kMap16TilesExpanded + 2)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BBC4C),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BBC4C),
|
||||||
core::PcToSnes(kMap16TilesExpanded)));
|
PcToSnes(kMap16TilesExpanded)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BBCC2),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BBCC2),
|
||||||
core::PcToSnes(kMap16TilesExpanded + 4)));
|
PcToSnes(kMap16TilesExpanded + 4)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BBCCB),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BBCCB),
|
||||||
core::PcToSnes(kMap16TilesExpanded + 6)));
|
PcToSnes(kMap16TilesExpanded + 6)));
|
||||||
|
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BBEF6),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BBEF6),
|
||||||
core::PcToSnes(kMap16TilesExpanded)));
|
PcToSnes(kMap16TilesExpanded)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BBF23),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BBF23),
|
||||||
core::PcToSnes(kMap16TilesExpanded)));
|
PcToSnes(kMap16TilesExpanded)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BC041),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BC041),
|
||||||
core::PcToSnes(kMap16TilesExpanded)));
|
PcToSnes(kMap16TilesExpanded)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BC9B3),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BC9B3),
|
||||||
core::PcToSnes(kMap16TilesExpanded)));
|
PcToSnes(kMap16TilesExpanded)));
|
||||||
|
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BC9BA),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BC9BA),
|
||||||
core::PcToSnes(kMap16TilesExpanded + 2)));
|
PcToSnes(kMap16TilesExpanded + 2)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BC9C1),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BC9C1),
|
||||||
core::PcToSnes(kMap16TilesExpanded + 4)));
|
PcToSnes(kMap16TilesExpanded + 4)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BC9C8),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BC9C8),
|
||||||
core::PcToSnes(kMap16TilesExpanded + 6)));
|
PcToSnes(kMap16TilesExpanded + 6)));
|
||||||
|
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BCA40),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BCA40),
|
||||||
core::PcToSnes(kMap16TilesExpanded)));
|
PcToSnes(kMap16TilesExpanded)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BCA47),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BCA47),
|
||||||
core::PcToSnes(kMap16TilesExpanded + 2)));
|
PcToSnes(kMap16TilesExpanded + 2)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BCA4E),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BCA4E),
|
||||||
core::PcToSnes(kMap16TilesExpanded + 4)));
|
PcToSnes(kMap16TilesExpanded + 4)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BCA55),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BCA55),
|
||||||
core::PcToSnes(kMap16TilesExpanded + 6)));
|
PcToSnes(kMap16TilesExpanded + 6)));
|
||||||
|
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F457),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x02F457),
|
||||||
core::PcToSnes(kMap16TilesExpanded)));
|
PcToSnes(kMap16TilesExpanded)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F45E),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x02F45E),
|
||||||
core::PcToSnes(kMap16TilesExpanded + 2)));
|
PcToSnes(kMap16TilesExpanded + 2)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F467),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x02F467),
|
||||||
core::PcToSnes(kMap16TilesExpanded + 4)));
|
PcToSnes(kMap16TilesExpanded + 4)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F46E),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x02F46E),
|
||||||
core::PcToSnes(kMap16TilesExpanded + 6)));
|
PcToSnes(kMap16TilesExpanded + 6)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F51F),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x02F51F),
|
||||||
core::PcToSnes(kMap16TilesExpanded)));
|
PcToSnes(kMap16TilesExpanded)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F526),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x02F526),
|
||||||
core::PcToSnes(kMap16TilesExpanded + 4)));
|
PcToSnes(kMap16TilesExpanded + 4)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F52F),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x02F52F),
|
||||||
core::PcToSnes(kMap16TilesExpanded + 2)));
|
PcToSnes(kMap16TilesExpanded + 2)));
|
||||||
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F536),
|
RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x02F536),
|
||||||
core::PcToSnes(kMap16TilesExpanded + 6)));
|
PcToSnes(kMap16TilesExpanded + 6)));
|
||||||
|
|
||||||
RETURN_IF_ERROR(rom()->WriteShort(core::SnesToPc(0x02FE1C),
|
RETURN_IF_ERROR(rom()->WriteShort(SnesToPc(0x02FE1C),
|
||||||
core::PcToSnes(kMap16TilesExpanded)));
|
PcToSnes(kMap16TilesExpanded)));
|
||||||
RETURN_IF_ERROR(rom()->WriteShort(core::SnesToPc(0x02FE23),
|
RETURN_IF_ERROR(rom()->WriteShort(SnesToPc(0x02FE23),
|
||||||
core::PcToSnes(kMap16TilesExpanded + 4)));
|
PcToSnes(kMap16TilesExpanded + 4)));
|
||||||
RETURN_IF_ERROR(rom()->WriteShort(core::SnesToPc(0x02FE2C),
|
RETURN_IF_ERROR(rom()->WriteShort(SnesToPc(0x02FE2C),
|
||||||
core::PcToSnes(kMap16TilesExpanded + 2)));
|
PcToSnes(kMap16TilesExpanded + 2)));
|
||||||
RETURN_IF_ERROR(rom()->WriteShort(core::SnesToPc(0x02FE33),
|
RETURN_IF_ERROR(rom()->WriteShort(SnesToPc(0x02FE33),
|
||||||
core::PcToSnes(kMap16TilesExpanded + 6)));
|
PcToSnes(kMap16TilesExpanded + 6)));
|
||||||
|
|
||||||
RETURN_IF_ERROR(rom()->WriteByte(
|
RETURN_IF_ERROR(rom()->WriteByte(
|
||||||
core::SnesToPc(0x02FD28),
|
SnesToPc(0x02FD28),
|
||||||
static_cast<uint8_t>(core::PcToSnes(kMap16TilesExpanded) >> 16)));
|
static_cast<uint8_t>(PcToSnes(kMap16TilesExpanded) >> 16)));
|
||||||
RETURN_IF_ERROR(rom()->WriteByte(
|
RETURN_IF_ERROR(rom()->WriteByte(
|
||||||
core::SnesToPc(0x02FD39),
|
SnesToPc(0x02FD39),
|
||||||
static_cast<uint8_t>(core::PcToSnes(kMap16TilesExpanded) >> 16)));
|
static_cast<uint8_t>(PcToSnes(kMap16TilesExpanded) >> 16)));
|
||||||
|
|
||||||
return absl::OkStatus();
|
return absl::OkStatus();
|
||||||
}
|
}
|
||||||
@@ -1537,7 +1537,7 @@ absl::Status Overworld::SaveItems() {
|
|||||||
item_pointers[i] = item_pointers[item_pointers_reuse[i]];
|
item_pointers[i] = item_pointers[item_pointers_reuse[i]];
|
||||||
}
|
}
|
||||||
|
|
||||||
int snesaddr = core::PcToSnes(item_pointers[i]);
|
int snesaddr = PcToSnes(item_pointers[i]);
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
rom()->WriteWord(kOverworldItemsPointers + (i * 2), snesaddr));
|
rom()->WriteWord(kOverworldItemsPointers + (i * 2), snesaddr));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ void TitleScreen::LoadTitleScreen() {
|
|||||||
tilesBG2Buffer[i] = 492;
|
tilesBG2Buffer[i] = 492;
|
||||||
}
|
}
|
||||||
|
|
||||||
pos = core::SnesToPc(pos);
|
pos = SnesToPc(pos);
|
||||||
|
|
||||||
while ((rom_[pos] & 0x80) != 0x80) {
|
while ((rom_[pos] & 0x80) != 0x80) {
|
||||||
int dest_addr = pos; // $03 and $04
|
int dest_addr = pos; // $03 and $04
|
||||||
|
|||||||
@@ -115,14 +115,14 @@ class Decompress : public CommandHandler {
|
|||||||
* @param arg_vec `-s <address>`
|
* @param arg_vec `-s <address>`
|
||||||
* @return absl::Status
|
* @return absl::Status
|
||||||
*/
|
*/
|
||||||
class SnesToPc : public CommandHandler {
|
class SnesToPcCommand : public CommandHandler {
|
||||||
public:
|
public:
|
||||||
absl::Status handle(const std::vector<std::string>& arg_vec) override {
|
absl::Status handle(const std::vector<std::string>& arg_vec) override {
|
||||||
auto arg = arg_vec[0];
|
auto arg = arg_vec[0];
|
||||||
std::stringstream ss(arg.data());
|
std::stringstream ss(arg.data());
|
||||||
uint32_t snes_address;
|
uint32_t snes_address;
|
||||||
ss >> std::hex >> snes_address;
|
ss >> std::hex >> snes_address;
|
||||||
uint32_t pc_address = core::SnesToPc(snes_address);
|
uint32_t pc_address = SnesToPc(snes_address);
|
||||||
std::cout << std::hex << pc_address << std::endl;
|
std::cout << std::hex << pc_address << std::endl;
|
||||||
return absl::OkStatus();
|
return absl::OkStatus();
|
||||||
}
|
}
|
||||||
@@ -134,14 +134,14 @@ class SnesToPc : public CommandHandler {
|
|||||||
* @param arg_vec `-p <address>`
|
* @param arg_vec `-p <address>`
|
||||||
* @return absl::Status
|
* @return absl::Status
|
||||||
*/
|
*/
|
||||||
class PcToSnes : public CommandHandler {
|
class PcToSnesCommand : public CommandHandler {
|
||||||
public:
|
public:
|
||||||
absl::Status handle(const std::vector<std::string>& arg_vec) override {
|
absl::Status handle(const std::vector<std::string>& arg_vec) override {
|
||||||
auto arg = arg_vec[0];
|
auto arg = arg_vec[0];
|
||||||
std::stringstream ss(arg.data());
|
std::stringstream ss(arg.data());
|
||||||
uint32_t pc_address;
|
uint32_t pc_address;
|
||||||
ss >> std::hex >> pc_address;
|
ss >> std::hex >> pc_address;
|
||||||
uint32_t snes_address = core::PcToSnes(pc_address);
|
uint32_t snes_address = PcToSnes(pc_address);
|
||||||
ColorModifier blue(ColorCode::FG_BLUE);
|
ColorModifier blue(ColorCode::FG_BLUE);
|
||||||
std::cout << "SNES LoROM Address: ";
|
std::cout << "SNES LoROM Address: ";
|
||||||
std::cout << blue << "$" << std::uppercase << std::hex << snes_address
|
std::cout << blue << "$" << std::uppercase << std::hex << snes_address
|
||||||
@@ -225,8 +225,8 @@ struct Commands {
|
|||||||
{"-x", std::make_shared<Expand>()},
|
{"-x", std::make_shared<Expand>()},
|
||||||
{"-i", std::make_shared<Compress>()}, // Import
|
{"-i", std::make_shared<Compress>()}, // Import
|
||||||
{"-e", std::make_shared<Decompress>()}, // Export
|
{"-e", std::make_shared<Decompress>()}, // Export
|
||||||
{"-s", std::make_shared<SnesToPc>()},
|
{"-s", std::make_shared<SnesToPcCommand>()},
|
||||||
{"-p", std::make_shared<PcToSnes>()},
|
{"-p", std::make_shared<PcToSnesCommand>()},
|
||||||
{"-t", std::make_shared<Tile16Transfer>()},
|
{"-t", std::make_shared<Tile16Transfer>()},
|
||||||
{"-r", std::make_shared<ReadFromRom>()} // Read from Rom
|
{"-r", std::make_shared<ReadFromRom>()} // Read from Rom
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user