Expand description
Save system for JRPG engine.
Provides a storage-agnostic save/load framework with CRC16 checksum
validation. Game-specific data implements the SaveData trait, while
platform backends implement SaveStorage. The SaveManager ties
them together with multi-slot support.
§Wire format
Each save slot stores: [serialized_game_data][2-byte CRC16 checksum (LE)]
§Example
ⓘ
#[derive(Debug, Clone)]
struct MySave { name: String, level: u8 }
impl SaveData for MySave {
fn serialize(&self) -> Vec<u8> { /* ... */ }
fn deserialize(data: &[u8]) -> Result<Self, SaveError> { /* ... */ }
fn save_size() -> usize { 64 * 1024 }
}
let storage = Box::new(InMemoryStorage::new());
let manager = SaveManager::<MySave>::new(storage);
manager.save(SaveSlot::Slot1, &my_data)?;
let loaded = manager.load(SaveSlot::Slot1)?;Structs§
- InMemory
Storage - An in-memory
SaveStorageimplementation backed byVec<Option<Vec<u8>>>. - Save
Manager - Manages save/load operations across multiple slots.
Enums§
Traits§
- Save
Data - Game-specific save data that can be serialized, checksummed, and persisted.
- Save
Storage - Platform-specific storage backend for save data.
Functions§
- crc16_
xmodem - CRC-16/XMODEM: polynomial
0x1021, initial value0x0000.