16 emu::mesen::MesenSocketClient& client) {
17 constexpr uint32_t kBaseAddress = 0x7EF000;
20 constexpr size_t kReadLength = kEndOffset - kStartOffset + 1;
21 constexpr uint32_t kReadAddress = kBaseAddress + kStartOffset;
23 auto bytes_or = client.ReadBlock(kReadAddress, kReadLength);
25 return bytes_or.status();
27 if (bytes_or->size() < kReadLength) {
28 return absl::DataLossError(
"SRAM read returned truncated data");
31 core::OracleProgressionState state;
32 const auto read_byte = [&](uint16_t offset) -> uint8_t {
33 return (*bytes_or)[offset - kStartOffset];
37 state.crystal_bitfield =
54 const oracle_validation::SmokeOptions& smoke_options,
55 const oracle_validation::PreflightOptions& preflight_options,
56 Rom* rom_context)
const {
57 oracle_validation::OracleRunResult result;
66 cli::handlers::DungeonOraclePreflightCommandHandler handler;
67 auto status = handler.Run(args, rom_context, &result.raw_output);
69 status.ok() || status.code() == absl::StatusCode::kFailedPrecondition;
70 result.status_code = status.code();
71 if (!status.ok() && status.code() != absl::StatusCode::kFailedPrecondition) {
72 result.error_message = std::string(status.message());
78 result.preflight = *parsed;
80 result.json_parse_failed =
true;
89 cli::handlers::OracleSmokeCheckCommandHandler handler;
90 auto status = handler.Run(args, rom_context, &result.raw_output);
92 status.ok() || status.code() == absl::StatusCode::kFailedPrecondition;
93 result.status_code = status.code();
94 if (!status.ok() && status.code() != absl::StatusCode::kFailedPrecondition) {
95 result.error_message = std::string(status.message());
101 result.smoke = *parsed;
103 result.json_parse_failed =
true;
109 project::YazeProject* project)
const {
110 if (project && project->hack_manifest.loaded()) {
111 return &project->hack_manifest;
116std::optional<core::OracleProgressionState>
118 const core::HackManifest& manifest)
const {
123 core::HackManifest& manifest,
const core::OracleProgressionState& state)
const {
124 manifest.SetOracleProgressionState(state);
128 core::HackManifest& manifest)
const {
129 manifest.ClearOracleProgressionState();
132absl::StatusOr<core::OracleProgressionState>
134 const std::string& filepath)
const {
138absl::StatusOr<core::OracleProgressionState>
140 emu::mesen::MesenSocketClient& client)
const {
145 const core::HackManifest& manifest)
const {
146 if (!manifest.HasProjectRegistry()) {
149 return &manifest.project_registry().story_events;
std::optional< OracleProgressionState > oracle_progression_state() const
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
absl::StatusOr< OracleProgressionState > LoadOracleProgressionFromSrmFile(const std::string &srm_path)
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.
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