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

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.