Load sprites after overworld maps for current gfx

This commit is contained in:
scawful
2025-01-06 21:36:51 -05:00
parent 196eba42e8
commit d38ae7914d
2 changed files with 57 additions and 53 deletions

View File

@@ -29,8 +29,8 @@ absl::Status Overworld::Load(Rom &rom) {
RETURN_IF_ERROR(LoadHoles()); RETURN_IF_ERROR(LoadHoles());
RETURN_IF_ERROR(LoadExits()); RETURN_IF_ERROR(LoadExits());
RETURN_IF_ERROR(LoadItems()); RETURN_IF_ERROR(LoadItems());
RETURN_IF_ERROR(LoadSprites());
RETURN_IF_ERROR(LoadOverworldMaps()); RETURN_IF_ERROR(LoadOverworldMaps());
RETURN_IF_ERROR(LoadSprites());
is_loaded_ = true; is_loaded_ = true;
return absl::OkStatus(); return absl::OkStatus();
@@ -309,8 +309,10 @@ absl::Status Overworld::LoadEntrances() {
} }
for (int i = 0; i < num_entrances; i++) { for (int i = 0; i < num_entrances; i++) {
ASSIGN_OR_RETURN(auto map_id, rom()->ReadWord(ow_entrance_map_ptr + (i * 2))); ASSIGN_OR_RETURN(auto map_id,
ASSIGN_OR_RETURN(auto map_pos, rom()->ReadWord(ow_entrance_pos_ptr + (i * 2))); rom()->ReadWord(ow_entrance_map_ptr + (i * 2)));
ASSIGN_OR_RETURN(auto map_pos,
rom()->ReadWord(ow_entrance_pos_ptr + (i * 2)));
ASSIGN_OR_RETURN(auto entrance_id, rom()->ReadByte(ow_entrance_id_ptr + i)); ASSIGN_OR_RETURN(auto entrance_id, rom()->ReadByte(ow_entrance_id_ptr + i));
int p = map_pos >> 1; int p = map_pos >> 1;
int x = (p % 64); int x = (p % 64);
@@ -325,16 +327,18 @@ absl::Status Overworld::LoadEntrances() {
deleted); deleted);
} }
return absl::OkStatus(); return absl::OkStatus();
} }
absl::Status Overworld::LoadHoles() { absl::Status Overworld::LoadHoles() {
constexpr int kNumHoles = 0x13; constexpr int kNumHoles = 0x13;
for (int i = 0; i < kNumHoles; i++) { for (int i = 0; i < kNumHoles; i++) {
ASSIGN_OR_RETURN(auto map_id, rom()->ReadWord(kOverworldHoleArea + (i * 2))); ASSIGN_OR_RETURN(auto map_id,
ASSIGN_OR_RETURN(auto map_pos, rom()->ReadWord(kOverworldHolePos + (i * 2))); rom()->ReadWord(kOverworldHoleArea + (i * 2)));
ASSIGN_OR_RETURN(auto entrance_id, rom()->ReadByte(kOverworldHoleEntrance + i)); ASSIGN_OR_RETURN(auto map_pos,
rom()->ReadWord(kOverworldHolePos + (i * 2)));
ASSIGN_OR_RETURN(auto entrance_id,
rom()->ReadByte(kOverworldHoleEntrance + i));
int p = (map_pos + 0x400) >> 1; int p = (map_pos + 0x400) >> 1;
int x = (p % 64); int x = (p % 64);
int y = (p >> 6); int y = (p >> 6);
@@ -499,10 +503,9 @@ absl::Status Overworld::LoadSpritesFromMap(int sprites_per_gamestate_ptr,
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;
all_sprites_[game_state].emplace_back(*overworld_maps_[i].mutable_current_graphics(), all_sprites_[game_state].emplace_back(
(uint8_t)i, b3, *overworld_maps_[i].mutable_current_graphics(), (uint8_t)i, b3,
(uint8_t)(b2 & 0x3F), (uint8_t)(b2 & 0x3F), (uint8_t)(b1 & 0x3F), realX, realY);
(uint8_t)(b1 & 0x3F), realX, realY);
all_sprites_[game_state][i].Draw(); all_sprites_[game_state][i].Draw();
sprite_address += 3; sprite_address += 3;
@@ -673,8 +676,8 @@ absl::Status Overworld::SaveLargeMaps() {
int parent_x_pos = overworld_maps_[i].parent() % 8; int parent_x_pos = overworld_maps_[i].parent() % 8;
// Always write the map parent since it should not matter // Always write the map parent since it should not matter
RETURN_IF_ERROR( RETURN_IF_ERROR(rom()->WriteByte(kOverworldMapParentId + i,
rom()->WriteByte(kOverworldMapParentId + i, overworld_maps_[i].parent())) overworld_maps_[i].parent()))
if (std::find(checked_map.begin(), checked_map.end(), i) != if (std::find(checked_map.begin(), checked_map.end(), i) !=
checked_map.end()) { checked_map.end()) {

View File

@@ -1,6 +1,7 @@
#ifndef YAZE_APP_DATA_OVERWORLD_H #ifndef YAZE_APP_DATA_OVERWORLD_H
#define YAZE_APP_DATA_OVERWORLD_H #define YAZE_APP_DATA_OVERWORLD_H
#include <array>
#include <vector> #include <vector>
#include "absl/container/flat_hash_map.h" #include "absl/container/flat_hash_map.h"
@@ -245,28 +246,28 @@ class Overworld : public SharedRom {
OverworldMapTiles map_tiles_; OverworldMapTiles map_tiles_;
std::array<uint8_t, kNumOverworldMaps> map_parent_ = { 0 };
std::array<uint8_t, kNumTileTypes> all_tiles_types_ = { 0 };
std::vector<gfx::Tile16> tiles16_;
std::vector<gfx::Tile32> tiles32_;
std::vector<uint16_t> tiles32_list_;
std::vector<gfx::Tile32> tiles32_unique_;
std::vector<OverworldMap> overworld_maps_; std::vector<OverworldMap> overworld_maps_;
std::vector<OverworldEntrance> all_entrances_; std::vector<OverworldEntrance> all_entrances_;
std::vector<OverworldEntrance> all_holes_; std::vector<OverworldEntrance> all_holes_;
std::vector<OverworldExit> all_exits_; std::vector<OverworldExit> all_exits_;
std::vector<OverworldItem> all_items_; std::vector<OverworldItem> all_items_;
std::array<std::vector<Sprite>, 3> all_sprites_;
std::vector<uint64_t> deleted_entrances_;
std::vector<std::vector<uint8_t>> map_data_p1 =
std::vector<std::vector<uint8_t>>(kNumOverworldMaps);
std::vector<std::vector<uint8_t>> map_data_p2 =
std::vector<std::vector<uint8_t>>(kNumOverworldMaps);
std::vector<int> map_pointers1_id = std::vector<int>(kNumOverworldMaps); std::vector<gfx::Tile16> tiles16_;
std::vector<int> map_pointers2_id = std::vector<int>(kNumOverworldMaps); std::vector<gfx::Tile32> tiles32_;
std::vector<int> map_pointers1 = std::vector<int>(kNumOverworldMaps); std::vector<gfx::Tile32> tiles32_unique_;
std::vector<int> map_pointers2 = std::vector<int>(kNumOverworldMaps);
std::vector<uint16_t> tiles32_list_;
std::vector<uint64_t> deleted_entrances_;
std::array<uint8_t, kNumOverworldMaps> map_parent_ = {0};
std::array<uint8_t, kNumTileTypes> all_tiles_types_ = {0};
std::array<std::vector<Sprite>, 3> all_sprites_;
std::array<std::vector<uint8_t>, kNumOverworldMaps> map_data_p1;
std::array<std::vector<uint8_t>, kNumOverworldMaps> map_data_p2;
std::array<int, kNumOverworldMaps> map_pointers1_id;
std::array<int, kNumOverworldMaps> map_pointers2_id;
std::array<int, kNumOverworldMaps> map_pointers1;
std::array<int, kNumOverworldMaps> map_pointers2;
std::vector<absl::flat_hash_map<uint16_t, int>> usage_stats_; std::vector<absl::flat_hash_map<uint16_t, int>> usage_stats_;
}; };