From ee99166ef351cb591aadbe4127b352fa6ffe7bd9 Mon Sep 17 00:00:00 2001 From: Justin Scofield Date: Mon, 25 Jul 2022 09:34:23 -0400 Subject: [PATCH] Update ROM references with new operators --- src/app/editor/master_editor.cc | 2 +- src/app/zelda3/overworld.cc | 44 ++++++++++++------------ src/app/zelda3/overworld.h | 4 +-- src/app/zelda3/overworld_map.cc | 59 ++++++++++----------------------- src/app/zelda3/screen.cc | 8 ++--- 5 files changed, 47 insertions(+), 70 deletions(-) diff --git a/src/app/editor/master_editor.cc b/src/app/editor/master_editor.cc index 10d03163..5072a4c2 100644 --- a/src/app/editor/master_editor.cc +++ b/src/app/editor/master_editor.cc @@ -190,7 +190,7 @@ void MasterEditor::DrawViewMenu() { if (show_memory_editor) { static MemoryEditor mem_edit; - mem_edit.DrawWindow("Memory Editor", (void *)rom_.data(), rom_.GetSize()); + mem_edit.DrawWindow("Memory Editor", (void *)&rom_, rom_.GetSize()); } if (show_imgui_demo) { diff --git a/src/app/zelda3/overworld.cc b/src/app/zelda3/overworld.cc index 6086b632..ac323edd 100644 --- a/src/app/zelda3/overworld.cc +++ b/src/app/zelda3/overworld.cc @@ -55,41 +55,41 @@ void Overworld::AssembleMap32Tiles() { tiles32.push_back(gfx::Tile32(tl, tr, bl, br)); } } - - map_tiles_.light_world.resize(tiles32.size()); - map_tiles_.dark_world.resize(tiles32.size()); - map_tiles_.special_world.resize(tiles32.size()); - for (int i = 0; i < tiles32.size(); i++) { - map_tiles_.light_world[i].resize(tiles32.size()); - map_tiles_.dark_world[i].resize(tiles32.size()); - map_tiles_.special_world[i].resize(tiles32.size()); + map_tiles_.light_world.resize(kTile32Num); + map_tiles_.dark_world.resize(kTile32Num); + map_tiles_.special_world.resize(kTile32Num); + for (int i = 0; i < kTile32Num; i++) { + map_tiles_.light_world[i].resize(kTile32Num); + map_tiles_.dark_world[i].resize(kTile32Num); + map_tiles_.special_world[i].resize(kTile32Num); } } void Overworld::AssembleMap16Tiles() { int tpos = core::map16Tiles; - auto rom_data = rom_.data(); - for (int i = 0; i < 4096; i += 1) // 3760 - { - gfx::TileInfo t0 = gfx::GetTilesInfo((uintptr_t)(rom_data + tpos)); + for (int i = 0; i < 4096; i += 1) { + auto t0 = gfx::GetTilesInfo((uintptr_t)(rom_ + tpos)); tpos += 2; - gfx::TileInfo t1 = gfx::GetTilesInfo((uintptr_t)(rom_data + tpos)); + auto t1 = gfx::GetTilesInfo((uintptr_t)(rom_ + tpos)); tpos += 2; - gfx::TileInfo t2 = gfx::GetTilesInfo((uintptr_t)(rom_data + tpos)); + auto t2 = gfx::GetTilesInfo((uintptr_t)(rom_ + tpos)); tpos += 2; - gfx::TileInfo t3 = gfx::GetTilesInfo((uintptr_t)(rom_data + tpos)); + auto t3 = gfx::GetTilesInfo((uintptr_t)(rom_ + tpos)); tpos += 2; tiles16.emplace_back(t0, t1, t2, t3); } } -void Overworld::AssignWorldTiles(std::vector> &world, int x, - int y, int sx, int sy, int tpos) { - world[(x * 2) + (sx * 32)][(y * 2) + (sy * 32)] = tiles32[tpos].tile0_; - world[(x * 2) + 1 + (sx * 32)][(y * 2) + (sy * 32)] = tiles32[tpos].tile1_; - world[(x * 2) + (sx * 32)][(y * 2) + 1 + (sy * 32)] = tiles32[tpos].tile2_; - world[(x * 2) + 1 + (sx * 32)][(y * 2) + 1 + (sy * 32)] = - tiles32[tpos].tile3_; +void Overworld::AssignWorldTiles(OWBlockset &world, int x, int y, int sx, + int sy, int tpos) { + int position_x1 = (x * 2) + (sx * 32); + int position_y1 = (y * 2) + (sy * 32); + int position_x2 = (x * 2) + 1 + (sx * 32); + int position_y2 = (y * 2) + 1 + (sy * 32); + world[position_x1][position_y1] = tiles32[tpos].tile0_; + world[position_x2][position_y1] = tiles32[tpos].tile1_; + world[position_x1][position_y2] = tiles32[tpos].tile2_; + world[position_x2][position_y2] = tiles32[tpos].tile3_; } absl::Status Overworld::DecompressAllMapTiles() { diff --git a/src/app/zelda3/overworld.h b/src/app/zelda3/overworld.h index 23dbd284..ed0c5c2b 100644 --- a/src/app/zelda3/overworld.h +++ b/src/app/zelda3/overworld.h @@ -40,8 +40,8 @@ class Overworld { ushort GenerateTile32(int i, int k, int dimension); void AssembleMap32Tiles(); void AssembleMap16Tiles(); - void AssignWorldTiles(std::vector> &world, int x, int y, - int sx, int sy, int tpos); + void AssignWorldTiles(OWBlockset &world, int x, int y, int sx, int sy, + int tpos); absl::Status DecompressAllMapTiles(); void FetchLargeMaps(); diff --git a/src/app/zelda3/overworld_map.cc b/src/app/zelda3/overworld_map.cc index 9891b662..f550d5e6 100644 --- a/src/app/zelda3/overworld_map.cc +++ b/src/app/zelda3/overworld_map.cc @@ -108,15 +108,14 @@ void OverworldMap::BuildMap(int count, int game_state, uchar* map_parent, parent_ = map_parent[index_]; if (parent_ != index_ && !initialized_) { if (index_ >= 0x80 && index_ <= 0x8A && index_ != 0x88) { - area_graphics_ = - rom_.data()[core::overworldSpecialGFXGroup + (parent_ - 128)]; - area_palette_ = rom_.data()[core::overworldSpecialPALGroup + 1]; + area_graphics_ = rom_[core::overworldSpecialGFXGroup + (parent_ - 128)]; + area_palette_ = rom_[core::overworldSpecialPALGroup + 1]; } else if (index_ == 0x88) { area_graphics_ = 81; area_palette_ = 0; } else { - area_graphics_ = rom_.data()[core::mapGfx + parent_]; - area_palette_ = rom_.data()[core::overworldMapPalette + parent_]; + area_graphics_ = rom_[core::mapGfx + parent_]; + area_palette_ = rom_[core::overworldMapPalette + parent_]; } initialized_ = true; @@ -200,33 +199,31 @@ absl::Status OverworldMap::BuildTileset(int game_state) { static_graphics_[10] = 115 + 6; static_graphics_[11] = 115 + 7; for (int i = 0; i < 4; i++) { - static_graphics_[12 + i] = - (rom_.data()[core::kSpriteBlocksetPointer + - (sprite_graphics_[game_state] * 4) + i] + - 115); + static_graphics_[12 + i] = (rom_[core::kSpriteBlocksetPointer + + (sprite_graphics_[game_state] * 4) + i] + + 115); } // Main Blocksets for (int i = 0; i < 8; i++) { static_graphics_[i] = - rom_.data()[core::overworldgfxGroups2 + (index_world * 8) + i]; + rom_[core::overworldgfxGroups2 + (index_world * 8) + i]; } - if (rom_.data()[core::overworldgfxGroups + (area_graphics_ * 4)] != 0) { - static_graphics_[3] = - rom_.data()[core::overworldgfxGroups + (area_graphics_ * 4)]; + if (rom_[core::overworldgfxGroups + (area_graphics_ * 4)] != 0) { + static_graphics_[3] = rom_[core::overworldgfxGroups + (area_graphics_ * 4)]; } - if (rom_.data()[core::overworldgfxGroups + (area_graphics_ * 4) + 1] != 0) { + if (rom_[core::overworldgfxGroups + (area_graphics_ * 4) + 1] != 0) { static_graphics_[4] = - rom_.data()[core::overworldgfxGroups + (area_graphics_ * 4) + 1]; + rom_[core::overworldgfxGroups + (area_graphics_ * 4) + 1]; } - if (rom_.data()[core::overworldgfxGroups + (area_graphics_ * 4) + 2] != 0) { + if (rom_[core::overworldgfxGroups + (area_graphics_ * 4) + 2] != 0) { static_graphics_[5] = - rom_.data()[core::overworldgfxGroups + (area_graphics_ * 4) + 2]; + rom_[core::overworldgfxGroups + (area_graphics_ * 4) + 2]; } - if (rom_.data()[core::overworldgfxGroups + (area_graphics_ * 4) + 3] != 0) { + if (rom_[core::overworldgfxGroups + (area_graphics_ * 4) + 3] != 0) { static_graphics_[6] = - rom_.data()[core::overworldgfxGroups + (area_graphics_ * 4) + 3]; + rom_[core::overworldgfxGroups + (area_graphics_ * 4) + 3]; } // Hardcoded overworld GFX Values, for death mountain @@ -249,7 +246,7 @@ absl::Status OverworldMap::BuildTileset(int game_state) { void OverworldMap::BuildTiles16Gfx(int count, uchar* ow_blockset) { auto gfx_tile16_data = ow_blockset; - auto gfx_tile8_data = rom_.GetMasterGraphicsBin(); + auto gfx_tile8_data = nullptr; // rom_.GetMasterGraphicsBin(); int offsets[] = {0, 8, 1024, 1032}; auto yy = 0; @@ -281,7 +278,7 @@ void OverworldMap::BuildTiles16Gfx(int count, uchar* ow_blockset) { } absl::Status OverworldMap::BuildTiles16GfxV2(int count) { - auto gfx_tile8_data = rom_.GetMasterGraphicsBin(); + auto gfx_tile8_data = nullptr; // rom_.GetMasterGraphicsBin(); int offsets[] = {0, 8, 1024, 1032}; auto yy = 0; @@ -382,26 +379,6 @@ void OverworldMap::CopyTileToMap(int x, int y, int xx, int yy, int offset, gfx16Pointer[index + r] = (uchar)(((pixel >> 4) & 0x0F) + tile.palette_ * 16); } -void OverworldMap::CopyTile8bpp16From8(int xP, int yP, int tileID, - uchar* current_gfx) { - auto gfx_tile16_data = rom_.GetMasterGraphicsBin(); - auto gfx_tile8_data = current_gfx; - - auto tiles = tiles16_[tileID]; - - for (auto tile = 0; tile < 4; tile++) { - gfx::TileInfo info = tiles.tiles_info[tile]; - int offset = kTileOffsets[tile]; - - for (auto y = 0; y < 8; y++) { - for (auto x = 0; x < 4; x++) { - CopyTileToMap(x, y, xP, yP, offset, info, gfx_tile16_data, - gfx_tile8_data); - } - } - } -} - } // namespace zelda3 } // namespace app } // namespace yaze \ No newline at end of file diff --git a/src/app/zelda3/screen.cc b/src/app/zelda3/screen.cc index 3df65f56..2f408835 100644 --- a/src/app/zelda3/screen.cc +++ b/src/app/zelda3/screen.cc @@ -48,7 +48,7 @@ void Screen::BuildTileset() { uchar* currentmapgfx8Data = tiles8Bitmap.GetData(); // All gfx of the game pack of 2048 bytes (4bpp) - uchar* allgfxData = rom_.GetMasterGraphicsBin(); + uchar* allgfxData = nullptr; // rom_.GetMasterGraphicsBin(); for (int i = 0; i < 16; i++) { for (int j = 0; j < 2048; j++) { uchar mapByte = allgfxData[j + (staticgfx[i] * 2048)]; @@ -67,8 +67,8 @@ void Screen::BuildTileset() { } void Screen::LoadTitleScreen() { - int pos = (rom_.data()[0x138C + 3] << 16) + (rom_.data()[0x1383 + 3] << 8) + - rom_.data()[0x137A + 3]; + int pos = + (rom_[0x138C + 3] << 16) + (rom_[0x1383 + 3] << 8) + rom_[0x137A + 3]; for (int i = 0; i < 1024; i++) { tilesBG1Buffer[i] = 492; @@ -77,7 +77,7 @@ void Screen::LoadTitleScreen() { pos = core::SnesToPc(pos); - while ((rom_.data()[pos] & 0x80) != 0x80) { + while ((rom_[pos] & 0x80) != 0x80) { int dest_addr = pos; // $03 and $04 pos += 2; short length = pos;