8#include <unordered_map>
22 .tiles = {{0, 0, 0x1D0, 1,
true,
false,
false},
23 {0, -8, 0x1C0, 1,
true,
false,
false}},
24 .required_sheets = {0, 0, 0, 0}};
33 .name =
"Manhandla (static head)",
34 .tiles = {{0, 8, 0x120, 1,
true,
false,
false},
35 {0, -8, 0x100, 1,
true,
false,
false}},
36 .required_sheets = {0, 0, 0, 0},
37 .graphics_resource =
"Bosses/manhandla.bin"};
47 .tiles = {{0, 0, 0x106, 1,
true,
false,
false},
48 {0, -10, 0x100, 1,
true,
false,
false}},
49 .required_sheets = {0, 0, 0, 0}};
52const std::unordered_map<uint8_t, const SpriteOamLayout*>&
GetLayoutMap() {
53 static const std::unordered_map<uint8_t, const SpriteOamLayout*> layouts = {
73 const auto& layouts = GetLayoutMap();
74 auto it = layouts.find(sprite_id);
75 if (it != layouts.end()) {
82 uint8_t sprite_id, std::string_view hack_name) {
83 if ((sprite_id != 0xB1 && sprite_id != 0x88) || hack_name.empty()) {
88 std::string normalized(hack_name);
89 std::transform(normalized.begin(), normalized.end(), normalized.begin(),
90 [](
unsigned char c) { return std::tolower(c); });
91 if (normalized.find(
"oracle") == std::string::npos) {
94 return sprite_id == 0x88 ? &kOracleManhandlaPreview
95 : &kOraclePuffstoolPreview;
99 std::string_view assets_path,
100 std::string_view hack_name) {
128 constexpr size_t kObjPageBytes = 0x2000;
130 std::ifstream file(path, std::ios::binary | std::ios::ate);
131 if (!file || file.tellg() !=
static_cast<std::streamoff
>(kObjPageBytes)) {
137 file.peek() != std::char_traits<char>::eof()) {
145 const auto* layout =
GetLayout(sprite_id);
147 return layout->required_sheets;
153 const auto& layouts = GetLayoutMap();
154 return layouts.find(sprite_id) != layouts.end();
158 std::vector<const SpriteOamLayout*> result;
159 const auto& layouts = GetLayoutMap();
160 result.reserve(layouts.size());
161 for (
const auto& [
id, layout] : layouts) {
162 result.push_back(layout);
static const SpriteOamLayout * GetLayout(uint8_t sprite_id)
Get the OAM layout for a sprite ID.
static std::vector< const SpriteOamLayout * > GetAllLayouts()
Get all defined layouts.
static const SpriteOamLayout * GetPreviewOverride(uint8_t sprite_id, std::string_view hack_name)
static std::optional< std::array< uint8_t, 4 > > GetRequiredSheets(uint8_t sprite_id)
Get required graphics sheets for a sprite.
static bool HasLayout(uint8_t sprite_id)
Check if a sprite has a defined layout.
std::span< const uint8_t > GetGraphics(const SpriteOamLayout *layout)
std::string project_path_
bool SetContext(std::string_view project_path, std::string_view assets_path, std::string_view hack_name)
std::vector< uint8_t > graphics_
const SpriteOamLayout kStalfosLayout
const SpriteOamLayout kOraclePuffstoolPreview
const SpriteOamLayout kOracleManhandlaPreview
const std::unordered_map< uint8_t, const SpriteOamLayout * > & GetLayoutMap()
const SpriteOamLayout kRedEyegoreLayout
const SpriteOamLayout kOctorokLayout
const SpriteOamLayout kBlueGuardLayout
const SpriteOamLayout kLargeMagicLayout
const SpriteOamLayout kBlueSoldierLayout
const SpriteOamLayout kBlueRupeeLayout
const SpriteOamLayout kRedSoldierLayout
const SpriteOamLayout kGreenSoldierLayout
const SpriteOamLayout kSmallMagicLayout
const SpriteOamLayout kGreenRupeeLayout
const SpriteOamLayout kArmosKnightLayout
const SpriteOamLayout kGreenPatrolLayout
const SpriteOamLayout kOctoballoonLayout
const SpriteOamLayout kHinoxLayout
const SpriteOamLayout kHeartContainerLayout
const SpriteOamLayout kMoblinLayout
const SpriteOamLayout kChickenLayout
const SpriteOamLayout kUncleLayout
const SpriteOamLayout kKeyLayout
const SpriteOamLayout kGreenEyegoreLayout
const SpriteOamLayout kSmallHeartLayout
const SpriteOamLayout kVultureLayout
const SpriteOamLayout kRedRupeeLayout
Complete OAM layout for a vanilla sprite.
const char * graphics_resource