|
13 | 13 | #include "core/state.hpp"
|
14 | 14 | #include "core/version.hpp"
|
15 | 15 | #include "impl/raw_ptr.hpp"
|
| 16 | +#include "impl/rune.hpp" |
16 | 17 |
|
17 | 18 | namespace botw::savs {
|
18 | 19 |
|
@@ -53,6 +54,14 @@ void State::read_from_game(Reporter& r, const StateConfig& config) {
|
53 | 54 | raw_ptr::camera_pan_matrix().get_array(m_camera_pan_matrix, 12));
|
54 | 55 | r.report("CamZoom", raw_ptr::camera_zoom().get(&m_camera_zoom));
|
55 | 56 | r.report("CamTilt", raw_ptr::camera_tilt().get(&m_camera_tilt));
|
| 57 | + |
| 58 | + auto rune_mgr = RuneMgr::get_instance(); |
| 59 | + if (rune_mgr == nullptr) { |
| 60 | + r.report("RuneMgr", false); |
| 61 | + } else { |
| 62 | + m_rune = rune_mgr->get_current(); |
| 63 | + } |
| 64 | + |
56 | 65 | if (!r.has_error()) {
|
57 | 66 | m_stored_essentials = true;
|
58 | 67 | }
|
@@ -135,6 +144,14 @@ void State::write_to_game(Reporter& r, const StateConfig& config,
|
135 | 144 | r.report("CamZoom", raw_ptr::camera_zoom().set(m_camera_zoom));
|
136 | 145 | r.report("CamTilt", raw_ptr::camera_tilt().set(m_camera_tilt));
|
137 | 146 |
|
| 147 | + // selected rune |
| 148 | + auto rune_mgr = RuneMgr::get_instance(); |
| 149 | + if (rune_mgr == nullptr) { |
| 150 | + r.report("RuneMgr", false); |
| 151 | + } else { |
| 152 | + rune_mgr->set_current(m_rune); |
| 153 | + } |
| 154 | + |
138 | 155 | // extras
|
139 | 156 | r.report("RdBombCD", raw_ptr::round_bomb_cooldown().set(360.0F));
|
140 | 157 | r.report("SqBombCD", raw_ptr::square_bomb_cooldown().set(360.0F));
|
@@ -271,6 +288,10 @@ StateFileResult State::read_from_file(io::DataReader& r) {
|
271 | 288 | m_pmdm_state.read_from_file(r);
|
272 | 289 | }
|
273 | 290 |
|
| 291 | + if (version >= Version::v8) { |
| 292 | + r.read_integer(&m_rune); |
| 293 | + } |
| 294 | + |
274 | 295 | if (!r.is_successful()) {
|
275 | 296 | clear();
|
276 | 297 | return StateFileResult::IOError;
|
@@ -325,6 +346,8 @@ StateFileResult State::write_to_file(io::DataWriter& w) const {
|
325 | 346 | w.write_integer(_named(m_num_inventory_count_offset));
|
326 | 347 | m_pmdm_state.write_to_file(w);
|
327 | 348 |
|
| 349 | + w.write_integer(_named(m_rune)); |
| 350 | + |
328 | 351 | if (!w.is_successful()) {
|
329 | 352 | return StateFileResult::IOError;
|
330 | 353 | }
|
|
0 commit comments