Skip to content

gase 0.2.0

Choose a tag to compare

@github-actions github-actions released this 10 Oct 16:44
a233158

Quality of life: menus and settings, every platform, ZIP files. Save
states from 0.1.0 still load (the format is unchanged).

Added

  • A user interface (gase-app, new crate, no dependencies): a home
    screen with recent games, a built-in file browser (Open ROM…), drag
    and drop, an in-game menu (resume, save and load states with picture
    previews in ten slots, reset, settings, close), and settings for the
    picture, sound, console and controls, saved to a plain key = value
    file (settings.cfg, $GASE_CONFIG_DIR overrides its folder). Drawn in
    software with its own bitmap font, so every platform shows the same
    interface.
  • Controls everywhere: keyboard, any number of gamepads (hot-plugged)
    and multi-touch on-screen controls, all mapped to the console pads at
    once; 3- or 6-button pads per player; remapping of every key and pad
    button for two players. With touch controls on Auto, using a gamepad
    hides them.
  • ZIP ROMs (gase-zip, new crate): .zip files open directly on
    every platform, with an own DEFLATE decoder and CRC-32 check (readable
    reference plus tested fast path). game.zip saves to game.srm.
  • In the browser (gase-web and web/): the emulator and interface
    compiled to WebAssembly without wasm-bindgen or a bundler; keyboard,
    Gamepad API and touch; saves and settings in IndexedDB; an installable,
    offline-capable PWA; a one-click download of the 240p Test Suite,
    checked by SHA-256. About 169 KB gzipped.
  • Android and iOS apps (gase-mobile and mobile/): the desktop's
    SDL2 shell on phones, with the system document picker, "Open with",
    rotation, and saves written as soon as the app goes to the background.
    CI builds an Android APK and an unsigned iOS app; not yet run on a
    device.
  • --mobile runs the phone shell in a desktop window; --touch shows
    the touch controls; --dump-ui, --ui-screen, --ui-size and
    --ui-density save pictures of any screen without a window.
  • The making of gase (docs/index.html): a 19-chapter static site
    telling how the emulator was built, with pictures made by the emulator
    (scripts/docs-screenshots.sh). The Web workflow can publish it on
    GitHub Pages with the player under play/ (opt-in: repository variable
    DEPLOY_PAGES=true).

Changed

  • Esc opens the in-game menu instead of quitting. Close game in
    the menu returns to the home screen, which has Quit; closing the
    window still quits at once.
  • Running gase without a ROM opens the home screen instead of exiting
    with "no ROM given".
  • The gase crate is now a library (the SDL2 shell shared by desktop and
    phones) plus a thin binary.
  • unsafe is still forbidden everywhere except two modules that must
    name foreign functions, where it is denied and allowed once each: the
    web module's exports/imports (no unsafe block) and the phone entry
    point SDL_main (two blocks reading the C argv).

Fixed

  • A crash of optimised builds as soon as the window opened: sdl2 0.37's
    Texture::with_lock with a rectangle passes SDL a pointer to a dropped
    temporary. gase now always locks the whole texture.
  • In landscape, the touch controls' Start and Mode buttons were drawn
    over the game picture; they now sit in the side borders.

Quality

  • CI also runs clippy for WebAssembly and the five phone targets, and
    smoke-runs the optimised SDL program with dummy drivers
    (scripts/smoke-sdl.sh). New workflows build the web version and the
    phone apps.
  • 331 tests in cargo test --workspace (200 in 0.1.0).

Downloads

File For
*-linux-x86_64.tar.gz Linux (x86-64, glibc 2.35+). Run ./gase; SDL2 is built in.
*-windows-x86_64.zip Windows 10/11 (x86-64). Run gase.exe.
*-macos-universal.tar.gz macOS 11+ on Apple silicon and Intel. Not notarised: run xattr -d com.apple.quarantine gase once.
*-web.zip The browser version: serve the folder over HTTP (python3 -m http.server).
*-android.apk Android 5+, signed with a debug key: allow installs from this source.
*-ios-unsigned.ipa iOS: sign it first (e.g. AltStore, Sideloadly, or Xcode).
SHA256SUMS.txt Checksums of the files above.

The source code is attached by GitHub below. Desktop builds include SDL2 (zlib licence).