emulator: NicaiEmu type: standalone + libretro core_classification: frozen_snapshot source: "https://github.com/AloysHF/CoolbarEmu" upstream: "https://github.com/AloysHF/CoolbarEmu" profiled_date: "2026-10-21" source_commit: "4c9b73f7213b1537d2361a8b1d438857bdcdc798" pin_frozen: "the nicaiemu core is this revision, the last one whose .gitlab-ci.yml sets CORENAME: nicaiemu. The next master commit, 7496d513 (PR #78, 2026-10-16), renames the project and its crates to CoolbarEmu and the buildbot recipe to CORENAME: coolbaremu, so later commits build the coolbaremu core, described by coolbaremu.yml." core_version: "0.1.0" display_name: "MStar - Nicai (NicaiEmu)" cores: - nicaiemu systems: - coolbar 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, and the workspace builds the libretro core by default (Cargo.toml:13). The repository was renamed from AloysHF/NicaiEmu to AloysHF/CoolbarEmu with PR #78. A .cbe archive is read whole from its full path (need_fullpath = true, crates/nicaiemu-libretro/src/libretro/api.rs:181, then load_machine, crates/nicaiemu-libretro/src/libretro/api.rs:359-363, then CbeArchive::load, crates/nicaiemu-core/src/cbe/archive.rs:68-94). Files next to the .cbe (pay kernels, save records, update data) are indexed as the guest filesystem (crates/nicaiemu-core/src/machine/mod.rs:1022-1024, crates/nicaiemu-core/src/machine/virtual_fs.rs:58-88), and they belong to the game. Phone services are implemented in Rust (crates/nicaiemu-core/src/machine/services/). Text is decoded as GBK and rasterised from the unifont crate compiled into the core (Cargo.toml:35, crates/nicaiemu-core/src/machine/drawing.rs:1886). MIDI resources are synthesised as decaying sine tones without a sound bank (crates/nicaiemu-core/src/audio_engine.rs:270-275), while WAV and MP3 are decoded with symphonia. The only system directory read is nicaiemu_orientation.csv, an optional user list of CRC32, size and orientation for landscape titles missing from the built-in table (crates/nicaiemu-libretro/src/libretro/api.rs:45, crates/nicaiemu-libretro/src/libretro/api.rs:365-399, crates/nicaiemu-core/src/orientation_profile.rs:132-140). A missing file is logged and the built-in table applies. The standalone binary reads and writes only the files named on its command line, --orientation-profile, --screenshot, --save-state and --load-state (crates/nicaiemu/src/main.rs:104-107, crates/nicaiemu/src/main.rs:152-166, crates/nicaiemu/src/main.rs:185-186). The buildbot publishes nicaiemu_libretro next to coolbaremu_libretro, and the two cores read different system files: nicaiemu_orientation.csv here, coolbaremu_orientation.csv in the coolbaremu core built after the rename. exclusion_note: "The firmware services are reimplemented in the core, glyphs come from the unifont crate and MIDI is synthesised without a bank. The system directory holds only an optional user-written orientation list, and the .info declares firmware_count = 0." files: []