Files
libretro/emulators/native32emu.yml
T

68 lines
3.5 KiB
YAML

emulator: Native32Emu
type: standalone + libretro
core_classification: pure_libretro
source: "https://github.com/AloysHF/Native32Emu"
upstream: "https://github.com/AloysHF/Native32Emu"
profiled_date: "2026-10-26"
source_commit: "c9111273f97c67471358c8d9507a19c7cceb70f5"
core_version: "1.4.0"
version_basis:
kind: file
path: "Cargo.toml"
pattern: 'version\s+=\s+"([^"]+)'
display_name: "Sunplus - Native32 (Native32Emu)"
cores:
- native32emu
systems:
- sunplus-native32
notes: |
Emulator for the Sunplus Native32 game format written in Rust by
AloysHF. The libretro core and the native32emu standalone binary share
the native32emu-core crate. Content (.smf, .sgm or a .zip package,
crates/native32emu-core/src/content_entry.rs:7) is read from its full
path (need_fullpath = true,
crates/native32emu-libretro/src/libretro/api.rs:128;
Emulator::from_path, crates/native32emu-core/src/emulator.rs:97-174).
An .ssl scene given as content is refused with a message naming the
.smf, .sgm or .zip to start instead
(crates/native32emu-core/src/content_entry.rs:20-26).
The header is decrypted with DES keys compiled into the core
(crates/native32emu-core/src/header_decryptor.rs:136,
crates/native32emu-core/src/des_constants.rs).
A .zip package is extracted to a temporary directory
(crates/native32emu-core/src/archive_loader.rs:17-67) and booted from
the menu found at its root, FHUI.smf first, then NA32UI.smf. A package
without a root menu boots its only .smf, or the one named like the
archive (crates/native32emu-core/src/archive_loader.rs:11,
crates/native32emu-core/src/archive_loader.rs:94-98,
crates/native32emu-core/src/archive_loader.rs:152-211). The Emscripten
build receives the archive already extracted by EmulatorJS and switches to
the root menu when one exists
(crates/native32emu-libretro/src/libretro/api.rs:181-194,
crates/native32emu-core/src/archive_loader.rs:112-117). Every later file
is resolved relative to the running content and its parent directories,
case-insensitively with trailing spaces trimmed
(crates/native32emu-core/src/content_loader.rs:73-130): child .smf and
.ssl content (crates/native32emu-core/src/emulator.rs:735-745), .dat
thumbnails for the menu (crates/native32emu-core/src/emulator.rs:591-618),
.mpg cutscenes (crates/native32emu-core/src/emulator.rs:490-506) and
the menu's game listing (crates/native32emu-core/src/file_browser.rs:117-167).
All of them ship inside the game package. The standalone binary writes
saves to <content>.ssl_sav beside the content. The libretro core asks
for the frontend save directory on every target and writes there, under
a name flattened from the content path, and falls back to beside the
content when the frontend reports none
(crates/native32emu-core/src/save_manager.rs:6-26,
crates/native32emu-core/src/save_manager.rs:41-47,
crates/native32emu-libretro/src/libretro/api.rs:228-231,
crates/native32emu-libretro/src/libretro/callbacks.rs:223-240).
RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY is defined
(crates/native32emu-libretro/src/libretro/constants.rs:42) but nothing
calls it. No include_bytes! data is compiled in.
exclusion_note: "No file is read outside the game package: content and every sibling it names (menu, child content, .dat thumbnails, .mpg cutscenes) resolve from the content's own directory tree, saves are written beside the content or in the frontend save directory, the system directory is never queried, no data is embedded with include_bytes!, and the .info declares firmware_count = 0."
files: []