All projects
libraryDevtool

feel.lua

A tiny LÖVE2D-first feedback sequencing library for making actions feel good.

Role
Solo Dev
Date
May 2026
Status
Active development
Type
library
Built with
Lua, LÖVE2D, flux
The feel.lua demo showing reusable feedback stacks with animation, particles, shake, audio and callbacks.

feel.lua is a tiny LOVE2D-first feedback sequencing library for making actions feel good.

Why it exists

Game feedback can very quickly become animation code mixed with particles, sounds, camera shake, flashes and a lot of small timers. feel.lua lets me describe those pieces as one reusable sequence instead.

The game still owns the actual particles, audio and rendering. The library focuses on the order, timing and values, so it can help an action feel better without trying to become the whole game engine.

What it does

  • Defines reusable named feedback sequences with feel.define.
  • Plays named or inline sequences with feel.play.
  • Animates lightweight target values.
  • Emits host-owned events for particles, camera shake, flashes, sounds, haptics, shaders, and more.
  • Runs steps in order, including waits, nested sequences, repeats, random branches, and parallel groups.
  • Controls individual runs with stop, pause, resume and completion signals.
  • Controls the whole clock with global pause and time scale.
  • Routes gameplay intents to feedback with lightweight feel.channel() pub/sub.

The result is a small recipe for an effect instead of the same timing logic being spread across the player, camera, audio and particle systems.

Feedback stacks

feel.feedbacks lets gameplay call one named feedback while a feedback module owns the actual camera, post-processing, sound, time and 3D adapter events.

That means something like a heavy hit can freeze time, flash the screen, shake the camera and play a sound as one action. The gameplay code only needs to say that the heavy hit happened.

LÖVE first, but not locked to one setup

The core stays small and table-driven. LÖVE-specific work lives in optional adapters or user callbacks.

There are optional helpers for g3d and Menori, allowing the same target and sequence ideas to control models, cameras, glTF animations and shader uniforms.

It also includes a no-LÖVE core example, which makes it easier to test the sequence runner separately from a complete game.

How it works

The library wraps a vendored copy of flux so game feel can be described as small Lua recipes: animation, timing, emitted effects, audio cues, callbacks, random choices, loops and grouped steps.

It can be installed through Feather with feather package install feel, or explored through the documentation and GitHub repository.