3#include "absl/strings/str_format.h"
16 auto room_id_str = parser.
GetString(
"room").value();
19 if (!ParseHexString(room_id_str, &room_id)) {
20 return absl::InvalidArgumentError(
"Invalid room ID format. Must be hex.");
24 formatter.
AddField(
"room_id", room_id);
28 auto room_or = dungeon_editor.
GetRoom(room_id);
30 formatter.
AddField(
"status",
"error");
31 formatter.
AddField(
"error", room_or.status().ToString());
33 return room_or.status();
36 auto& room = room_or.value();
39 formatter.
AddField(
"total_sprites", 0);
40 formatter.
AddField(
"status",
"not_implemented");
41 formatter.
AddField(
"message",
"Sprite listing requires room sprite parsing");
47 return absl::OkStatus();
53 auto room_id_str = parser.
GetString(
"room").value();
56 if (!ParseHexString(room_id_str, &room_id)) {
57 return absl::InvalidArgumentError(
"Invalid room ID format. Must be hex.");
61 formatter.
AddField(
"room_id", room_id);
65 auto room_or = dungeon_editor.
GetRoom(room_id);
67 formatter.
AddField(
"status",
"error");
68 formatter.
AddField(
"error", room_or.status().ToString());
70 return room_or.status();
73 auto& room = room_or.value();
75 formatter.
AddField(
"status",
"success");
76 formatter.
AddField(
"name", absl::StrFormat(
"Room %d", room.id()));
77 formatter.
AddField(
"room_id", room.id());
78 formatter.
AddField(
"room_type",
"Dungeon Room");
82 formatter.
AddField(
"blockset", room.blockset);
83 formatter.
AddField(
"spriteset", room.spriteset);
84 formatter.
AddField(
"palette", room.palette);
85 formatter.
AddField(
"layout", room.layout);
86 formatter.
AddField(
"floor1", room.floor1());
87 formatter.
AddField(
"floor2", room.floor2());
88 formatter.
AddField(
"effect",
static_cast<int>(room.effect()));
89 formatter.
AddField(
"tag1",
static_cast<int>(room.tag1()));
90 formatter.
AddField(
"tag2",
static_cast<int>(room.tag2()));
95 static_cast<int>(room.GetTileObjects().size()));
101 return absl::OkStatus();
107 auto room_id_str = parser.
GetString(
"room").value();
110 if (!ParseHexString(room_id_str, &room_id)) {
111 return absl::InvalidArgumentError(
"Invalid room ID format. Must be hex.");
115 formatter.
AddField(
"room_id", room_id);
119 auto room_or = dungeon_editor.
GetRoom(room_id);
121 formatter.
AddField(
"status",
"error");
122 formatter.
AddField(
"error", room_or.status().ToString());
124 return room_or.status();
127 auto& room = room_or.value();
130 formatter.
AddField(
"status",
"success");
131 formatter.
AddField(
"room_width",
"Unknown");
132 formatter.
AddField(
"room_height",
"Unknown");
133 formatter.
AddField(
"room_name", absl::StrFormat(
"Room %d", room.id()));
137 formatter.
AddField(
"tiles",
"Room tile data would be exported here");
138 formatter.
AddField(
"sprites",
"Room sprite data would be exported here");
139 formatter.
AddField(
"doors",
"Room door data would be exported here");
144 return absl::OkStatus();
150 auto room_id_str = parser.
GetString(
"room").value();
153 if (!ParseHexString(room_id_str, &room_id)) {
154 return absl::InvalidArgumentError(
"Invalid room ID format. Must be hex.");
158 formatter.
AddField(
"room_id", room_id);
162 auto room_or = dungeon_editor.
GetRoom(room_id);
164 formatter.
AddField(
"status",
"error");
165 formatter.
AddField(
"error", room_or.status().ToString());
167 return room_or.status();
170 auto& room = room_or.value();
175 const auto& objects = room.GetTileObjects();
176 formatter.
AddField(
"total_objects",
static_cast<int>(objects.size()));
177 formatter.
AddField(
"status",
"success");
180 for (
const auto& obj : objects) {
183 formatter.
AddField(
"id_hex", absl::StrFormat(
"0x%04X", obj.id_));
186 formatter.
AddField(
"size", obj.size_);
187 formatter.
AddField(
"layer",
static_cast<int>(obj.layer_));
197 return absl::OkStatus();
203 auto room_id_str = parser.
GetString(
"room").value();
206 if (!ParseHexString(room_id_str, &room_id)) {
207 return absl::InvalidArgumentError(
"Invalid room ID format. Must be hex.");
211 formatter.
AddField(
"room_id", room_id);
215 auto room_or = dungeon_editor.
GetRoom(room_id);
217 formatter.
AddField(
"status",
"error");
218 formatter.
AddField(
"error", room_or.status().ToString());
220 return room_or.status();
223 auto& room = room_or.value();
226 formatter.
AddField(
"room_width",
"Unknown");
227 formatter.
AddField(
"room_height",
"Unknown");
228 formatter.
AddField(
"total_tiles",
"Unknown");
229 formatter.
AddField(
"status",
"not_implemented");
231 "Tile data retrieval requires room tile parsing");
237 return absl::OkStatus();
243 auto room_id_str = parser.
GetString(
"room").value();
244 auto property = parser.
GetString(
"property").value();
245 auto value = parser.
GetString(
"value").value();
248 if (!ParseHexString(room_id_str, &room_id)) {
249 return absl::InvalidArgumentError(
"Invalid room ID format. Must be hex.");
252 formatter.
BeginObject(
"Dungeon Room Property Set");
253 formatter.
AddField(
"room_id", room_id);
254 formatter.
AddField(
"property", property);
259 auto room_or = dungeon_editor.
GetRoom(room_id);
261 formatter.
AddField(
"status",
"error");
262 formatter.
AddField(
"error", room_or.status().ToString());
264 return room_or.status();
268 formatter.
AddField(
"status",
"not_implemented");
270 "Property setting requires room property system");
273 return absl::OkStatus();
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
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.
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)
Core dungeon editing system.
absl::StatusOr< Room > GetRoom(int room_id)
static int DetermineObjectType(uint8_t b1, uint8_t b3)
bool ParseHexString(absl::string_view str, int *out)