Read binary Emotecraft emotes and fix the torso's bend direction #7

Merged
selimaj-dev merged 1 commits from emotecraft-binary into master 2026-09-29 15:41:21 +00:00
Owner

Converter: tools/emotecraft/convert.py turns .emotecraft files into Emotecraft JSON. The file is Emotecraft's network packet: the animation in player-animator's legacy binary (versions 1–4), plus a header with the name, description and author. The format follows PlayerAnimationLibrary's LegacyAnimationBinary. It uses only the standard library, and it converted all seven emotes I was given (Get the Griddy, Take the L, Dab, Salute, Shrug, Smooth Wave, 67).

Loader fix: in our renderer, Get the Griddy (a steady +23° torso bend) arched backwards instead of hunching forwards. Emotecraft bends limbs the opposite way from us, which the loader already handled. The torso agrees with ours, though, because our torso bend is anchored at the hips. So EmotecraftLoader now:

  • keeps the torso's bend sign;
  • gives the whole player's bend/axis to the torso, as Emotecraft does (the whole player can't bend).

There's a new test for both, and the gametest screenshots show the Griddy leaning forward.

Capture tool: fit.py writes torso bends to match. The re-exported twerk differs only in its torso-bend signs, so it looks the same under the new loader.

Version: bumped to 0.1.1, which needs publishing (GITEA_TOKEN=... ./gradlew publish) before Saturn can use it. Saturn's shipped twerk.json must be regenerated in the same change that moves Saturn to 0.1.1.

🤖 Generated with Claude Code

**Converter:** `tools/emotecraft/convert.py` turns `.emotecraft` files into Emotecraft JSON. The file is Emotecraft's network packet: the animation in player-animator's legacy binary (versions 1–4), plus a header with the name, description and author. The format follows PlayerAnimationLibrary's `LegacyAnimationBinary`. It uses only the standard library, and it converted all seven emotes I was given (Get the Griddy, Take the L, Dab, Salute, Shrug, Smooth Wave, 67). **Loader fix:** in our renderer, Get the Griddy (a steady +23° torso bend) arched backwards instead of hunching forwards. Emotecraft bends limbs the opposite way from us, which the loader already handled. The torso agrees with ours, though, because our torso bend is anchored at the hips. So `EmotecraftLoader` now: - keeps the torso's bend sign; - gives the whole player's `bend`/`axis` to the torso, as Emotecraft does (the whole player can't bend). There's a new test for both, and the gametest screenshots show the Griddy leaning forward. **Capture tool:** `fit.py` writes torso bends to match. The re-exported twerk differs only in its torso-bend signs, so it looks the same under the new loader. **Version:** bumped to 0.1.1, which needs publishing (`GITEA_TOKEN=... ./gradlew publish`) before Saturn can use it. Saturn's shipped `twerk.json` must be regenerated in the same change that moves Saturn to 0.1.1. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
selimaj-dev added 1 commit 2026-09-29 15:37:20 +00:00
tools/emotecraft/convert.py turns Emotecraft's binary .emotecraft files (its network packet, with
the animation in player-animator's legacy format) into the Emotecraft JSON EmotecraftLoader reads.

Converting a few community emotes showed the loader bent the torso the wrong way: Get the Griddy,
which hunches forward, arched back. Emotecraft bends limbs the other way from us, but not the torso,
whose bend is anchored at the hips here and so already turned round. The loader now keeps the
torso's bend sign, and gives the whole player's bend to the torso, as Emotecraft does. fit.py writes
torso bends to match, so re-exported captures look the same.

Bumps the version to 0.1.1 for the fix.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
selimaj-dev merged commit 8794f3fb65 into master 2026-09-29 15:41:21 +00:00
selimaj-dev deleted branch emotecraft-binary 2026-09-29 15:41:23 +00:00
Sign in to join this conversation.