Deja-EmoteLib icon

EmoteLib

Emote wheel UI and API for playing emotes in Roadside Research. Supports hotkeys, third-person camera, and custom animations via asset bundles.

CHANGELOG

Changelog

1.1.0

New features

  • Custom emotes now auto-stop at the end of their animation clip (matches base-game emote behavior). Set AnimationClip.isLooping = true in the bundle, or call CustomAnimationPlayer.RegisterClip(name, clip, loop: true), to keep looping until the user stops it.
  • RegisterClip now accepts an optional bool? loop parameter. Default (null) reads the clip's own isLooping flag.
  • Added Wheel/InnerRadius, Wheel/OuterRadius, Wheel/SlotsPerPage, Wheel/ScrollCooldownSeconds for wheel sizing and pacing.
  • Added Wheel/CloseOnSelect to close the wheel on a left-click selection.
  • Added Wheel/ShowHotkeyBadges to hide per-slot hotkey labels.
  • Added Camera/RestoreFirstPersonOnExit to opt out of the post-emote first-person snap.
  • Added Hotkeys/StopEmoteKey — a global cancel key that works without opening the wheel.
  • Added support and issue-tracker links to README.

Fixes

  • Fixed camera being stuck in third person after a game emote finished playing naturally. The game's internal emote-lifetime coroutine doesn't route natural completion through StopEmote(), so the existing StopEmote postfix only caught explicit cancels. Replaced with polling on IsEmoting in the wheel component, which catches both natural completion and explicit stops.
  • Fixed StopGameInstantly NullReferenceException spam caused by IL2CPP method deduplication — multiple Minigame subclasses share the same native function pointer for empty overrides, so patching Spinning.StopGameInstantly(bool) inadvertently detoured all of them. Moved to patching the non-virtual no-arg Minigame.StopGameInstantly() with a type check instead.
  • Removed CompleteMinigameFunctionality patch for the same dedup reason (covered by EndMinigameFunctionality which has a unique RVA for Spinning).
  • Sign-spinning minigame dance emote no longer forces third person — the camera stays first-person for the auto-triggered dance regardless of Camera/ThirdPersonOnEmote. All other emotes (wheel, hotkeys, base-game 1-8) are unaffected.

1.0.0

  • Initial release
  • Radial emote wheel (hold E to open, release on a slot to play)
  • Per-slot hotkey bindings for all 8 emote slots
  • Automatic third-person camera while emoting (toggle via config)
  • EmoteAPI for triggering emotes from other mods
  • Custom animation loading from asset bundles