ClayAmore / ER-Save-Editor

Elden Ring Save Editor. Compatible with PC and Playstation saves.
Apache License 2.0
293 stars 75 forks source link

Exporting Saves to Text #59

Open Charles-Stuart opened 2 months ago

Charles-Stuart commented 2 months ago

I tried using the tool to export my save file to .txt, but it seems to just save the .sl2 file as a text file so it's unreadable.

Is there a way to export the save file's information to serialized text, like JSON or YAML?

I'm trying to put together an auto-tracker for game progress using git, where each time the game is saved, I check for what's changed and create a commit with those notes, adding tags when something big happens, like a boss kill. I have everything else, I just can't tell what's changed from one save to the next in the .sl2 file.

If you happen to have an easy way of generating that export with this tool... I'd love to know how!

If not, but you have somewhere I can go next to find info on reading the binary save file format, I'll happily go figure it out for myself. I just haven't found any resources like that online recently.

EthanShoeDev commented 1 month ago

I believe you want to serialize the save state so that it is no longer in the binary representation.

I was able to do this for my website by applying serde to many structs in the code. You can read more about that on #34

After doing that, you can export the save state as json (I do this internally on my website, feel free to copy the code)

EthanShoeDev commented 1 month ago

What language are you using? Or would a cli tool meet your needs?

EthanShoeDev commented 1 month ago

@twp2000 what programming language 😂. I can compile you a library to convert save state to json. Just want to know how you would use it.

It could be a cli tool you call with bash or PowerShell.

Could be a python lib

Npm library... Etc

Charles-Stuart commented 1 month ago

Hey, if I could get it as a CLI tool, that would be FANTASTIC. I'm a huge Powershell guy, a CLI tool would be the holy grail for my plans.

EthanShoeDev commented 1 month ago

image elden-ring-save-parser-cli.zip

Here is the code I used to make the executable: https://github.com/EthanShoeDev/elden-ring-compass/tree/cli-tool/packages/elden-ring-save-parser-cli

@Charles-Stuart

EthanShoeDev commented 1 month ago

Download the zip, extract the exe. Open PowerShell in same folder as exe.

Run the command: 'elden-ring-save-parser-cli.exe --save-file {PATH_TO_SAVE_FILE}'

Then there will be a new file called 'output.json'

You can look at the screenshot I attached as an example

Charles-Stuart commented 1 month ago

Download the zip, extract the exe. Open PowerShell in same folder as exe.

Run the command: 'elden-ring-save-parser-cli.exe --save-file {PATH_TO_SAVE_FILE}'

Then there will be a new file called 'output.json'

You can look at the screenshot I attached as an example

Thank you! I'll try this as soon as I'm home tonight

EthanShoeDev commented 1 month ago

Could be something wrong with the cli, let me know when you give it a real shot. You can also try to upload it to my website here: www.eldenringcompasss.com.

If my website can't parse your save, neither will the cli. You can also send me your save and I will be sure it can work.

Charles-Stuart commented 1 month ago

@EthanShoeDev , sorry for the delay. My flight got caught up in yesterday's nightmare outage. Thank you so much, the CLI seems to be working. I'll look in more depth soon to see if I can find a table or something to help convert the ID values to item names.

image

It definitely picked up on my save's current level! Again thank you! image

SongTonyLi commented 1 month ago

@EthanShoeDev This cli looks great. However, inside the output.json, there are some entries that are not easily interpretable. For example, what are those hexadecimal numbers "_0x290" and "gaitem_handle"? 01000040@2x

EthanShoeDev commented 1 month ago

@SongTonyLi I somewhat lazily converted the raw save to json. Essentially the author of this repo made structs that match up perfectly with save offset.

Save is a file of contiguous memory.

ClayAmore wrote a lot of rust structs such as:

struct SaveHeader {
  someRandomThing: 4 bytes
  playerName: x bytes
}

This is a gross simplification but I think it gets the point across. Some properties in the struct are helpful, others are completely unknown.

The json cli that I made just json serializes the structs without much thought. This includes some useful properties (like playerLevel) and some unknown regions of the save.

Obviously, this could be cleaned up a lot but the op poster wanted to track the save with git. I figured that even if the json is a mess, they could still get some value by viewing the diffs.

There is a section in the save file that stores all inventory gaHandles (whatever that is) and another region of the save that has all the persistent event flags. If you actually want to read that data usefully, you need a map from Item names to item gaHandle and a map from event name to event flag offset.

The code that does this exists within this repo in the vm folder. I did not include that in the cli.

I have also rewritten all the vm (view models) in typescript for my website. I couldn't think of a way to easily embed my typescript view models in the cli unless the op installed bun or nodejs.

If I were better at rust, I could just rewrite the vms in this repo to work in a cli mode but I have not done that :)

Edit: It would be somewhat trivial to add a more useful export to json on my website (because I can use my typescript view models). Would that help?

Charles-Stuart commented 1 month ago

I mean if it were something we could hook into (like a REST API), then that would be fantastic! Like, for example, if we could PUT with the .sl2 file's contents and have it respond with the JSON text, then we'd have a pretty solid way of building on this in the future. That being said, something like that would put more strain on you if you got too much traffic to your site...

eduarmreyes commented 1 month ago

hey @EthanShoeDev, I am looking for help parsing a save file using savewizard.net, when opening this file it simply crashes. The logs say the following error

thread 'main' panicked at src/save/common/user_data_11.rs:31:9:
assertion failed: user_data_11.rest[0] == 0 || user_data_11.rest[0] == 151 ||
    user_data_11.rest[0] == 27

system: macos rust version: 1.78.0

full log running RUST_BACKTRACE=full cargo r 👇

thread 'main' panicked at src/save/common/user_data_11.rs:31:9:
assertion failed: user_data_11.rest[0] == 0 || user_data_11.rest[0] == 151 ||
    user_data_11.rest[0] == 27
stack backtrace:
   0:        0x1053cca10 - std::backtrace_rs::backtrace::libunwind::trace::h6de1cbf3f672a4f8
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/../../backtrace/src/backtrace/libunwind.rs:105:5
   1:        0x1053cca10 - std::backtrace_rs::backtrace::trace_unsynchronized::hd0de2d5ef13b6f4d
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:        0x1053cca10 - std::sys_common::backtrace::_print_fmt::h2a33510d9b3bb866
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys_common/backtrace.rs:68:5
   3:        0x1053cca10 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h01b2beffade888b2
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys_common/backtrace.rs:44:22
   4:        0x1053e8f9c - core::fmt::rt::Argument::fmt::h5ddc0f22b2928899
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/fmt/rt.rs:142:9
   5:        0x1053e8f9c - core::fmt::write::hbadb443a71b75f23
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/fmt/mod.rs:1153:17
   6:        0x1053ca724 - std::io::Write::write_fmt::hc09d7755e3ead5f0
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/io/mod.rs:1843:15
   7:        0x1053cc868 - std::sys_common::backtrace::_print::h3cd1786cbb1caf0f
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys_common/backtrace.rs:47:5
   8:        0x1053cc868 - std::sys_common::backtrace::print::h28349e5c25acbac7
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys_common/backtrace.rs:34:9
   9:        0x1053cdd7c - std::panicking::default_hook::{{closure}}::hd24b6196784d991e
  10:        0x1053cda60 - std::panicking::default_hook::hfcec80a2720c8c73
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:292:9
  11:        0x1053ce670 - std::panicking::rust_panic_with_hook::h84760468187ddc85
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:779:13
  12:        0x1053ce030 - std::panicking::begin_panic_handler::{{closure}}::he666a5eb600a7203
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:649:13
  13:        0x1053cce94 - std::sys_common::backtrace::__rust_end_short_backtrace::h592f44d2bf9f843f
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys_common/backtrace.rs:171:18
  14:        0x1053cddd4 - rust_begin_unwind
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:645:5
  15:        0x105420af8 - core::panicking::panic_fmt::h98bbf7bdf4994454
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/panicking.rs:72:14
  16:        0x105420b80 - core::panicking::panic::hc59c8a709a9b37ae
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/panicking.rs:145:5
  17:        0x104921674 - <er_save_editor::save::common::user_data_11::UserData11 as er_save_editor::read::read::Read>::read::hbe71434c77e87c79
                               at er-dlc-save-editor/src/save/common/user_data_11.rs:31:9
  18:        0x104b11c80 - <er_save_editor::save::playstation::ps_save::PSSave as er_save_editor::read::read::Read>::read::h620cd67910822666
                               at er-dlc-save-editor/src/save/playstation/ps_save.rs:34:29
  19:        0x104b1b38c - <er_save_editor::save::save::save::Save as er_save_editor::read::read::Read>::read::hc4a6390bcc9297e8
                               at er-dlc-save-editor/src/save/save.rs:779:56
  20:        0x104b1b81c - er_save_editor::save::save::save::Save::from_contents::h22ea09d1b0a9d3af
                               at er-dlc-save-editor/src/save/save.rs:809:13
  21:        0x104b1b8a8 - er_save_editor::save::save::save::Save::from_path::h3fd9e13bb5bc0530
                               at er-dlc-save-editor/src/save/save.rs:814:13
  22:        0x104b36eb8 - er_save_editor::App::open::hd07d3a8c44ff1453
                               at er-dlc-save-editor/src/main.rs:80:21
  23:        0x10494eaa8 - <er_save_editor::App as eframe::epi::App>::update::{{closure}}::{{closure}}::{{closure}}::h5a2062e22634af7e
                               at er-dlc-save-editor/src/main.rs:127:43
  24:        0x104b627a0 - core::ops::function::FnOnce::call_once{{vtable.shim}}::hb094262ac93a007b
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/ops/function.rs:250:5
  25:        0x10520b0b4 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h598133341d38b247
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2020:9
  26:        0x105240e8c - egui::ui::Ui::with_layout_dyn::heb5f5b1c51007126
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/egui-0.26.2/src/ui.rs:2020:21
  27:        0x1049af9a0 - egui::ui::Ui::with_layout::hb74910119eb355df
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/egui-0.26.2/src/ui.rs:2011:9
  28:        0x10494e6d8 - <er_save_editor::App as eframe::epi::App>::update::{{closure}}::{{closure}}::ha0a790d770ad3cae
                               at er-dlc-save-editor/src/main.rs:123:17
  29:        0x104b61204 - core::ops::function::FnOnce::call_once{{vtable.shim}}::h393d80366d45a598
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/ops/function.rs:250:5
  30:        0x104ae39ac - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hd5ca5166b5a14537
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2020:9
  31:        0x1049ae824 - egui::ui::Ui::columns_dyn::h96c39de6fc3c9b6e
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/egui-0.26.2/src/ui.rs:2109:22
  32:        0x1049b400c - egui::ui::Ui::columns::h04563544a582fa54
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/egui-0.26.2/src/ui.rs:2081:9
  33:        0x10494e5fc - <er_save_editor::App as eframe::epi::App>::update::{{closure}}::h4780e3f2d1afb899
                               at er-dlc-save-editor/src/main.rs:122:13
  34:        0x104b61d60 - core::ops::function::FnOnce::call_once{{vtable.shim}}::h763b424c3eac57b3
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/ops/function.rs:250:5
  35:        0x10520b0b4 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h598133341d38b247
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2020:9
  36:        0x104973e10 - egui::containers::panel::TopBottomPanel::show_inside_dyn::{{closure}}::hbfe27be6b782af38
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/egui-0.26.2/src/containers/panel.rs:747:13
  37:        0x104b62f10 - core::ops::function::FnOnce::call_once{{vtable.shim}}::hd05647eab352387e
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/ops/function.rs:250:5
  38:        0x10520b0b4 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h598133341d38b247
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2020:9
  39:        0x105223240 - egui::containers::frame::Frame::show_dyn::h425e7cea0c1c9bf0
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/egui-0.26.2/src/containers/frame.rs:270:19
  40:        0x104b31ef8 - egui::containers::frame::Frame::show::h982c0d469af27c21
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/egui-0.26.2/src/containers/frame.rs:261:9
  41:        0x104973950 - egui::containers::panel::TopBottomPanel::show_inside_dyn::ha5c772662630ad2d
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/egui-0.26.2/src/containers/panel.rs:744:30
  42:        0x1049742e0 - egui::containers::panel::TopBottomPanel::show_dyn::h8f4e6ace8e745697
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/egui-0.26.2/src/containers/panel.rs:812:30
  43:        0x104974130 - egui::containers::panel::TopBottomPanel::show::hc5f0d892e2556fb3
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/egui-0.26.2/src/containers/panel.rs:796:9
  44:        0x104b37514 - <er_save_editor::App as eframe::epi::App>::update::h067e6b43a361eeb9
                               at er-dlc-save-editor/src/main.rs:121:9
  45:        0x104ee6cf4 - eframe::native::epi_integration::EpiIntegration::update::{{closure}}::h2bf02334eaecfbec
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/eframe-0.26.2/src/native/epi_integration.rs:284:17
  46:        0x104edb23c - egui::context::Context::run::h002cbcc84c0ca0a3
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/egui-0.26.2/src/context.rs:753:9
  47:        0x104ee69bc - eframe::native::epi_integration::EpiIntegration::update::h77942932cc6c5fa1
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/eframe-0.26.2/src/native/epi_integration.rs:277:27
  48:        0x104ebbb00 - eframe::native::glow_integration::GlowWinitRunning::run_ui_and_paint::h2a54342119428098
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/eframe-0.26.2/src/native/glow_integration.rs:578:13
  49:        0x104eba8f4 - <eframe::native::glow_integration::GlowWinitApp as eframe::native::winit_integration::WinitApp>::run_ui_and_paint::h0893e62079eb180a
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/eframe-0.26.2/src/native/glow_integration.rs:402:13
  50:        0x104ed1220 - eframe::native::run::run_and_return::{{closure}}::h9d5fb8eda7ea08b2
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/eframe-0.26.2/src/native/run.rs:99:17
  51:        0x104ef826c - <winit::platform_impl::platform::app_state::EventLoopHandler<T> as winit::platform_impl::platform::app_state::EventHandler>::handle_nonuser_event::{{closure}}::h6a3e7828ceb5b474
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.29.10/src/platform_impl/macos/app_state.rs:87:13
  52:        0x104efc0f8 - winit::platform_impl::platform::app_state::EventLoopHandler<T>::with_callback::h37d6070437bf6c33
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.29.10/src/platform_impl/macos/app_state.rs:70:13
  53:        0x104ef8148 - <winit::platform_impl::platform::app_state::EventLoopHandler<T> as winit::platform_impl::platform::app_state::EventHandler>::handle_nonuser_event::hdc5a972b06f42499
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.29.10/src/platform_impl/macos/app_state.rs:86:9
  54:        0x105087bbc - winit::platform_impl::platform::app_state::Handler::handle_nonuser_event::h2291bd83b5b89cc8
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.29.10/src/platform_impl/macos/app_state.rs:318:13
  55:        0x1050898e0 - winit::platform_impl::platform::app_state::AppState::cleared::hb4ef04b3e0a8ca94
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.29.10/src/platform_impl/macos/app_state.rs:647:13
  56:        0x10507ebf4 - winit::platform_impl::platform::observer::control_flow_end_handler::{{closure}}::h9fa80a0747fe73e0
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.29.10/src/platform_impl/macos/observer.rs:79:21
  57:        0x10507ea4c - winit::platform_impl::platform::observer::control_flow_handler::{{closure}}::h496abdcc0a7cf0ad
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.29.10/src/platform_impl/macos/observer.rs:41:9
  58:        0x1050a8584 - std::panicking::try::do_call::h65accbfd0b220231
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:552:40
  59:        0x1050ad93c - ___rust_try
  60:        0x1050a8384 - std::panicking::try::h2abeb3ce9ad889ba
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:516:19
  61:        0x1050778dc - std::panic::catch_unwind::hf245e60f7e43ce25
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panic.rs:146:14
  62:        0x10508a244 - winit::platform_impl::platform::event_loop::stop_app_on_panic::h6878d14c8a2aabea
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.29.10/src/platform_impl/macos/event_loop.rs:469:11
  63:        0x10507e848 - winit::platform_impl::platform::observer::control_flow_handler::h45dd755bb0d917b0
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.29.10/src/platform_impl/macos/observer.rs:39:5
  64:        0x10507eb74 - winit::platform_impl::platform::observer::control_flow_end_handler::hbef54a328ad5a27a
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.29.10/src/platform_impl/macos/observer.rs:74:9
  65:        0x1900cd87c - <unknown>
  66:        0x1900cd768 - <unknown>
  67:        0x1900cce90 - <unknown>
  68:        0x1900cc434 - <unknown>
  69:        0x19a87019c - <unknown>
  70:        0x19a86ffd8 - <unknown>
  71:        0x19a86fd30 - <unknown>
  72:        0x19392bd68 - <unknown>
  73:        0x194121808 - <unknown>
  74:        0x19391f09c - <unknown>
  75:        0x1050ece60 - <() as objc2::message::MessageArguments>::__invoke::h33698c9396465128
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/objc2-0.4.1/src/message/mod.rs:531:39
  76:        0x1050dbcc8 - objc2::message::platform::send_unverified::hb7b93c73b60c2f73
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/objc2-0.4.1/src/message/apple/mod.rs:35:34
  77:        0x10506a7c0 - objc2::message::MessageReceiver::send_message::h7fd7aeb374cc5663
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/objc2-0.4.1/src/message/mod.rs:233:53
  78:        0x10506d590 - winit::platform_impl::platform::appkit::application::NSApplication::run::h6b60bc62ee44d14d
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/objc2-0.4.1/src/macros/extern_methods.rs:240:14
  79:        0x104efb48c - winit::platform_impl::platform::event_loop::EventLoop<T>::run_on_demand::{{closure}}::{{closure}}::h038ef51f97eeb3d8
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.29.10/src/platform_impl/macos/event_loop.rs:310:26
  80:        0x104ef227c - core::ops::function::FnOnce::call_once::h9cad5fd3a3ec15da
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/ops/function.rs:250:5
  81:        0x104edcee0 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hf15d724d041de8fd
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/panic/unwind_safe.rs:272:9
  82:        0x104ef8860 - std::panicking::try::do_call::hac6de455f3c22135
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:552:40
  83:        0x104efd3d8 - ___rust_try
  84:        0x104ef86fc - std::panicking::try::hca45e5dda94a63ac
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:516:19
  85:        0x104eda464 - std::panic::catch_unwind::hdbcdf6a1bcf28d72
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panic.rs:146:14
  86:        0x104efb2f4 - winit::platform_impl::platform::event_loop::EventLoop<T>::run_on_demand::{{closure}}::hbeb9e5292c38f18a
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.29.10/src/platform_impl/macos/event_loop.rs:299:32
  87:        0x104ec502c - objc2::rc::autorelease::autoreleasepool::had6e1acc3316cb29
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/objc2-0.4.1/src/rc/autorelease.rs:438:15
  88:        0x104efac6c - winit::platform_impl::platform::event_loop::EventLoop<T>::run_on_demand::hd52e813d86097b07
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.29.10/src/platform_impl/macos/event_loop.rs:281:9
  89:        0x104f0104c - <winit::event_loop::EventLoop<T> as winit::platform::run_on_demand::EventLoopExtRunOnDemand>::run_on_demand::hf574c72329948d18
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.29.10/src/platform/run_on_demand.rs:80:9
  90:        0x104ed0c34 - eframe::native::run::run_and_return::ha5a8a79536c7c891
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/eframe-0.26.2/src/native/run.rs:76:5
  91:        0x104ed3db8 - eframe::native::run::run_glow::{{closure}}::hbf931888b914ac2f
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/eframe-0.26.2/src/native/run.rs:400:13
  92:        0x104ed09ac - eframe::native::run::with_event_loop::{{closure}}::he84e9b3afad897ee
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/eframe-0.26.2/src/native/run.rs:58:12
  93:        0x104ef1260 - std::thread::local::LocalKey<T>::try_with::h65a33c058f66e3b0
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/thread/local.rs:284:16
  94:        0x104ef0f64 - std::thread::local::LocalKey<T>::with::h8fe869ef8824b12b
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/thread/local.rs:260:9
  95:        0x104ed0838 - eframe::native::run::with_event_loop::h890a8378504b2de5
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/eframe-0.26.2/src/native/run.rs:48:5
  96:        0x104ed3afc - eframe::native::run::run_glow::h4bad5e0c818682c1
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/eframe-0.26.2/src/native/run.rs:398:16
  97:        0x104ee7494 - eframe::run_native::h380827857d072058
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/eframe-0.26.2/src/lib.rs:262:13
  98:        0x104b36c88 - er_save_editor::main::h63aa3f2eb8dc5ad1
                               at er-dlc-save-editor/src/main.rs:44:5
  99:        0x104b65134 - core::ops::function::FnOnce::call_once::h8cda317e205e9840
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/ops/function.rs:250:5
 100:        0x1049fbdec - std::sys_common::backtrace::__rust_begin_short_backtrace::h408844d981b09fea
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys_common/backtrace.rs:155:18
 101:        0x1049fbdb0 - std::rt::lang_start::{{closure}}::h669c18e8947b181c
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/rt.rs:166:18
 102:        0x1053c7200 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::heaba8a29e0324069
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/ops/function.rs:284:13
 103:        0x1053c7200 - std::panicking::try::do_call::h6e5fac4f4884d97b
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:552:40
 104:        0x1053c7200 - std::panicking::try::h2b98e2f3cf76cd78
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:516:19
 105:        0x1053c7200 - std::panic::catch_unwind::hba9c97319335c08b
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panic.rs:146:14
 106:        0x1053c7200 - std::rt::lang_start_internal::{{closure}}::h18efdcfb68f002e8
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/rt.rs:148:48
 107:        0x1053c7200 - std::panicking::try::do_call::ha793e16770aada4d
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:552:40
 108:        0x1053c7200 - std::panicking::try::h8aa812e3e1310d12
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:516:19
 109:        0x1053c7200 - std::panic::catch_unwind::h38c4879f2623185e
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panic.rs:146:14
 110:        0x1053c7200 - std::rt::lang_start_internal::h39923ab4c3913741
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/rt.rs:148:20
 111:        0x1049fbd74 - std::rt::lang_start::hc12deb7b2f512b49
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/rt.rs:165:17
 112:        0x104b37ae8 - _main
thread 'main' panicked at .cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.29.10/src/platform_impl/macos/app_state.rs:387:33:
called `Result::unwrap()` on an `Err` value: PoisonError { .. }
stack backtrace:
   0:        0x1053cca10 - std::backtrace_rs::backtrace::libunwind::trace::h6de1cbf3f672a4f8
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/../../backtrace/src/backtrace/libunwind.rs:105:5
   1:        0x1053cca10 - std::backtrace_rs::backtrace::trace_unsynchronized::hd0de2d5ef13b6f4d
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:        0x1053cca10 - std::sys_common::backtrace::_print_fmt::h2a33510d9b3bb866
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys_common/backtrace.rs:68:5
   3:        0x1053cca10 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h01b2beffade888b2
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys_common/backtrace.rs:44:22
   4:        0x1053e8f9c - core::fmt::rt::Argument::fmt::h5ddc0f22b2928899
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/fmt/rt.rs:142:9
   5:        0x1053e8f9c - core::fmt::write::hbadb443a71b75f23
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/fmt/mod.rs:1153:17
   6:        0x1053ca724 - std::io::Write::write_fmt::hc09d7755e3ead5f0
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/io/mod.rs:1843:15
   7:        0x1053cc868 - std::sys_common::backtrace::_print::h3cd1786cbb1caf0f
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys_common/backtrace.rs:47:5
   8:        0x1053cc868 - std::sys_common::backtrace::print::h28349e5c25acbac7
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys_common/backtrace.rs:34:9
   9:        0x1053cdd7c - std::panicking::default_hook::{{closure}}::hd24b6196784d991e
  10:        0x1053cda60 - std::panicking::default_hook::hfcec80a2720c8c73
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:292:9
  11:        0x1053ce670 - std::panicking::rust_panic_with_hook::h84760468187ddc85
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:779:13
  12:        0x1053ce05c - std::panicking::begin_panic_handler::{{closure}}::he666a5eb600a7203
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:657:13
  13:        0x1053cce94 - std::sys_common::backtrace::__rust_end_short_backtrace::h592f44d2bf9f843f
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys_common/backtrace.rs:171:18
  14:        0x1053cddd4 - rust_begin_unwind
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:645:5
  15:        0x105420af8 - core::panicking::panic_fmt::h98bbf7bdf4994454
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/panicking.rs:72:14
  16:        0x105420f08 - core::result::unwrap_failed::h8e3b933261dd7fec
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/result.rs:1654:5
  17:        0x10508820c - core::result::Result<T,E>::unwrap::h64df12b210d2c568
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/result.rs:1077:23
  18:        0x10508820c - winit::platform_impl::platform::app_state::AppState::clear_callback::hf401c9391d185b3c
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.29.10/src/platform_impl/macos/app_state.rs:387:9
  19:        0x104efb36c - winit::platform_impl::platform::event_loop::EventLoop<T>::run_on_demand::{{closure}}::hbeb9e5292c38f18a
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.29.10/src/platform_impl/macos/event_loop.rs:329:13
  20:        0x104ec502c - objc2::rc::autorelease::autoreleasepool::had6e1acc3316cb29
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/objc2-0.4.1/src/rc/autorelease.rs:438:15
  21:        0x104efac6c - winit::platform_impl::platform::event_loop::EventLoop<T>::run_on_demand::hd52e813d86097b07
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.29.10/src/platform_impl/macos/event_loop.rs:281:9
  22:        0x104f0104c - <winit::event_loop::EventLoop<T> as winit::platform::run_on_demand::EventLoopExtRunOnDemand>::run_on_demand::hf574c72329948d18
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.29.10/src/platform/run_on_demand.rs:80:9
  23:        0x104ed0c34 - eframe::native::run::run_and_return::ha5a8a79536c7c891
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/eframe-0.26.2/src/native/run.rs:76:5
  24:        0x104ed3db8 - eframe::native::run::run_glow::{{closure}}::hbf931888b914ac2f
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/eframe-0.26.2/src/native/run.rs:400:13
  25:        0x104ed09ac - eframe::native::run::with_event_loop::{{closure}}::he84e9b3afad897ee
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/eframe-0.26.2/src/native/run.rs:58:12
  26:        0x104ef1260 - std::thread::local::LocalKey<T>::try_with::h65a33c058f66e3b0
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/thread/local.rs:284:16
  27:        0x104ef0f64 - std::thread::local::LocalKey<T>::with::h8fe869ef8824b12b
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/thread/local.rs:260:9
  28:        0x104ed0838 - eframe::native::run::with_event_loop::h890a8378504b2de5
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/eframe-0.26.2/src/native/run.rs:48:5
  29:        0x104ed3afc - eframe::native::run::run_glow::h4bad5e0c818682c1
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/eframe-0.26.2/src/native/run.rs:398:16
  30:        0x104ee7494 - eframe::run_native::h380827857d072058
                               at .cargo/registry/src/index.crates.io-6f17d22bba15001f/eframe-0.26.2/src/lib.rs:262:13
  31:        0x104b36c88 - er_save_editor::main::h63aa3f2eb8dc5ad1
                               at er-dlc-save-editor/src/main.rs:44:5
  32:        0x104b65134 - core::ops::function::FnOnce::call_once::h8cda317e205e9840
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/ops/function.rs:250:5
  33:        0x1049fbdec - std::sys_common::backtrace::__rust_begin_short_backtrace::h408844d981b09fea
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys_common/backtrace.rs:155:18
  34:        0x1049fbdb0 - std::rt::lang_start::{{closure}}::h669c18e8947b181c
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/rt.rs:166:18
  35:        0x1053c7200 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::heaba8a29e0324069
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/ops/function.rs:284:13
  36:        0x1053c7200 - std::panicking::try::do_call::h6e5fac4f4884d97b
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:552:40
  37:        0x1053c7200 - std::panicking::try::h2b98e2f3cf76cd78
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:516:19
  38:        0x1053c7200 - std::panic::catch_unwind::hba9c97319335c08b
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panic.rs:146:14
  39:        0x1053c7200 - std::rt::lang_start_internal::{{closure}}::h18efdcfb68f002e8
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/rt.rs:148:48
  40:        0x1053c7200 - std::panicking::try::do_call::ha793e16770aada4d
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:552:40
  41:        0x1053c7200 - std::panicking::try::h8aa812e3e1310d12
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:516:19
  42:        0x1053c7200 - std::panic::catch_unwind::h38c4879f2623185e
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panic.rs:146:14
  43:        0x1053c7200 - std::rt::lang_start_internal::h39923ab4c3913741
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/rt.rs:148:20
  44:        0x1049fbd74 - std::rt::lang_start::hc12deb7b2f512b49
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/rt.rs:165:17
  45:        0x104b37ae8 - _main
EthanShoeDev commented 4 weeks ago

@eduarmreyes I have seen saves fail on that line before. I know ClayAmore is still working on a new update but if you only care about "reading" the data and not writing data I can probably patch it to pass.

You can DM me your save or upload it.

Also try the "Copy JSON" button at the bottom of eldenringcompass.com

eduarmreyes commented 4 weeks ago

I am actually looking to write data, I tried using eldenringcompass.com but it does not seem to support files exported from PS4Wizard, right?

EthanShoeDev commented 4 weeks ago

eldenringcompass uses the same code as in this repo so it should support PS4 saves, though I haven't tested it so it may be broken in some way.

I think you will need to wait for ClayAmores update to write data anyway.

ClayAmore commented 3 weeks ago

If you're looking for pure parsing of the save file, I've separated the editor and parser into two projects in the new release. The parser can be found in the er-save-lib repository.

The parser is located in the save part of the project, while the save-api is what I'm using to expose functions for use in the save editor. Currently, the save API is built specifically for my needs in the save editor, so it is not yet complete.

I may consider changing the access level of the raw save data to be public instead of restricting it within the crate. Let me know if this would be helpful.