pub struct Emu {
pub layout: MemoryLayoutImpl<EmptySymbolLookup>,
pub memory: EmuMemory,
}
Expand description
An SM64 API that attaches to a running emulator and can read/write to its memory.
§Example
use wafel_api::{Emu, SM64Version};
let pid = 4232;
let base_address = 0x0050B110;
let mut emu = Emu::attach(pid, base_address, SM64Version::US);
loop {
let holding_l =
(emu.read("gControllerPads[0].button").as_int() & emu.constant("L_TRIG").as_int()) != 0;
if holding_l && emu.read("gMarioState.action") != emu.constant("ACT_FREEFALL") {
emu.write("gMarioState.action", emu.constant("ACT_FREEFALL"));
emu.write("gMarioState.vel[1]", 50.0.into());
}
}
Fields§
§layout: MemoryLayoutImpl<EmptySymbolLookup>
§memory: EmuMemory
Implementations§
Source§impl Emu
impl Emu
Sourcepub fn attach(pid: u32, base_address: usize, sm64_version: SM64Version) -> Self
pub fn attach(pid: u32, base_address: usize, sm64_version: SM64Version) -> Self
Attach to a running emulator.
§Panics
Panics if attachment fails, probably because there is no running process with the given PID.
Sourcepub fn try_attach(
pid: u32,
base_address: usize,
sm64_version: SM64Version,
) -> Result<Self, Error>
pub fn try_attach( pid: u32, base_address: usize, sm64_version: SM64Version, ) -> Result<Self, Error>
Attach to a running emulator.
Returns an error if attachment fails, probably because there is no running process with the given PID.
Sourcepub fn is_process_open(&self) -> bool
pub fn is_process_open(&self) -> bool
Return true if a process with the given pid is currently open.
If the process is closed, then reads and writes on this memory object will fail. Once this method returns false, you should avoid using this Emu again since a new process may eventually open with the same pid.
Note that a process may close immediately after calling this method, so failed reads/writes must be handled regardless.
Sourcepub fn read(&self, path: &str) -> Value
pub fn read(&self, path: &str) -> Value
Read a value from memory.
See the crate documentation for the path syntax.
§Panics
Panics if the path fails to compile or reading from memory fails.
Sourcepub fn try_read(&self, path: &str) -> Result<Value, Error>
pub fn try_read(&self, path: &str) -> Result<Value, Error>
Read a value from memory.
See the crate documentation for the path syntax.
Returns an error if the path fails to compile or reading from memory fails.
Sourcepub fn read_string_at(&self, address: Address) -> Vec<u8>
pub fn read_string_at(&self, address: Address) -> Vec<u8>
Read a null terminated string from memory at the given address.
§Panics
Panics if reading from memory fails.
Sourcepub fn try_read_string_at(&self, address: Address) -> Result<Vec<u8>, Error>
pub fn try_read_string_at(&self, address: Address) -> Result<Vec<u8>, Error>
Read a null terminated string from memory at the given address.
Returns an error if reading from memory fails.
Sourcepub fn address(&self, path: &str) -> Option<Address>
pub fn address(&self, path: &str) -> Option<Address>
Find the address of a path.
This method returns None
if ?
is used in the path and the expression before
?
evaluates to a null pointer.
See the crate documentation for the path syntax.
§Panics
Panics if the path fails to compile or reading from memory fails.
Sourcepub fn try_address(&self, path: &str) -> Result<Option<Address>, Error>
pub fn try_address(&self, path: &str) -> Result<Option<Address>, Error>
Find the address of a path.
This method returns None
if ?
is used in the path and the expression before
?
evaluates to a null pointer.
See the crate documentation for the path syntax.
Returns an error if the path fails to compile or reading from memory fails.
Sourcepub fn address_to_symbol(&self, address: Address) -> Option<String>
pub fn address_to_symbol(&self, address: Address) -> Option<String>
Return the name of the global variable at the given address.
Returns None if no global variable is at the address.
Sourcepub fn data_type(&self, path: &str) -> DataType
pub fn data_type(&self, path: &str) -> DataType
Return a simplified description of the type of the given variable.
See the crate documentation for the path syntax.
§Panics
Panics if the path fails to compile or type resolution fails.
Sourcepub fn try_data_type(&self, path: &str) -> Result<DataType, Error>
pub fn try_data_type(&self, path: &str) -> Result<DataType, Error>
Return a simplified description of the type of the given variable.
See the crate documentation for the path syntax.
§Panics
Panics if the path fails to compile or type resolution fails.
Sourcepub fn write(&mut self, path: &str, value: Value)
pub fn write(&mut self, path: &str, value: Value)
Write a value to memory.
See the crate documentation for the path syntax.
§Panics
Panics if the data path fails to compile or the write fails.
Sourcepub fn try_write(&mut self, path: &str, value: Value) -> Result<(), Error>
pub fn try_write(&mut self, path: &str, value: Value) -> Result<(), Error>
Write a value to memory.
See the crate documentation for the path syntax.
Returns an error if the data path fails to compile or the write fails.
Sourcepub fn constant(&self, name: &str) -> Value
pub fn constant(&self, name: &str) -> Value
Return the value of the macro constant or enum variant with the given name.
§Panics
Panics if the constant doesn’t exist. Unless the name has a typo, it is likely that either Wafel is out of date or it is just a limitation of how Wafel obtains constants from the source.
Sourcepub fn try_constant(&self, name: &str) -> Result<Value, Error>
pub fn try_constant(&self, name: &str) -> Result<Value, Error>
Return the value of the macro constant or enum variant with the given name.
Returns an error if the constant doesn’t exist. Unless the name has a typo, it is likely that either Wafel is out of date or it is just a limitation of how Wafel obtains constants from the source.
Sourcepub fn try_render(&self, config: &VizConfig) -> Result<VizScene, Error>
pub fn try_render(&self, config: &VizConfig) -> Result<VizScene, Error>
Render the game to a VizScene object, which can be displayed using [wafel_viz].
Returns an error if rendering fails (most likely a bug in [wafel_viz]).
Sourcepub fn mario_action_names(&self) -> HashMap<u32, String>
pub fn mario_action_names(&self) -> HashMap<u32, String>
Return a mapping from Mario action values to their name (e.g. ACT_IDLE
).
Sourcepub fn try_surfaces(&self) -> Result<Vec<Surface>, Error>
pub fn try_surfaces(&self) -> Result<Vec<Surface>, Error>
Read the currently loaded surfaces.
Returns an error if the read fails.
Sourcepub fn object_hitboxes(&self) -> Vec<ObjectHitbox>
pub fn object_hitboxes(&self) -> Vec<ObjectHitbox>
Sourcepub fn try_object_hitboxes(&self) -> Result<Vec<ObjectHitbox>, Error>
pub fn try_object_hitboxes(&self) -> Result<Vec<ObjectHitbox>, Error>
Read the hitboxes for active objects.
Returns an error if the read fails.