3#include "absl/strings/str_format.h"
16 const char* flag,
int limit) {
18 if (!text.has_value()) {
19 return absl::InvalidArgumentError(
20 absl::StrFormat(
"--%s is required", flag));
23 if (!util::ParseHexString(*text, &value) ||
24 value >=
static_cast<uint32_t
>(limit)) {
25 return absl::InvalidArgumentError(
26 absl::StrFormat(
"--%s must be a hex id below 0x%X", flag, limit));
28 return static_cast<int>(value);
34 if (project !=
nullptr) {
44 const bool has_map = parser.
GetString(
"map").has_value();
45 const bool has_room = parser.
GetString(
"room").has_value();
46 if (has_map == has_room) {
47 return absl::InvalidArgumentError(
"Pass exactly one of --map or --room");
49 return absl::OkStatus();
55 if (rom ==
nullptr || !rom->
is_loaded()) {
56 return absl::InvalidArgumentError(
"ROM not loaded");
62 const auto identity = IdentityFor(
project_);
65 if (parser.
GetString(
"map").has_value()) {
79 return absl::FailedPreconditionError(
80 "Graphics context did not match the loader");
83 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 ValidateArgs(const resources::ArgumentParser &parser) override
Validate command arguments.
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)
project::YazeProject * project_
Represents a single Overworld map screen.
absl::Status LoadPalette()
void LoadRoomGraphics(std::optional< uint8_t > entrance_blockset=std::nullopt)
void SetGameData(GameData *data)
#define ASSIGN_OR_RETURN(type_variable_name, expression)
absl::StatusOr< int > ParseId(const resources::ArgumentParser &parser, const char *flag, int limit)
zelda3::GraphicsContextIdentity IdentityFor(const project::YazeProject *project)
absl::Status LoadGameData(Rom &rom, GameData &data, const LoadOptions &options)
Loads all Zelda3-specific game data from a generic ROM.
ResolvedGraphicsContext DescribeDungeonGraphicsContext(const Room &room, const GraphicsContextIdentity &identity)
Room LoadRoomFromRom(Rom *rom, int room_id)
ResolvedGraphicsContext DescribeOverworldGraphicsContext(const OverworldMap &map, const GraphicsContextIdentity &identity)
#define RETURN_IF_ERROR(expr)
Modern project structure with comprehensive settings consolidation.
std::string ToJson() const