Cleanup overworld and use ROM::ReadTransaction for exit data
This commit is contained in:
@@ -142,7 +142,7 @@ absl::Status Overworld::Load(ROM &rom) {
|
|||||||
LoadEntrances();
|
LoadEntrances();
|
||||||
LoadExits();
|
LoadExits();
|
||||||
RETURN_IF_ERROR(LoadOverworldMaps())
|
RETURN_IF_ERROR(LoadOverworldMaps())
|
||||||
if (flags()->kDrawOverworldSprites) {
|
if (flags()->overworld.kDrawOverworldSprites) {
|
||||||
LoadSprites();
|
LoadSprites();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -956,19 +956,14 @@ void Overworld::LoadExits() {
|
|||||||
uint16_t exit_door_type_1;
|
uint16_t exit_door_type_1;
|
||||||
uint16_t exit_door_type_2;
|
uint16_t exit_door_type_2;
|
||||||
rom()->ReadTransaction(
|
rom()->ReadTransaction(
|
||||||
exit_room_id, (OWExitRoomId + (i * 2)),
|
exit_room_id, (OWExitRoomId + (i * 2)), exit_map_id, OWExitMapId + i,
|
||||||
exit_map_id, OWExitMapId + i,
|
exit_vram, OWExitVram + (i * 2), exit_y_scroll, OWExitYScroll + (i * 2),
|
||||||
exit_vram, OWExitVram + (i * 2),
|
exit_x_scroll, OWExitXScroll + (i * 2), exit_y_player,
|
||||||
exit_y_scroll, OWExitYScroll + (i * 2),
|
OWExitYPlayer + (i * 2), exit_x_player, OWExitXPlayer + (i * 2),
|
||||||
exit_x_scroll, OWExitXScroll + (i * 2),
|
exit_y_camera, OWExitYCamera + (i * 2), exit_x_camera,
|
||||||
exit_y_player, OWExitYPlayer + (i * 2),
|
OWExitXCamera + (i * 2), exit_scroll_mod_y, OWExitUnk1 + i,
|
||||||
exit_x_player, OWExitXPlayer + (i * 2),
|
exit_scroll_mod_x, OWExitUnk2 + i, exit_door_type_1,
|
||||||
exit_y_camera, OWExitYCamera + (i * 2),
|
OWExitDoorType1 + (i * 2), exit_door_type_2, OWExitDoorType2 + (i * 2));
|
||||||
exit_x_camera, OWExitXCamera + (i * 2),
|
|
||||||
exit_scroll_mod_y, OWExitUnk1 + i,
|
|
||||||
exit_scroll_mod_x, OWExitUnk2 + i,
|
|
||||||
exit_door_type_1, OWExitDoorType1 + (i * 2),
|
|
||||||
exit_door_type_2, OWExitDoorType2 + (i * 2));
|
|
||||||
|
|
||||||
ushort py = (ushort)((rom_data[OWExitYPlayer + (i * 2) + 1] << 8) +
|
ushort py = (ushort)((rom_data[OWExitYPlayer + (i * 2) + 1] << 8) +
|
||||||
rom_data[OWExitYPlayer + (i * 2)]);
|
rom_data[OWExitYPlayer + (i * 2)]);
|
||||||
@@ -1023,37 +1018,38 @@ void Overworld::LoadSprites() {
|
|||||||
LoadSpritesFromMap(overworldSpritesAgahnim, 144, 2);
|
LoadSpritesFromMap(overworldSpritesAgahnim, 144, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Overworld::LoadSpritesFromMap(int spriteStart, int spriteCount,
|
void Overworld::LoadSpritesFromMap(int sprite_start, int sprite_count,
|
||||||
int spriteIndex) {
|
int sprite_index) {
|
||||||
for (int i = 0; i < spriteCount; i++) {
|
for (int i = 0; i < sprite_count; i++) {
|
||||||
if (map_parent_[i] != i) continue;
|
if (map_parent_[i] != i) continue;
|
||||||
|
|
||||||
int ptrPos = spriteStart + (i * 2);
|
int ptrPos = sprite_start + (i * 2);
|
||||||
int spriteAddress = core::SnesToPc((0x09 << 0x10) + rom()->toint16(ptrPos));
|
int sprite_address =
|
||||||
|
core::SnesToPc((0x09 << 0x10) + rom()->toint16(ptrPos));
|
||||||
while (true) {
|
while (true) {
|
||||||
uchar b1 = rom_[spriteAddress];
|
uchar b1 = rom_[sprite_address];
|
||||||
uchar b2 = rom_[spriteAddress + 1];
|
uchar b2 = rom_[sprite_address + 1];
|
||||||
uchar b3 = rom_[spriteAddress + 2];
|
uchar b3 = rom_[sprite_address + 2];
|
||||||
if (b1 == 0xFF) break;
|
if (b1 == 0xFF) break;
|
||||||
|
|
||||||
int editorMapIndex = i;
|
int editor_map_index = i;
|
||||||
if (editorMapIndex >= 128)
|
if (editor_map_index >= 128)
|
||||||
editorMapIndex -= 128;
|
editor_map_index -= 128;
|
||||||
else if (editorMapIndex >= 64)
|
else if (editor_map_index >= 64)
|
||||||
editorMapIndex -= 64;
|
editor_map_index -= 64;
|
||||||
|
|
||||||
int mapY = (editorMapIndex / 8);
|
int mapY = (editor_map_index / 8);
|
||||||
int mapX = (editorMapIndex % 8);
|
int mapX = (editor_map_index % 8);
|
||||||
|
|
||||||
int realX = ((b2 & 0x3F) * 16) + mapX * 512;
|
int realX = ((b2 & 0x3F) * 16) + mapX * 512;
|
||||||
int realY = ((b1 & 0x3F) * 16) + mapY * 512;
|
int realY = ((b1 & 0x3F) * 16) + mapY * 512;
|
||||||
auto graphics_bytes = overworld_maps_[i].AreaGraphics();
|
auto graphics_bytes = overworld_maps_[i].AreaGraphics();
|
||||||
all_sprites_[spriteIndex][i].InitSprite(graphics_bytes, (uchar)i, b3,
|
all_sprites_[sprite_index][i].InitSprite(
|
||||||
(uchar)(b2 & 0x3F),
|
graphics_bytes, (uchar)i, b3, (uchar)(b2 & 0x3F), (uchar)(b1 & 0x3F),
|
||||||
(uchar)(b1 & 0x3F), realX, realY);
|
realX, realY);
|
||||||
all_sprites_[spriteIndex][i].Draw();
|
all_sprites_[sprite_index][i].Draw();
|
||||||
|
|
||||||
spriteAddress += 3;
|
sprite_address += 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user