yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
oracle_hack_workflow_backend.cc
Go to the documentation of this file.
2
3#include <vector>
4
10#include "core/project.h"
11
12namespace yaze::editor {
13namespace {
14
15absl::StatusOr<core::OracleProgressionState> ReadOracleProgressionState(
17 constexpr uint32_t kBaseAddress = 0x7EF000;
18 constexpr uint16_t kStartOffset =
20 constexpr uint16_t kEndOffset =
22 constexpr size_t kReadLength = kEndOffset - kStartOffset + 1;
23 constexpr uint32_t kReadAddress = kBaseAddress + kStartOffset;
24
25 auto bytes_or = client.ReadBlock(kReadAddress, kReadLength);
26 if (!bytes_or.ok()) {
27 return bytes_or.status();
28 }
29 if (bytes_or->size() < kReadLength) {
30 return absl::DataLossError("SRAM read returned truncated data");
31 }
32
34 const auto read_byte = [&](uint16_t offset) -> uint8_t {
35 return (*bytes_or)[offset - kStartOffset];
36 };
37
39 state.crystal_bitfield =
45 return state;
46}
47
48} // namespace
49
51 return "oracle";
52}
53
56 const oracle_validation::SmokeOptions& smoke_options,
57 const oracle_validation::PreflightOptions& preflight_options,
58 Rom* rom_context) const {
60 result.mode = mode;
62
64 auto args = oracle_validation::BuildPreflightArgs(preflight_options);
65 result.cli_command =
66 oracle_validation::BuildCliCommand("dungeon-oracle-preflight", args);
67
69 auto status = handler.Run(args, rom_context, &result.raw_output);
70 result.command_ok =
71 status.ok() || status.code() == absl::StatusCode::kFailedPrecondition;
72 result.status_code = status.code();
73 if (!status.ok() &&
74 status.code() != absl::StatusCode::kFailedPrecondition) {
75 result.error_message = std::string(status.message());
76 return result;
77 }
78
80 if (parsed.ok()) {
81 result.preflight = *parsed;
82 } else {
83 result.json_parse_failed = true;
84 }
85 return result;
86 }
87
88 auto args = oracle_validation::BuildSmokeArgs(smoke_options);
89 result.cli_command =
90 oracle_validation::BuildCliCommand("oracle-smoke-check", args);
91
93 auto status = handler.Run(args, rom_context, &result.raw_output);
94 result.command_ok =
95 status.ok() || status.code() == absl::StatusCode::kFailedPrecondition;
96 result.status_code = status.code();
97 if (!status.ok() && status.code() != absl::StatusCode::kFailedPrecondition) {
98 result.error_message = std::string(status.message());
99 return result;
100 }
101
103 if (parsed.ok()) {
104 result.smoke = *parsed;
105 } else {
106 result.json_parse_failed = true;
107 }
108 return result;
109}
110
112 project::YazeProject* project) const {
113 if (project && project->hack_manifest.loaded()) {
114 return &project->hack_manifest;
115 }
116 return nullptr;
117}
118
119std::optional<core::OracleProgressionState>
124
130
135
136absl::StatusOr<core::OracleProgressionState>
138 const std::string& filepath) const {
140}
141
142absl::StatusOr<core::OracleProgressionState>
144 emu::mesen::MesenSocketClient& client) const {
145 return ReadOracleProgressionState(client);
146}
147
149 const core::HackManifest& manifest) const {
150 if (!manifest.HasProjectRegistry()) {
151 return nullptr;
152 }
153 return &manifest.project_registry().story_events;
154}
155
156} // namespace yaze::editor
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition rom.h:28
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.
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
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)
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 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
Modern project structure with comprehensive settings consolidation.
Definition project.h:164
core::HackManifest hack_manifest
Definition project.h:204