Skip to content

animaEngine 1.2.0

Choose a tag to compare

@github-actions github-actions released this 26 Sep 20:12
· 262 commits to main since this release

animaEngine 1.2.0

Characters can now be scripted. A behavior can be a small
Rhai program from your asset library, and a script can
play sounds that come from where the character is on screen and react to
how busy your machine is.

The rest of the release is fixes, found the way 1.1's were: by running the
overlay and looking at it. This time that also meant a real X server for
the X11 behaviour the test compositor cannot show, and building the
missing tools — a Wayland drag source, a stub tray host — to exercise
features that had never actually been seen working. Several had not.

What you'll notice

  • Scripted behaviors. Pick Script as a character's behavior in the
    Inspector and point it at a .rhai file in your asset library. Scripts
    are sandboxed — no files, no network, no processes — and bounded, so a
    runaway one is stopped and the character holds still. Five worked
    examples are in docs/examples/behaviors/.
  • Sounds. A script can call play("chirp.ogg"), and the sound is
    panned to where the character is: a mascot on the left of the desktop is
    heard on the left. WAV, OGG, FLAC, MP3 and the audio track of an MP4.
  • Machine load. Scripts can read cpu and mem, overall load from 0
    to 1 — totals only; there is no way for a script to learn what is
    running. Linux only.
  • Shortcuts work on any keyboard layout. AZERTY, QWERTZ, Cyrillic:
    letters follow what is printed on the key, the number row its position.
    German shows Strg instead of Ctrl.
  • Your config is no longer replaced by the demo scene. A config that
    listed only the settings it cared about failed to load, and the next
    launch backed it up and overwrote it with the defaults, without a word
    on screen. Every setting now has a default, and when a config really
    cannot be read, a banner says so and where the original was kept.
  • On native Wayland, file drops and the tray icon work — for the first
    time; both were listed as supported, and neither had ever worked there.
    In pass-through, drag the file over the ⚙ corner first; from there the
    whole screen accepts the drop.
  • Ctrl+M no longer makes a character disappear. Moving a character
    to another monitor pinned it there without moving it, so it was drawn
    off the edge of that screen. It now moves across.
  • anima-engine --version prints the version.

Under the hood

  • One copy of the event handling. The context menu, the command
    palette, the Library's "Add to scene", hot-reload, file drops and Shimeji
    import each had one implementation per backend, and the copies had
    drifted: a stale selection after applying a preset on Wayland, a toast
    in English on X11, a Shimeji import that froze the Wayland overlay. They
    now share one module.
  • Hardening: a malformed MP4 can no longer close the app, a small sound
    file can no longer decode into gigabytes, and concurrent writes to the
    same file can no longer interleave.
  • Translations: German, Dutch and Spanish each address you one way
    throughout instead of switching between formal and informal, and a test
    now fails on any notification built from untranslated text.
  • CI builds the Windows and FreeBSD ports on every push. The Windows
    port gained a tray icon and single-instance handling; its unit tests pass
    under Wine.

The full list is in CHANGELOG.md.

Packaging

  • ALSA is now a dependency, for script sounds: the AUR package depends
    on alsa-lib, and the .deb picks up libasound2 automatically.
    Building with --no-default-features --features video leaves sound out.
  • The Flatpak asks for the PulseAudio socket, without which it cannot
    make a sound. That socket also carries recording — Flatpak has no
    playback-only permission — so what keeps the app away from your
    microphone is that no capture code is compiled in, not the sandbox. See
    threat-model.md.

Compatibility

A config.toml from 1.0 or 1.1 loads unchanged; the D-Bus methods, the
existing CLI flags, the accepted asset formats and the file locations are
the same. The script behavior and --version are additions. See
stability-policy.md.

One correction: the docs had named the config and cache directories
~/.config/animaEngine/ and ~/.cache/animaEngine/. On Linux they are,
and always were, lower-case — ~/.config/animaengine/config.toml. If you
ever hand-edited a config at the documented path, the app never read it.

Not in this release

  • Windows is not supported yet. The port compiles and its tests pass
    under Wine, but it has not been run on Windows.
  • Nine of the ten locales are machine-translated for the strings added
    here, and still want a native-speaker pass.

Known gaps in verification

Checked on a headless compositor with a virtual pointer and keyboard, both
backends, and on a real X server for pointer and window behaviour. Not
verified: sound output (the test setup has no audio device), multi-monitor
on real hardware, the Flatpak build, and anything on Windows.
docs/runtime-findings.md has the detail.