emulator: NicaiEmu type: standalone + libretro core_classification: pure_libretro source: "https://github.com/AloysHF/NicaiEmu" upstream: "https://github.com/AloysHF/NicaiEmu" profiled_date: "2026-09-03" source_commit: "43d016098be7e468cabfd46fa6b45047637d6c3a" core_version: "0.1.0" display_name: "MStar - Nicai (NicaiEmu)" cores: - nicaiemu systems: - mstar-nicai notes: | Emulator for Nicai/MStar CBE (Cool Bar Engine) phone games written in Rust by AloysHF. The libretro core and the nicaiemu standalone binary share the nicaiemu-core crate. A .cbe archive is read whole from its full path (need_fullpath = true, crates/nicaiemu-libretro/src/libretro/api.rs:108; load_machine, crates/nicaiemu-libretro/src/libretro/api.rs:266-270; CbeArchive::load, crates/nicaiemu-core/src/cbe/archive.rs:68-94). Code, scenes, maps, actors, scripts, images and audio are sections of that archive, and installed resource packages are parsed from the same bytes (crates/nicaiemu-core/src/machine/packages.rs). Phone services are implemented in Rust (crates/nicaiemu-core/src/machine/services/). The guest file manager is an in-memory sandbox that never touches the host disk (crates/nicaiemu-core/src/machine/virtual_fs.rs:14-30). Text is decoded as GBK and rasterised from the unifont crate compiled into the core (crates/nicaiemu-core/src/machine/drawing.rs:41, crates/nicaiemu-core/src/machine/drawing.rs:597). MIDI resources are synthesised as decaying sine tones without a sound bank (crates/nicaiemu-core/src/audio_engine.rs:238-243); WAV and MP3 are decoded with symphonia. The libretro crate asks the frontend for no directory. The standalone binary reads and writes only the files named by --load-state and --save-state (crates/nicaiemu/src/main.rs:114-118). No include_bytes! data is compiled in. exclusion_note: "No file is read outside the content: the .cbe archive is the only input, the guest filesystem is in-memory, glyphs come from the unifont crate and MIDI is synthesised without a bank, no directory is requested from the frontend, no data is embedded with include_bytes!, and the .info declares firmware_count = 0." files: []