Crate eos_rs

source ·
Expand description

API for working with Rust codebases embeded into the ROM for Pokémon Mystery Dungeon Explorers of Sky*.

This is designed to be used as part of the Rust subsystem of c-of-time.

This crate contains a high level Rust-idiomatic API in the api module and a low level API in the ffi module (consisting of bindgen generated bindings to known functions in the base game).

This crate also contains a replacement implementation of std::io inside api::io.

Pulling in this crate will also configure the allocator to use the game’s allocation functions and sets up a panic handler.

Please note that this entire crate relies on reverse-engineering efforts of the pmdsky-debug, c-of-time and SkyTemple teams. There is going to be a lot of things missing, some functions could have unintended side effects or be unsafe to call in some situations, even if marked safe, and lastly both the low-level and high-level APIs are not stable, they WILL change when we find out new things.

Please open issues and/or Pull Requests on pmdsky-debug and/or c-of-time if you discover issues or new insights.

*: This is NOT an official project. This is is in NO WAY affiliated with Nintendo, The Pokémon Company, Spike Chunsoft or any of their affiliates. This is an unofficial fan project.

Modules

  • Module related to allocating data on the heap.
  • High level API.
  • This module contains the “raw” functions and types from the game. They are generated by bindgen. It is generally recommended to try and use crate::api instead.
  • log crate logging implementation for EoS.
  • Helpful prelude that will pull in a lot of useful types for you, and set up the allocator and panic handler. Logging macros of the log crate are also included.
  • Utilities for dealing with string conversion.

Macros

  • This generates the entrypoints for item & move effects and special processes. This macro needs to be called exactly once and only in the main module.