rosu_memory_lib/reader/common/stable/
memory.rs

1use rosu_mem::process::{Process, ProcessTraits};
2use crate::reader::structs::State;
3use crate::reader::common::stable::offset::COMMON_OFFSET;
4use crate::reader::common::GameState;
5
6pub fn get_game_state(p: &Process, state: &mut State) -> eyre::Result<GameState> {
7    let status_ptr = p.read_i32(state.addresses.status - COMMON_OFFSET.status)?;
8    Ok(GameState::from(p.read_u32(status_ptr)?))
9}
10
11pub fn check_game_state(p: &Process, state: &mut State, g_state: GameState) -> eyre::Result<bool> { 
12    Ok(get_game_state(p, state)? == g_state)
13}
14
15
16pub(crate) fn get_path_folder(p: &Process, state: &mut State) -> eyre::Result<String> {
17
18    let settings_ptr = p.read_i32(state.addresses.settings+COMMON_OFFSET.settings_ptr)?;
19    let settings_addr = p.read_i32(settings_ptr+COMMON_OFFSET.settings_addr)?;
20    let path = p.read_string(settings_addr+COMMON_OFFSET.path)?;
21    // default (relative path)
22    if path == "Songs" {
23        return Ok(format!("{}/Songs", p.executable_dir.clone().unwrap().display()));
24    }
25    // custom user path (absolute path)
26    Ok(path)
27}
28
29pub fn get_menu_mods(p: &Process, state: &mut State) -> eyre::Result<i32> 
30{    
31    let menu_mods_ptr = p.read_i32(state.addresses.menu_mods + COMMON_OFFSET.mods_ptr)?;
32    Ok(p.read_i32(menu_mods_ptr)?)
33}
34
35pub fn get_ig_time(p: &Process, state: &mut State) -> eyre::Result<i32> {
36    let playtime_ptr = p.read_i32(state.addresses.playtime + COMMON_OFFSET.ig_time)?;
37    Ok(p.read_i32(playtime_ptr)?)
38}