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