yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
sprite_commands.cc
Go to the documentation of this file.
2
3#include "absl/strings/numbers.h"
4#include "absl/strings/str_format.h"
5#include "cli/util/hex_util.h"
9
10namespace yaze {
11namespace cli {
12namespace handlers {
13
15
17 Rom* /*rom*/, const resources::ArgumentParser& parser,
18 resources::OutputFormatter& formatter) {
19 auto limit = parser.GetInt("limit").value_or(256);
20 auto type = parser.GetString("type").value_or("all");
21
22 formatter.BeginObject("Sprite List");
23 formatter.AddField("total_sprites", 256);
24 formatter.AddField("display_limit", limit);
25 formatter.AddField("filter_type", type);
26
27 formatter.BeginArray("sprites");
28
29 // Project names (--project-context) first, e.g.
30 // "0x52: Collectible (vanilla: ZoraKing)".
31 for (int i = 0; i < std::min(limit, 256); i++) {
32 std::string sprite_entry = absl::StrFormat(
33 "0x%02X: %s", i, zelda3::ResolveSpriteLabel(i).Display());
34 formatter.AddArrayItem(sprite_entry);
35 }
36
37 formatter.EndArray();
38 formatter.EndObject();
39
40 return absl::OkStatus();
41}
42
44 Rom* /*rom*/, const resources::ArgumentParser& parser,
45 resources::OutputFormatter& formatter) {
46 auto id_str = parser.GetString("id").value();
47
48 int sprite_id;
49 if (!ParseHexString(id_str, &sprite_id) &&
50 !absl::SimpleAtoi(id_str, &sprite_id)) {
51 return absl::InvalidArgumentError(
52 "Invalid sprite ID format. Must be hex (0xNN) or decimal.");
53 }
54
55 if (sprite_id < 0 || sprite_id > 255) {
56 return absl::InvalidArgumentError("Sprite ID must be between 0 and 255.");
57 }
58
59 formatter.BeginObject("Sprite Properties");
60 formatter.AddHexField("sprite_id", sprite_id, 2);
61
62 util::AddSpriteNameFields(formatter, sprite_id);
63
64 // Add basic sprite properties
65 // Note: Full sprite properties would require loading sprite data from ROM
66 formatter.BeginObject("properties");
67 formatter.AddField("type", "standard");
68 formatter.AddField("is_boss", sprite_id == 0x09 || sprite_id == 0x1A ||
69 sprite_id == 0x1E || sprite_id == 0x1F ||
70 sprite_id == 0xCE || sprite_id == 0xD6);
71 formatter.AddField("is_overlord", sprite_id <= 0x1A);
72 formatter.AddField("description",
73 "Sprite properties would be loaded from ROM data");
74 formatter.EndObject();
75
76 formatter.EndObject();
77
78 return absl::OkStatus();
79}
80
82 Rom* /*rom*/, const resources::ArgumentParser& parser,
83 resources::OutputFormatter& formatter) {
84 auto id_str = parser.GetString("id").value();
85
86 int sprite_id;
87 if (!ParseHexString(id_str, &sprite_id) &&
88 !absl::SimpleAtoi(id_str, &sprite_id)) {
89 return absl::InvalidArgumentError(
90 "Invalid sprite ID format. Must be hex (0xNN) or decimal.");
91 }
92
93 if (sprite_id < 0 || sprite_id > 255) {
94 return absl::InvalidArgumentError("Sprite ID must be between 0 and 255.");
95 }
96
97 formatter.BeginObject("Sprite Palette");
98 formatter.AddHexField("sprite_id", sprite_id, 2);
99
100 util::AddSpriteNameFields(formatter, sprite_id);
101
102 // Note: Actual palette data would need to be loaded from ROM
103 formatter.BeginObject("palette_info");
104 formatter.AddField("palette_group", "Unknown - requires ROM analysis");
105 formatter.AddField("palette_index", "Unknown - requires ROM analysis");
106 formatter.AddField("color_count", 16);
107 formatter.EndObject();
108
109 formatter.BeginArray("colors");
110 formatter.AddArrayItem("Palette colors would be loaded from ROM data");
111 formatter.EndArray();
112
113 formatter.EndObject();
114
115 return absl::OkStatus();
116}
117
118} // namespace handlers
119} // namespace cli
120} // namespace yaze
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition rom.h:52
absl::Status Execute(Rom *rom, const resources::ArgumentParser &parser, resources::OutputFormatter &formatter) override
Execute the command business logic.
absl::Status Execute(Rom *rom, const resources::ArgumentParser &parser, resources::OutputFormatter &formatter) override
Execute the command business logic.
absl::Status Execute(Rom *rom, const resources::ArgumentParser &parser, resources::OutputFormatter &formatter) override
Execute the command business logic.
Utility for parsing common CLI argument patterns.
std::optional< std::string > GetString(const std::string &name) const
Parse a named argument (e.g., –format=json or –format json)
absl::StatusOr< int > GetInt(const std::string &name) const
Parse an integer argument (supports hex with 0x prefix)
Utility for consistent output formatting across commands.
void BeginArray(const std::string &key)
Begin an array.
void AddArrayItem(const std::string &item)
Add an item to current array.
void BeginObject(const std::string &title="")
Start a JSON object or text section.
void EndObject()
End a JSON object or text section.
void AddField(const std::string &key, const std::string &value)
Add a key-value pair.
void AddHexField(const std::string &key, uint64_t value, int width=2)
Add a hex-formatted field.
void AddSpriteNameFields(resources::OutputFormatter &formatter, int sprite_id)
bool ParseHexString(absl::string_view str, uint64_t *out)
Definition hex.cc:133
ResolvedLabel ResolveSpriteLabel(int id)
Convenience function to resolve a sprite label with its default name.