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"
6
7namespace yaze {
8namespace cli {
9namespace handlers {
10
12 Rom* /*rom*/, const resources::ArgumentParser& parser,
13 resources::OutputFormatter& formatter) {
14 auto limit = parser.GetInt("limit").value_or(256);
15 auto type = parser.GetString("type").value_or("all");
16
17 formatter.BeginObject("Sprite List");
18 formatter.AddField("total_sprites", 256);
19 formatter.AddField("display_limit", limit);
20 formatter.AddField("filter_type", type);
21
22 formatter.BeginArray("sprites");
23
24 // Use the sprite names from the sprite system
25 for (int i = 0; i < std::min(limit, 256); i++) {
26 std::string sprite_name = zelda3::kSpriteDefaultNames[i];
27 std::string sprite_entry = absl::StrFormat("0x%02X: %s", i, sprite_name);
28 formatter.AddArrayItem(sprite_entry);
29 }
30
31 formatter.EndArray();
32 formatter.EndObject();
33
34 return absl::OkStatus();
35}
36
38 Rom* /*rom*/, const resources::ArgumentParser& parser,
39 resources::OutputFormatter& formatter) {
40 auto id_str = parser.GetString("id").value();
41
42 int sprite_id;
43 if (!absl::SimpleHexAtoi(id_str, &sprite_id) &&
44 !absl::SimpleAtoi(id_str, &sprite_id)) {
45 return absl::InvalidArgumentError(
46 "Invalid sprite ID format. Must be hex (0xNN) or decimal.");
47 }
48
49 if (sprite_id < 0 || sprite_id > 255) {
50 return absl::InvalidArgumentError("Sprite ID must be between 0 and 255.");
51 }
52
53 formatter.BeginObject("Sprite Properties");
54 formatter.AddHexField("sprite_id", sprite_id, 2);
55
56 // Get sprite name
57 std::string sprite_name = zelda3::kSpriteDefaultNames[sprite_id];
58 formatter.AddField("name", sprite_name);
59
60 // Add basic sprite properties
61 // Note: Full sprite properties would require loading sprite data from ROM
62 formatter.BeginObject("properties");
63 formatter.AddField("type", "standard");
64 formatter.AddField("is_boss", sprite_id == 0x09 || sprite_id == 0x1A ||
65 sprite_id == 0x1E || sprite_id == 0x1F ||
66 sprite_id == 0xCE || sprite_id == 0xD6);
67 formatter.AddField("is_overlord", sprite_id <= 0x1A);
68 formatter.AddField("description",
69 "Sprite properties would be loaded from ROM data");
70 formatter.EndObject();
71
72 formatter.EndObject();
73
74 return absl::OkStatus();
75}
76
78 Rom* /*rom*/, const resources::ArgumentParser& parser,
79 resources::OutputFormatter& formatter) {
80 auto id_str = parser.GetString("id").value();
81
82 int sprite_id;
83 if (!absl::SimpleHexAtoi(id_str, &sprite_id) &&
84 !absl::SimpleAtoi(id_str, &sprite_id)) {
85 return absl::InvalidArgumentError(
86 "Invalid sprite ID format. Must be hex (0xNN) or decimal.");
87 }
88
89 if (sprite_id < 0 || sprite_id > 255) {
90 return absl::InvalidArgumentError("Sprite ID must be between 0 and 255.");
91 }
92
93 formatter.BeginObject("Sprite Palette");
94 formatter.AddHexField("sprite_id", sprite_id, 2);
95
96 std::string sprite_name = zelda3::kSpriteDefaultNames[sprite_id];
97 formatter.AddField("name", sprite_name);
98
99 // Note: Actual palette data would need to be loaded from ROM
100 formatter.BeginObject("palette_info");
101 formatter.AddField("palette_group", "Unknown - requires ROM analysis");
102 formatter.AddField("palette_index", "Unknown - requires ROM analysis");
103 formatter.AddField("color_count", 16);
104 formatter.EndObject();
105
106 formatter.BeginArray("colors");
107 formatter.AddArrayItem("Palette colors would be loaded from ROM data");
108 formatter.EndArray();
109
110 formatter.EndObject();
111
112 return absl::OkStatus();
113}
114
115} // namespace handlers
116} // namespace cli
117} // 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:24
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.
const std::string kSpriteDefaultNames[256]
Definition sprite.cc:13