3#include "absl/strings/numbers.h"
4#include "absl/strings/str_format.h"
14 auto room_id_str = parser.
GetString(
"room").value();
17 if (!absl::SimpleHexAtoi(room_id_str, &room_id)) {
18 return absl::InvalidArgumentError(
"Invalid room ID format. Must be hex.");
22 formatter.
AddField(
"room_id", room_id);
26 auto room_or = dungeon_editor.
GetRoom(room_id);
28 formatter.
AddField(
"status",
"error");
29 formatter.
AddField(
"error", room_or.status().ToString());
31 return room_or.status();
34 auto& room = room_or.value();
37 formatter.
AddField(
"total_sprites", 0);
38 formatter.
AddField(
"status",
"not_implemented");
39 formatter.
AddField(
"message",
"Sprite listing requires room sprite parsing");
45 return absl::OkStatus();
51 auto room_id_str = parser.
GetString(
"room").value();
54 if (!absl::SimpleHexAtoi(room_id_str, &room_id)) {
55 return absl::InvalidArgumentError(
"Invalid room ID format. Must be hex.");
59 formatter.
AddField(
"room_id", room_id);
63 auto room_or = dungeon_editor.
GetRoom(room_id);
65 formatter.
AddField(
"status",
"error");
66 formatter.
AddField(
"error", room_or.status().ToString());
68 return room_or.status();
71 auto& room = room_or.value();
73 formatter.
AddField(
"status",
"success");
74 formatter.
AddField(
"name", absl::StrFormat(
"Room %d", room.id()));
75 formatter.
AddField(
"room_id", room.id());
76 formatter.
AddField(
"room_type",
"Dungeon Room");
80 bool has_props = props_result.ok();
84 auto props = props_result.value();
85 formatter.
AddField(
"dungeon_id", props.dungeon_id);
86 formatter.
AddField(
"floor_level", props.floor_level);
87 formatter.
AddField(
"music_id", props.music_id);
88 formatter.
AddField(
"is_boss_room", props.is_boss_room ?
"true" :
"false");
89 formatter.
AddField(
"is_save_room", props.is_save_room ?
"true" :
"false");
92 formatter.
AddField(
"blockset", room.blockset);
93 formatter.
AddField(
"palette", room.palette);
94 formatter.
AddField(
"floor1", room.floor1());
95 formatter.
AddField(
"floor2", room.floor2());
99 formatter.
AddField(
"object_count",
static_cast<int>(room.GetTileObjects().size()));
105 return absl::OkStatus();
111 auto room_id_str = parser.
GetString(
"room").value();
114 if (!absl::SimpleHexAtoi(room_id_str, &room_id)) {
115 return absl::InvalidArgumentError(
"Invalid room ID format. Must be hex.");
119 formatter.
AddField(
"room_id", room_id);
123 auto room_or = dungeon_editor.
GetRoom(room_id);
125 formatter.
AddField(
"status",
"error");
126 formatter.
AddField(
"error", room_or.status().ToString());
128 return room_or.status();
131 auto& room = room_or.value();
134 formatter.
AddField(
"status",
"success");
135 formatter.
AddField(
"room_width",
"Unknown");
136 formatter.
AddField(
"room_height",
"Unknown");
137 formatter.
AddField(
"room_name", absl::StrFormat(
"Room %d", room.id()));
141 formatter.
AddField(
"tiles",
"Room tile data would be exported here");
142 formatter.
AddField(
"sprites",
"Room sprite data would be exported here");
143 formatter.
AddField(
"doors",
"Room door data would be exported here");
148 return absl::OkStatus();
154 auto room_id_str = parser.
GetString(
"room").value();
157 if (!absl::SimpleHexAtoi(room_id_str, &room_id)) {
158 return absl::InvalidArgumentError(
"Invalid room ID format. Must be hex.");
162 formatter.
AddField(
"room_id", room_id);
166 auto room_or = dungeon_editor.
GetRoom(room_id);
168 formatter.
AddField(
"status",
"error");
169 formatter.
AddField(
"error", room_or.status().ToString());
171 return room_or.status();
174 auto& room = room_or.value();
179 const auto& objects = room.GetTileObjects();
180 formatter.
AddField(
"total_objects",
static_cast<int>(objects.size()));
181 formatter.
AddField(
"status",
"success");
184 for (
const auto& obj : objects) {
187 formatter.
AddField(
"id_hex", absl::StrFormat(
"0x%04X", obj.id_));
190 formatter.
AddField(
"size", obj.size_);
191 formatter.
AddField(
"layer",
static_cast<int>(obj.layer_));
194 (obj.id_ & 0xFF), (obj.id_ >> 8));
201 return absl::OkStatus();
207 auto room_id_str = parser.
GetString(
"room").value();
210 if (!absl::SimpleHexAtoi(room_id_str, &room_id)) {
211 return absl::InvalidArgumentError(
"Invalid room ID format. Must be hex.");
215 formatter.
AddField(
"room_id", room_id);
219 auto room_or = dungeon_editor.
GetRoom(room_id);
221 formatter.
AddField(
"status",
"error");
222 formatter.
AddField(
"error", room_or.status().ToString());
224 return room_or.status();
227 auto& room = room_or.value();
230 formatter.
AddField(
"room_width",
"Unknown");
231 formatter.
AddField(
"room_height",
"Unknown");
232 formatter.
AddField(
"total_tiles",
"Unknown");
233 formatter.
AddField(
"status",
"not_implemented");
235 "Tile data retrieval requires room tile parsing");
241 return absl::OkStatus();
247 auto room_id_str = parser.
GetString(
"room").value();
248 auto property = parser.
GetString(
"property").value();
249 auto value = parser.
GetString(
"value").value();
252 if (!absl::SimpleHexAtoi(room_id_str, &room_id)) {
253 return absl::InvalidArgumentError(
"Invalid room ID format. Must be hex.");
256 formatter.
BeginObject(
"Dungeon Room Property Set");
257 formatter.
AddField(
"room_id", room_id);
258 formatter.
AddField(
"property", property);
263 auto room_or = dungeon_editor.
GetRoom(room_id);
265 formatter.
AddField(
"status",
"error");
266 formatter.
AddField(
"error", room_or.status().ToString());
268 return room_or.status();
272 formatter.
AddField(
"status",
"not_implemented");
274 "Property setting requires room property system");
277 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)
Comprehensive dungeon editing system.
absl::StatusOr< RoomProperties > GetRoomProperties(int room_id)
absl::StatusOr< Room > GetRoom(int room_id)
static int DetermineObjectType(uint8_t b1, uint8_t b3)