3#include "absl/strings/numbers.h"
4#include "absl/strings/str_format.h"
15 auto limit = parser.
GetInt(
"limit").value_or(256);
16 auto type = parser.
GetString(
"type").value_or(
"all");
19 formatter.
AddField(
"total_sprites", 256);
20 formatter.
AddField(
"display_limit", limit);
21 formatter.
AddField(
"filter_type", type);
26 for (
int i = 0; i < std::min(limit, 256); i++) {
27 std::string sprite_name = zelda3::kSpriteDefaultNames[i];
28 std::string sprite_entry = absl::StrFormat(
"0x%02X: %s", i, sprite_name);
35 return absl::OkStatus();
42 auto id_str = parser.
GetString(
"id").value();
45 if (!absl::SimpleHexAtoi(id_str, &sprite_id) &&
46 !absl::SimpleAtoi(id_str, &sprite_id)) {
47 return absl::InvalidArgumentError(
48 "Invalid sprite ID format. Must be hex (0xNN) or decimal.");
51 if (sprite_id < 0 || sprite_id > 255) {
52 return absl::InvalidArgumentError(
53 "Sprite ID must be between 0 and 255.");
60 std::string sprite_name = zelda3::kSpriteDefaultNames[sprite_id];
61 formatter.
AddField(
"name", sprite_name);
66 formatter.
AddField(
"type",
"standard");
67 formatter.
AddField(
"is_boss", sprite_id == 0x09 || sprite_id == 0x1A ||
68 sprite_id == 0x1E || sprite_id == 0x1F ||
69 sprite_id == 0xCE || sprite_id == 0xD6);
70 formatter.
AddField(
"is_overlord", sprite_id <= 0x1A);
71 formatter.
AddField(
"description",
"Sprite properties would be loaded from ROM data");
76 return absl::OkStatus();
83 auto id_str = parser.
GetString(
"id").value();
86 if (!absl::SimpleHexAtoi(id_str, &sprite_id) &&
87 !absl::SimpleAtoi(id_str, &sprite_id)) {
88 return absl::InvalidArgumentError(
89 "Invalid sprite ID format. Must be hex (0xNN) or decimal.");
92 if (sprite_id < 0 || sprite_id > 255) {
93 return absl::InvalidArgumentError(
94 "Sprite ID must be between 0 and 255.");
100 std::string sprite_name = zelda3::kSpriteDefaultNames[sprite_id];
101 formatter.
AddField(
"name", sprite_name);
105 formatter.
AddField(
"palette_group",
"Unknown - requires ROM analysis");
106 formatter.
AddField(
"palette_index",
"Unknown - requires ROM analysis");
107 formatter.
AddField(
"color_count", 16);
111 formatter.
AddArrayItem(
"Palette colors would be loaded from ROM data");
116 return absl::OkStatus();
The Rom class is used to load, save, and modify Rom data.
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)
Main namespace for the application.