5#include "absl/strings/str_format.h"
18 constexpr uint32_t kBaseAddress = 0x7EF000;
19 constexpr uint16_t kStartOffset =
21 constexpr uint16_t kEndOffset =
23 constexpr size_t kReadLength = kEndOffset - kStartOffset + 1;
24 constexpr uint32_t kReadAddress = kBaseAddress + kStartOffset;
26 auto bytes_or = client.
ReadBlock(kReadAddress, kReadLength);
28 return bytes_or.status();
30 if (bytes_or->size() < kReadLength) {
31 return absl::DataLossError(
"SRAM read returned truncated data");
35 const auto read_byte = [&](uint16_t offset) -> uint8_t {
36 return (*bytes_or)[offset - kStartOffset];
51 const absl::Status& status) {
63 const auto& first_error = preflight.
errors.front();
64 std::string expected_message = first_error.message;
67 absl::StrFormat(
"%s (plus %d additional safety issue(s))",
71 return first_error.status_code == absl::StatusCodeToString(status.code()) &&
72 expected_message == status.message();
85 Rom* rom_context)
const {
96 auto status = handler.
Run(args, rom_context, &result.
raw_output);
101 ?
"dungeon-oracle-preflight produced no output"
102 : std::string(status.message());
110 ? std::string(parsed.status().message())
111 : std::string(status.message());
116 if (MatchesExpectedPreflightStatus(*parsed, status)) {
123 ?
"dungeon-oracle-preflight output did not match command status"
124 : std::string(status.message());
133 auto status = handler.
Run(args, rom_context, &result.
raw_output);
135 status.ok() || status.code() == absl::StatusCode::kFailedPrecondition;
137 if (!status.ok() && status.code() != absl::StatusCode::kFailedPrecondition) {
144 result.
smoke = *parsed;
159std::optional<core::OracleProgressionState>
176absl::StatusOr<core::OracleProgressionState>
178 const std::string& filepath)
const {
182absl::StatusOr<core::OracleProgressionState>
185 return ReadOracleProgressionState(client);
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
absl::Status Run(const std::vector< std::string > &args, Rom *rom_context, std::string *captured_output=nullptr)
Execute the command.
Loads and queries the hack manifest JSON for yaze-ASM integration.
void ClearOracleProgressionState()
const ProjectRegistry & project_registry() const
bool HasProjectRegistry() const
std::optional< OracleProgressionState > oracle_progression_state() const
bool loaded() const
Check if the manifest has been loaded.
void SetOracleProgressionState(const OracleProgressionState &state)
The complete Oracle narrative progression graph.
oracle_validation::OracleRunResult RunValidation(oracle_validation::RunMode mode, const oracle_validation::SmokeOptions &smoke_options, const oracle_validation::PreflightOptions &preflight_options, Rom *rom_context) const override
core::HackManifest * ResolveManifest(project::YazeProject *project) const override
void SetProgressionState(core::HackManifest &manifest, const core::OracleProgressionState &state) const override
const core::StoryEventGraph * GetStoryGraph(const core::HackManifest &manifest) const override
std::optional< core::OracleProgressionState > GetProgressionState(const core::HackManifest &manifest) const override
absl::StatusOr< core::OracleProgressionState > LoadProgressionStateFromFile(const std::string &filepath) const override
absl::StatusOr< core::OracleProgressionState > ReadProgressionStateFromLiveSram(emu::mesen::MesenSocketClient &client) const override
std::string GetBackendId() const override
void ClearProgressionState(core::HackManifest &manifest) const override
Unix socket client for Mesen2-OoS fork.
absl::StatusOr< std::vector< uint8_t > > ReadBlock(uint32_t addr, size_t len)
Read a block of bytes from memory.
absl::StatusOr< OracleProgressionState > LoadOracleProgressionFromSrmFile(const std::string &srm_path)
bool MatchesExpectedPreflightStatus(const oracle_validation::PreflightResult &preflight, const absl::Status &status)
absl::StatusOr< core::OracleProgressionState > ReadOracleProgressionState(emu::mesen::MesenSocketClient &client)
std::vector< std::string > BuildSmokeArgs(const SmokeOptions &opts)
std::vector< std::string > BuildPreflightArgs(const PreflightOptions &opts)
std::string CurrentTimestamp()
std::string BuildCliCommand(const std::string &command_name, const std::vector< std::string > &args)
absl::StatusOr< SmokeResult > ParseSmokeCheckOutput(const std::string &json_str)
absl::StatusOr< PreflightResult > ParsePreflightOutput(const std::string &json_str)
Editors are the view controllers for the application.
Oracle of Secrets game progression state parsed from SRAM.
static constexpr uint16_t kSideQuestOffset
static constexpr uint16_t kPendantOffset
static constexpr uint16_t kGameStateOffset
static constexpr uint16_t kOosProgOffset
static constexpr uint16_t kOosProg2Offset
static constexpr uint16_t kCrystalOffset
StoryEventGraph story_events
std::string error_message
std::optional< SmokeResult > smoke
absl::StatusCode status_code
std::optional< PreflightResult > preflight
std::vector< PreflightError > errors
Modern project structure with comprehensive settings consolidation.
core::HackManifest hack_manifest